第6章if语句的应用.docx
- 文档编号:6843134
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:27
- 大小:126.89KB
第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)、良(79 if(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- if 语句 应用