谭浩强c语言第五章习题

谭浩强c语言第五章习题

  • 5.3 输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
#include <math.h>
int main()
{
    int m,n,i,t,rem,k;
    printf("Please input two integer m&n:");
    scanf("%d%d",&m,&n);
    if(n<m)
    {
        t=m;
        m=n;
        n=t;
    }
    i = m*n;
    while(m!=0)
    {
        rem = n%m;
        n = m;
        m = rem;
    }
    printf("最大公因数为%d\n",n);
    k = i/n;
    printf("最小公倍数为%d\n",k);
    return 0;
}

  • 5.4 输人一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
int main()
{
   char c;
   int English=0,space = 0,number = 0,other = 0;
   printf("请输入一行字符:\n");
   while ((c = getchar())!='\n')
   {
    if(c>='a'&&c<='z'||c>='A'&&c<='Z')
    English++;
    else if(c>='0'&&c<='9')
    number++;
    else if(c==' ')
    space++;
    else 
    other++;
   }
   printf("字母数为%d,空格数为%d,数字数为%d,其他为%d\n",English,space,number,other);
    return 0;
}
  • 5.5 求 S n Sn Sn
    image
#include <stdio.h>
#include <math.h>
int main()
{
    int a,n,i,Sn,temp;
    Sn = 0;
    temp = 0;
    printf("请输入a和位数n:");
    scanf("%d%d",&a,&n);
    for(i=1;i<=n;i++)
    {
        temp+=a;
        Sn+=temp;
        a*=10;
    }
    printf("a+aa+...+aa...a=%d",Sn);
    return 0;
}
  • 5.6 求 ∑ n = 1 20 n ! \sum_{n=1}^{20}n! n=120n!
#include <stdio.h>
#include <math.h>
int main()
{
    int n,i;
    double temp,Sn;
    Sn = 0;
    temp = 1;
    printf("n=");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        temp = temp*i;
        Sn+=temp;
    }
    printf("求和Sn = %.2f",Sn);
    return 0;
}
  • 5.7 求 ∑ k = 1 100 k + ∑ k = 1 50 k 2 + ∑ k = 1 10 1 k \sum_{k=1}^{100}k+\sum_{k=1}^{50}k^2+\sum_{k=1}^{10}\frac{1}{k} k=1100k+k=150k2+k=110k1
#include <stdio.h>
#include <math.h>
int main()
{
    int a,b,c,k;
    double Sn,temp1,temp2,temp3,m;
    Sn = 0.0;
    temp1 = 0.0;
    temp2 = 0.0;
    temp3 = 0.0;
    printf("a,b,c=");
    scanf("%d%d%d",&a,&b,&c);
    for(k=1;k<=a;k++)
    {
        temp1+=k;
    }
    for(k=1;k<=b;k++)
    {
        m = k*k;
        temp2+=m;
    }
    for(k=1;k<=c;k++)
    {
        temp3+=1.0/k;
    }
    Sn = temp1+temp2+temp3;
    printf("%.5f",Sn);
    return 0;
}
  • 5.8 输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
#include <stdio.h>
#include <math.h>
int main()
{
    int i,m,j,k,n;
    n=0;
    for(i=100;i<=999;i++)
    {
        m = i/100;
        j = (i-m*100)/10;
        k = i-m*100-j*10;
        if(i==m*m*m+j*j*j+k*k*k)
        {
            printf("%d\t",i);
            n++;
            if(n%2==0)
            printf("\n");
        }
        else continue;
    }
    //printf("\n");
    return 0;
}
  • 5.9 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
#include <stdio.h>
#include <math.h>
int main()
{
    int m,sum,i;
    for(m=1;m<1000;m++)
    {
        sum = 0;
        for(i=1;i<m;i++)
        {
            if(m%i==0)
            sum+=i;
        }
        if(m==sum)
        {
            printf("%d,its factors are ",m);
            for(i=1;i<m;i++)
            {
                if(m%i==0)
                printf("%d  ",i);
            }
        printf("\n");
        }
    }
    return 0;
}
  • 5.10 有一个分数序列,
    2 1 , 3 2 , 5 3 , 13 8 , 21 13 , ⋯ \frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{13}{8},\frac{21}{13},\cdots 12,23,35,813,1321,
    求出这个数列的前20项之和。
#include <stdio.h>
#include <math.h>
int main()
{
    int i,n;
    double sum,m,j,k;
    sum = 0.0;
    printf("请输入项数n=");
    scanf("%d",&n);
    j=2.0;k=1.0;
    for(i=1;i<=n;i++)
    {
        sum+=j/k;
        m = j;
        j+=k;
        k = m;
    }
    printf("sum=%.8f",sum);
    return 0;
}
  • 5.11 一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
#include <stdio.h>
#include <math.h>
int main()
{
    int i,n;
    double temp,sum=0.0,H=100;
    printf("please input n=");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        temp = H/2.0;
        sum = sum+2.0*temp;
        H= H/2.0;
    }
    sum = sum+100;
    printf("%.5f\n",sum);
    printf("%.5f",temp);
    return 0;
}
  • 5.12 猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
#include <stdio.h>
#include <math.h>
int main()
{
    int i,m=1,sum;
    for(i=1;i<10;i++)
    {
        m = (m+1)*2;
        sum = m;
    }
    printf("%d\n",sum);
    return 0;
}
  • 5.13 用迭代法求 x = a x = \sqrt{a} x=a 。求平方根的迭代公式为 x n + 1 = 1 2 ( x n + a x n ) x_{n+1} = \frac{1}{2}(x_n+\frac{a}{x_n}) xn+1=21(xn+xna),要求前后两次求出的x的差的绝对值小于 1 0 − 5 10^{-5} 105
#include<stdio.h>
#include<math.h>
int main()
{
    float a,x0,x1;
    printf("Input positive a:");
    scanf("%f",&a);
    x0=a/2;
    x1=(x0+a/x0)/2;
    do
    {
        x0=x1;
        x1=(x0+a/x0)/2;
    }
    while(fabs(x0-x1)>1e-5);
    printf("sqrt(%f)=%f 标准sqrt(%f)=%f\n",a,x1,a,sqrt(a));
}
  • 5.16 输出以下图案:
    image
#include<stdio.h>
int main()
{
    int i,j,k;
    for(i=0;i<=3;i++)
    {
        for(j=0;j<=2-i;j++)
        printf(" ");
        for(k=0;k<=2*i;k++)
        printf("*");
        printf("\n");
    }
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=i;j++)
        printf(" ");
        for(k=0;k<=4-2*i;k++)
        printf("*");
        printf("\n");
    }
    return 0;
}
  • 5.17 两个乒乓球队进行比赛,各出3人。甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单。
#include<stdio.h>
int main()
{
    char m,n,k;
    for(m='X';m<='Z';m++)
    {
        for(n='X';n<='Z';n++)
            if(m!=n) 
            {
                for(k='X';k<='Z';k++)
                    if(m!=k&&n!=k)
                        if(m!='X'&&k!='X'&&k!='Z')
                        printf(" A--%c\n B--%c\n C--%c\n",m,n,k);
            }
        
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值