在c语言中可用if和switch实现选择结构
其中if语句用来实现两个分支的选择,switch用来实现多分支的选择结构
1.if语句
if语句
在if语句中一般形式为
if (表达式)
语句
若表达式结果为真则执行语句 为假则不执行
(在c语言中0为假(不成立),⾮0表⽰真(成立))
例如以下代码
#include <stdio.h>
int sum =0;
int main()
{
scanf("%d",&sum);
if(sum)
printf("hehe\n");
return 0;
}
如果输入sum值为0则不会打印 若输入值为非零就就打印出hehe
//以下代码用于判断输入值是否是偶数
#include <stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
if(a%2==0)
{
printf("%d是偶数",a);
}
return 0;
}
注:if语句判断部分的括号后不可加; 加上就会使得之后的语句不受控制 就比如上面用于判断偶数的代码 如果在if (a%2==0)后加上; 这样无论输出什么数都会打印出是偶数
在以上代码中可以用来判断一个数是否是偶数 但如果要判断是奇数或者偶数应该怎么样表达呢
在这种情况是我们就可以用到if...else...语句
if...else...语句
形式如下
if (表达式)
语句1
else
语句2
#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;
}
默认if语句和else语句只能控制⼀条语句,如果我们要同时控制2条语句那就要使⽤ {} 将代码括起来
嵌套if语句
在if...else...语句中内可以再嵌套if...else...语句
如要判断一个数是大于100还是小于100还是等于100就可以用到嵌套if语句
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(a>100)
{
printf("输入值大于100\n");
}
else
{
if(a==100)
{
printf("输入值等于100\n");
}
else
{
printf("输入值小于100\n");
}
}
return 0;
}
这段代码还可以简化成
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(a>100)
{
printf("输入值大于100\n");
}
else if(a==100)
{
printf("输入值等于100\n");
}
else
{
printf("输入值小于100\n");
}
return 0;
}
练习:如果要判断两个数的大小 可用以下代码
#include <stdio.h>
int main() {
int a =0;
int b =0;
while (scanf("%d %d", &a, &b) != EOF)
if(a>b)
{
printf("%d>%d\n",a,b);
}
else if(a==b)
{
printf("%d=%d\n",a,b);
}
else
{
printf("%d<%d\n",a,b);
}
}
return 0;
}
在使用if...else...语句时 如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配
同时在使用时尽量把if后的语句用{}扩起来
2.switch
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式 但也不是所有的if语句都可转化为switch语句
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
注: switch 后的 expression 必须是整型表达式 case 后的值,必须是整形常量表达式
(字符类型也是归类到整形家族 因为字符的本质时ASCII的值,这个值是整数)
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default子句,switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句
注:在switch语句中case语句于default语句的顺序没有要求 但一般将default语句放在末尾li
例:要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。
这是一个多分支选择问题,根据百分制分数将学生成绩分为4个等级,如果用i语句来处理至少要用3层嵌套的i,进行3次检查判断。用switch语句,进行一次检查即可得到结果。
#include <stdio.h>
int main()
{ char great=0;
scanf("%c",great);
prinf("Your score:")
switch(great)
{
case('A'):
printf("85~100\n");
break;
case('B'):
printf("70~84\n");
break;
case('C'):
printf("60~69\n");
break;
case('D'):
printf("<60\n");
break;
default:
printf("enter date error\n");
}
return 0;
}
该代码的流程图如下
在以上代码的case语句 若无break将输出
Your score:85~100
70~84
6069
<60
enter data error!
练习 :下面这段代码输出结果是什么?
#include <stdio.h>
int main() {
int x = 3;
int y = 3;
switch (x % 2) {
case 1:
switch (y)
{
case 0:
printf("first");
case 1:
printf("second");
break;
default: printf("hello");
}
case 2:
printf("third");
}
return 0;
}
#include <stdio.h>
int main() {
int x = 3;
int y = 3;
switch (x % 2)//x%2结果为1 在这个switch语句中加入到case1 因为case1后没有break之后再进入到case2
{
case 1:
switch (y)//y为3 在这个switch语句中直接进入default语句
{
case 0:
printf("first");
case 1:
printf("second");
break;
default: printf("hello");//打印hello 内部switch语句结束
}
case 2:
printf("third");//打印third 外部switch语句结束
}
return 0;
}
所以以上代码最终输出结果为hellothird