C语言上机实验四——循环结构程序设计

1.求自然对数的底数 e=2.718281828…,e 的计算公式如下:

e=1+1/1!+1/2!+1/3!+…要求当最后一项的值小于10-10时结束。

 #include <stdio.h>

int main()

{

double a=1,c=1;

int i=1;

while(1/c>1e-10)

{

a=a+1/c;

    i++;

    c=c*i;

    }

    printf("e=%.16f",a);

return 0;

2.输入20个有符号整数,统计正整数、零、负整数的个数。

#include <stdio.h>

int main()

{

    int s[20];

    int a=0,b=0,c=0,i,j;

    for(i=0;i<=19;i++)

    {

     scanf("%d",&s[i]);

    }

for(j=0;j<=19;j++)

{

if(s[j]<0)

        {

         a=a+1;

    }

        else if(s[j]==0)

        {

         b=b+1;

    }

    else

        {

         c=c+1;

    }  

    }

printf("dayu0dezhengzhengshugeshu:%d\n",c);

printf("dengyu0dezhengzhengshugeshu:%d\n",b);

printf("xiaoyu0dezhengzhengshugeshu:%d\n",a);

return 0;

}

3.输入m个数,求其最大数、最小数和平均值。

#include <stdio.h>

int main()

{

    int m,i,s[100];

    int sum=0,max,min,a;

    printf("please input a number'm':");

    scanf("%d",&m);

    printf("please input %d numbers:\n",m);

    for(i=0;i<m;i++)

    {

     scanf("%d",&s[i]);

     sum=sum+s[i];

}

a=sum/m;

max=s[0];

min=s[0];

for(i=0;i<m;i++)

{

if(s[i]>max)

{

max=s[i];

}

    }

for(i=0;i<m;i++)

{

if(s[i]<min)

{

min=s[i];

}

    }

    printf("max=%d min=%d average=%d",max,min,a);

return 0;

}

4. 任意的整数,当从左向右读与从右向左读是相同的,且为素数时,称为

回文素数。求 1000 以内的所有回文素数。

#include <stdio.h>

int main()

{

    int n,i,a;

    printf("Palindrome primes uo to 1000:\n");

    for(n=10;n<1000;n++)

    {

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

     {

     a=1;

     if(n%i==0)

     {

         a=0;

break;

}

}

    if(a==1)

    {

    if(n/100==0)

    {

    if(n%10==n/10)

    {

    printf("%d ",n);

    }

    }

    else

    {

    if(n/100==n%10)

    {

    printf("%d ",n);

    }

    }

    }

    }

return 0;

}

5.在100和1000之间,有多少个其数字之和等于9而且该数可被5整除的整

数?

#include <stdio.h>

int main()

{

    int n,i,a,c,sum=0,d=0;

    for(n=10;n<=1000;n++)

    {

     a=1;

     if(n%5==0)

     {

     a=0;

}

        if(a==0)

        {

         if(n/100==0)

         {

         if(n/10+n%10==9)

         {

         sum=sum+1;

         printf("%d ",n);

}

}

            else

{

c=n/100;

if(c+(n-100*c)/10+n%10==9)

{

d=d+1;

printf("%d ",n);

}

}

}

    }

    printf("\n");

    printf("There are %d of these numbers",sum+d);

return 0;

}

6.一位同学问老师和老师夫人的年龄是多少,老师说:“我年龄的平方加

上我夫人的年龄恰好等于1053,而我夫人年龄的平方加上我的年龄等于873。”

试计算老师和其夫人的年龄。

#include <stdio.h>

int main()

{

    int x,y;

    for(x=1;x<=1000;x++)

    {

     for(y=1;y<=1000;y++)

     {

     if(x*x+y==1053)

     {

     if(y*y+x==873)

     {

     printf("husband's age:%d wife's age: %d",x,y);

}

}

}

}

return 0;

}

7.输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立

方和等于该数本身。例如,153是一水仙花数,因为153=1^3 +5^3 +3^3。

 #include <stdio.h>

int main()

{

   int i,a,b,c;

   printf("narcissus number:");

   for(i=100;i<1000;i++)

   {

        a=i/100;

        b=(i-a*100)/10;

        c=i%10;

        if(a*a*a+b*b*b+c*c*c==i)

        {

         printf("%d ",i);

}

   }

return 0;

}

 

*8.(选做题)一个球从100m高度自由落下,每次落地后反跳回原高度的

一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多

高。

#include <stdio.h>

int main()

{

    int i=1;

double a=100;

    printf("the height of the rebound:");

    while(i<=10)

    {

     a=a/2;

     i++;

}

printf("%.10f",a);

return 0;

}

 

*9.(选做题)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一

半,还不过瘾,又多吃了一个。第2天又将剩下的桃子吃了一半,又多吃了一

个。以后每天都吃了前一天剩下的一半另加一个。到第10天早上想再吃时,只

剩一个桃子了。求第一天共摘了多少桃子。

#include <stdio.h>

int main()

{

    int x,y,i=1;

    printf("the number of peach:");

    for(x=9;x>0;x--)

    {

     y=(i+1)*2;

     i=y;

}

printf("%d",y);

    return;

}

*10.(选做题)用二分法求下面方程在(-10,10)之间的根:2x^3-4x^2+3x-6=0。

#include <stdio.h>

int main()

{

float x0,x1,x2,a,b,c;

    printf("x1,x2:");

do

{

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

a=2*x1*x1*x1-4*x1*x1+3*x1-6;

b=2*x2*x2*x2-4*x2*x2+3*x2-6;

} while(a*b>0);

do

{

x0=(x1+x2)/2;

c=2*x0*x0*x0-4*x0*x0+3*x0-6;

if(a*c>0)

{

x1=x0;

a=c;

}

else

{

x2=x0;

b=c;

}

}while(fabs(c)>=1e-5);

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

return 0;

}

 

 

 

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值