C程序设计实验指导书 - 2014版 下载本文

实验四 循环结构程序设计

【例2】求5!你能不能对程序进行修改,使之能求n!? n从键盘输入。 /*compute 5!*/ #include void main() { int n,t; n = 1; t = 1; while(t <= 5) { n = n * t; t = t + 1; } printf(―%d\\n‖,n); } /* compute n!*/ 【例3】求和s=1!+2!+3! 你能不能对程序进行修改,使之能求1!+2!+3!+……+n!? n从键盘输入。

/*compute s=1!+2!+3!*/ #include 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!*/ 23

实验四 循环结构程序设计

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

/*compute s=1!+3!+5!*/ #include 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)!*/

【例5】求和s= 3+33+333. 你能不能对程序进行修改,使之实现教材中P129习题6.3要求的功能。要求n,a从键盘输入。 /*compute s= 3+33+333*/ #include 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+…… */ 24

实验四 循环结构程序设计

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

#include 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个,分别为:153、370、371、407。运行并分析程序,然后画出程序流程图。

#include void main() { int i,j,k,n; for(n = 100;n <= 1000;n ++) { i = n/100; j = n/10-i*10; k = n; if(n== i*i*i+j*j*j+k*k*k) printf(― %d ‖,n); } } 程序流程图 25

实验四 循环结构程序设计

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

#include 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‖); } } }

程序流程图 编程作业

下面的作业均要求画出程序流程图和写出源程序代码,并在电脑上运行通过。 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为何值(包括负整数),都能有正确的输出结果。

nm%n?0?gcd(m,n)???gcd(n,m%n)m%n!?026