第6章if语句的应用.docx

上传人:b****5 文档编号:6843134 上传时间:2023-01-11 格式:DOCX 页数:27 大小:126.89KB
下载 相关 举报
第6章if语句的应用.docx_第1页
第1页 / 共27页
第6章if语句的应用.docx_第2页
第2页 / 共27页
第6章if语句的应用.docx_第3页
第3页 / 共27页
第6章if语句的应用.docx_第4页
第4页 / 共27页
第6章if语句的应用.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

第6章if语句的应用.docx

《第6章if语句的应用.docx》由会员分享,可在线阅读,更多相关《第6章if语句的应用.docx(27页珍藏版)》请在冰豆网上搜索。

第6章if语句的应用.docx

第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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1