if语句
if语句是一种用来实现选择结构程序的语句。
一、if语句的四种形式:
1.单分支if语句
一般形式为:if (表达式) {语句组}
含义:若表达式为真,执行语句,否则执行if后面的语句组。
2.双分支if语句
一般形式为:if (表达式) {语句组1}
else {语句组2}
含义:若表达式为真,执行语句组1,否则执行语句组2。
例题:
输入任意三个整数num1、num2、num3,求三个数中的最大值。
main()
{int num1,num2,num3,max;
printf("请输入三个数:");
scanf("%d,%d,%d",&num1,&num2,&num3);
if (num1>num2)
max=num1;
else
max=num2;
if (num3>max)
max=num3;
printf("这三个数是:%d,%d,%d\n",num1,num2,num3);
printf("max=%d\n",max);
3. 多分支选择结构的if语句
if(表达式1) {语句组1;}
else if(表达式2) {语句组2;}
else if(表达式3) {语句组3;}
.
.
.
else if(表达式m) {语句组m;}
else {语句组m+1;}
例题:
从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
main( )
{ int score;
scanf(“%d”, &score);
if ( score<60) printf(“%c” , ’E’);
else if ( score <70) printf(“%c” , ’D’);
else if (score <80)
printf(“%c” , ’C’);
else if (score <90)
printf(“%c” , ’B’);
else
printf(“%c” , ’A’);
4.If语句的嵌套:
If语句的嵌套:
在上述3种if语句结构中,当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。
if 语句的二层嵌套结构如下:
if ( 表达式)
if ( 表达式1)
{语句11};
else
{语句12};
else
if ( 表达式2)
{语句21};
else
{语句22};
功能:判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12
若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22
例题1:
已知y(x)=-1(x<0) ,y(x)=0(x=0),y(x)=1(x>0),编写程序输入一个X 的值,输出Y值。
程序为:
main( )
{ int x, y;
scanf(“%d”,&x);
if(x<0) y=-1;
else if(x== 0) y=0;
else y=1;
printf(“x=%d, y=%d\n”, x, y);
}
例题2:
写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者既能被100整除,又能被400整除。
算法设计要点:
(1)如果X能被Y整除,则余数为0,即如果X%Y的值等于0,则表示X能被Y整除!
(2)首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请仔细体会。参考程序如下:
main()
{
int year,leap=0;/* leap=0:预置为非闰年*/
printf("Please input the year:");
scanf("%d",&year);
if (year % 4==0)
{
if (year % 100 != 0) leap=1;
else
if (year%400==0) leap=1;
}
if (leap==1)
printf("%d is a leap year.\n",year);
else
printf("%d is not a leap year.\n",year);
}
说明:
(1)条件后面不加分号
(2)语句之后有分号
(3)else不是语句,不能单独使用
(4)当if后有多个执行语句时,必须用{ }将多
个语句括起来,构成一个复合语句, { }之外不必有分号。
二 switch语句
C语言提供了switch语句直接处理多分支选择。
switch(表达式)
{ case 常量表达式1:语句组1 [break;]
case 常量表达式2:语句组2 [break;]
……
case 常量表达式n:语句组n [break;]
[default: 语句组n+1]
}
执行过程
(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句或switch语句中的最后一条语句时,跳出switch语句,转向执行switch语句的下一条。
(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。
例题:
从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
main()
{int score, grade;
printf(“请输入成绩(0~100): ”); scanf(“%d”, &score);
grade = score/10;
/*将成绩整除10,转化成switch语句中的case标号*/
switch (grade)
{case 10:
case 9: printf(“grade=A\n”); break;
case 8: printf("grade=B\n"); break;
case 7: printf("grade=C\n"); break;
case 6: printf("grade=D\n"); break;
case 5: case 4:
case 3:
case 2:
case 1:
case 0: printf(“grade=E\n”); break;
default: printf(“分数不在范围内!\n”);
}
}
|