内容正文:
YCF
(中职)计算机程序设计(C语言)第五章第6节教学课件工信版
1
第五章 循环结构程序设计
第5.6循环结构程序设计应用举例
5.6.1循环次数类应用
5.6.2文本作图类应用
5.6.3素数类应用
5.6.4穷举法应用
5.6.5递推法应用
5.6.1循环次数类应用
有关循环次数类问题的求解,特别是多重循环中循环次数的求解,既是循环结构程序设计的重点也是难点,解此类问题时分两种情况:
(1)循环次数固定,直接采用各层循环次数相乘。
(2)循环次数随循环变量值的变化而变化,则需要逐层加以计算后累加出各层循环次数,一般要用到“口算”、“心算”来模拟计算机的运算过程。
5.6.1循环次数类应用
【例5.7】写出下面程序的运行结果。
#include <stdio.h>
main()
{
int k,j,m,e=0,f=0,g;
for( j=1;j<=5;j++)
{ e++;
f++;
g=0;
for(k=1;k<=7;k++)
{ e+=1;
g+=2;
for(m=1;m<=10;m++)
f+=1;
e+=1;
}
g+=1;
}
printf(“e=%d,f=%d,g=%d”,e,f,g);
}
5.6.1循环次数类应用
【例5.7】写出下面程序的运行结果。
程序运行结果:
e=75,f=355,g=15
说明:这是一个三重循环结构的问题,且每层循环的次数是固定的,遇到此类问题,应针对printf输出项一个一个变量值进行求解,可以按输出顺序,先求e的值,找出所有e的地方进行求解,然后再求f和g的值。
首先分析外层、中间层和内层循环中的循环次数,则根据循环次数公式n=(b-a)/c+1则可以得出外层循环次数=(5-1)/1+1=5
中间层循环次数=外层循环次数*中间层循环次数=5*((7-1)/1+1)=35
内层循环次数=中间层循环次数*内层循环次数=35*((10-1)/1+1)=350
再分析e,f,g三个变量在各层的中的每循环一次增量大小和次数。
e是一个计数器,它的值=在外层循环中每次增加1*次数5=5,在中间层循环中两次都加1为2*中间层次数35=70,内层循环中没有e,所以e=5+70=75。
f也是一个计数器,同样在外层循环中每次加1,则得5,中间层循环中没有,内层循环每次增加1*350=350,所以f=5+350=355。
g还是一个计数器,由于在外层循环中,每次都赋0,所以只有在最后一次外循环执行时g的值才被累加到值存入内存单元中,所以g的值只有一次中间层循环2*7=14加一次外循环1*1=1,所以g=14+1=15。
5.6.1循环次数类应用拓展练习
通过本例的学习,我们了解了循环结构程序的执行过程,当然,此例是循环次数固定的情况,运算起来还相对简单一些,如果多层循环的次数都不固定,而是随着内外循环变量值的变化而变化,那么循环次数又如何求解呢?
5.6.1循环次数类应用拓展练习
例如:写出下面程序的运行结果。
#include <stdio.h>
main()
{
int k,j,m,e=0,f=0;
for( j=1;j<=3;j++)
{
e++;
for(k=1;k<=j;k++)
{
e+=1;
for(m=1;m<=k;m++)
f+=1;
}
}
printf(“e=%d,f=%d”,e,f);
}
程序运行结果:
e=9,f=10
说明:这也是一个三重循环结构的问题,且每层循环的次数是不固定的,遇到此类问题,还是针对printf输出项一个一个变量值进行求解,可以按输出顺序,先求e的值,找出所有e的地方进行求解,然后再求f的值,但是求解过程要细心。
e值求解,它的值=在外层循环中每次增加1*次数3=3,在中间层循环中次数跟i的值有关,当j=1时,循环1次,j=2时,循环2次,j=3时,循环3次,共循环1+2+3=6次,每循环一次增加1*6=6,内层循环没有e,所以e=3+6=9。
f值求解,在外层和中间层都没有,内层循环每次增加1,内循环次数跟外层、中间层循环变量取值有关:
当j=1时,则k=1,则m共循环1次;
当j=2时,则k=1、k=2,则m=1循环1次+m=1、m=2循环2次,共循环1+2=3次;
当j=3时,则k=1、k=2、k=3,则当k=1,m=1循环1次;当k=2,m=1、m=2循环共2次;当k=3,m=1、m=2、m=3