实验四循环结构程序设计(2学时)
目的要求
(1)掌握C语言for、while、do…while循环编程。
(2)掌握在程序设计过程中用循环的方法实现各种算法(如穷举、迭代、递推等)。
(3)巩固所学理论知识的同时锻炼C语言编程能力。
上机内容
一般示例
【例1】e是自然对数的底数,是一个无限不循环小数2.71828……。e在科学技术中用的非常多。学习了高等数学之后,就会知道,许多结果和它有紧密联系,以e为底,许多式子都是最简的,用它是最“自然”的,所以叫自然对数。下面是一个计算e的近似值(使误差小于给定的δ)的程序。
#include <stdio.h>
void main()
{
double e=1.0,x=1.0,y,delta;
int i = 1;
printf(\n please input enter an error: );
scanf(%lf, &delta);
y = 1 / x;
while(y >= delta)
{
x = x * i;
y = 1 / x;
e = e + y;
++ i;
}
printf(%12.10lf\n,e);
}
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)原程序中while语句中的y >= delta,分别换成y > delta,y = delta, y < delta,y <= delta,观察程序运行将会有什么变化。
(4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。
(5)把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。
(6)把原程序改为用for循环来实现。
|
![]() | ![]() |
【例2】求5!你能不能对程序进行修改,使之能求n!? n从键盘输入。
【例3】求和s=1!+2!+3! 你能不能对程序进行修改,使之能求1!+2!+3!+……+n!? n从键盘输入。
![]() | ![]() |
【例4】求和s=1!+3!+5!。你能不能对程序进行修改,使之能求1!+3!+5!+…+(2*n-1)!? n从键盘输入。
![]() | ![]() | ||
![]() | ![]() |
【例5】求和s= 3+33+333. 你能不能对程序进行修改,使之实现教材中P129习题6.3要求的功能。要求n,a从键盘输入。
【例6】有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。运行并分析程序,然后画出程序流程图。
![]() | ![]() | ||
【例7】水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和。在1000以内的水仙花数共有4个,分别为:153、370、371、407。运行并分析程序,然后画出程序流程图。
![]() | ![]() | ||
【例8】如果一个自然数等于除它自身以外的各个正因子之和,则这个数叫做完全数。从1644年至1957年9月,经过许多著名数学家的辛勤劳动,共找到了十八个完数,第十八个完数约2000位。运行并分析程序,然后画出程序流程图。
![]() | ![]() |
6 its factors are 1,2,3
编程作业
下面的作业均要求画出程序流程图和写出源程序代码,并在电脑上运行通过。
1.辗转相除法又名欧几里德算法(Euclidean algorithm),是求两个正整数m,n(m>n)的最大公约数的算法。描述如下:
为什么余数里面一定就包含了两个正整数的最大公约数?
首先,假设m和n的最大公约数为q,那么m=aq,n=bq(m>n)
m=n*k+r,则r=m-nk=q(n-bk),因为n-bk>0 ,所以余数里面一定就包含了两个正整数的最大公约数。
请你编程实现利用辗转相除法求两个正整数m,n(m>n)的最大公约数,并求出最小公倍数。希望你的程序能实现不论m和n为何值(包括负整数),都能有正确的输出结果。
2.请你编写一个交互式程序,请求用户从键盘上输入3个整数k,m,n(k>1)。程序要计算出在m和n之间的所有能被k整除的整数之和。
3.班上有学生n名,从键盘上输入每名学生的年龄(整数),求班上所有学生的平均年龄,并保留到小数点后两位数字。
选做题
1.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。(习题6.2)
【思考】你能否修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数?
2.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩一个桃子了。请编程求第一天共摘了多少桃子。(习题6.10)
【思考】如果题目改为猴子每天吃了前一天剩下的一半后,再吃两个,那么程序该如何修改?
3.设计报选体育科目统计程序
设某学校在新生入学时,需报选体育选修科目。体育科目包括:篮球、排球、体操、兵乓球和网球。请为某班级(30人)统计报选各体育科目人数。
好的编程习惯
1.循环、分支层次最好不要超过5层。
2.一目了然的语句不要加注释。
3.注释可以与语句在同一行,也可以在上一行。