当前栏目:

高级语言程序设计-实验四 循环结构程序设计

时间:2015-04-29浏览:2068设置

实验四循环结构程序设计(2学时)

目的要求

1)掌握C语言forwhiledo…while循环编程。

2)掌握在程序设计过程中用循环的方法实现各种算法(如穷举、迭代、递推等)。

3)巩固所学理论知识的同时锻炼C语言编程能力。

上机内容

一般示例

【例1e是自然对数的底数,是一个无限不循环小数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循环来实现。

  






/*compute     e by for statement*/



  

  

  

  

  

  

  

  

  

  









文本框:/*compute 5!*/
#include <stdio.h>
void main()
{
	int n,t;
	n = 1;
	t = 1;
	while(t <= 5)
	{
		n = n * t;
		t = t + 1;
	}
	printf(“%d\n”,n);
}
文本框:/* compute n!*/




【例2】求5!你能不能对程序进行修改,使之能求n!? n从键盘输入。

【例3】求和s=1!+2!+3! 你能不能对程序进行修改使之能求1!+2!+3!+……+n!? n从键盘输入。








文本框:/*compute s=1!+2!+3!*/
#include <stdio.h>
void main()
{
	int n,s = 0,t = 1;
	for(n = 1;n <= 3;n ++)
	{
		t = t * n;
		s = s + t;
	}
	printf(“%d”,s);
}
文本框:/* compute s=1!+2!+3!+…+n!*/




【例4】求和s=1!+3!+5!你能不能对程序进行修改,使之能求1!+3!+5!+…+(2*n-1)!? n从键盘输入。

  








文本框:/*compute s=1!+3!+5!*/
#include <stdio.h>
void main()
{
	int s = 0,t,i,j;
	for(i = 1;i <= 3;i ++)
	{ 
		t = 1;
		for(j = 1;j <= 2 * i-1;j ++)
			t = t * j;
	    s = s + t;
	}
	printf(“%d”,s);
}
文本框:/* compute s=1!+3!+5!+…+(2*n-1)!*/













文本框:/*compute s= 3+33+333*/
#include <stdio.h>
void main()
{
	int s=0,t=3,i;
	for(i=1;i<=3;i++)
	{
		s=s+t;
		t=10*t+3;
	}
	printf(“%d”,s);
}
文本框:/* compute s=a+aa+aaa+……             */




【例5】求和s= 3+33+333. 你能不能对程序进行修改,使之实现教材中P129习题6.3要求的功能。要求na从键盘输入。

【例6】有一数列:2/13/25/38/5求出这个数列的前10项之和。运行并分析程序,然后画出程序流程图。








文本框:#include <stdio.h>
void main()
{
	int n,t;
	float a=2,b=1,s=0;
	for(n=1;n<=10;n++)
	{ 
		s=s+a/b;
		t=a;
		a=a+b;
		b=t;
	}
	printf(“%f\n”,s);
}
文本框:程序流程图






  

【例7】水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和。在1000以内的水仙花数共有4个,分别为:153370371407。运行并分析程序,然后画出程序流程图。








文本框:#include <stdio.h>
void main()
{ 
	int i,j,k,n;
	for(n = 100;n <= 1000;n ++)
	{
		i = n/100;
		j = n/10-i*10;
		k = n%10;
	    if(n== i*i*i+j*j*j+k*k*k)
		    printf(“ %d ”,n);
	}
}
文本框:程序流程图






【例8如果一个自然数等于除它自身以外的各个正因子之和,则这个数叫做完全数。从1644年至19579月,经过许多著名数学家的辛勤劳动,共找到了十八个完数,第十八个完数约2000位。运行并分析程序,然后画出程序流程图。








文本框:#include <stdio.h>
void main()
{ 
	int n,s,j;
	for(n = 1;n <= 1000;n ++)
	{
		s = 0;
		for(j = 1;j < n;j ++)
			if (n % j == 0)
			   s = s + j;
		if (s == n)
		{
			printf(“%d its factors are ”,s);
			for (j = 1;j < n;j ++)
				if (n % j == 0)
				  printf(“%d “,j);
			printf(“\n”);
	   }
   }
}
文本框:程序流程图




6 its factors are 1,2,3

  

编程作业

下面的作业均要求画出程序流程图和写出源程序代码,并在电脑上运行通过。

1.辗转相除法又名欧几里德算法(Euclidean algorithm),是求两个正整数m,n(m>n)的最大公约数的算法。描述如下:

为什么余数里面一定就包含了两个正整数的最大公约数?

首先,假设m和n的最大公约数为q,那么m=aqnbqm>n

m=n*k+r,则rm-nkq(n-bk),因为nbk0 ,所以余数里面一定就包含了两个正整数的最大公约数。

请你编程实现利用辗转相除法求两个正整数m,n(m>n)的最大公约数,并求出最小公倍数。希望你的程序能实现不论mn为何值(包括负整数),都能有正确的输出结果。

  

  

  

  

  

  

  

  

  

  

  

  

  

  

2.请你编写一个交互式程序,请求用户从键盘上输入3个整数kmn(k>1)。程序要计算出在mn之间的所有能被k整除的整数之和。

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

3.班上有学生n名,从键盘上输入每名学生的年龄(整数),求班上所有学生的平均年龄,并保留到小数点后两位数字。

  

  

  

  

  

  

  

  

  

  

  

  

选做题

1.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。(习题6.2

【思考】你能否修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数?

2.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩一个桃子了。请编程求第一天共摘了多少桃子。(习题6.10

【思考】如果题目改为猴子每天吃了前一天剩下的一半后,再吃两个,那么程序该如何修改?

3.设计报选体育科目统计程序

设某学校在新生入学时,需报选体育选修科目。体育科目包括:篮球、排球、体操、兵乓球和网球。请为某班级(30人)统计报选各体育科目人数。

  

好的编程习惯

1.循环、分支层次最好不要超过5层。

2.一目了然的语句不要加注释。

3.注释可以与语句在同一行,也可以在上一行。


同栏目信息

其它相关信息