实验四 循环结构程序设计 
【例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