内容正文:
编程语言基础——C语言
4.6 循环程序设计实例
第4章 循环结构程序设计实例
高等教育出版社
教学目标
一
复习单循环结构、多重循环结构的命令格式及功能。
1
2
利用循环结构命令语句进行结构化程序设计。
3
培养学生对所学知识的总结概括能力。
教学重难点
二
让学生能够熟练地掌握、灵活地运用循环结构进行结构化程序设计,并且培养学生的创新能力。
1
2
够使学生将以前所学习过的知识有机地结合在一起,并且充分发挥自己的创造力,利用三种基本结构进行编程。
导入新课
三
许多实际应用的程序都要用到循环处理,在学习了本章的基本内容之后,我们在这里着重介绍两个最基本、最常用的循环处理算法----穷举法和递推法。
穷举法
“穷举法”也称为“枚举法”或“试凑法”, 即采用循环结构将所有可能出现的情况一一进行测试,判断是否满足给定的条件。
新知讲授
四
穷举法
4.6.1
题目:从键盘输入全班的学习成绩,统计出最高分、最低分和平均分。
分析:由于不知道学生人数,程序中用一个负数来作为结束输入成绩的标志。
例 极值问题
main()
{int x, max, min, n;
float sum=0;
printf("Enter x(-1 to end): ");
scanf("%d",&x);
max=x; min=x; n=0;
while(x>=0)
{sum = sum + x; n= n+1;
if(x>max) max = x;
if(x<min) min = x;
scanf("%d", &x);
}
if(max>0)
printf("max=%d, min=%d, aver=%f
", max, min, sum/n);
}
运行结果如下:
Enter x(-1 to end): 87 76 53 99 58 -1<CR>
max=99, min=53, aver=74.599998
例4-9 判断一个数是否是素数。
分析:素数又称为质数,就是除了能被1和它本身整除之外,不能被其他自然数整除的自然数。例如,自然数“36",如果要测试这个数是否为素数,从定义出发,就应该对2~35之间的数进行测试。但是,可以发现“36 %2 ==0”时,也就意味着“36 %18 ==0”,因此得到一对约数(2,18)。 对于36,这样的约数对还有(3,12),(4,9),(6,6),(9,4),(12,3),( 18,2)。当找到
(6,6)后,以后的约数就都重复了。从这个例子可以看出,循环大可不必运行到“num-1",而
是将循环的次数控制到 就行。
#include <math.h>
main( )
{ int num, j, tag=1, m; //设一个标志变量tag,初值为1
printf("请输入一个自然数:" );
scanf("%d", &num );
m=sqrt( num );
for(j=2;j<= m;j++)
if( num %j==0) //num被j整除
{ tag=0; //改变tag值
break;
}
if(tag==1 )
printf("%d是素数
", num );
else
printf("%d 不是素数
", num );
}
穷举法
4.6.1
运行结果如图所示:
说明:程序中用tag变量(初值为1)来保存(判定)自然数num是否为素数,进入for循环后,一旦发现num不是素数,就将它置为0,并退出for 循环。如果for循环结束后, tag值始终为1,则num是素数,否则num不是素数。
穷举法
4.6.1
例4-10 找出100~200之间的所有素数。
分析:在例4-9的基础上,用一个嵌套的for循环来实现。100~200之间的素数一定是奇数。
#include <stdio.h>
#include <math.h>
main( )
{ int num,j, tag, m, cnt =0;
for( num= 101; num < 200; num += 2) //num增量为