基于任务驱动的C语言程序设计ch_第1页
基于任务驱动的C语言程序设计ch_第2页
基于任务驱动的C语言程序设计ch_第3页
基于任务驱动的C语言程序设计ch_第4页
基于任务驱动的C语言程序设计ch_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第四章循环结构程序设计教学目标掌握循环结构程序设计方法;熟练使用while语句、do-while语句和for语句实现程序的循环控制;理解循环的嵌套与特殊命令break和continue的使用;掌握用循环结构程序解决实际问题的方法。教学重点使用while语句、do-while语句和for语句实现程序的循环控制;用循环结构程序解决实际问题的方法。教学难点循环的嵌套;用循环结构程序解决实际问题的方法。14.1引例——统计某课程的平均成绩1.问题描述每学期末期教学活动结束后,通常需要对各门课程的教学情况进行总结。其中,统计课程的平均成绩是考察教学效果的重要评定参数。假设某班40名同学选修了C语言程序设计,要求统计该门课程的平均成绩。

22.引例分析具体步骤如下:(1)主要变量的定义。①设定变量sum表示总成绩,令其初值为零,即sum=0;②设定变量score表示某位同学的成绩。(2)运算处理。①首先输入第1位同学的成绩,在总成绩中计入其成绩,即执行语句:scanf("%d",&score);sum=sum+score;②接着,输入第2位同学的成绩,在已得到的总成绩基础上累加,即继续执行语句:scanf("%d",&score);sum=sum+score;3③再输入第3位同学的成绩,然后计入总成绩。④继续输入第i位同学的成绩,计算总成绩。即语句:scanf(“%d”,&score);sum=sum+score;重复执行40次,得到40位同学的总成绩,其值存在sum中。⑤计算平均成绩。用变量avg表示该门课程的平均值,则有avg=sum/n。(3)输出结果。使用printf()函数输出平均成绩。44.2.1使用while语句实现引例

用while语句编写引例的程序代码,算法用流程图描述如图4-1所示:4.2

循环控制语句之一

——while

句图4-1求课程平均成绩的流程图5程序代码:#defineN40#include<stdio.h>main(){inti=1,sum=0;

/*初始化循环控制变量i和累加器sum*/

intscore;/*定义存放成绩的变量score*/floatavg;/*定义存放平均成绩的变量avg*/

while(i<=N){scanf("%d",&score);/*输入第i位同学的成绩*/sum+=score;

/*实现累加*/i++;

/*循环控制变量i增1*/}

avg=(float)sum/N;/*计算平均值*/

printf("avg=%.2f\n",avg);}6一般形式:

while(表达式)语句说明: “表达式”为循环条件;“语句”为循环体。特点: 先判断表达式,后执行语句图4-2while循环执行流程循环控制语句之一——while

句7

通过引例的学习,可见要构造一个循环结构的程序,必须明确以下三方面的要素:如何描述循环控制条件;控制条件的初始状态的设置;循环体内部对控制条件的影响。8【例4-1】求。9main(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf(“Thesumis%d\n",sum);}编程求解:1+2+3+……+100=?(1)若将第3行的语句“i=1;”改为“i=101;”,那么程序的运行结果是什么?(2)若去掉第6行“i++;”,会出现什么结果?请改写例4-1,求1—100之间所有偶数的和。10注意:while语句中的“表达式”(即判断条件)可以是任意的表达式,但一般为关系表达式或逻辑表达式。循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。在循环体中应有使循环趋向于结束的语句,以免形成死循环。允许循环体以空语句形式出现。11【例4-3】数字猜谜游戏。程序代码:#include<stdio.h>main(){intcount=5;

intguess=8;

int

willguess;

printf("Thisisaguessinggame\n");/*重复猜数*/while(count>0){printf("Pleaseenteranumberbetween1and10whichyoumustguess:");

scanf("%d",&willguess);12if(willguess==guess){printf("Congratilations!Youguessedit.\n");return0;/*结束程序*/}elseprintf("Sorry%diswrong,pleasetryagain!\n",willguess);count--;}/*提示猜数结束信息,并给出谜底*/

printf("Youhavehadfivetriesandfailed.Thenumberis%d\n",guess);}运行结果:13【例4-4】将输入的一串字符显示在屏幕上,遇到字符“$”结束。程序代码:#include<stdio.h>main(){charc;

printf("\npleaseinputastring:");c=getchar();while(c!='$'){putchar(c);c=getchar();}}请思考:若第一次输入字符时键入“$”,程序的运行结果如何?144.3.1使用dowhile

语句实现引例

使用dowhile语句实现引例,算法用流程图描述如图4-3:图4-3求课程平均成绩的流程图4.3

循环控制语句之二——dowhile语句15程序代码:#defineN5#include<stdio.h>main(){inti=1,sum=0;

intscore;floatavg;do{scanf("%d",&score);sum+=score;i++;}while(i<=N);

avg=(float)sum/N;

printf("avg=%.2f\n",avg);}16一般形式:

do语句

while(表达式);特点: 先执行一次指定的循环内嵌语句,然后判断条件表达式。图4-4dowhile循环执行流程循环控制语句之二——dowhile语句17【例4-5】求1—100之间所有数的和,用dowhile语句编写程序。程序代码:#include<stdio.h>main(){inti=1,sum=0;/*

定义并初始化循环控制变量i以及

累加器sum

*/do{sum+=i;/*累加*/i++;}while(i<=100);/*循环继续条件:i<=100*/

printf("sum=%d\n",sum);}18【例4-6】用dowhile语句改写例4-4。源代码见程序文件4-6.C【例4-7】输入一个整数,将其各位数字逆序输出。源代码见程序文件4-7.C194.4.1使用for语句实现引例

4.4

循环控制语句之三——for语句程序代码:#include"stdio.h"#defineN40main(){int

i,sum=0,score;floatavg;for(i=1;i<=N;i++){scanf("%d",&score);/*输入第i位同学的成绩*/sum+=score;

/*实现累加*/}

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

avg=(float)sum/N;

/*计算平均值*/

printf("avg=%.2f\n",avg);}20循环控制语句之三——for语句一般形式:for(表达式1;表达式2;表达式3)语句说明:表达式1:循环变量赋初始值表达式2:循环条件表达式3:循环变量增值语句:循环体图4-5for循环的执行流程21【例4-8】求,用for语句编写程序。#include"stdio.h"main(){int

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

printf("Thesumis%d\n",sum);}22【例4-9】求n!。

源代码见程序文件4-9.C【例4-10】编写程序,求Fibonacci数列前20个数,每输出4个数换行。源代码见程序文件4-10.C23三种循环的比较:三种循环都可以用来处理同一问题,一般情况下它们可以互相代替。用while和do…while循环时,循环变量初始化的操作在while和do…while语句前完成;for语句可以在表达式1中完成。24while和do…while循环只在while后面指定循环条件,且在循环体中应包含使循环趋于结束的语句;for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中,功能更强。while和for循环是先判断表达式,后执行语句;do…while循环是先执行语句后判断表达式。25循环的嵌套定义: 一个循环体中又包含一个完整的循环结构,称为循环的嵌套。说明:

while循环、do…while循环和for循环都可以进行嵌套,而且可以相互嵌套。4.5应用循环解决实际问题264.5.1使用循环嵌套统计学生的平均成绩1.问题描述某班40名同学选修了C语言程序设计、英语、离散数学、电子技术、数据结构等5门课程,编写程序统计该班各位同学的平均成绩。2.问题分析具体步骤:for(i=1;i<=40;i++)细化

{计算平均成绩}for(j=1;j<=5;j++){输入每科成绩;累加求总成绩;

}

平均成绩=总成绩/5;细化273.程序代码main(){int

i,j;/*定义外循环变量i,内循环变量j*/

int

score,sum=0;/*定义变量score存放录入的分数,sum存放总成绩*/floatavg;/*avg存放平均成绩*/

for(i=1;i<=40;i++)/*外循环变量i控制人数*/{sum=0;for(j=1;j<=5;j++)/*内循环变量j控制课程门数,计算5门课的总成绩*/{scanf("%d",&score);sum=sum+score;}

avg=sum*1.0/5;/*平均成绩=总成绩/5*/

printf("No%d\t%.2f\n",i,avg);/*显示第i位同学的平均成绩*/}}

28几种合法的嵌套结构:while(){…while(){…}}do{…do{…}while();}while();for(;;){…for(;;){…}}while(){…do{…}while();

…}for(;;){…while(){…}

…}do{…for(;;){…}

…}while();29使用循环嵌套时注意:要保证嵌套的每一层循环在逻辑上都是完整的,避免嵌套交叉使用。要保证循环到最后有一个跳出循环的条件,否则会产生死循环(嵌套循环中检查死循环错误,相对来说比较困难)。在编程时,注意循环嵌套的书写最好用阶梯缩进的形式,可使程序层次分明。30【例4-11】在屏幕上输出如图4-7所示的下三角九九乘法表。

源代码见程序文件4-11.C【例4-12】打印图4-8所示的图案。源代码见程序文件4-12.C图4-8*组成的图形31break语句---无条件转移语句一般形式:

break;功能:用在switch语句中使流程跳出switch结构,继续执行switch语句后面的语句。用在循环体内,迫使所在循环立即终止(跳出当前循环体),继续执行循环体后面的第一条语句。说明:break语句不能用于循环语句和switch语句之外的任何其他语句中。32【例4-13】输出100~200中所有的素数。图4-9判断素数的N-S流程图程序代码:main(){int

j,m;

intk=0;/*定义变量k统计素数的个数*/for(m=100;m<=200;m++){if(k%10==0)

printf("\n");/*每行打印10个数*/for(j=2;j<=m-1;j++)if(m%j==0)break;if(j>=m){printf("%5d",m);k++;}}}33continue语句---无条件转移语句一般形式:

continue;功能: 结束本次循环(跳过循环体中尚未执行的语句),接着进行是否执行下一次循环的判定。continue和break的区别:continue只结束本次循环,而非终止整个循环。break则是结束所在循环,不再进行条件判断。实例参考阅读材料三34【例4-14】编写程序解决下列问题:将1元钱兑换成1分、2分和5分的硬币,请问需要几个1分硬币、几个2分硬币以及几个5分硬币,列出所有的组合情况。源代码见程序文件4-14.C354.5.2使用循环完善学生成绩管理系统菜单1.问题描述在第3章的3.4.2节中,制作了一个学生成绩管理系统菜单,它的使用特点是当用户从菜单中选择某项操作后,程序相应结束。现将它完善为一个切实可用的菜单,可实现重复从菜单中选择功能,直到用户自愿终止系统运行。36程序代码:main(){int

sel;/*定义选择菜单项的变量*/while(1)/*用1构造一个死循环*/{

printf("\n");

printf("*****************\n");

printf("*========*\n");

printf("*1.inputgrade*\n");

printf("*2.calaveragegrade*\n");

printf("*3.sortbygrade*\n");

printf("*4.exit*\n");

printf("*========*\n");

printf("*****************\n");

37printf("pleaseselect1-4:");

scanf("%d",&sel);

switch(sel){case1:printf("run

comman:input

温馨提示

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

评论

0/150

提交评论