第6章if语句的应用.docx
《第6章if语句的应用.docx》由会员分享,可在线阅读,更多相关《第6章if语句的应用.docx(27页珍藏版)》请在冰豆网上搜索。
第6章if语句的应用
第6章if语句的应用
本章重点
●if语句的三种形式
●if语句的应用
●if~else语句的应用
●if~elseif语句的应用
●if嵌套语句的应用
本章难点
●if~elseif的使用
●if嵌套语句的使用
●if语句与循环语句的联合使用
本章学习建议:
建议着重理解if语句的语法,if括号中的表达式通常采用的是逻辑表达式,但有时也采用算术表达式,甚至有时使用赋值表达式。
因此,要正确理解if语句中表达式的用法,在实际应用中if语句通常与循环语句一起使用。
6.1if语句的应用
在现实生活中,每天都会根据实际情况进行某种选择。
例如,早上去教室上课,如果出门时下雨的话,就撑一把雨伞去教室。
也就是说,人会根据条件进行行为选择。
而计算机也会根据不同情况做出各种逻辑判断,进行一定的选择。
在C语言程序设计中,这样的选择通常是通过if语句实现的。
if语句形式之一
用法:
if(表达式)
语句块
功能:
如果表达式的值为真(非0),则执行语句块,否则不执行该语句块。
程序流程图如图6.1所示。
图6.1if语句流程图
例6.1:
从键盘输入一批数,统计正数的和,当输入0时程序结束。
分析问题:
通过循环输入整数,假设输入变量为x;然后要判断该数是否为0,如果不为0,再判断值是否大于零,如果大于零,加入和。
流程图如图6.2所示。
图6.2程序流程图
编译程序及运行
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-1.c
步骤2:
在6-1.c文件中输入以下完整的源程序。
#include
intmain()
{
intx,sum=0;
scanf("%d",&x);
for(;x;scanf("%d",&x))
if(x>0)
sum=sum+x;
printf("正数总和为:
%d\n",sum);
return0;
}
步骤3:
编译程序6-1.c
步骤4:
点击执行图标
,执行程序6-1.exe,此程序执行后在屏幕上输出:
24-5809
正数总和为:
14
注意:
当输入的数小于等于0时,程序无任何动作。
例6.2:
假设要输入某个学生8门课程的成绩,如果输入某课程的成绩大于等于85分,则输出“该课程成绩优秀!
”,同时输出目前是已经有几门课程成绩优秀了。
最后输出该学生的总分和平均分。
分析:
1、要输入8门课程的成绩,所以要用到循环结构;2、根据输入的成绩是否大于等于85分来确定总分是否输出成绩优秀,因此,在for语句中还要使用if语句。
程序的执行过程中,给变量分配存储空间,循环开始,输入一门课的成绩,判断输入的成绩是否大于等于85,如果是大于等于85,输出“成绩优秀!
”,并且累计优秀课程门数和输出优秀课程数,再判断循环条件。
最后输出总分和平均分。
流程图如图6.3所示。
图6.3程序流程图
编译程序及运行
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-2.c
步骤2:
在6-2.c文件中输入以下完整的源程序。
#include
intmain()
{
inti=1,cj=0,yx=0;
floatsum=0,avg=0;
/*变量i用于循环8门课程,cj用于输入某门课成绩,yx用于统计优秀课程数,sum用于计算总分,avg用于计算平均分*/
for(i=1;i<=8;i++)
{
printf("请输入第%d门课成绩:
",i);
scanf("%d",&cj);
if(cj>=85)
{
printf("\t该课程成绩优秀!
\n");
yx++;
printf("\t累计%d门课程成绩优秀!
\n",yx);
}
sum+=cj;
}
avg=sum/8;
printf("该学生8门课程总分:
%0.1f平均分:
%0.1f\n",sum,avg);
return0;
}
步骤3:
编译程序6-2.c
步骤4:
点击执行图标
,执行程序6-2.exe,此程序执行后在屏幕上输出:
请输入第1门课成绩:
78
请输入第2门课成绩:
90
该课程成绩优秀!
累计1门课程成绩优秀!
请输入第3门课成绩:
66
请输入第4门课成绩:
85
该课程成绩优秀!
累计2门课程成绩优秀!
请输入第5门课成绩:
79
请输入第6门课成绩:
98
该课程成绩优秀!
累计3门课程成绩优秀!
请输入第7门课成绩:
56
请输入第8门课成绩:
72
该学生8门课程总分:
624.0平均分:
78.0
思考:
1.上述例子若把if(cj>=85)后的“{}”去掉,程序执行的结果会怎样?
2.变量avg是否可以省略?
3.输入若干整数,把正数相加,当输入0时结束,最后输出正数的和。
✧上机练习1
定义一字符变量ch,并从键盘连续读入,如为小写字母转化为大写字母后输出,否则什么也不做,直到输入回车程序结束。
提示:
判断是否为小写字母可写为:
(ch>='a'&&ch<='z'),小写字母转化为大写字母、输出构成一个复合语句,此复合语句为:
{ch-=32;printf("%c",ch);}
6.2if~else语句的应用
if语句形式之二
用法:
if(表达式)
语句块1
else
语句块2
功能:
如果表达式的结果为“真”(非0),则执行语句1;否则执行语句2。
流程图如图6.4所示。
图6.4if…else语句流程图
例6.3:
判断从键盘输入的数是正数还是负数,输入数0结束程序运行。
分析问题:
数从键盘输入,输入的数如果大于0则输出“输入的数是正数”,如果是小于0则输出“输入的数是负数”,如果是等于0,则程序运行结束。
流程图如图6.5所示。
图6.5程序流程图
编译程序及运行
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-3.c
步骤2:
在6-3.c文件中输入以下完整的源程序。
#include
intmain()
{
intx=1;
printf("\n请输入一整数(输入0程序退出):
");
scanf("%d",&x);
while(x)
{
if(x>0)
printf("输入的数%d是正数.\n",x);
else
printf("输入的数%d是负数.\n",x);
printf("\n请输入一整数(输入0程序退出):
");
scanf("%d",&x);
}
return0;
}
步骤3:
编译程序6-3.c
步骤4:
点击执行图标
,执行程序6-3.exe,此程序执行后在屏幕上输出:
请输入一整数(输入0程序退出):
9
输入的数9是正数.
请输入一整数(输入0程序退出):
-8
输入的数-8是负数.
请输入一整数(输入0程序退出):
0
[root@localhostroot]#
✧上机练习2
键盘输入若干整数,当输入0时结束,求所有偶数的和。
例6.4:
从键盘输入10个整数,把所有的正数相加以及所有的负数相加,最后输出所有正数的和,以及所有负数的和。
分析问题:
要从键盘输入十个整数,所以采用循环结构,输入的数分正数和负数,各进行累加。
流程图如图6.6所示。
图6.6流程图
编译程序及运行
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-4.c
步骤2:
在6-4.c文件中输入以下完整的源程序。
#include
intmain()
{
intnsum=0,n=0,psum=0,p=0;
/*nsum负数累加值,n负数个数,psum正数累加值,p正数个数(0作为正数)*/
inti,x;/*i用于控制循环次数,x用户存储输入的数*/
for(i=1;i<=10;i++)
{
printf("请输入10整数中的第%d个数:
",i);
scanf("%d",&x);
if(x>=0)
{
psum+=x;
p++;
}
else{
nsum+=x;
n++;
}
}
printf("\n有%d个正数,和为:
%d\n有%d个负数,和为:
%d\n",p,psum,n,nsum);
return0;
}
步骤3:
编译程序6-4.c
步骤4:
点击执行图标
,执行程序6-4.exe,此程序执行后在屏幕上输出:
请输入10整数中的第1个数:
9
请输入10整数中的第2个数:
87
请输入10整数中的第3个数:
-8
请输入10整数中的第4个数:
2
请输入10整数中的第5个数:
-534
请输入10整数中的第6个数:
34
请输入10整数中的第7个数:
-1
请输入10整数中的第8个数:
34
请输入10整数中的第9个数:
99
请输入10整数中的第10个数:
0
有7个正数,和为:
265
有3个负数,和为:
-543
思考:
定义二个整型变量x、y,并从键盘读入一个整型数给x,如此数大于等于0,把此数的平方赋给y,否则把此数的绝对值赋给y。
提示:
可用程序段:
if(x>=0)
y=x*x;
else
y=-x;
6.3if~elseif语句的应用
if语句形式之三
用法:
if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
………
elseif(表达式m)语句m
else语句n
功能:
如果表达式1的结果为“真”,则执行语句1,退出if语句;否则去判断表达式2,如果表达式2的结果为“真”,则执行语句2,退出if语句;否则去判断表达式3,如果表达式3的结果为“真”,则执行语句3,退出if语句;否则去判断表达式3后面的表达式,……,如果表达式m的结果为“真”,则执行语句m,退出if语句;否则去执行语句n。
程序流程图如图6.7所示。
图6.7if…elseif流程图
例6.5:
假如我们把学生的成绩分成等级优(grade>89)、良(79if(grade>89)
printf("恭喜你,你的成绩是优!
\n");
elseif(grade>79)
printf("恭喜你,你的成绩是良!
\n");
elseif(grade>69)
printf("恭喜你,你的成绩是中!
\n");
elseif(grade>59)
printf("恭喜你,你的成绩是及格!
\n");
else
printf("很抱歉,你的成绩是不及格!
\n");
从键盘输入学生的成绩给grade,通过判断,输出学生成绩的文字描述。
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-5.c
步骤2:
在6-5.c文件中输入以下完整的源程序。
#include
intmain()
{
intgrade;
printf("输入学生的成绩:
");
scanf("%d",&grade);
if(grade>89)
printf("恭喜你,你的成绩是优!
\n");
elseif(grade>79)
printf("恭喜你,你的成绩是良!
\n");
elseif(grade>69)
printf("恭喜你,你的成绩是中!
\n");
elseif(grade>59)
printf("恭喜你,你的成绩是及格!
\n");
else
printf("很抱歉,你的成绩是不及格!
\n");
return0;
}
步骤3:
编译程序6-5.c
步骤4:
点击执行图标
,执行程序6-5.exe,此程序执行后在屏幕上输出:
输入学生的成绩:
92
恭喜你,你的成绩是优!
思考:
从某个意义上说,能用if~elseif解决的问题,都可以用单个的if语句解决,请分析这两种方法的差异与优缺点。
✧上机练习3
调试下列程序:
1.键盘输入x,计算下列分段函数的值。
2.输入一行字符,分别统计大小写字母、数字字符、空格及其它字符的个数。
6.4if嵌套语句的应用
if语句的嵌套是指if语句中又包含了一个或多个if语句,其流程图如图6.8所示。
图6.8if嵌套语句流程图
例6.6:
编写一个程序,由键盘输入三个整数作为三角形的三条边,判断是否能构成一个三角形,如能并判断是等边三角形、等腰三角形、直角三角形,还是其它一般的三角形。
分析问题:
设三个整数分别为:
a、b、c,构成三角形的条件为:
a+b>c&&a+c>b&&b+c>a
构成等边三角形的条件为:
a==b&&b==c;构成等腰三角形的条件为:
a==b||b==c||a==c。
构成直角三角形的条件为:
a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a。
编译程序及运行
步骤1:
在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++6.0]→[MicrosoftVisualC++6.0]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名6-6.c
步骤2:
在6-6.c文件中输入以下完整的源程序。
#include
intmain()
{
inta,b,c;
printf("请输入第1条边:
");
scanf("%d",&a);
printf("请输入第2条边:
");
scanf("%d",&b);
printf("请输入第3条边:
");
scanf("%d",&c);
if(a+b>c&&a+c>b&&b+c>a)
{
printf("能构成一个三角形\n");
if(a==b&&b==c)
printf("能构成一个等边三角形\n");
elseif(a==b||b==c||a==c)
printf("能构成一个等腰三角形\n");
elseif(a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a)
printf("能构成一个直角三角形\n");
else
printf("能构成一个一般的三角形\n");
}
else
printf("不能构成一个三角形\n");
return0;
}
步骤3:
编译程序6-6.c
步骤4:
点击执行图标
,执行程序6-6.exe,此程序执行后在屏幕上输出:
请输入第1条边:
5
请输入第2条边:
4
请输入第3条边:
6
能构成一个三角形
能构成一个一般的三角形
[root@localhostroot]#./6-7
请输入第1条边:
4
请输入第2条边:
4
请输入第3条边:
1
能构成一个三角形
能构成一个等腰三角形
[root@localhostroot]#./6-7
请输入第1条边:
1
请输入第2条边:
6
请输入第3条边:
2
不能构成一个三角形
思考:
1.上述例子未给出流程图,请对照源程序画出流程图。
✧上机练习4
模仿程序6.6,通过循环可多次输入三条边,除例6.6的功能外,还要判断是否是等腰直角三角形,即按照等边、等腰直角、等腰、直角、其它三角形的顺序判断,当输入的三个数中有一个小于或等于0时程序结束。
思考与实验
1.if语句的表达式要表示判断条件“x不等于0”,下面表达式写法中正确的是()。
(A)x=0(B)x(C)!
x(D)x<>0
2.以下程序的输出结果是什么?
#include
voidmain()
{
intx=1,y=-10;
if(x<++y)
if(y--<0)x+=y;
elsex+=3*y;
elsex=3*y;
printf("%d\n",x);
}
3.以下程序段对输入的两个整数,按从小到大输出。
intx,y;
scanf("%d%d",&x,&y);
if()
printf("%d,%d",x,y)
else
printf("%d,%d",y,x)
4.以下程序段对输入字符更改大小写。
charch;
ch=getchar();
ifch=ch+32;
elseifch=ch-32;
5.输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。
6.输入一批数,输出比相邻数大的数,当输入0时结束。
7.将输入字符的大写字符转换成小写字符输出,小写字符原样输出。
8.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。
9.编写程序,计算分段函数:
10.根据输入的百分制按五分制的成绩输出。
百分制与五分制之间的关系见下表。
百分制
五分制
90~100
5
80~89
4
70~79
3
60~69
2
<60
1
第六章参考答案
6.1if语句的应用
例6.2思考1.当成绩大于85是才会显示优秀,但是最后会输出8门课都优秀。
2.可以但程序会有小的改动,且程序可读性不好。
3.#include
intmain()
{
intcj,sum=0;
printf("请输入:
\n");
scanf("%d",&cj);
while(cj!
=0)
{
if(cj>0)
sum+=cj;
scanf("%d",&cj);
}
printf("%d\n",sum);
return0;
}
上机练习1#include
intmain()
{
charch;
printf("请输入:
\n");
while((ch=getchar())!
='\n')
{
if(ch>='a'&&ch<='z')
{
ch-=32;
printf("%c",ch);
}
}
printf("\n");
return0;
}
6.2if~else语句的应用
上机练习2#include
intmain()
{
intcj,sum=0;
printf("请输入:
\n");
scanf("%d",&cj);
while(cj!
=0)
{
if(cj%2==0)
sum+=cj;
scanf("%d",&cj);
}
printf("%d\n",sum);
return0;
}
例6.4思考#include
#include
intmain()
{
intx,y;
printf("请输入:
\n");
scanf("%d",&x);
if(x>0)
y=x*x;
else
y=fabs(x);
printf("x=%dy=%d\n",x,y);
return0;
}
6.3if~elseif语句的应用
例6.5思考if~else与if虽然都能用于分支语句的程序设计但if~else的逻辑性更强,可以使程序更清晰。
上机练习31.#include
#include
intmain()
{
intx,y;
printf("请输入x的值:
\n");
scanf("%d",&x);
if(x>0)
y=10;
elseif(x<0)
y=-10;
else
y=0;
printf("x=%dy=%d\n",x,y);
return0;
}
2.#include
#include
intmain()
{
charch;
intx=0,y=0,z=0,a=0,b=0;
printf("请输入:
\n");
while((ch=getchar())!
='\n')
{
if(ch>='a'&&ch<='z')
x++;
elseif(ch>='A'&&ch<='Z')
y++;
elseif(ch>='0'&&ch<='9')
z++;
elseif(ch==''||ch=='\n')
a++;
else
b++;
}
printf("小写字母%d个\n",x);
printf("大写字母%d个\n",y);
printf("数字字符%d个\n",z);
printf("空格字符%d个\n",a);
printf("其它字符%d个\n",b);
return0;
}
6.4if嵌套语句的应用
上机练习4#include
intmain()
{
inta,b,c,i;
printf("请输入三角形的边:
\n");
printf("1是2否\n");
scanf("%d",&i);
while(i==2)
{
printf("请输入第1条边:
");
scanf("%d",&a);
printf("请输入第2条边:
");
scanf("%d",&b);
printf("请输入第3条边:
");
scanf("%d",&c);
if(a+b>c&&a+c>b&&b+c>a)
{
printf("能构成一个三角形\n");
if(a==b&&b==c)
print