C语言程序设计电子教案.ppt

上传人:小飞机 文档编号:6504110 上传时间:2023-11-07 格式:PPT 页数:31 大小:873KB
返回 下载 相关 举报
C语言程序设计电子教案.ppt_第1页
第1页 / 共31页
C语言程序设计电子教案.ppt_第2页
第2页 / 共31页
C语言程序设计电子教案.ppt_第3页
第3页 / 共31页
C语言程序设计电子教案.ppt_第4页
第4页 / 共31页
C语言程序设计电子教案.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《C语言程序设计电子教案.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计电子教案.ppt(31页珍藏版)》请在三一办公上搜索。

1、第5章 循环结构程序设计,5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环 5.5 break语句和continue语句 5.6 goto语句和标号 5.7 程序举例,教材上的第二章2.5中的一部分(2.5.5),5.1 while循环语句(格式1)1.格式:,图 5.1 while循环,2.功能图,3.执行过程:先计算while后面圆括号内表达式的值,如果其值为“真”(非0),则执行语句部分(即循环体),然后再计算表达式的值,并重复上述过程,直到表达式的值为“假”(0)时,循环结束。注意:while循环中的表达式一般是关系表达式(如i=1

2、00)或逻辑表达式,但也可以是数值表达式或字符表达式,此时其值非零即为“真”其值为零即为“假”。,while(表达式)(即条件)复合语句(即循环体),例 5.1利用while语句实现:从键盘输入n(n0)个数,求其和。,图 5.2 求n个数的和的程序框图(细框),输入,处理,输出,编程粗框三部曲,#include/#include void main()int i,n,x,sum;i=1;sum=0;/定义计数/累加器 printf(Input:);/coutn;while(ix;sum=sum+x;/循环求和 i+;/循环计数 printf(nsum is:%dn,sum);/coutend

3、l“sum is:”sumendl;,运行结果:Input:612 34 2 11 9 5sum is:73,解:设计一个计数变量/器i,用以计算循环的次数,其初始值设为1,设计一个求和变量/累加器sum,初始值sum=0;在循环中,每输入一个数x就累加上去:sum=sum+x;注意:程序中黑色的为C语言;蓝色的为C+语言。,例5.2从键盘连续输入字符,直到输入“回车”符为止,统计输入的字符个数。,图5.3统计输入字符的个数的程序框图,#include void main()char ch;int len=0;/字符计数变量/器初始化 puts(Type in a sentence,then

4、press n);while(ch=getch()!=r)putchar(ch);/将刚键入的字符输出 len+;printf(nSentence is%d characters long.n,len);,运行结果:Type in a sentence,then press this is a sentence.Sentence is 19 characters long.,包含空格,赋值表达式,5.2 do-while循环语句(格式2),1.格式,图5.4 do-while循环,2.功能图,3.执行过程(先执行后判定):先执行循环体中的语句,然后计算表达式的值;若表达式的值为“真”(非0),

5、则再次执行循环体;如此重复,直至表达式的值为“假”(0)时结束循环。注意:与while语句(先判定后执行)比较。例 5.3 利用dowhile语句重做例5.1。,do 语句块(即循环体)while(表达式);,图5.5求n个数和的程序框图,#include void main()int i,n,k,sum;i=1;sum=0;printf(Input n:);scanf(%d,5.3 for循环语句 1.格式:,图5.6 for循环,2.功能图,for(表达式1;表达式2;表达式3)语句块(即循环体),3.执行过程:(1)首先求解表达式1(一般为对循环变量赋初值,如i=1)。(2)求解表达式2

6、(一般为判断循环变量超过终值,如i=50),若其值为“真”(非0),则执行循环体中的语句,然后执行第(3)步;若为“假”(0),则结束循环,转至第(5)步。(3)求解表达式3(一般为对循环变量确定步长,如i=i+1)。(4)至第(2)步重复执行。(5)执行for循环语句的下一语句。,例如:for(i=1;i=50;i+)sum=sum+i;for语句可与while语句等价:表达式1;while(表达式2)语句;表达式3;,例 5.4 利用for语句重做例5.1。,include void main()int i,n,k,sum=0;printf(Input n:);scanf(%d,运行结果:

7、Input n:67 11 20 5 2 19Sum:64,for语句最简单的应用形式,也是最容易理解的形式:for(循环变量赋初值;循环条件;循环变量增值)语句块(循环体),或+i,例 5.5 计算1至50中是7的倍数的数值之和。,#include void main()int i,sum=0;/定义循变和累加器 for(i=1;i=50;i+)if(i%7=0)sum+=i;printf(sum=%dn,sum);运行结果:sum=196,说明:1)表达式3的增量(此例为正方向)或减量(负方向,如此例可改“for(i=1;i=1;i-)”)与循环变量的初值和终值有关;2)for语句的循环次

8、数是可计算的,而while语句的循环次数一般是不可计算的(按条件循环)。,实例 见“VC+实例/一般程序/基本循环编程求a+aa+aaa+”和“C+级数(方一循环方二数组)”,终值 初值,步长,+1),循环次数=int(,比较:对循环次数确定的用for循环语句;对循环次数不确定的用while循环语句(使用条件)。,5.4 多重循环或循环嵌套,当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。例如,下面是两种循环嵌套的示意图。,(1)while()while(),(2)for(;)do while();,外循环,内循环,(3)for(i

9、=1;)for(j=1;),说明:循环嵌套中的各循环变量不能同名;而并行循环的循环变量可同名。对循环嵌套,当内循环循环完毕时,外循环才开始下一轮循环,此时,内循环又从头开始循环;故内循环的总次数为内外循环次数之积。,for(i=1;)for(j=1;),for(i=1;)for(i=1;),for(i=1;i=10;+i)for(j=1;j=10;+j),外循环循环10次;内循环循环10*10=100次。,例 5.6 输出如下页的九九表。,循环9次输出19的表头,外循环控制9行(乘数i),内循环控制9列(被乘数j),若是第9列,则换行,否则续行输出,应改为:include void main(

10、),i:,j:,改内循环的初或终值为外循环的循变的函数及输出格式,如:该内循环控制语句为for(j=1;ji;j+)则为左下三角形。,实例见“VC+实例/一般程序/基本循环编程/九九乘法表”,每个元素值为i*j,5.5 break语句和continue语句 5.5.1 break语句 1.格式:break;2.功能:跳出(或终止)它所在的最近的循环语句或switch结构。3.注意问题:(1)break语句只能用于switch结构或循环结构中,且多和if语句配用,例在程序中有下列语句:if()break;则此时的if语句一定位于循环体中或switch结构中,break语句跳出的也不是if语句,而

11、是跳出包含此if语句的循环结构或switch结构。,(2)在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环或它最近的循环语句(有循环嵌套时),而不能同时跳出(或终止)多层循环,如:for()for()break;,跳至,例5.7计算r=1到r=10间的圆面积,直到面积area大于100为止。,#define PI 3.1415926#include void main()int r;float area;for(r=1;r100)break;printf(r:%d area is:%fn,r,area);,运行结果:r:1 area is:3.1415930r:2 ar

12、ea is:12.566370r:3 area is:28.274334r:4 area is:50.265480r:5 area is:78.539818,问题:1、此例实际循环六次(即计算了六次,第六次因area100而跳出循环),但输出了五次。2、若改题为“计算r=1、2、3的圆面积,直到面积area大于100为止”则只能用“while”语句,同学们自编。,5.5.2 continue语句 continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。continue语句的一般形式如下:continue;其执行过程是:终止当前这一轮循环,即

13、跳过循环体中位于continue后面的语句而立即开始下一轮循环;对于while和do-while来讲,这意味着立即执行条件测试部分,而对于for语句来讲,则意味着立即求解表达式3。,例5.8输出100到150之间不能被3整除的数,要求一行输出10个数。,#include void main()int n,i=0;for(n=100;n=150;n+)if(n%3=0)continue;printf(%4d,n);i+;/每行的列数计数 if(i%10=0)printf(n);,运行结果:100 101 103 104 106 107 109 110 112 113115 116 118 119

14、 121 122 124 125 127 128130 131 133 134 136 137 139 140 142 143145 146 148 149,if(n%30)printf(%4d,n);i+;/每行的列数计数 if(i%10=0)printf(n);,等 价,5.6 goto语句和标号 goto语句为无条件转向语句,程序中使用goto语句时要求和标号配合,它们的一般形式为 goto 标号;标号:语句;C语言规定,goto语句的使用范围仅局限于函数内部,不允许在一个函数中使用goto语句把程序控制转移到其它函数之内。一般来讲,goto语句可以有两种用途:(1)与if语句一起构成循

15、环结构。(2)退出多重循环。,例:goto label1;label1:语句;,5.7 程 序 举 例 例 5.9 用公式 求出的近似值,直到最后一项的绝对值小于10-6为止。具体程序如下:#include#include void main()int s;/定义每项的变量 float n,t,pi;/定义每项:n-每项分母;t-每项;pi-t=1;pi=0;n=1.0;s=1;/初始化,while(fabs(t)=1e-6)/当每项的绝对值不小于10-6时循环处理 pi=pi+t;/累加下一项 n=n+2;/准备下一项分母 s=-s;/准备下一项的符号 t=s/n;/求出下一项t pi=pi

16、*4;/求出 printf(“pi=%10.6fn”,pi);运行结果:pi=3.141594,实例见“VC+实例一般程序C+应用举例(双重循环)”下的“c+双重循环求素数”和“双重循环求完数”,问题:1、pi=pi+t;和n=n+2;顺序调换可否?2、s=-s;和t=s/n;顺序调换可否?,例 5.10 从键盘输入一个大于2的整数n,判断n是不是素数。,#include#include void main()int n,k,i,flag=0;/定义是否素数标志 do/保证(反复)输入大于2的整数n printf(Input a number:);scanf(%d,i+)/从2到k循环判断是否

17、有整除,素数的定义:某个整数n是素数,则它不能被2至 n 整除。,n为整数;k为循环上界;i为循环变量;,if(n%i=0)flag=0;break;/*有一数能整除就不是素数,不再循环*/if(flag)/等价于“flag=1”printf(%d is a prime number.n,n);else printf(%d is not a prime number.n,n);运行结果:Input a number:3535 is not a prime number.,注意:初始设素数标志为是素数(flag=1;)好处理;若设素数标志为不是素数(flag=0;)不好处理(因要判定都不能整除)

18、。,例 5.11 用牛顿迭代法求方程2x3-4x2+3x-6=0的根,要求误差小于10-5。,从图5.7可以看出:,因此,,令f(x)=2x3-4x2+3x-6可写成以下形式:f(x)=(2x-4)x+3)x-6,图 5.7 用牛顿迭代法求方程的根,具体程序如下:,#include#include void main()float x,x0,f,f1;printf(Enter the first approch x:);scanf(%f,while(fabs(x-x0)=1e-5);printf(The root of equation is:%10.7fn,x);运行结果:Enter the

19、 first approch x:1.5The root of equation is:2.0000000 例 5.12 从键盘输入4个9以内的数字字符,将其转换为4位十进制数后显示出来。分析:(1)将每个数字字符c变成对应的数字,即将以ASCII码表示的数字字符变成一位十进制数,方法为:c-0,如c=8时,c-0=8。转换中若遇非09字符则结束转换。,(2)将每次变换的一位十进制数,从高位开始,按位加权,变成多位的十进制数,放在变量data中。如输入1,2,3,4,则 结果应是按%d格式显示的1234。具体程序如下:#include#include void main()char c;int i,data=0;printf(Input char:);,for(i=0;i9)/*判断输入字符是否在09范围内*/break;data=data*10+c-0;/*计算当前data值*/printf(data=%dn,data);运行结果:Input char:1463 data=1463,本章作业(1)求100至1000中能被5整除且是偶数的个数及其和。(2)求:3-100之间的素数(若M是素数,则M不可被2-M之间的数整除)。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号