第二讲 表达式和选择语句
表达式
1.语句
完成特定任务的指令,以分号(;)结束
2.算术运算符
运算符
加+ 减- 乘* 除/ 取余%
类型转换规则
int型与float型运算时,结果自动转换为float型
9+2.5f=11.5 6.7f/2=3.35
注意事项
1.%运算符:只能用于整数类型,不能用于浮点数
2.负数计算:/和%用于负数运算的时候,结果因编译器而异(尽量避免)
3.运算符的优先性和结合性
优先级(从高到低)
1.()括号
2.* / % 乘 除 取余
3.+ - 加 减
4.赋值运算符
基本赋值
将=右边的制赋给左边的变量
左值必须是可以修改的内存位置
i=j;//将j的值赋值给i;
i=2;
i=j=k=5;//连续赋值,从右到左执行
5.复合赋值运算符
+= -= *= /= %=
i+=2;//i=i+2;
i-=2;//i=i-2;
i*=2;//i=i*2;
i/=2;//i=i/2;
i%=2;//i=i%2;
6.自增和自减运算符
i++
先赋值再自增(先使用i的值,再将i加1)
++i
先自增再赋值
i–
先赋值再自减
–i
先自减再赋值
int i=2,j=3;
i=j++;//i=3,j=4;
i=++j;//i=4,j=5;
i++;//i=i+1;
选择语句
1.关系运算符
> < >= <=
运算结果:真(1) 假(0)
6<7;结果为:1(真)
2.判等运算符
== !=
3.逻辑运算符
!(逻辑非) &&(逻辑与) ||(逻辑或)
例子
!真=假 !假=真
真&&真=真 真&&假=假 假&&假=假
真||真=真 真||假=真 假||假=假
短路求值
&&:左边为假时,右边不计算
||:左边为真时,右边不计算
4.if语句
基本语法
if(表达式)
语句1:;
else
语句2;
示例:奇偶数
#include<stdio.h>
int main()
{
int a;
printf("请输入一个数字:");
scanf("%d",&a);
if(a%2==0){printf("这是一个偶数\n");}
else printf("这是一个奇数\n");
return 0;
}
嵌套if语句:成绩等级
#include<stdio.h>
int main
{
int a;
printf("请输入成绩:");
scanf("%d",&a);
if(a>=0 && a<=10)
{
if(a==10) printf("满分/n");
else if(a>=7 && a<=9) printf("优秀/n");
else if(a==6) printf("及格/n");
else if(a>=0 &&a<=5) printf("不及格/n");
}
else printf("输入错误\n");
return 0;
}
5.条件运算符
语法
表达式1?表达式2:表达式3
//等价于if语句
if(a)
b;
else
c;
如果表达式1为真,整个表达式的值为表达式2的值,否则则为表达式3的值
int a,b=2,c=3;
a=b>c?b:c;//结果:a=3;(因为2>3为假,选择c的值)
int max=(x>y)?x:y;//求两个数的最大值
6.布尔类型
_Bool类型
只有两种值:0(假)和1(真)
任何非零值赋给_Bool变量都会变成1
#include<stdbool.h>//引入bool、ture、false的定义
_Bool c=222,d=0;
printf("值1为%d\n",c);//输出为1
printf("值2为%d\n",d);//输出为0
bool flag=true;
bool is_valid=false;
7.switch语句
语法结构
switch(表达式)
{
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
...
default:
默认语句;
break;
}
执行规则
计算表达式的值
与每个case的常量比较
找到匹配的case后,执行该case的语句
遇到break或switch结束时停止
示例:成绩等级
#include<stdio.h>
int main
{
int a;
printf("请输入成绩:");
scanf("%d",&a);
switch(a)
{
case 10:
printf("满分\n");
break;
case 9:
case 8:
case 7:
printf("优秀\n");
break;
case 6:
printf("及格\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("不及格\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
注意事项
case标签必须是常量,不能是变量。
case的值必须唯一,不能重复。
break的重要性:没有break会继续执行下一个case。
default是可选的,用来处理未匹配的情况。