《C语言程序设计》课件第3章_第1页
《C语言程序设计》课件第3章_第2页
《C语言程序设计》课件第3章_第3页
《C语言程序设计》课件第3章_第4页
《C语言程序设计》课件第3章_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.1程序流程与算法基础3.2程序流程控制3.3选择结构

3.4循环结构

小结习题实训

3.1.1算法流程图

算法可以用程序流程图表示。

1.流程图(FlowCharts)

2.流程图中常用的符号

图3-1是常用的一些流程图符号。3.1程序流程与算法基础图3-1常用流程图符号

【例3-1】

判断某一年是否是闰年。

闰年的条件是:①年份能被4整除,但不能被100整除;②年份能被4整除,又能被400整除。判断闰年的算法流程图如图3-2所示。图3-2判断闰年的算法流程图3.1.2结构化程序设计

转移语句可以使程序的控制流程强制性地转向程序的任一处,在传统流程图中,可以用很随意的流程线来描述这种转移功能。3.2.1程序流程控制概述

如前所述,结构化程序设计的三种基本结构是顺序结构、选择结构和循环结构。

3.2.2顺序结构图3-3顺序结构的流程图

顺序结构是指通过安排语句的顺序来决定程序流程的程序结构,也就是按照程序的书写顺序自上而下地逐条执行的程序结构。顺序结构的流程图如图3-3所示。3.2程序流程控制图3-3顺序结构的流程图3.2.3程序案例

【例3-2】计算两个数的和。从键盘上输入两个数,求它们的和并把结果输出到屏幕上。

这个程序是求x+y的和sum,并将结果输出到屏幕上。运行该程序,求8与9的和,结果如图3-4所示。图3-4例3-2程序的运行结果

【例3-3】超市购物消费。从超市购得三种物品,输入每件物品的价格,求出总价值。

运行该程序,录入各物品价格,计算出总消费,结果如图3-5所示。图3-5例3-3程序的运行结果3.3.1选择结构概述

选择结构又称为分支结构或条件分支结构。

3.3.2关系运算符和关系表达式

关系运算实际上就是比较运算,用以完成简单的判断,它是将两个值进行比较,比较的结果是逻辑值,即满足条件的表达式的结果为“真”,不满足条件的表达式的结果为“假”。3.3选择结构3.3.3逻辑运算符和逻辑表达式

C语言提供了三种逻辑运算符:! (逻辑非)、&& (逻辑与)和 || (逻辑或)。

逻辑运算的结果如表3-1所示。表3-1逻辑运算真值表3.3.4if语句

1.简单的if语句

if语句流程图如图3-6所示。图3-6if语句流程图

【例3-4】

编写一个程序:对于输入的两个数a和b,当a>b时将两数的位置对调,否则保持不变。程序流程图如图3-7所示。

这个交换过程可用图3-8表示。

当a、b分别被赋值6和4时,输出结果为a=4,b=6,如图3-9所示。图3-7

例3-4程序流程图图3-8a与b的交换过程图3-9例3-4程序的运行结果

【例3-5】

编写一个程序:对于输入的两个数a和b,输出其中较大者。

从键盘接收两个整型数据,首先将a赋给表示较大值的变量max,通过使用条件语句的判断,当a<b时,将b赋给max。当a、b分别赋值4和6时,输出结果为max=6,如图3-10所示。图3-10例3-5程序的运行结果

2. if…else语句

if…else语句流程图如图3-11所示。

【例3-6】编写一个程序,求输入的两个数的除法运算。图3-11if…else语句流程图

3.多分支if语句(if…elseif)

多分支if语句流程图如图3-12所示。多分支if语句也称为多重if结构语句。图3-12多分支if语句流程图

【例3-7】

编写一个程序,对学生的考试成绩给出评定信息。

【例3-8】

商场购物打折计算。某商场规定,凡一次购物在1000元及以上的打九折,在500元及以上的打九五折,500元以下不打折。3.3.5switch语句

在判断过程中,有时会用到很多条件,需要使用多个else语句,这样将会导致程序过于冗长,还可能影响到程序的可读性。

switch语句流程图如图3-13所示。图3-13switch语句流程图

【例3-9】

简单的计算器设计。输入两个数,计算出它们的和、差、积、商。

【例3-10】

判断月份归属的季度。输入月份,判断并输出这个月是哪个季度。3.3.6选择结构的嵌套

如果if语句的三种形式中又包含一个或多个if语句,则构成了if语句嵌套的情形。

【例3-11】

求一元二次方程式ax2+bx+c=0的根。

程序流程图如图3-14所示。图3-14求解方程ax2+bx+c=0的根的流程图

【例3-12】

超市消费。某超市规定,如果是会员,按9折优惠;不是会员,消费超过1000元也按9折优惠;会员且消费超过1000元,按8折优惠。程序控制流程如图3-15所示。图3-15购物付款流程图3.3.7多重if结构和switch结构的比较

多重if结构和switch结构都可以用来实现多路分支。

【例3-13】

判断输入字符的分类(用多重if结构)。

程序的运行结果如图3-16所示。图3-16例3-13程序的运行结果

【例3-14】判断输入的字母是否是元音字母(用switch结构)。

运行这个程序,结果如图3-17所示。图3-17例3-14程序的运行结果3.3.8条件运算符

条件运算符也就是“?”运算符。它是C语言中提供的唯一的三元运算符,即该运算符具有三个参与运算的操作数。它可以用于条件表达式中,以提供与if…else等同的结构。条件运算符的工作原理如图3-18所示。

程序运行结果如图3-19所示。图3-18条件运算符的工作原理图3-19计算所得税的程序运行结果3.3.9程序案例

以下是一些简单的例程,通过对条件结构的使用,让大家了解如何把问题用算法表述出来,并通过程序解决。

【例3-15】

温度转换。国际上常用的测温体系有两种,一种是华氏温度(℉),一种是摄氏温度(℃)。

执行该程序,输入摄氏温度的值为38时,对应的华氏温度值将高达100.40,如图3-20所示。图3-20例3-15程序的运行结果

【例3-16】

排序问题。用键盘输入三个数a、b、c,按从大到小的顺序排列。

程序的运行结果如图3-21所示。

【例3-17】

符号函数。

符号函数是一个很简单和有用的数学函数,在电气控制中的正、反转,开、关、停等的控制也常用到这个函数的思想。

对于各种不同的情况,运行结果如图3-22所示。图3-21例3-16程序的运行结果图3-22例3-17程序的运行结果

【例3-18】

编写程序,输入一个4位年份,判断并输出该年份是否为闰年。

对于不同的年份,运行结果如图3-23所示。图3-23例3-18程序的运行结果

【例3-19】几何图形面积的计算。编写一个程序,根据用户的选择,计算出相应几何图形的面积。

程序运行时,选择了“2.圆形”,并输入了圆的半径,输出结果如图3-24所示。图3-24例3-19程序的运行结果3.4.1循环结构概述

程序设计中有时需要反复地执行某条语句或语句序列,这时就会用到循环结构。3.4循环结构3.4.2while循环语句

语法格式:

while(表达式)

循环体;

其中,表达式是循环条件,语句为循环体。其结构流程图如图3-25所示。图3-25while结构流程图

【例3-20】

求1+2+…+99+100。

其中循环变量的取值决定了结果的正确与否。比如条件若是i<100,结果就不是5050,而是4950了。正确结果如图3-26所示。图3-26例3-20程序的运行结果

【例3-21】

爱因斯坦阶梯问题。设有一个阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,正好到梯顶。问至少有多少阶梯。图3-27例3-21程序的运行结果3.4.3do…while循环语句

do…while循环结构流程图如图3-28所示。

【例3-22】

电视娱乐节目中有一个购物游戏,让你看看物品猜猜它的价格。

程序的执行过程如图3-29所示。图3-28do…while循环结构流程图

图3-29例3-22程序的执行过程

【例3-23】

输入一位学生三门课程的学习成绩,求出该学生三门课程的平均成绩,按Esc键(Esc的ASCII码值为27)退出。

3.4.4for循环语句

for循环结构流程图如图3-30所示。图3-30for循环结构流程图

【例3-24】Fibonacci数列。Fibonacci数列是意大利数学家斐波那契在1202年提出的一个关于兔子繁殖问题的递归模型。

程序的运行结果如图3-31所示,表示前10个月中每个月拥有的兔子对数。图3-31例3-24程序的运行结果3.4.5流程跳转语句

有时候可能不知道循环执行的次数,有时候需要跳过循环体中的一些语句,这就要用到流程跳转语句。

以while结构为例,break语句的控制流程图如图3-32所示。图3-32break语句的控制流程图

2. continue语句

语句格式:

continue;

功能:结束本次循环,即跳过循环语句中尚未执行的语句,接着进行循环条件的判定,准备下一次的循环。对于for循环,之后的动作是循环变量的更新。以while语句为例,continue语句的控制流程图如图3-33所示。图3-33continue语句的控制流程图

【例3-25】输出1~100间所有7的倍数的数。每行输出10个。

程序的运行结果如图3-34所示。图3-34例3-25程序的运行结果3.4.6循环嵌套

若循环体中又包含有另一个循环语句,则称之为循环嵌套,或嵌套的循环语句,或多重循环。

【例3-26】求1!+2!+…+10!。

程序的运行结果如图3-35所示。

【例3-27】输出100~200间的全部素数。

程序的运行结果如图3-36所示。图3-35例3-26程序的运行结果图3-36例3-27程序的运行结果3.4.7程序案例

【例3-28】组合数的计算。

程序的运行结果如图3-37所示。图3-37例3-28程序的运行结果

【例3-29】

九九乘法表。

对于九九乘法表,既要输出表头和列头,又要输出对应的相乘结果,使用多重循环及循环嵌套完成此任务。

程序的运行结果如图3-38所示。图3-38例3-29程序的运行结果

【例3-30】

水仙花数问题。

所谓水仙花数,是指一种三位数,其各位数字之立方和等于该数。此例的关键在于如何解析出这个三位数各位上的数字。

程序运行后求得的4个水仙花数如图3-39所示。图3-39例3-30程序的运行结果

【例3-31】

鸡兔同笼问题。《孙子算经》中有这样一道题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? (雉:鸡)

这个问题用算术方法、代数方法都很容易解决。

程序的运行结果如图3-40所示。图3-40例3-31程序的运行结果本章主要介绍了程序流程控制的形式、格式和使用。结合流程图让大家理解并掌握了顺序结构、分支结构和循环结构的程序结构和算法实现。

顺序结构是按顺序自上而下逐句执行的结构。

分支结构有if、if…else、if…elseif、switch等形式。【小结】一、填空题

1.有程序段如下:

for(inti=1,sum=0;i<100;i++)

{

sum+=i;

}【习题】其中,循环条件是

;循环控制变量是

;循环体是

;修改循环条件的语句是

;该循环执行

次;循环结束时循环变量的值是

;sum的值是

。2.有以下程序:

main()

{

intn=0,m=1,x=2;

if(!n)x-=1;

if(m)x-=2;

if(x)x-=3;

printf("%d\n",x);

}

程序执行后的结果是

。3.下列程序运行后的输出结果是

main()

{

inta=1,b=2,c=3;

if(c=a)

printf("%d\n",c);

else

printf("%d\n",b);

}4.学生成绩变量s取值88,下列语句执行的结果是

printf("%s\n",s>=85?"优秀":"良好");5.有以下程序:

main()

{

inti,j,sum=0;

for(i=1;i<5;i++)

for(j=1;j<4;j++)

sum++;

printf("%d\n",sum);

}

程序的输出结果是

。6.下列程序运行后的输出结果是

main()

{

intx=15;

while(x>10&&x<50)

{

if(x%3){x++;break;}

x+=2;

}

printf("%d\n",x);

}7.有以下语句:

if(x>3)

printf("A");

else

printf("B");

如果执行后的输出结果是B,表明x>3的值是

8.借助于临时变量t,交换x和y两个变量的值,应顺序执行的三条赋值语句是

9.执行for(inti=0;i<99;i++);printf(“*”);后,将输出

个 * 号。

10.与inti=10;while(i<100){printf("P");i++;}等价的for语句是

。二、选择题:

1.以下程序的输出结果是()。

main()

{

inta=2,b=-1,c=2;

if(a<b)

if(b<0)

c=0;

else

c+=1;

printf(“%d\n”,c);

}

A. 0 B. 1

C. 2 D. 32.分析以下程序片段,所表示的数学函数关系式是()。

y=-1;

if(x!=0)

y=1;

if(x>0)

y=1;

else

y=0;

3.分析下列程序代码,若week=6,则正确的输出选项是()。

#include<stdio.h>

voidmain()

{

intweek;

scanf("%d",&week);

switch(week)

{

case1:printf("Monday");

case2:printf("Tuesday");

case3:printf("Wednesday");

case4:printf("Thursday");

case5:printf("Friday");

case6:printf("Saturday");

case7:printf("Sunday");

default:printf("Entererror!\n");

}

}

A. Saturday B. SaturdaySunday

C. SaturdaySundayEnterError! D. EnterError!4.分析下列程序代码,执行后,正确的输出选项是()。

#include<stdio.h>

voidmain()

{

inty=10;

while(y--);

printf("y=%d\n",y);

}

A. y=-1 B. y=0

C. y=1 D. while构成无限循环5.下列程序的运行结果是()。

#include<stdio.h>

voidmain()

{

inti=23;

do{

++i;

}while(i);

printf(“%d”,i);

}

A. 23 B. 24

C.无任何结果 D.死循环 6.下列程序段while循环的次数是()。

inti=0;

while(i=1)i++;

A. 0次 B. 1次

C. 2次 D.无限次 7.以下程序的输出结果是()。

#include<stdio.h>

voidmain()

{

inti=0,n=0;

do{

i++;

++i;

}while(n!=0);

printf("%d\n",i);

}

A. 0 B. 1

C. 2 D.死循环

8.在switch结构中,()子句不是必选项。

A. default  B. switch

C. case D. else

9. ()循环语句中,先执行循环体,再检查循环条件。

A. while B. do…while

C. for D. forwhile

10.用于直接终止循环的语句是()。

A. break; B. continue;

C. exit; D. quit; 11.下面程序的运行结果是()。

#include<stdio.h>

voidmain()

{

inti;

for(i=1;i<=5;i++)

switch(i)

{

case1:

printf("\ni=1");

continue;

case2:

i=1;

case3:

printf("\ni=3");

continue;

case4:

printf("\ni=%d",i);

i++;

break;

}

printf(“\ni=%d”,i);

}

A. i=1i=1i=3

B.无结果

C. i=3的死循环

D. i=312.执行下列程序段的输出结果是()。

if(x||!x)

printf(“ABC”);

else

printf(“XYZ”);

A. ABC B. XYZ

C. ABCXYZ

D. XYZABC 13.执行下列程序段不可能的结果是()。

intk;

scanf(“%d”,&k);

if(k>50)

printf(“G”);

if(k<100)

printf(“L”);

A. G B. L C. GL

D.无任何结果 14.有如下程序段:

intk;

scanf(“%d”,&k);

switch(k)

{

case1:printf(“G”);

case2:printf(“L”);

}

要输出GL,k的值应取()。

A. 0 B. 1

C. 2 D. 3

15.若变量已经正确定义,则以下能正确计算5!的程序段是()。

A. f=0; B. f=1;

 for(i=1;i<=5;i++)  for(i=1;i<5;i++)

 f*=i;

f*=i;

C. f=1; D. f=1;

for(i=5;i>1;i++) for(i=5;i>=2;i--)

f*=i;

f*=i;

16.结构化程序由三种基本结构组成,三种基本结构组成的算法()。

A.可以完成任何复杂的任务

B.只能完成部分复杂的任务

C.只能完成符合结构化的任务

D.只能完成一些简单的任务

17.有以下程序:

main()

{

chara=‘a’,b;

printf(“%c,”,++a);

printf(“%c\n”,b=a++);

}

程序运行后的输出结果是()。

A.

a,b

B.

a,c

C.

b,b D.

b,c18.有以下程序:

main()

{inti;

for(i=0;i<3;i++)

switch(i)

{

case0:printf("%d",i);

case2:printf("%d",i);

default:printf("%d",i);

}

}程序运行后的输出结果是()。

A. 022111 B. 02

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论