循环结构习题讲解

1. 输入N, 打印下列高为N的等腰三角形
例当N=6, 打印                 *
                                         ***
                                       *****
                                     *******
                                   *********
                                 ***********

#include "stdio.h"

main()

{

  int n,i,j;

  printf("Please Input N: ");

  scanf("%d",&n);

  for (i=1;i<=n;i++)           

  {

    for (j=n-1;j>=i;j--)

      printf(" ");

    for (j=1;j<=2*i-1;j++)

      printf("*");

    printf("/n");

  }

  printf("/n");

}

 

 

2依次输入10个数,打印其中最大的数。

#include <math.h>

 main()

 {

 float i,a,max;

 printf ("please input the frist number");

 scanf ("%f",&max);

for(i=1;i<=9;i++)

  {

  printf ("please input the next number");

  scanf ("%f",&a);

  if (a>max)

  max=a;

  }

 printf ("the max in the 10 number is %f",max);

 }

 

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

解一:

#include "stdio.h"

main()

{

  int t,m,n,m0,n0;

  printf("Please Input two integer: ");

  scanf("%d%d",&n,&m);

  m0=m; n0=n;

  if (m<n)

  {

    t=m;

    m=n;

    n=t;

  }

  t=m%n;

  while (t)

  {

    m=n;

    n=t;

    t=m%n;

  }

  printf("The two integer is %d and %d/n",m0,n0);

  printf("The maximum common divisor is %d/n",n);

  printf("The minimum common multiple is %d/n",m0*n0/n);

}

 

解二:直接利用定义计算

#include "stdio.h"

main()

{

  int m,n,max,min,i;

  printf("Please Input m & n : ");

  scanf("%d%d",&m,&n);

  if (m<=n)

    {

    min=n;

    max=m;

    }

  else

    {

    min=m;

    max=n;

    }

  for (i=min;(i%m!=0)||(i%n!=0);i++);

    min=i;

  for (i=max;(m%i!=0)||(n%i!=0);i--);

    max=i;

  printf("The min is: %d/n",min);

  printf("The max is: %d/n",max);

}

 

4S = a + aa + aaa + aaaa + ……

#include "stdio.h"

main()

{

  int n,a,i;

  long sum=0,coef,an=0;

  printf("Please Input n & a(a must between 1-9): ");

  scanf("%d%d",&n,&a);

  while ((a<1)||(a>9))

  {

    printf ("/na out of range, reInput a between 1-9:");

    scanf("%d",&a);

  }

  for (i=1,an=0; i<=n; i++)

    {

      an=an*10+a;

        sum=sum+an;

    }

  printf("/n");

  printf("The result is %ld/n",sum);

}

 

51+2+ …… +n

main()

{

long int a,b=1,x=0;

int n;

printf("****work  **  *****/n   input the number:");

scanf("%d",&n);

for(a=1;a<=n;a++)

   {b=b*a;

    x=x+b;

    }

printf("answer is:%ld/n",x);

}

 

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

解一:

#include "stdio.h"

main()

{

  int n,n1,n2,n3,m,t=0;

  for (n=100;n<=999;n++)

  {

    n3=n/100;

    n2=(n-n3*100)/10;

    n1=n%10;

    if (n==(n1*n1*n1+n2*n2*n2+n3*n3*n3))

    {

      printf("%8d",n);

      t++;

      if (t%5==0)

    printf("/n");

    }

  }

  printf("/n");

}

 

解二:

#include "stdio.h"

main()

{

  int n,n1,n2,n3,m;

  for (n1=1;n1<=9;n1++)

for (n2=0;n2<10;n2++)

  for (n3=0;n3<10;n3++)

    {

         n = n1*n1*n1+n2*n2*n2+n3*n3*n3;

         m = n1*100+n2*10+n3;

         if (n == m)

            printf("%8d",m);

         }

  printf("/n");

}

 

7. 有一分数序列2/13/25/38/513/821/13,……,求出这个数列的前n项之和。

分析:1,总体上是求和运算,且循环20次(考虑用for循环)

      2,每一项的数据是分数,且存在规律:后一项的分母是前一项的分子,后一项的分子是前一项分子、分母之和。

 

设置变量:

Sum 计和 (初始为0

I 循环变量

A 前一项的分子(初始为2

B 前一项的分母(初始为1

T 当前分数,存在t=(a+b)/a

 

main()

{

  int a,b,temp,i,n;

  float sum,t;

  a=2;b=1;sum=t=2;

  printf("Input n:");

  scanf("%d",&n);

  for (i=2;i<=n;i++)

  {

    t=1.0*(a+b)/a;

    sum += t;

    temp=a;

    a=a+b;

    b=temp;

  }

  printf ("N=%d,Sum=%f/n",n,sum);

}

 

8.略

 

9.用二分法求下面方程在(-1010)之间的根。

利用中值定理:

连续函数f(x),若f(x1)*f(x2)<0;(即两者不同号),则在x1x2之间必存在;一个值x0满足f(x0)=0

二分法:

只要f(x1)*f(x2)<0, x0(x1+x2)/2,将区间缩小一半,重复操作即可。

 

#include <math.h>

main()

{float x0,x1,x2,fx0,fx1,fx2,le;

 do

   {printf("Enter x1 & x2: ");

    scanf("%f,%f",&x1,&x2);

    fx1=x1*((2*x1-4)*x1+3)-6;

    fx2=x2*((2*x2-4)*x2+3)-6;

   }

   while((fx1*fx2)>0);

 do

  {x0=(x1+x2)/2;

   fx0=x0*((2*x0-4)*x0+3)-6;

   if ((fx0*fx1)<0)

      {x2=x0;

       fx2=fx0;

      }

     else

应该是数字1,而非字母l

     {x1=x0;

      fx1=fx0;

     }

   } while(fabs(fx0)>=le-5);

  printf("x=% 6.2f /n",x0);

}

 

微信扫码订阅
UP更新不错过~
关注

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaomeilan

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值