分支和循环语句

分支语句

if

  • 格式
if(表达式)
	语句;
if(表达式)
	语句;
else
	语句;
if(表达式)
	语句;
else if(表达式)
	语句;
else
	语句;

如果表达式判断的结果为真(非零),则执行其后面的语句,如果表达式判断的结果为假(零),则跳过后面的执行语句,进入下一个部分。如果遇到 else,则直接执行其后面的语句,无需进行判断。

  • 用例
int main()
{
	int score = 0;
	scanf("%d",&score);
	if(score > 60)
		printf("及格\n");
	return 0;
}
int main()
{
	int score = 0;
	scanf("%d",&score);
	if(score > 60)
		printf("及格\n");
	else
		printf("不及格\n");
	return 0;
}
int main()
{
	int score = 0;
	scanf("%d",&score);
	if(score > 90)
		printf("优秀\n");
	else if(score > 75)
		printf("良好\n");
	else if(score > 60)
		printf("及格\n");
	else
		printf("不及格\n");
	return 0;
}
  • 常见错误与注意事项

悬空else

错误示范:

if语句错误示范

原因分析:

if 语句执行时,默认 执行后面的 一条 语句,所以第一个 if 的 else 被编译器识别为第二个 if 的else,造成代码错误

解决方法:

添加 { } 组成复合语句(程序块)。把 if 的执行语句改为符合语句就可以解决 else 悬空的问题了
本人建议,在初学者使用 if 语句时,无论后面跟多少代码,都要加上 { } ,以免程序出现问题
解决后的代码如下:
if语句修改后的展示

表达式语句、复合语句、空语句:

1.在表达式末尾加上分号组成的语句成为表达式语句。
2.当在本应该是表达式语句的地方想要实现多条语句,可以添加 { } 使里面的部分成为一个整体,被称为复合语句,又叫程序块。在执行程序时是一个整体。
3.当在本应该是表达式语句的地方不需要执行任何内容,就可以只用一个分号组成一个表达式语句,被称为空语句。

switch

  • 格式
switch(整形表达式)
{
	case 整形常量表达式:
		语句;
	case 整形常量表达式:
		语句;
	case 整形常量表达式:
		语句;
	default:
		语句;
}

switch 后面的整形表达式会与后面的整形常量表达式从上到下进行匹配,若匹配成功,则会从该位置往下执行程序,若所有的 case 标签都不符合,则会执行 default 后面的语句,若无 default ,则会直接跳过整个 switch 语句。

  • ==用例=
int main()
{
	int num = 0;
	printf("请输入一个正整数\n");
	scanf("%d",&num);
	switch(num%3)
	{
		case 0:
			printf("是3的倍数\n");
			break;
		case 1:
			printf("余数是1\n");
			break;
		case 2:
			printf("余数是2\n");
			break;
		default:
			printf("输入错误\n");
			break;
	}
	return 0;
}
int main()
{
	int num = 0;
	printf("请输入一个正整数\n");
	scanf("%d",&num);
	switch(num%3)
	{
		case 0:
			printf("是3的倍数\n");
			break;
		case 1:
		case 2:
			printf("不是3的倍数\n");
			break;
		default:
			printf("输入错误\n");
			break;
	}
	return 0;
}
  • 常见错误与注意事项

标签

像case 1: 这样标识符被称为标签,作用是使程序跳转到该位置进行执行。
case 和 1之间必须用空格分开,1和 :之间可以括号可加可不加。
如果没有 break 打破 switch 语句的话,程序会落到下一条语句上。例如第二个用例

break

break有打破中断的意思,break 在 switch 中的作用是在遇到 break 语句时会结束当前所在的 switch 语句。
在 switch 语句中无法直接实现分支语句,只有配合break才能实现。通过在合适的位置添加 break 把语句分割成不同的部分。

defalut

如果所有 case 标签不匹配,程序则会跳过整个 switch 语句,但如果不想忽略所有标签都不匹配的结果,可以在 case 标签中加入 default ,当所有标签都不匹配时,就会执行 default 后面的程序。
default 可以写在任意一个 case 可以出现的位置。而且一个 switch 语句中只有一个 default 。为了养成良好的代码风格,建议在default语句的末尾加上 break 。

if 和 switch 的总结

1. if 语句和 switch 语句都可以嵌套使用。
2. 能用 switch 的地方 if 也能实现。
3. 通过单一表达式来控制程序分支的时候,使用 switch 的效果要比 if 好。
 switch 格式上更加清晰,可读性更强。
4. { } 里边的部分是一个复合语句(程序块),是一个整体。

循环语句

for

  • 格式
for(表达式1;表达式2;表达式3)
{
	循环语句;
}

表达式1:预处理(初始化)部分,用于初始化循环变量,只在第一次进入 for 循环的时候执行一次。
表达式2:条件判断部分(控制表达式),用于判断循环是否执行,为真则继续执行,为假则跳出 for 循环。
表达式3:调整部分,用于对循环条件的调整。在每一次循环结束后执行

  • 用例
int main()
{
	int i = 0;
	for(i = 0; i < 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}
  • 常见错误与注意事项

常见错误

for()后面没有分号,若加分号则会形成空语句,循环错误。
括号内的三个表达式用分号隔开,且顺序不可更改。
建议不要在for 循环体内修改循环变量,防止 for 循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

循环体

在 for 循环 { } 里边的部分被称为循环体,接下来看到的 while 循环和 do while 循环也是一样。其本质还是一个程序块

break

在 for 循环中,如果遇到 break ,将会直接跳出循环语句,强制结束循环。执行循环后面的部分。在多层嵌套循环中,break 只能跳出本层循环,外层的循环还会继续进行。

continue

continue 在 for 循环中可以直接结束本次循环,跳过本次循环体的剩余部分。直接去执行 for 循环的调整部分。

while

  • 格式
while(表达式)
{
	循环语句
}

表达式里的内容为其循环控制部分,为真则继续循环,为假则跳出循环。

  • 用例
int main()
{
	int i=0;
	while(i < 10)
	{
		printf("%d ",i);
		i++;
	}
	return 0;
}
  • 常见错误与注意事项

while 循环也有 for 循环的三个部分,不过更加分散,没有 for 循环那么集中。
while 循环的调整部分一般放到循环的的循环体里边,且一般放在最后。

break

break 在 while 循环和 for 循环中的效果基本一样,都是直接跳出本层循环,强制结束循环。

continue

continue 在 while 循环中也是直接跳过本次循环。但是因为 while 循环的调整部分在循环体内部。所以当程序遇到 continue 时会直接执行循环判断部分。

do while

  • 格式
do 
{
	循环语句;
}while(表达式);

先执行循环语句,然后执行 while 里的表达式进行循环判断,为真则继续循环,为假则跳出循环。

  • 用例
int main()
{
	int i=0;
	do
	{
		printf("%d ",i);
		i++;
	}while(i < 10);
	return 0;
}
  • 常见错误与注意事项

do while 循环的最后面要加上分号。否则编译器在识别时会和 while 循环混淆,导致程序报错。
do while循环至少会执行一次,所以在需要菜单的程序中较为常用。

break

break 在 do while 循环和 for 循环中的效果基本一样,都是直接跳出本层循环,强制结束循环。

continue

continue 在 do while 循环中也是直接跳过本次循环。但是因为 do while 循环的调整部分在循环体内部。所以当程序遇到 continue 时会直接执行循环判断部分。

for 、 while和 do while 的总结

1. for 循环、while 循环和 do while 都可以嵌套使用。
2. do while 循环至少会执行一次。
 for 循环和 while 循环可能一次也不会执行。
3. do while 循环先循环后判断。
 for 循环和 while 循环先判断后循环。
4. for 循环的初始化部分,循环控制部分,调整部分都集中在一起。
 代码的可读性比其他两个循环更高。
6. break 在循环中的共同点是直接跳出 “本层” 循环。
7. continue 在循环中的共同点是结束 “本次” 循环,直接执行后续调整或判断部分。

goto

对于程序想要跳出深度嵌套的两层或多层循环,使用 break 是做不到的的,因为 break 只能跳出所在的一层循环,所以就有了 goto 语句来实现。
goto 语句由 goto标记跳转的符号两部分组成,当程序执行到 goto 时,程序会跳转到标记符号的地方执行。
在理论上 goto 语句并不是必要的,在使用 goto 语句的地方用循环也能解决。
goto 使用举例:

int main()
{
	int num = 0;
	int i = 0;
	for (i = 1; i < 100; i++)
	{
		int j = 0;
		for (j = 1; j < 100; j++)
		{
			num += i * j;
			if (num >= 1314)
				goto finish;
		}
	}
finish:
	printf("%d\n", num);
	return 0;
}

使用建议:
在能不使用 goto 语句的情况下尽量不要使用 goto 语句,避免造成程序代码混乱。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾里看山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值