07-运算符和程序结构
运算符与程序结构
1.常用的运算符
运算符类型 | 作用 |
---|---|
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
位运算符 | 用于处理数据的位运算 |
sizeof运算符 | 用于求字节数长度 |
1.1算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | -3 | -3 |
+ | 加 | 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; |
- 整型与整型运算,得到的是整型
- 除法,如果两数相除,得到小数,必须有一个是double类型
- 除数不能为0
#include <stdio.h>
int main()
{
// 除法
int a = 10;
int b = 20;
int c = 10.0;
int f = a/b; // 0
double e = a/b; // 0.5
// 求一个数的个位,十位,百位
// 求1234
//
int num = 1234;
// 个位
int a = num % 10;
// 十位
int b = num/10%10;
// 百位
int c = num/100%10;
// 千位
int d = num/1000%10;
system("pause");
return 0;
}
1.1.1 自加自减运算符
- 单独使用a++和++a一样
- 与其他表达式进行一起使用,++a,先自加再使用;a++,先使用,再加1
#include <stdio.h>
int main()
{
// a++ ++a
// 1.单独进行使用
int a = 1;
a++;
// ++a;
printf("%d\n",a); // ++a 和a++ 都得到a = 2
// 2.与其他表达式进行结合,++a先计算表达式结果再赋值,a++先赋值后对a = a+1
int c = 1;
int d = 0;
d = c++;
printf("%d\n",d,c); // d = 1 c = 2
// 如果使用 d = ++c;
printf("%d\n",d,c); // d = 2 c = 2
// 3.单独使用
int c = 2;
printf("%d\n",c++); // 打印2
printf("%d\n",++c); // 打印3
system("pause");
return 0;
}
1.2.赋值运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
= | 赋值 | a=2; b=3; | a=2; b=3; |
+= | 加等于 | a=0; a+=2; | a=2; |
-= | 减等于 | a=5; a-=3; | a=2; |
*= | 乘等于 | a=2; a*=2; | a=4; |
/= | 除等于 | a=4; a/=2; | a=2; |
%= | 模等于 | a=3; a%2; | a=1; |
1.3.比较运算符
C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 1 | 1 |
#include <stdio.h>
int main()
{
printf("%d",3<4);
system("pause");
return 0;
}
1.4.逻辑运算符
2.流程控制结构
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行相应功能。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
2.1 选择结构
2.1.1 if语句
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a > b)
{
printf("%d\n", a);
}
// if(非空的值) 判断为条件成立
if(1)
{
printf("成立");
}
// if 后面不加分号,分号相当于空语句
if(a == 1);
{
print("%d\n",a); // 不管if是不是成立都执行,因为if后面加;成立相当于执行空语句,不成立跳过
}
// if后面的代码块不加{}, 只有第一句属于if代码块,一般都会加上{}
// {}中的语句都属于if
if(a == 1)
printf("%d\n",a); // 只有这句属于if
printf("AAAAAA\n"); // 不属于if,不管if成立与否都执行
return 0;
}
2.1.2 if...else语句
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a > b)
{
printf("%d\n", a); // 条件成立
}
else
{
printf("%d\n", b); // 条件不成立执行这里面的代码
}
return 0;
}
2.1.3 if..else if ...else语句
进行多个条件判断的时候使用这种方式
#include <stdio.h>
int main()
{
unsigned int a;
scanf("%u", &a);
if (a < 10)
{
printf("个位\n");
}
else if (a < 100)
{
printf("十位\n");
}
else if (a < 1000)
{
printf("百位\n");
}
else
{
printf("很大\n");
}
return 0;
}
2.1.4 三目运算符
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c;
if (a > b)
{
c = a;
}
else
{
c = b;
}
printf("c1 = %d\n", c);
a = 1;
b = 2;
c = ( a > b ? a : b );
printf("c2 = %d\n", c);
return 0;
}
2.1.5 switch语句
#include <stdio.h>
int main()
{
char c;
c = getchar();
switch (c) //参数只能是整型变量
{
case '1':
printf("OK\n");
break;//switch遇到break就中断了
case '2':
printf("not OK\n");
break;
default://如果上面的条件都不满足,那么执行default
printf("are u ok?\n");
}
return 0;
}
2.2 循环结构
能够用于重复执行的动作
2.2.1 while语句
#include <stdio.h>
int main()
{
int a = 20;
while (a > 10)
{
scanf("%d", &a);
printf("a = %d\n", a);
}
return 0;
// 计算1+2+3....+10
int i = 1;
int sum = 0;
while(a <= 100)
{
sum = sum + i;
i++;
}
printf("%d\n",sum);
}
2.2.2 do...while 循环
#include <stdio.h>
int main()
{
int a = 1;
do
{
a++;
printf("a = %d\n", a);
} while (a < 10);
return 0;
}
- do..while至少会执行一遍循环
2.2.3 for循环
for( A ; B ; C )
{
D
}
// A B C表达式都是可有可无的
// A表达式只会执行一次
// B执行条件
// C循环变量步阶
// 执行顺序:A->B->D->C->B->D->C
#include <stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 0; i <= 100; i++)
{
sum += i;
}
printf("sum = %d\n", sum);
return 0;
}
for循环不写条件,默认为真
2.3.4 嵌套循环
循环语句之间可以相互嵌套:
#include <stdio.h>
int main()
{
int num = 0;
int i, j, k;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
for (k = 0; k < 10; k++)
{
printf("hello world\n");
num++;
}
}
}
printf("num = %d\n", num);
return 0;
}
2.3.5 跳转语句break、continue、goto
1. break
在switch条件语句和循环语句中都可以使用break语句:
- 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
- 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
- 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。
#include <stdio.h>
int main()
{
int i = 0;
while (1)
{
i++;
printf("i = %d\n", i);
if (i == 10)
{
break; //跳出while循环
}
}
int flag = 0;
int m = 0;
int n = 0;
for (m = 0; m < 10; m++)
{
for (n = 0; n < 10; n++)
{
if (n == 5)
{
flag = 1;
break; //跳出for (n = 0; n < 10; n++)
}
}
if (flag == 1)
{
break; //跳出for (m = 0; m < 10; m++)
}
}
return 0;
}
2. continue
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。
#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;
}
3. goto(无条件跳转尽量少用)
#include <stdio.h>
int main()
{
goto End; //无条件跳转到End的标识
printf("aaaaaaaaa\n");
End:
printf("bbbbbbbb\n");
return 0;
}