第二讲 表达式和选择语句

第二讲 表达式和选择语句

表达式

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是可选的,用来处理未匹配的情况。