第5章 循环结构程序设计

第5章 循环结构程序设计

一·例题

例5.1 求1+2+3+…+100。

#include<stdio.h>
int main()
{
 int i=1,sum=0;
 while(i<=100)
 {
  sum=sum+i;
  i++;
 }
 printf("sum=%d\n",sum);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.2 用do…while语句求1+2+3+…+100。

#include<stdio.h>
int main()
{
 int i=1,sum=0;
 do
 {
  sum=sum+i;
  i++;
 }while(i<=100);
 printf("sum=%d\n",sum);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.3 while和do…while循环的比较。

(1)用while循环:

#include<stdio.h>
int main()
{
 int i,sum=0;
 printf("please enter i,i=?");
 scanf("%d",&i);
 while(i<=10)
 {
  sum=sum+i;
  i++;
 }
 printf("sum=%d\n",sum);
 return 0;
}

运行结果如下:
在这里插入图片描述

(2)用do…while循环:

#include<stdio.h>
int main()
{
 int i,sum=0;
 printf("please enter i,i=?");
 scanf("%d",&i);
 do
 {
  sum=sum+i;
  i++;
 }while(i<=10);
 printf("sum=%d\n",sum);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.4 在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目。

#include<stdio.h>
#define SUM 100000
int main()
{
 float amount,aver,total;
 int i;
 for(i=1,total=0;i<=1000;i++)
 {
  printf("please enter amount:");
  scanf("%f",&amount);
  total=total+amount;
  if(total>=SUM) break;
 }
 aver=total/i;
 printf("num=%d\naver=%10.2f\n",i,aver);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.5 要求输出100~200的不能被3整除的数。

#include<stdio.h>
int main()
{
 int n;
 for(n=100;n<=200;n++)
 {
  if(n%3==0)
   continue;
  printf("%d  ",n);
 }
 printf("\n");
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.6 输出以下4*5的矩阵。

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

#include<stdio.h>
int main()
{
 int i,j,n=0;
 for(i=1;i<=4;i++)
  for(j=1;j<=5;j++,n++)
  {
   if(n%5==0) printf("\n");
   printf("%d\t",i*j);
  }
 printf("\n");
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.7 用公式π/4≈1-1/3+1/5-1/7+…求π的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

#include<stdio.h>
#include<math.h>
int main()
{
 int sign=1;
 double pi=0.0,n=1.0,term=1.0;
 while(fabs(term)>=1e-6)
 {
  pi=pi+term;
  n=n+2;
  sign=-sign;
  term=sign/n;
 }
 pi=pi*4;
 printf("pi=%10.8f\n",pi);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.8 求Fibonacci(斐波那契)数列的前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。及该数列为1,1,2,3,5,8,13,…,用数学方式表示为

在这里插入图片描述

#include<stdio.h>
int main()
{
 int f1=1,f2=1,f3;
 int i;
 printf("%12d%12d",f1,f2);
 for(i=1;i<=38;i++)
 {
  f3=f1+f2;
  printf("%12d",f3);
  f1=f2;
  f2=f3;
 }
 printf("\n");
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.9 输入一个大于3的整数n,判定它是否为负数(prime,又称质数)。

#include<stdio.h>
int main()
{
 int n,i;
 printf("please enter a integer number,n=?");
 scanf("%d",&n);
 for(i=2;i<n;i++)
  if(n%i==0) break;
 if(i<n)
  printf("%d is not a prime number.\n",n);
 else
  printf("%d is a prime number.\n",n);
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.10 求100~200的全部素数。

#include<stdio.h>
#include<math.h>
int main()
{
 int n,k,i,m=0;
 for(n=101;n<=200;n=n+2)
 {
  k=sqrt(n);
  for(i=2;i<=k;i++)
   if(n%i==0) break;
  if(i>=k+1)
  {
   printf("%d ",n);
   m=m+1;
  }
  if(m%10==0) printf("\n");
 }
 printf("\n");
 return 0;
}

运行结果如下:
在这里插入图片描述

例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译成原文。例如,可以按以下规律将电文变成密码:

将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D,见图。
在这里插入图片描述
字母按上述规律转换,非字母字符保持原状不变,如“China!”转换为“Glmre!”。
从键盘输入一行字符,要求输出其相应的密码。

#include<stdio.h>
int main()
{
 char c;
 c=getchar();
 while(c!='\n')
 {
  if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
  {
   if(c>='W'&&c<='Z'||c>='w'&&c<='z')
    c=c-22;
   else
    c=c+4;
  }
  printf("%c",c);
  c=getchar();
 }
 printf("\n");
 return 0;
}

运行结果如下:
在这里插入图片描述

二·习题

1.输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>
int main()
{
 int m,n,t,r,a;
 printf("请输入两个正整数:");
 scanf("%d%d",&m,&n);
 if(m<n)
 {
  t=m;
  m=n;
  n=t;
 }
 a=m*n;
 do
 {
  r=m%n;
  m=n;
  n=r;
 }while(r!=0);
 printf("最大公约数为:%d\n最小公倍数为:%d\n",m,a/m);
 return 0;
}

运行结果如下:
在这里插入图片描述

2.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include<stdio.h>
int main()
{
 char c;
 int letters=0,space=0,digit=0,other=0;
 printf("请输入一行字符:");
 while((c=getchar())!='\n')
 {
  if(c>='a'&&c<='z'||c>='A'&&c<='Z')
   letters++;
  else
   if(c==' ')
    space++;
   else
    if(c>='0'&&c<='9')
     digit++;
    else
     other++;
 }
 printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n",letters,space,digit,other);
 return 0;
}

运行结果如下:
在这里插入图片描述

3.求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字,n表示a的位数,n由键盘输入。例如:

2+22+222+2222+22222 (此时n=5)

#include<stdio.h>
int main()
{
 int a=2,n,i,term=0,sum=0;
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  term=term+a;
  sum=sum+term;
  term=10*term;
 }
 printf("sum=%d\n",sum);
 return 0;
}

运行结果如下:
在这里插入图片描述

4.求1!+2!+3!+4!+…+20!。

#include<stdio.h>
int main()
{
 double pr(int y);
 int n=20,i;
 double term,sum=0;
 for(i=1;i<=n;i++)
 {
  term=pr(i);
  sum=sum+term;
 }
 printf("sum=%f\n",sum);
 return 0;
}

double pr(int y)
{
 int j;
 double term=1;
 for(j=y;j>0;j--)
  term=term*j;
 return term;
}

运行结果如下:
在这里插入图片描述

5.输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=13+53+33

#include<stdio.h>
int main()
{
 int pu(int x);
 int i,p;
 for(i=100;i<1000;i++)
 {
  p=pu(i);
  if(p==i)
   printf("%d\t",i);
 }
 printf("\n");
 return 0;
}

int pu(int x)
{
 int a,b,c,d;
 a=x/100;
 b=x/10%10;
 c=x%10;
 d=a*a*a+b*b*b+c*c*c;
 return d;
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44593473/article/details/87868736