运算符、判断与循环
1 C 运算符的种类、运算优先级和结合性
1.1 常用运算符分类
运算符类型 | 作用 |
---|
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
sizeof运算符 | 用于求字节长度 |
1.1.1 算术运算符
运算符 | 术语 | 示例 | 结果 |
---|
+ | 加 | 10+5 | 15 |
- | 减 | 10-5 | 5 |
* | 乘 | 10*5 | 50 |
/ | 除 | 10/5 | 2 |
% | 取模(取余) | 10%3 | 1 |
++ | 前自增 | a=2;b=++a; | a=3;b=3; |
++ | 后自增 | a=2;b=a++; | a=3;b=2; |
– | 前自减 | a=2;b=–a; | a=1;b=1; |
– | 后自减 | a=2;b=a–; | a=1;b=2; |
重点说明
/ 运算符:两个整数做除法得到的是整数,即小数部分舍去,只留下整数部分,比如5/3=1;
但除号两侧只要有一侧是浮点类型数据,那得到的结果就有小数部分;
#includeint main(){int a=5,b=3; double c=5,d=3; printf("%d\n",a/b); printf("%lf\n",1.0*a/b); printf("%lf\n",c/d); return 0;}
% 运算符:运算符两侧要求必须是整型的;
#includeint main(){int a=5,b=3;printf("%d\n",a%b); return 0;}
1.1.2 赋值运算符
运算符 | 术语 | 示例 | 结果 |
---|
= | 赋值 | a=2;b=3 | a=2;b=3 |
+= | 加等于 | a=0;a+=2 | a=2 |
-= | 减等于 | a=0;a-=2 | a=-2 |
*= | 乘等于 | a=2;a*=2 | a=4 |
/= | 除等于 | a=4;a/=2 | a=2 |
%= | 模等于 | a=3;a%=2 | a=1 |
1.1.3 比较运算符
c语言的比较运算符中,“真”用“1”表示,“假”用“0”表示
而凡是非“0”的都为“真”。
运算符 | 术语 | 示例 | 结果 |
---|
== | 相等于 | 4==3 | 0 |
!= | 不等于 | 4!=3 | 1 |
< | 小于 | 4<3 | 0 |
> | 大于 | 4>3 | 1 |
<&#61; | 小于等于 | 4<&#61;3 | 0 |
>&#61; | 大于等于 | 4>&#61;3 | 1 |
1.1.4 逻辑运算符
运算符 | 术语 | 示例 | 结果 |
---|
! | 非 | !a | 如果a为假&#xff0c;则!a为真;如果a为真&#xff0c;则!a为假 |
&& | 与 | a&&b | 如果a和b为都为真&#xff0c;则结果为真;否则为假 |
|| | 或 | a||b | 如果a和b有一个为真&#xff0c;则结果为真;二者都为假&#xff0c;则结果为假 |
?: | 条件运算符 | a>b?a:b | 如果a>b为真&#xff0c;则执行a;否则执行b |
1.1.5 sizeof运算符
该运算符用于求字节长度&#xff0c;比如一个int形数据 4个字节&#xff0c;那sizeof(int)&#61;4,再比如一个double形数据 8个字节&#xff0c;那sizeof(double)&#61;8。
1.2 运算符的优先级
类别 | 运算符 | 结合性 |
---|
(类型) | 强制转换 | – |
乘除 | *,/,% | 从左往右 |
加减 | &#43;,- | 从左往右 |
比较 | &#61;&#61;,!&#61;,<,>,<&#61;,>&#61; | 从左往右 |
逻辑 | &&&#xff0c;|| | 从左往右 |
赋值运算符 | &#61;,&#43;&#61;,-&#61;,*&#61;,&#61;,%&#61; | 从右往左 |
条件运算符 | ?: | 从右往左 |
逗号 | , | 从左往右 |
1.3 不同类型数据间的转换与运算
转换的方法有两种:
*自动转换(隐式转换):遵循一定的规则&#xff0c;由编译系统自动完成。
*强制类型转换:把表达式的运算结果强制转成所需的数据类型。
类型转换的原则:占用内存字节数少(值域小)的类型&#xff0c;向占用内存字节数多(值域大)的类型转换&#xff0c;以保证精度不降低。
隐式转换&#xff1a;
#include int main(){int num &#61; 5;printf("s1&#61;%d\n", num / 2); printf("s2&#61;%lf\n", num / 2.0); return 0;}
强制转换&#xff1a;
#include int main(){float x &#61; 0;int i &#61; 0;x &#61; 3.6;i &#61; x; i &#61; (int)x; printf("x&#61;%f, i&#61;%d\n", x, i); return 0;}
2 判断
2.1 if语句
2.1.1 if语句
描述:一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
int a &#61; 1;int b &#61; 2;if (a < b){printf("%d\n", a);}
OJ题1007
2.1.2 if…else语句
int a &#61; 1; int b &#61; 2;if (a > b){printf("%d\n", a);}else{printf("%d\n", b);}
2.1.3 if…else if…else语句
#includeint main(){int x,y;scanf("%d",&x);if(x<1) y&#61;x;else if(x<10) y&#61;2*x-1;else y&#61;3*x-11;printf("%d\n",y);return 0;}
2.1.4 if嵌套语句
int a &#61; 100;int b &#61; 200;if( a &#61;&#61; 100 ){if( b &#61;&#61; 200 ){printf("a 的值是 100&#xff0c;且 b 的值是 200\n" );}}printf("a 的准确值是 %d\n", a );printf("b 的准确值是 %d\n", b );
3 循环
3.1 while和do-while循环结构
3.1.1 while循环
#include int main(){int a &#61; 1;while (a <&#61; 10){a&#43;&#43;; printf("%d ",a); }return 0;}
3.1.2 do-while循环结构
#include int main(){int a &#61; 1;do{a&#43;&#43;;printf("a &#61; %d\n", a);} while (a < 10);return 0;}
3.1.3 for循环结构
for循环语法&#xff1a;
for ( init; condition; increment )
{statement(s); //主循环体
}
循环步骤:
*1.init 会首先被执行&#xff0c;且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句&#xff0c;只要有一个分号出现即可。
*2.接下来&#xff0c;会判断 condition。如果为真&#xff0c;则执行循环主体。如果为假&#xff0c;则不执行循环主体&#xff0c;且控制流会跳转到紧接着 for 循环的下一条语句。
*3.在执行完 for 循环主体后&#xff0c;控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空&#xff0c;只要在条件后有一个分号出现即可。
*4.条件再次被判断。如果为真&#xff0c;则执行循环&#xff0c;这个过程会不断重复&#xff08;循环主体&#xff0c;然后增加步值&#xff0c;再然后重新判断条件&#xff09;。在条件变为假时&#xff0c;for 循环终止。
#include int main (){for( int a &#61; 10; a < 20; a &#43; &#43; ){printf("a 的值&#xff1a; %d\n", a);}return 0;}
3.2 循环控制语句break和continue
3.2.1 break
终止循环或 switch 语句&#xff0c;程序流将继续执行紧接着循环或 switch 的下一条语句。
#include int main (){int a &#61; 10;while( a < 20 ){printf("a 的值&#xff1a; %d\n", a);a&#43;&#43;;if( a > 15){break;}}return 0;}
3.2.1 continue
告诉一个循环体立刻停止本次循环迭代&#xff0c;重新开始下次循环迭代。
求100以内所有奇数的和&#xff1a;
#includeint main(){int sum &#61; 0; for (int i &#61; 1; i <&#61; 100; i&#43;&#43;){if (i % 2 &#61;&#61; 0) {continue; }sum &#43;&#61; i; }printf("sum &#61; %d\n", sum);return 0;} &#96;&#96;&#96;