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