Day-15【选择与循环】选择结构-if语句
目录
一、if语句
(1)单分支选择结构
(2)双分支选择结构
(3)多分支选择结构
(4)if-else的嵌套使用
二、开关分支语句(switch)
(1)一般形式
(2)说明:
一、if语句
(1)单分支选择结构
格式:
if(条件) -> 任意格式:非0 -> 为真 0->为假
{语句块} -> 注意当语句块只有一条语句时,可以省略不写{}
规则:如果条件为真,则执行语句块,否则跳过
例如:
if(x>y)
printf("%d",x);
说明:
① if后面的表达式任意类型,语句可以是复合语句
② if下只有一条语句时,可以省略大括号不写
③ if(x)等价于if(x!=0)
if(!x)等价于(x==0)
例题:
求一个数的绝对值
#include <stdio.h>
main()
{int x,y;printf("enter an integer:");scanf("%d",&x);y=x; //将x的值赋给y;if(y<0) //判断y是否小于0y=-y; //若小于0就去相反数printf("\ninteger:%d-->absolute value:%d\n",x,y);
}
运行:
enter an integer: -12
integer: -12 -->absolute value: 12
(2)双分支选择结构
格式:
if (expression条件)
{语句块1; //只有一句话,大括号可以省
}
else
{语句块2:
}
规则:如果条件为真,则执行语句块1,否则执行语句块2;
if语句例:
#include <stdio.h>
main()
{int a,b;printf("输入a:");scanf("%d",&a); //输入a的值printf("输入b:");scanf("%d",&b); //输入b的值if(a==b) //判断a是否等于bprintf("a=b\n"); //真->输入a==belseprintf("a!=b\n"); //假->输出a!=b
}
(3)多分支选择结构
格式:
if (条件1){语句块1}
else if(条件2){语句块2}
else if(条件3){语句块3}
else 语句4
规则:如果条件1成立,执行语句块1.条件2 成立,执行语句2条件3成立,执行语句3都不成立,执行语句4
例:
if(salary>1000)//价格index=0.4;//折扣
else if(salary>800)index=0.3;
else if(salary>600)index=0.2;
else if(salary>400)index=0.1;
elseindex=0;
成绩在: 80-100 A70-79 B60-69 C0-59 D
要求:输入一个同学的成绩,输出它的级别
#include <stdio.h>
main()
{int grade;scanf("%d",&grade);
if(grade>100||grade<0)
printf("非法数值")//限制输入数字的范围if(grade>=80&&grade<=100)printf("A");else if(grade>=70)printf("B")else if(grade>=60)printf("C");else printf("D");
}
键盘上的字符种类分为:
控制字符:__<32
数字:'0'-'9'
大写字母:'A'-'Z'
小写字母:'a'-'z'判断输入字符的种类:
#include <stdio.h>
main()
{char c;printf("输入一个:");ch=getchar();if(ch<32)printf("是控制字符\n");else if(ch>'0'&&c<='9')printf("是数字字符\n");else if(ch>='A'&&c<='Z')printf("是大写字符\n");else if(ch>='a'&&c<='z')printf("是小写字符\n);else printf("其他");}
(4)if-else的嵌套使用
if-else配对原则:缺省{}时,else总是和它上面离最近的未配对的if相配
if(...)if(...)if(...)else...else...
else...
输入两数并判断其大小关系:
#include <stdio.h>
main()
{int x,y;printf("输入x,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");
}
二、开关分支语句(switch)
仍然是一个多分支选择结构
(1)一般形式
switch(表达式) ->表达式不能为小数 表达式中和谁相等,就执行谁后面的语句
{
case e1:语句1;[break;]
case e2:语句2;[break;] //e都为常量,不能变化。是固定的值,也不能是小数
case e3:语句3;[break;] //e就是常量表达式
case e4:语句4;[break;]
case e5:语句5;[break;]
[default:语句;[break;]] 默认,除此之外,都执行它。放到哪里没关系,都可以执行
}
(2)说明:
(1)switch后的表达式以及case后的表达式均不能是实型,可以是整型或字符型等,case后的表达式必须为常量表达式,且值必须互不相同
(2)break是跳出整个复合语句
(3)case后可包含多个可执行语句,且不必加{}
(4)switch可嵌套
(5)default的功能是在其它case后找不到对应常量,则执行default后面语句
(不必再最后一句)
例:
switch(score)
{case 5:printf("very good");case 4:printf("good");case 3:printf("pass");case 2:printf("fail");default: printf("data error");
}
此时:
运行结果:score为5时,输出:very good good pass fail data error
输入一个月份,输出相对应的季节:
#include <stdio.h>
void main()
{int month;scanf("%d",&month);switch(month){case 1:printf("春天");break;case 2:printf("春天");break;case 3:printf("春天");break;case 4:printf("夏天");case 5:printf("夏天");case 6:printf("夏天");case 7:printf("秋天");case 8:printf("秋天");case 9:printf("秋天");case 10:printf("冬天");case 11:printf("冬天");case 12:printf("冬天");default:printf("error"); 这里加不加break都可以}}
如果month是5,则运行结果就是匹配到5后面的结果都输出
执行下面所有的可执行语句
如果想只输出一个对应的结果,需要在固定的输出后面加break,表示跳出循环合并:case 1:case 2:case 3:printf("春天");break;
当输入1时,则开关进入1中,找不到接着继续往下找,知道case3输出春天并跳出。实现了合并功能
输入123都是春天
!!!一定注意:有break和没break的规则不同
读个程序:
void main()
{int x=1,y=0,a=0,b=0;switch(x) //1{switch(y) //0{case 0:a++;break; //匹配此条,执行a++ 此时a=1.跳出此层case 1:b++;break;} 注意:这里没有break则接着后面的语句执行:case 2:a++;b++;break; //执行a++,b++ a=2,b=1碰到break跳出case 3:a++;b++;}printf("\na=%d,b=%d",a,b); 最终输出a=2,b=1
}运行结果:a=2,b=1
总结:
1、☆= ☆!=0
!☆= ☆==0
2、if-else配对原则:缺省{}时,else总是和它上面离他最近的未配对的if相配对
3、(1)switch后面括号中可以是常量或变量表达式,但不能是实型数据
(2)case后面是常量表达式,且不能是实型,且不能有重复
(3)break、default的功能需要注意
4、注意格式书写
switch()
{ case__:____;
__:
}