运算符及表达式+基本语句和函数使用的详细讲解

运算符及表达式

运算符及表达式

在C语言中,运算符是用于执行特定操作的符号,而表达式则是由运算符和操作数组成的式子。

1) 运算符
运算符的目数
  • 单目运算符:只需要一个操作数,如 !(逻辑非)、++(自增)、--(自减)、&(取地址)等。
  • 双目运算符:需要两个操作数,如 +(加法)、-(减法)、*(乘法)、/(除法)、%(取余)等。
  • 三目运算符(条件运算符):需要三个操作数,如 ? :
运算符的优先级与结合性

运算符的优先级决定了表达式中运算的顺序,而结合性则决定了当多个相同优先级的运算符出现时,如何确定运算顺序。例如,乘法(*)和除法(/)的优先级高于加法和减法,而乘法和除法从左到右结合。

赋值运算符与赋值表达式
  • 赋值运算符=,用于将右侧的值赋给左侧的变量。
  • 赋值表达式:如 a = b + c;,这是一个赋值表达式,其值就是赋值操作的结果(即 b + c 的值)。
算术运算符及算术表达式
  • 算术运算符+-*/%
  • 算术表达式:由算术运算符和操作数组成的表达式,如 a + b * c
自增(++)、自减(–)运算符及表达式
  • 自增运算符++,用于将变量的值加1。
  • 自减运算符--,用于将变量的值减1。
  • 前置与后置++a(先加后使用)和 a++(先使用后加)的区别。
关系运算符及关系表达式
  • 关系运算符>>=<<===!=
  • 关系表达式:用于比较两个操作数的大小或是否相等,结果是一个布尔值(真或假)。
逻辑运算符及逻辑表达式
  • 逻辑运算符!(逻辑非)、&&(逻辑与)、||(逻辑或)。
  • 逻辑表达式:用于组合多个关系表达式,并返回一个布尔值。
逗号运算符与逗号表达式
  • 逗号运算符,,用于将多个表达式组合成一个表达式。
  • 逗号表达式的操作数求值顺序:从左到右依次求值,整个逗号表达式的值是最后一个操作数的值。
2) C语言中合法的表达式,表达式的求值
  • 合法的表达式:符合C语言语法规则的表达式都是合法的。
  • 表达式的求值:根据运算符的优先级和结合性,以及操作数的值,计算表达式的值。
3) 表达式的数据类型,及表达式运算中操作数类型的自动转换与强制类型转换
  • 表达式的数据类型:取决于运算符和操作数的类型。例如,a + b 的类型通常是 ab 类型的公共类型(或更宽的类型)。
  • 自动类型转换(也称为隐式类型转换):当操作数的类型不同时,编译器会尝试将它们转换为公共类型。例如,在 int a = 3.5; 中,3.5 会被自动转换为 int 类型。
  • 强制类型转换(也称为显式类型转换):使用类型转换运算符 () 来强制将一个类型的值转换为另一个类型。例如,(float)aa 的值转换为 float 类型。在进行强制类型转换时,可能会丢失精度或发生其他不可预见的行为,因此应谨慎使用。

基本语句和函数使用的详细讲解

1. 顺序结构语句

  • 表达式语句:最简单的语句,用于执行赋值、函数调用等操作。
  • 空语句:仅包含一个分号的语句,不执行任何操作。
  • 复合语句:用花括号括起来的一组语句,可以视为一个单独的语句块。
代码案例:
#include <stdio.h>int main() {int a = 5;       // 表达式语句printf("%d\n", a); // 表达式语句(函数调用);               // 空语句{               // 复合语句开始int b = 10;printf("b = %d\n", b);}               // 复合语句结束return 0;
}

2. 选择结构语句

  • if 语句:如果条件为真,则执行一段代码。
  • if…else 语句:如果条件为真,执行一段代码,否则执行另一段代码。
  • if…else…if 语句:多个条件判断,根据满足的条件执行相应的代码块。
  • switch 语句:根据表达式的值,选择执行多个代码块中的一个。
代码案例:
#include <stdio.h>int main() {int number = 2;if (number == 1) {printf("Number is 1\n");} else if (number == 2) {printf("Number is 2\n");} else {printf("Number is not 1 or 2\n");}int day = 3;switch (day) {case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;default:printf("Other day\n");}return 0;
}

3. if嵌套

if语句内部可以嵌套另一个if语句,用于处理更复杂的条件逻辑。

代码案例:
#include <stdio.h>int main() {int a = 5;int b = 10;if (a > 2) {if (b > 8) {printf("Both conditions are true\n");} else {printf("Only first condition is true\n");}} else {printf("None of the conditions are true\n");}return 0;
}

4. 循环结构语句

  • while 循环:当条件为真时,重复执行一段代码。
  • do…while 循环:至少执行一次代码块,然后检查条件,如果条件为真,则重复执行。
  • for 循环:一种更紧凑的循环结构,通常用于已知循环次数的情况。
代码案例:
#include <stdio.h>int main() {int i = 0;// while 循环while (i < 5) {printf("%d ", i);i++;}printf("\n");i = 0;// do...while 循环do {printf("%d ", i);i++;} while (i < 5);printf("\n");// for 循环for (int j = 0; j < 5; j++) {printf("%d ", j);}printf("\n");return 0;
}

5. 循环嵌套(二重循环)

一个循环内部包含另一个循环,通常用于处理二维数组或进行复杂的迭代。

代码案例:
#include <stdio.h>int main() {for (int i = 0; i < 3; i++) { // 外层循环for (int j = 0; j < 3; j++) { // 内层循环printf("(%d, %d) ", i, j);}printf("\n");}return 0;
}

6. 辅助控制语句

continue 语句

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。它不会终止循环,而是重新开始下一次迭代。

break 语句

break 语句用于立即终止循环或switch语句。在循环中,break 语句会跳过当前循环的剩余部分,并继续执行循环之后的代码。

代码案例
#include <stdio.h>int main() {int i;// 使用continue语句跳过偶数for (i = 0; i < 10; i++) {if (i % 2 == 0) {continue;}printf("%d ", i);}printf("\n");// 使用break语句在找到5时终止循环for (i = 0; i < 10; i++) {if (i == 5) {break;}printf("%d ", i);}printf("\n");return 0;
}

7. 标准函数的使用

数学函数:math.h
  • fabs():计算浮点数的绝对值。
  • pow():计算一个数的幂。
  • sqrt():计算一个非负数的平方根。
输入输出函数:stdio.h
  • printf():格式化输出函数。
  • scanf():格式化输入函数。
字符串函数:string.h
  • strlen():计算字符串的长度(不包括终止字符’\0’)。
  • strcmp():比较两个字符串。
  • strcpy():复制一个字符串到另一个字符串。
  • strcat():连接两个字符串。
代码案例
#include <stdio.h>
#include <math.h>
#include <string.h>int main() {// 数学函数使用double num = -5.5;double abs_num = fabs(num);double power = pow(2, 3);double sqrt_num = sqrt(9);printf("fabs(%f) = %f\n", num, abs_num);printf("pow(2, 3) = %f\n", power);printf("sqrt(9) = %f\n", sqrt_num);// 字符串函数使用char str1[50] = "Hello, ";char str2[] = "World!";char str3[100];strcpy(str3, str1);strcat(str3, str2);printf("Concatenated string: %s\n", str3);printf("Length of str2: %zu\n", strlen(str2));// 输入输出函数使用int a;printf("Enter an integer: ");scanf("%d", &a);printf("You entered: %d\n", a);return 0;
}

在使用 strlen() 函数时,返回的类型是 size_t(在C语言中是一个无符号整数类型),因此在 printf 中使用
%zu 格式化说明符来输出它。这是C99标准引入的,如果你的编译器不支持C99或更高版本,你可能需要将其转换为 unsigned int 并使用 %u

在这里插入图片描述
在这里插入图片描述

(✪ω✪)Fight!!(o-)
(๑>₃<)۶ 一心向学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简易开发一个app

即时设计网站 即时设计 - 可实时协作的专业 UI 设计工具 需要先设计好UI界面 上传到codefun 首次需要安装 自动生成代码 打开hb软件 新建项目 打开创建的项目 删除代码 复制代码过去 下载图片 将图片放到文件夹里 改为这种格式 index.vue 如果不需要uni-app导航栏可以修改 …

026、工具_redis-server

redis-server除了启动Redis外,还有一个 --test-memory选项。 redis-server- -test-memory可以用来检测当前操作系统能否稳定地分配指定容量的内存给 Redis,通过这种检测可以有效避免因为内存问题造成Redis崩溃,例如下面 操作检测当前操作系统能否提供1G的内存给Redis: red…

项目文件预览

在实际项目开发过程&#xff0c;项目使用数据存在多种形式&#xff0c;“文件”也是一种常见形式&#xff0c;因此&#xff0c;“文件预览”功能变成了常规需求。 kkFileView项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支…

【代码随想录算法训练Day39】LeetCode 62.不同路径、LeetCode 63.不同路径II

Day39 动态规划第二天 LeetCode 62.不同路径 二维dp数组的含义&#xff1a;走到位置为(i,j)的格子的走法为dp[i][j]种。 递推公式&#xff1a;dp[i][j]dp[i-1][j]dp[i][j-1]。 初始化&#xff1a;dp[i][0]和dp[0][j]都赋值为1. 递归顺序&#xff1a;从左往右&#xff0c;从上…

以太网基础知识(二)—NRZ,PAM4调制技术

1&#xff1a;码元 了解调制技术需要引出“码元”的概念。 一个码元就是一个脉冲信号&#xff0c;即一个最小信号周期内的信号&#xff0c;我们都能够理解&#xff0c;最简单的电路&#xff0c;以高电平代表1&#xff0c;低电平代表0&#xff0c;一个代表1或者0的信号&#x…

分层解耦

三层架构 controller:控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据&#xff0c; service:业务逻辑层&#xff0c;处理具体的业务逻辑。 dao:数据访问层(Data Access Object)(持久层)&#xff0c;负责数据访问操作&#xff0c;包括数…

No module named ‘torch.distributed.checkpoint.format_utils问题解决

完整代码&#xff1a; Traceback (most recent call last):File "/data/user/BMLU-use/src/English_chat/qwen1.5.py", line 97, in <module>main(model_pathargs.model_path,max_lengthargs.max_length,nameargs.name)File "/data/user/BMLU-use/src/En…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加&#xff0c;传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

赶紧收藏!2024 年最常见 20道并发编程面试题(九)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道并发编程面试题&#xff08;八&#xff09;-CSDN博客 十七、什么是乐观锁和悲观锁&#xff1f; 乐观锁和悲观锁是两种不同的并发控制策略&#xff0c;用于管理多线程环境下对共享资源的访问&#xff0c;以确保数…

中高级软件工程师的c语言面试题

文章目录 问题1&#xff1a;解释 volatile 关键字的作用及其应用场景。问题2&#xff1a;解释C语言中的内存对齐&#xff08;Memory Alignment&#xff09;以及为什么需要对齐。问题3&#xff1a;解释C语言中的“严格别名规则”&#xff08;Strict Aliasing Rule&#xff09;&a…

元数据、数据元、数据字典、数据模型及元模型的区别详解

在数据管理和分析领域&#xff0c;有许多相似的概念&#xff0c;如元数据、数据元、数据字典、数据模型和元模型。这些概念的定义和应用往往容易混淆。 数据元 数据元是通过一系列属性描述的数据单元&#xff0c;包括定义、标识、表示以及允许值等。这些属性帮助我们理解和使用…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是&#xff1a; 由一个在栈上的引用数组变量指向一块堆内存&#xff1b;这块堆内存里存储的元素是引用&#xff0c;又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

什么是 古典概型

古典概型是概率论中的一种基本概型&#xff0c;其定义如下&#xff1a; 古典概型&#xff08;Classical Probability Model&#xff09;&#xff1a; 在一个有限的样本空间中&#xff0c;如果每个基本事件&#xff08;即样本空间中的每一个可能结果&#xff09;出现的可能性都…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

Git/TortoiseGit ssh client 配置

1. Git ssh client 配置 Git 默认的 ssh client 是 <Git 安装目录>/usr/bin/ssh.exe 修改方法为打开 Git Bash 执行&#xff1a; git config --global core.sshCommand "/C/Program Files/TortoiseGit/bin/TortoiseGitPlink.exe" 注意&#xff1a;如果路径…

​单级高频谐振小放

目录 高频交流等效电路 质量指标 增益 通频带 选择性 高频交流等效电路 质量指标 增益 YL撇是怎么来的。 通频带 选择性

github基础使用

前言 将用到的github指令记录下来&#xff0c;持续更新&#xff0c;方便随时查找学习。 一、github用到的指令 1、我们从github克隆下来的代码版本一般都是master主分支&#xff0c;我们要建立自己的分支进行修改&#xff1a; //git branch //查看目前的分支/* * master /…