分支语句(选择结构)
一、if语句
1、语法结构
表达式的值为真,执行后面的语句,为假跳过。(注意!!在C语言中0为假,非0为真。)
2、易错提示
else悬空
#include<stdio.h>
int main()
{
int x=1;
int y=2;
if(x==1)
if(y==2)
printf("xxxyyy\n");
else
printf("******\n");
return 0;
}
此时,按照空格看应该是输出六个 ’ * ’ ,但是结果如下:
原因是:if 语句中的 else 会自动与离它最近的上面的第一个 if 结合,上面就是一个 if 嵌套了一个 if - else 。
如果要输出预期的结果,可以添加一对 { }。如下:
表达式书写错误
#include<stdio.h>
int main()
{
int x = 1;
if (x = 3)
{
printf("******\n");
}
return 0;
}
如上,按一般逻辑应该 x 不等于3,不执行下面的语句。但要注意 ‘ = ’ 和 ‘ == ’ 的区别。 前者代表赋值,表达式的值既是赋予的值;而后者表示判断两边是否相等。那么,表达式结果为3,非0为真,输出的结果就是六个 ’ * '。
若是因为这个错误,编译器检查没有语法错误是不会报错的。所以,为了防止犯这个错误,可以把要判断的常量写在前面,就可以很好的避免这个错误。
3、实例
判断一个数是否为奇数
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 2 != 0)
{
printf("%d是奇数!\n",a);
}
else
{
printf("%d不是奇数!\n",a);
}
return 0;
}
输出0-100之间的奇数
#include<stdio.h>
int main()
{
int a = 1;
for (a = 1; a <= 100; a++)
{
if (a % 2 != 0)
{
printf("%d\n", a);
}
}
return 0;
}
二、switch语句
switch语句是一种适用于多分支的分支语句
1、语法结构
注意:case语句单独使用无法实现分支的功能,所以需要和break一起搭配使用。
2、break的灵活使用
在switch语句中,一旦满足其条件进入case语句,它就会一直顺序执行,直到遇到break才会跳出。(所以编程时最好记得给最后一个case添加一个break,防止修改代码时忘记加,造成逻辑混乱)
所以下面就通过两个代码的对比来感受一下,break的灵活使用:
每个case语句都加break
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d", &grade);
switch (grade)
{
case 1:
printf( "小学\n" );
break;
case 2:
printf( "小学\n" );
break;
case 3:
printf("小学\n" );
break;
case 4:
printf( "小学\n" );
break;
case 5:
printf( "小学\n" );
break;
case 6:
printf( "小学\n" );
break;
case 7:
printf( "中学\n" );
break;
case 8:
printf( "中学\n" );
break;
case 9:
printf("中学\n");
break;
}
return 0;
}
根据需要灵活添加break:
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d", &grade);
switch (grade)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
printf("小学\n");
break;
case 7:
case 8:
case 9:
printf("中学\n");
break;
}
return 0;
}
灵活添加后,代码变得更加直观简便。
3、default子句
当表达式的值与所有case语句都不匹配时,一般情况会直接跳过,程序不会终止,当然也不会报错。
这种情况是非常不严谨的,所以就出现了default子句,当switch语句中case标签所有值都不匹配时,就会执行default子句后面的语句。
因此,它也具有一个特点,就是一个switch语句只能出现一个default子句。但是,它可以出现在任意一个case子句后,一般都放在最后或者最前。下面见举例:
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d", &grade);
switch (grade)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
printf("小学\n");
break;
case 7:
case 8:
case 9:
printf("中学\n");
break;
default:
printf("请重新输入 :\n");
break;
}
return 0;
}
这里同样需要注意的是!!编程时记得给最后添加一个break,防止修改代码时忘记加,造成逻辑混乱,原因同case语句。