C语言分支和循环语句总结(上)

本文详细介绍了C语言中的if-else、switch、while、for、do-while语句,以及break和continue控制结构,同时提到了goto语句的使用和注意事项。通过实例解析了各种语句的工作原理和应用场景。
摘要由CSDN通过智能技术生成


大致分类

一、if-else语句

if(表达式)
    语句1;
else
	语句2;

表达式成立-为真-非0为真;
表达式不成立-为假-0为假。

1.分支中包含多条语句

if和else语句默认都只能控制一条语句,所以如果想同时控制两条及以上语句,使用大括号{}将语句代码括起来;

int year = 0;
scanf("%d\n",&year);
if (year >= 2000)
    printf("进入二十一世纪!\n");
    printf("科技迅速发展!");
2024
进入二十一世纪!
科技迅速发展!

2.嵌套else if
用于进行多重判断。
eg:正数和负数判断

int num = 0;
scanf("%d",&num);
if(num < 0)
	printf("%d是负数",num);
else if(num > 0)
	printf("%d是正数",num);
else
	printf("%d既不是正数也不是负数(是0)",num);

3.悬空else问题
else总是与和它最近的if相匹配,与对齐排版无关。

int a = 0;
int b = 1;
if(a == 2)
	if(b == 1)
	printf("熊猫\n");
else
	printf("竹子\n");
熊猫
竹子
操作符


1.关系运算符
关系表达式返回值为0或1,表示真假。
注意1:相等运算符 == 与赋值运算符 =不同

if(x==1)//当x等于1时执行if后的语句
...
if(x=1)//将1赋值给x,这样式子恒成立,无法完成判断工作
...
if(1=x)//将变量写在右边,编译器会报错方便发现并改正问题
...

注意2:多个关系运算符不宜连用

if(1 < i < 100)//从左到右计算,首先进行一轮判断返回0或1,
//再将0或1同100比较,再次返回0或1
if(i > 1 && i < 100)//表示大于1并小于100

2.条件运算符
exp1 ? exp2 : exp3
如果exp1为真,执行exp2,反之执行exp3。
eg.比较两个数中的较大值:

int a = 0;
int b = 0;
scanf("%d %d\n",&a,&b);
int m = a > b ? a : b;
printf("%d\n",m);

3.逻辑运算符
!:非,真变假,假变真(单目);
&&:与,同真为真,同假为假(双目);
||:或,有真即真,无真即假(双目)。
eg.闰年的判断(规则:能被4整除且不能被100整除;能被400整除)

if(year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)

注意:短路问题
运算顺序:从左到右

eg.计算结果

int i = 0,a = 0,b = 2,c = 3,d = 4;
i = a++ && ++b && d++;
printf("a = %d\n b = %d\n c = %d\n d = %d\n",a,b,c,d);
printf("i = %d\n",i);
1 2 3 4
0

赋值运算符优先级较低,先计算右边表达式,a++先使用0再++变为1,并且逻辑运算符为&&,即整个表达式值为0,后面表达式再不计算。

二、switch语句

switch(expression){
	case 1:...
		break;
	case 2:...
		break;
	...
	default:...
		break;}

注意:

  • expression必须为整型表达式
  • case后的值必须为整型常量表达式
    1.break
int n = 0;
scanf("%d\n",&n);
switch(n % 2){
	case 0:
		printf("整除!\n");
	case 1:
		printf("余数是1\n");
2
整除!
余数是1

2.default
在switch中的表达式没有匹配到所有case中的情况使用default,case像if语句中的else if,default像if语句中的else。
3.break和default的顺序
根据实际需求,没有固定顺序;
通常将default放在末尾。

三、while循环

while(表达式)
	语句;

执行流程
执行判断表达式,非0进入循环体 >> 操作完继续循环判断 >> 直到表达式为0,结束循环。
eg.打印1-10的值

int i = 1;
while(i <= 10){
	printf("%d\n",i)
	i++;}

四、for循环

for(表达式1;表达式2;表达式3)
	语句;

1:循环变量的初始化;2:循环结束条件;3:循环变量的变化
执行流程:
表达式1 >> 表达式2判断,非0进入循环体 >> 执行语句 >> 表达式3对变量进行调整 >> 继续根据表达式2判断直到为0结束。
eg.同while打印1-10的值

for(int i = 1;i <= 10; i++)
	printf("%d\n",i);

和while语句的对比:
for循环的三个部分较为集中,更便于维护。

五、do-while循环

do
	语句;
while(表达式);

执行流程:
定义初始值 >> 先执行一次语句 >> (语句内包括循环变量使变化的语句) >> 执行判断表达式,非0继续,为0结束.
eg.同上

int i = 1;
do{
	printf("%d\n",i);
	i++;}
while(i <= 10);

和for,while语句的对比:
至少执行一次

break和continue语句

break:永久终止循环,跳出循环往后执行;
continue:跳过本次循环continue后的代码。
注意: 在不同语句使用下有轻微区别,注意区分观察总结。

for(int i = 1;i <= 10; i++){
	if(i == 5)
		break;
	printf("%d",i);}
1 2 3 4
for(int i = 1;i <= 10; i++){
	if(i == 5)
		continue;
	printf("%d",i);}
1 2 3 4 6 7 8 9 10

六、其他:goto语句

在同一个函数内跳转到设置好的标号处。

{
	printf("小明\n");
	goto index;
	printf("小红\n");
	
index:
	printf("小美\n");
小明
小美

尽量减少使用,容易造成混乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值