C语言课件第05章.ppt

上传人(卖家):晟晟文业 文档编号:5100803 上传时间:2023-02-11 格式:PPT 页数:41 大小:347.51KB
下载 相关 举报
C语言课件第05章.ppt_第1页
第1页 / 共41页
C语言课件第05章.ppt_第2页
第2页 / 共41页
C语言课件第05章.ppt_第3页
第3页 / 共41页
C语言课件第05章.ppt_第4页
第4页 / 共41页
C语言课件第05章.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、5.1 循环结构问题的提出循环结构问题的提出5.2 解决单重循环的问题解决单重循环的问题5.3 解决多重循环的问题解决多重循环的问题5.4 简单的程序调试简单的程序调试在用计算机解决大量的实际问题时,在用计算机解决大量的实际问题时,经常会遇到如下许多重复运算的问题。经常会遇到如下许多重复运算的问题。(1)求某一同学一学期的平均分。)求某一同学一学期的平均分。解决方法是将该同学这一学期所有考核成解决方法是将该同学这一学期所有考核成绩累加,再除以考核门数,就得到该生的绩累加,再除以考核门数,就得到该生的平均分。平均分。(2)计算:)计算:1*2*3*n。这是一个累。这是一个累乘的问题,每个乘数与前

2、面的一个数都有乘的问题,每个乘数与前面的一个数都有固定的关系(后面的数比前面的数大固定的关系(后面的数比前面的数大1)。)。因此每次累乘的数都是前面的数加因此每次累乘的数都是前面的数加1,方法,方法相同,实际这是一个重复累乘的问题。相同,实际这是一个重复累乘的问题。这一类问题,重复的次数有些情况是这一类问题,重复的次数有些情况是已知的,有些情况是未知的。但是这些问已知的,有些情况是未知的。但是这些问题都带有重复性的工作,解决这类问题,题都带有重复性的工作,解决这类问题,采用循环结构最为适当。采用循环结构最为适当。有些问题,采用单重循环就能解决,有些问题,采用单重循环就能解决,比如上面所举的两个

3、例子,都可以采用单比如上面所举的两个例子,都可以采用单重循环;而有些问题,比如说二维表格数重循环;而有些问题,比如说二维表格数据输出的问题,则需要采用双重循环才能据输出的问题,则需要采用双重循环才能解决。解决。C语言提供了三种实现循环结构的语语言提供了三种实现循环结构的语句,它们分别是:句,它们分别是:while语句、语句、do-while语语句和句和for语句,三种循环语句各有不同的特语句,三种循环语句各有不同的特点,我们可以灵活使用。点,我们可以灵活使用。while循环语句的形式如下:循环语句的形式如下:while(表达式)循环体语句(表达式)循环体语句while循环语句的执行过程如图循环

4、语句的执行过程如图5-1所所示。示。图图5-1 while语句的执行语句的执行说明说明(1)用)用while语句构成的是语句构成的是“当型当型”循环结构,它的特点是:循环结构,它的特点是:“先判断,后执先判断,后执行行”,如果表达式的最初值为,如果表达式的最初值为0,则循环体,则循环体语句一次也不执行。只有当表达式的值为语句一次也不执行。只有当表达式的值为非非0时,才能执行循环体语句。执行完循环时,才能执行循环体语句。执行完循环体语句后,再返回循环的开始部位,判断体语句后,再返回循环的开始部位,判断表达式的值,决定是否继续循环。表达式的值,决定是否继续循环。(2)循环体语句只能是一条语句,)循

5、环体语句只能是一条语句,如需要使用多条语句,必须采用复合语句如需要使用多条语句,必须采用复合语句的形式。的形式。(3)循环体内一定要有能够改变表)循环体内一定要有能够改变表达式的值的操作,最终使其表达式的值变达式的值的操作,最终使其表达式的值变为为0,否则将形成无休止的,否则将形成无休止的“死死”循环。循环。例例5 5.11 求:求:1+2+3+n的累加求和的累加求和的值。的值。问题分析:问题分析:(1)我们首先需要设置一个存放累)我们首先需要设置一个存放累加求和的变量加求和的变量sum,每一次加一个数放入,每一次加一个数放入变量变量sum中;中;(2)再设置一个存放加数的变量)再设置一个存放

6、加数的变量i,每一次累加时被加的数均需比前一个数大每一次累加时被加的数均需比前一个数大1;(3)最后还需设置一个结束累加的)最后还需设置一个结束累加的变量变量n,确定累加到什么数为止。,确定累加到什么数为止。根据以上分析,写出源程序如下:根据以上分析,写出源程序如下:main()int i,n,sum;i=1;sum=0;printf(Please input n:);scanf(%d,&n);while(i=n)/*累加的数累加的数i 小于或等小于或等于终止数于终止数n就循环累加,否则结束循环就循环累加,否则结束循环*/sum=sum+i;i+;printf(sum=%dn,sum);说明说

7、明(1)存放累加求和的变量)存放累加求和的变量sum,说明,说明后必须赋初值,一般为后必须赋初值,一般为0,否则由于说明的,否则由于说明的变量其原有初值不确定,导致结果有误。变量其原有初值不确定,导致结果有误。(2)程序中)程序中sum=sum+i;语句是一个语句是一个累加求和功能的语句,它是将变量累加求和功能的语句,它是将变量sum中中的数值加上变量的数值加上变量i中的数值,求和后再放入中的数值,求和后再放入变量变量sum中,此时变量中,此时变量sum中存放的数值已中存放的数值已经变为新的数值,原有数值已被覆盖掉。经变为新的数值,原有数值已被覆盖掉。以上程序运行情况如下:以上程序运行情况如下

8、:Please input n:100 sum=5050do-while 循环语句的形式如下:循环语句的形式如下:do 循环体语句循环体语句 while(表达式)(表达式);do-while语句的执行过程如图语句的执行过程如图5-2所示。所示。图图5-2 do-while语句的执行过程语句的执行过程说明说明(1)用)用do-while语句构成的仍是语句构成的仍是“当当型循环型循环”结构。它的特点是:结构。它的特点是:“先执行,先执行,后判断后判断”。遇到。遇到do关键字后,首先执行循关键字后,首先执行循环体语句,然后计算表达式的值,如表达环体语句,然后计算表达式的值,如表达式的值为非式的值为非

9、0,则继续执行循环体语句,然,则继续执行循环体语句,然后再计算表达式的值,如表达式的值为后再计算表达式的值,如表达式的值为0,则结束循环,执行则结束循环,执行do-while语句后面的语语句后面的语句。因此这种循环结构,最少也可以执行句。因此这种循环结构,最少也可以执行一次循环体语句。一次循环体语句。(2)循环体语句仍然只能是一条语)循环体语句仍然只能是一条语句,如需要使用多条语句,必须采用复合句,如需要使用多条语句,必须采用复合语句的形式。语句的形式。(3)循环体语句中也一定要有改变)循环体语句中也一定要有改变表达式的值的操作,最终使其表达式的值表达式的值的操作,最终使其表达式的值变为变为0

10、,结束循环。否则将成为,结束循环。否则将成为“死死”循环。循环。(4)在关键字)在关键字while的小括号的后面,的小括号的后面,一定要加分号一定要加分号“;”,千万不能忘记,它,千万不能忘记,它表示表示do-while语句到此结束。语句到此结束。例例 5 5.2 2 求:求:n!,即 计 算,即 计 算123n的值。的值。源程序如下:源程序如下:main()int i,n,s;i=1;s=1;printf(Please input n:);scanf(%d,&n);do s=s*i;/*使用使用“累乘累乘”的公式的公式*/i+;while(i=n);printf(%d!=%dn,n,s);说

11、明说明(1)存放累乘求和的变量)存放累乘求和的变量s,说明后,说明后必须赋初值,一般为必须赋初值,一般为1,否则由于说明的变,否则由于说明的变量其原有初值不确定,导致结果有误。量其原有初值不确定,导致结果有误。(2)程序中)程序中s=s*i;语句是一个累乘语句是一个累乘求和功能的语句,它是将变量求和功能的语句,它是将变量s中的数值乘中的数值乘上变量上变量i中的数值,累乘后再放入变量中的数值,累乘后再放入变量s中,中,此时变量此时变量s中存放的数值已经变为新的数值,中存放的数值已经变为新的数值,原有数值已被覆盖掉。原有数值已被覆盖掉。以上程序运行情况如下:以上程序运行情况如下:Please in

12、put n:5 5!=120for循环语句的形式如下:循环语句的形式如下:for(表达式表达式1;表达式;表达式2;表达式;表达式3)循环体语句循环体语句for语句的执行过程如图语句的执行过程如图5-3所示。所示。图图5-3 for语句的执行过程语句的执行过程说明说明(1)由图)由图5-3可知,可知,for循环语句的特循环语句的特点仍是点仍是“先判断,后执行循环体先判断,后执行循环体”。遇到。遇到for关关键字,先计算表达式键字,先计算表达式1的值,然后再的值,然后再判断表达式判断表达式2的值,如其值为非的值,如其值为非0,则执行,则执行循环体语句,执行完循环体语句后,再来循环体语句,执行完循

13、环体语句后,再来计算表达式计算表达式3的值,然后再判断表达式的值,然后再判断表达式2的的值。如其值为值。如其值为0,则结束,则结束for循环语句,执循环语句,执行行for循环语句后面的语句。循环语句后面的语句。(2)循环体语句仍然只能是一条语)循环体语句仍然只能是一条语句,必要时可采用复合语句的形式。句,必要时可采用复合语句的形式。(3)此结构仍需最终使表达式)此结构仍需最终使表达式2的值的值变为变为0,以结束循环。否则将会造成,以结束循环。否则将会造成“死死”循环。循环。(4)for语句的表示形式相当灵活,语句的表示形式相当灵活,其中:表达式其中:表达式1和表达式和表达式3均可省略,但一均可

14、省略,但一定要确保表达式定要确保表达式2最终值等于最终值等于0。表达式。表达式1或或表达式表达式3省略后,其分号省略后,其分号“;”必须有,不必须有,不能省略,即:能省略,即:for(;表达式表达式2;)循环体语句循环体语句(5)通常情况下:表达式)通常情况下:表达式1代表循环代表循环控制变量的初值,表达式控制变量的初值,表达式2代表循环控制变代表循环控制变量的终值,而表达式量的终值,而表达式3代表循环控制变量的代表循环控制变量的增量,例如:求增量,例如:求n!,可简单表示成:,可简单表示成:s=1;for(i=1;i=n;i+)s=s*i;for循环和循环和while循环语句结构均是先循环语

15、句结构均是先判断循环条件,条件成立,才执行循环体,判断循环条件,条件成立,才执行循环体,具有具有“先判断,后执行先判断,后执行”特点;而特点;而do-while循环语句则是先执行循环体,然后再循环语句则是先执行循环体,然后再判断循环条件,具有判断循环条件,具有“先执行,后判断先执行,后判断”的特点。的特点。例例5 5.8 8 求求2100之间的所有素数,并输出。之间的所有素数,并输出。问题分析问题分析判断一个数是否是素数的方法,我们判断一个数是否是素数的方法,我们在前面已经介绍了。设某一个数为在前面已经介绍了。设某一个数为a,判断,判断该数是否为素数,就是用这个数分别被该数是否为素数,就是用这

16、个数分别被2去除,如果都不能被除尽,则该数为素数,去除,如果都不能被除尽,则该数为素数,如有一次被除尽,则该数就不是素数。如有一次被除尽,则该数就不是素数。现需求现需求2100之间的所有素数,判断之间的所有素数,判断素数的方法是相同的,只要利用循环依次素数的方法是相同的,只要利用循环依次从从2100之间取一个数,判断是否是素数,之间取一个数,判断是否是素数,如是素数就输出显示,不是素数就继续判如是素数就输出显示,不是素数就继续判断下一个数,直至判断到断下一个数,直至判断到100为止。为止。源程序如下:源程序如下:#include math.hmain()int n,i,j,flag,x=0;f

17、or(i=2;i=100;i+)flag=1;j=2;n=(int)sqrt(double)i);while(flag&j3时,进入内层循环,若时,进入内层循环,若i为素数,为素数,flag的值不变,仍为的值不变,仍为1,若,若i不是素数,不是素数,flag的值的值变为变为0,并立即结束内循环。当退出内循环,并立即结束内循环。当退出内循环后,后,if语句判断语句判断flag的值为的值为1时,输出素数时,输出素数i;若若i不是素数,不是素数,flag的值变为的值变为0,不做输出。,不做输出。外层循环继续取下一个数,通过内层外层循环继续取下一个数,通过内层循环判断是否是素数,直到外层循环取的循环判

18、断是否是素数,直到外层循环取的数数i大于大于100后,结束外层循环,结束程序后,结束外层循环,结束程序运行。运行。通过以上例子我们看到,外层循环的通过以上例子我们看到,外层循环的目的是,每次循环分别从目的是,每次循环分别从2100的数中取的数中取某一个数,已知循环的次数为某一个数,已知循环的次数为99次,采用次,采用for循环比较合适;而内层循环是判断某个循环比较合适;而内层循环是判断某个数是否是素数,在每一次的除法中,当某数是否是素数,在每一次的除法中,当某一次除法运算出现余数为一次除法运算出现余数为0时,表明该数不时,表明该数不是素数,立即结束内层循环,所以内层循是素数,立即结束内层循环,

19、所以内层循环次数事先难以确定,因此采用环次数事先难以确定,因此采用while循环循环最为适当。最为适当。在解决多重循环问题时,往往需要具在解决多重循环问题时,往往需要具体问题具体分析,根据实际问题的内容和体问题具体分析,根据实际问题的内容和特点,采用不同的循环结构。因此在解决特点,采用不同的循环结构。因此在解决多重循环问题时,三种循环结构并举,适多重循环问题时,三种循环结构并举,适合哪一种循环结构,就采用哪一种循环结合哪一种循环结构,就采用哪一种循环结构。读者可在实践过程中灵活使用。构。读者可在实践过程中灵活使用。continue语句的一般形式:语句的一般形式:continue;该语句的功能是

20、:结束本次循环。也该语句的功能是:结束本次循环。也就是说,不管在该语句的后面是否还有其就是说,不管在该语句的后面是否还有其他执行语句,遇到他执行语句,遇到continue;语句,本次;语句,本次循环到此结束,接着进行下一次循环的判循环到此结束,接着进行下一次循环的判断。断。例例5 5.9 将将10100之内的不能被之内的不能被5整除的数整除的数输出。输出。源程序如下:源程序如下:main()int n;for(n=10;n=100;n+)if(n%5=0)continue;printf(%d,n);程序运行时,当程序运行时,当n能被能被5整除时,将执整除时,将执行行continue;语句,这次

21、循环到此结束,;语句,这次循环到此结束,不再执行不再执行printf(%d,n);语句,只有当语句,只有当n不能被不能被5整除时,才执行整除时,才执行printf(%d,n);语句。语句。break语句的一般形式是:语句的一般形式是:break;在循环结构中使用在循环结构中使用break;语句,可;语句,可强制结束循环。不管循环条件是否成立,强制结束循环。不管循环条件是否成立,都将跳出它所在的本重循环,结束本重循都将跳出它所在的本重循环,结束本重循环的执行。注意:它不能跳出多重循环,环的执行。注意:它不能跳出多重循环,只能跳出本重循环。只能跳出本重循环。例例5 5.110 使用使用break语

22、句的例子。语句的例子。源程序如下:源程序如下:main()int i,s;s=0;for(i=1;i5)break;printf(s=%dn,s);此例中,如果没有此例中,如果没有break语句,则循环语句,则循环将执行将执行10次;而含有次;而含有break语句后,当循环语句后,当循环执行到第执行到第3次时,次时,i等于等于3,s的值为的值为6,if语语句的条件成立,将会执行到句的条件成立,将会执行到break语句,于语句,于是是for循环到此结束,提前终止了循环。循环到此结束,提前终止了循环。break语句只能用于循环语句和语句只能用于循环语句和switch语句中。语句中。break语句是终止循环,而语句是终止循环,而continue语语句只是结束本次循环,两条语句功能不同,句只是结束本次循环,两条语句功能不同,请不要混淆。请不要混淆。读者可能在上机操作时,遇到了一个读者可能在上机操作时,遇到了一个头疼的问题,怎么修改程序也总是报错,头疼的问题,怎么修改程序也总是报错,不知从何入手。这就是程序调试的问题。不知从何入手。这就是程序调试的问题。归纳起来,程序出错大致有三种情况:归纳起来,程序出错大致有三种情况:编译时出错、运行时出错和运行结果不符编译时出错、运行时出错和运行结果不符合要求。合要求。

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C语言课件第05章.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|