收藏 分销(赏)

循环结构程序设计.doc

上传人:s4****5z 文档编号:9434833 上传时间:2025-03-26 格式:DOC 页数:27 大小:54.50KB 下载积分:10 金币
下载 相关 举报
循环结构程序设计.doc_第1页
第1页 / 共27页
循环结构程序设计.doc_第2页
第2页 / 共27页


点击查看更多>>
资源描述
循环结构程序设计 1、求1+4+7+……+100之和。 解法1: main() {int s,i;  s=0;  for(i=1;i<=100;i+=3)    s=s+i;  printf("s=%d\n",s); } 解法2: main() {int s,i;   s=0;  i=1;  while(i<=100)  {s=s+i;   i+=3;  }  printf("s=%d\n",s); } 2、求1到100之间的奇数之和与偶数之和。 解法1: main() {int s1,s2,i;  s1=s2=0;   for(i=1;i<=100;i++)  {if(i%2==1)     s1=s1+i;  /*奇数之和*/    else     s2=s2+i;  /*偶数之和*/   }  printf("s1=%d,s2=%d\n",s1,s2); } 解法2: main() {int s1,s2,i;  s1=s2=0;   for(i=1;i<=99;i+=2)    s1=s1+i;  /*奇数之和*/  for(i=2;i<=100;i+=2)    s2=s2+i;  /*偶数之和*/   }  printf("s1=%d,s2=%d\n",s1,s2); } 解法3: main() {int s1,s2,i;  s1=s2=0;  i=1;  while(i<=99)  {s1=s1+i;  /*奇数之和*/   i++;   s2=s2+i;  /*偶数之和*/   i++;  }  printf("s1=%d,s2=%d\n",s1,s2); } 3、用循环程序求10的阶乘。 main() {long p;  /*int型取值范围太小*/  int i;  p=1;  /*不能写作p=0;*/  for(i=1;i<=10;i++)    p=p*i;  printf("p=%ld\n",p); } 4、求1*3*5*...*19之积。 main() {float p;  int i;  p=1;  for(i=1;i<=19;i+=2)    p=p*i;  printf("p=%f\n",p); } 5、从键盘输入一个正整数n,求1+2+3+...+n之和并输出。 main() {int i,n;  long s;   s=0;  scanf("%d",&n);  for(i=1;i<=n;i++)    s=s+i;  printf("s=%ld\n",s); } 6、从键盘输入一个正整数,求出其阶乘并输出。 解法1: main() {float p;  int i,k;  p=1;  scanf("%d",&k);  for(i=1;i<=k;i++)    p=p*i;  printf("p=%f\n",p); } 解法2: main() {float p;  int k;  p=1;  scanf("%d",&k);  while(k>=1)  {p=p*k;   k--;  }  printf("p=%f\n",p); } 6A、求1-1/3+1/5-1/7+...-1/99+1/101之和。 解法1: main() {float s1,s2,s;  int i;  s1=s2=0;   for(i=1;i<=101;i+=4)    s1=s1+1.0/i;  /*正数之和*/  for(i=3;i<=99;i+=4)      s2=s2+1.0/i;  /*负数之和*/ s=s1-s2;  printf("s=%f\n",s); } 解法2: main() {int i,p;  float s;  s=0;  p=1;   for(i=1;i<=101;i+=2)   {s=s+p*1.0/i;    /*p用于控制累加项的正负*/    p=-p;  /*改变正负号*/   }  printf("s=%f\n",s); } 6B、求20+21+22+...+263之和。 解法1: #include <math.h> main() {float s;  int i;  s=0;  for(i=0;i<=63;i++)    s=s+pow(2,i);   /*2的i次幂*/  printf("s=%f\n",s); } 解法2: main() {float s,t;  int i;  s=0;  t=1;  for(i=0;i<=63;i++)    {s=s+t;      t=t*2;   }  printf("s=%f\n",s); } 7、求12+32+52+...+992之和。 main() {long s;  int i;  s=0;  for(i=1;i<=99;i+=2)    s=s+i*i;  printf("s=%ld\n",s); } 8、求1+1/3+1/5+...+1/99之和。 main() {int i;  float s;  s=0;  for(i=1;i<=99;i+=2)    s=s+1.0/i;  /*不能写作1/i*/  printf("s=%f\n",s); } 9、求1+1/3+1/5+...的前20项之和。 main() {int i;  float s;  s=0;  for(i=1;i<=20;i++)    s=s+1.0/(2*i-1);  /*不能写作1/(2*i-1)*/  printf("s=%f\n",s); } 10、求1+1/3+1/5+...之和,直到某一项的值小于10-6时停止累加。 main() {long n;  /*不能写作int n*/  float s;  s=0;  n=1;  while(1.0/n>=1e-6)  {s=s+1.0/n;  /*不能写作1/n*/    n+=2;  }  printf("s=%f\n",s); } 11、已知序列1/2,2/3,3/5,5/8,...,求其前20项之和。 解法1: main() {float s,a,b,t;  int i;  s=0;  a=1;  b=2;  for(i=1;i<=20;i++)  {s=s+a/b;    t=a;    a=b;   /*分子为前一项分母*/   b=b+t; /*分母为前一项分子分母之和*/  }   printf("s=%f\n",s); } 解法2: main() {float s,a,b;  int i;  s=0;  a=1;  b=2;   for(i=1;i<=20;i++)   {s=s+a/b;  b=a+b;  /*分母为前一项分子分母之和*/     a=b-a; /*分子为前一项分母*/  }   printf("s=%f\n",s); } 12、求1!+2!+3!+...+20!之和。 解法1: main() {float s,p;  int n,k;  s=0;    /*该语句必须在外循环之前*/  for(n=1;n<=20;n++) {p=1;    /*该语句必须在外循环体内部*/   for(k=1;k<=n;k++)   /*求n的阶乘*/     p=p*k;   s=s+p;    }     printf("s=%f\n",s); } 解法2: main() {float s,p;  int n;  s=0;  p=1;    /*该语句必须在循环之前*/  for(n=1;n<=20;n++)   {p=p*n;   /*求n的阶乘*/       s=s+p;   }     printf("s=%f\n",s); } 13、求1!+5!+9!+...+21!之和。 main() {float s,p;  int n,k;  s=0;    /*该语句必须在外循环之前*/  for(n=1;n<=21;n+=4)   {p=1;    /*该语句必须在外循环体内部*/    for(k=1;k<=n;k++)   /*求n的阶乘*/      p=p*k;   s=s+p;  }     printf("s=%f\n",s); } 14、从键盘两个整数,求其最大公约数和最小公倍数。 解法1:辗转相除法。 ⑴以其中一个数作被除数,另一个数作除数,相除求余数。 ⑵若余数不为0,则以上一次的除数作为新的被除数,以上一次的余数作为新的除数,继续求余数。 ⑶直至余数为0时,对应的除数就是最大公约数。 main() {int m,n,r,g,h,p;  scanf("%d%d",&m,&n);  p=m*n;  while((r=m%n)!=0)   /*余数不为0时循环*/  {m=n;   /*以上一次的除数作为新的被除数*/   n=r;   /*以上一次的余数作为新的除数*/  }  g=n;    /*余数为0时的除数即最大公约数*/  h=p/g;   /*两数之积除以最大公约数就是最小公倍数*/  printf("g=%d,h=%d\n",g,h); } 解法2:辗转相除法。 main() {int m,n,r,g,h,p;  scanf("%d%d",&m,&n);  p=m*n;  while(1)   /*循环条件总为真*/  {r=m%n;   if(r==0)  break;   /*余数为0时终止循环*/  m=n;   /*以上一次的除数作为新的被除数*/   n=r;   /*以上一次的余数作为新的除数*/  }  g=n;    /*余数为0时的除数即最大公约数*/  h=p/g;   /*最小公倍数*/  printf("g=%d,h=%d\n",g,h); } 解法3: main() {int m,n,g,h,i;  scanf("%d%d",&m,&n);  for(g=m;g>=1;g--) {if((m%g==0)&&(n%g==0))   /*此时g是最大公约数*/     break; } for(i=1;i<=n;i++) {h=i*m;   /*h是m的倍数*/  if(h%n==0)   /*此时h是最小公倍数*/     break; }  printf("g=%d,h=%d\n",g,h); } 15、求a+aa+aaa+...(如2+22+222+2222+22222)前n项之和。 main() {int a,n,i;  long t,s;  scanf("%d%d",&a,&n);  t=a;  for(i=1;i<=n;i++)  {s=s+t;   t=t*10+a;   /*求得下一项*/  }  printf("s=%ld\n",s); } 16、从键盘输入一个正整数,将该数前后倒置后输出。 解法1: main() {int a,d;  scanf("%d",&a);  while(a!=0)  {d=a%10;   /*求得个位*/   printf("%1d",d);   /*输出宽度为1*/   a=a/10;   /*去掉原来的个位*/  } } 解法2: main() {int a,b,d;  scanf("%d",&a);  b=0;/*b用于存放倒置之后的数*/  while(a!=0)  {d=a%10;   /*求得个位*/   b=b*10+d;   a=a/10;   /*去掉原来的个位*/  }  printf("%d\n",b); } 17、求出所有的水仙花数(各位数字立方之和等于数本身的三位整数)并输出。 main() {int  x,a,b,c;  for(x=100;x<=999;x++)  {a=x/100;  /*x的百位*/   b=x%100/10;  /*x的十位*/   c=x%10; /*x的个位*/   if(a*a*a+b*b*b+c*c*c==x)      printf("%d\n",x);   } } 18、从键盘输入一个正整数,判断是否是完数(真因子之和等于数本身)。 main() {int  m,s,i;  scanf("%d",&m);  s=0;  for(i=1;i<=m-1;i++)   {if(m%i==0) /*求出所有真因子*/       s=s+i;   }  if(s==m)     printf("%d is a complete number.\n",m); else    printf("%d isn't a complete number.\n",m); } 19、用双重循环打印如下图形。    *   ***  ***** ******* #define N  4 main() {int  i,j,k;  for(i=1;i<=N;i++) {for(j=1;j<=N-i;j++)     printf(" ");  /*打印N-i个空格*/  for(k=1;k<=2*i-1;k++)     printf("*");  /*打印2*i-1个星号*/  printf("\n"); }   } 20、用双重循环打印如下图形。    *   ***  ***** *******  *****   ***    * 解法1: main() {int  i,j,k;  for(i=1;i<=4;i++)   /*输出前4行*/ {for(j=1;j<=4-i;j++)     printf(" ");  for(k=1;k<=2*i-1;k++)     printf("*");  printf("\n"); }  for(i=3;i>=1;i--)   /*输出后3行*/ {for(j=1;j<=4-i;j++)     printf(" ");  for(k=1;k<=2*i-1;k++)     printf("*");  printf("\n"); }   } 解法2: main() {int  i,j,k;  for(i=1;i<=4;i++)   /*输出前4行*/ {for(j=1;j<=4-i;j++)     printf(" ");  for(k=1;k<=2*i-1;k++)     printf("*");  printf("\n"); }  for(i=1;i<=3;i++)   /*输出后3行*/ {for(j=1;j<=i;j++)     printf(" ");   for(k=1;k<=2*(4-i)-1;k++)     printf("*");  printf("\n"); }   } 21、从键盘输入一个正整数,判断其是否是素数。 解法1: main() {int m,i;  scanf("%d",&m);  for(i=2;i<=m-1;i++)   {if(m%i==0)      break;   }  if(i>m-1)    printf("%d是一个素数.\n);  else    printf("%d不是一个素数.\n); } 解法2: #include <math.h> main() {int m,i,k;  scanf("%d",&m);  k=sqrt(m);  for(i=2;i<=k;i++)   {if(m%i==0)      break;   }  if(i>k)    printf("%d is a prime number.\n);  else    printf("%d is not a prime number.\n); } 解法3: #include <math.h> main() {int m,i,k;  scanf("%d",&m);  k=sqrt(m);  for(i=2;i<=k;i++)   {if(m%i==0)     {printf("%d is not a prime number\n",m);       return;  /*退出main函数*/     }        }  printf("%d is a prime number\n",m); } 解法4: #include <math.h> main() {int m,i,k,flag=0;  /*flag是标志变量,flag==0表示不能整除*/  scanf("%d",&m);  k=sqrt(m);  for(i=2;i<=k;i++)   {if(m%i==0)     {flag=1;   /*能除尽则不是素数*/       break;     }       }  if(flag==0)       printf("%d是一个素数.\n);  else    printf("%d不是一个素数.\n); } 22、从键盘输入一行字符,若为小写字母,则转化为大写字母;若为大写字母,则转化为小写字母;否则转化为ASCII码表中的下一个字符。 解法1: #include  <stdio.h> main() {char ch;  ch=getchar();  while(ch!='\n')  {if(ch>='a'&&ch<='z')       ch=ch-32;    else  if(ch>='A'&&ch<='Z')        /*此处else不能缺省*/      ch=ch+32;   else       ch=ch+1;   putchar(ch);   ch=getchar();  }  } 解法2: #include  <stdio.h> main() {char ch;  while((ch=getchar())!='\n')        /*先赋值再判断*/  {if(ch>='a'&&ch<='z')       ch=ch-32;    else  if(ch>='A'&&ch<='Z')        /*此处else不能缺省*/      ch=ch+32;   else    ch=ch+1;   putchar(ch);  }  } 23、从键盘输入一批字符(以@结束),按要求加密并输出。 加密规则: 1、所有字母均转换为小写。 2、若是字母'a'到'y',则转化为下一个字母。 3、若是'z',则转化为'a'。 4、其它字符,保持不变。 #include <stdio.h> main( ) {char ch;  while((ch=getchar())!='@')        /*先赋值再判断*/  {if(ch>='a'&&ch<='y')     ch=ch+1;   else if(ch>='A'&&c<='Y')     ch=ch+32+1;    else if(ch=='Z'||ch=='z')     ch='a';   putchar(ch);  }  putchar('\n'); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服