ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C程序设计(谭浩强)第五版课后题答案 第五章

2022-05-17 16:02:03  阅读:333  来源: 互联网

标签:main include int x1 mid 谭浩强 课后 printf 第五版


1.请画出例5.6中给出的3个程序段的流程图

1.

2.

 

3.

 

2.请补充例5. 7程序,分别统计当“fabs(t)>= le- 6”和“fabs(t)> = le- 8”时执行循环体的次数。

#include <stdio.h>
#include <math.h>
void main()
{
    int sign=1,count=0;
    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;
        count++;
    }
    pi=pi*4;

    printf("pi=%10.8f\n",pi);
    printf("循环次数为%d\n",count);

    return 0;
}

当fabs(t)>=1e-6 时循环50 000次

当fabs(t)>=1e-8 时循环50 000 000次

 

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

#include<stdio.h>
int main()
{
    int a,b,c,m;
    printf("Please input two numbers:");
    scanf("%d %d",&a,&b);
    m=a*b;
    if(a<b)
    {
        int r;
        r=a;
        a=b;
        b=r;
    }
    while(c=(a%b))
    {
        a=b;
        b=c;
    }
    printf("最大公约数:%d\n最小公倍数:%d\n",b,m/b);
    return 0;
}

 

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

#include<stdio.h>
int main()
{
    int i,j=0,c1=0,c2=0,c3=0,c4=0,word=0,num=0;
    char c,a[100];
    printf("Please input:\n");
    gets(a);
    for(i=0;(c=a[i])!='\0';i++)
    {
        if(c==' ')
            num++;
    }
    while(a[j]!='\0')
        {
            if(a[j]>='A' && a[j]<='Z')
                c1++;
            else if(a[j]>='a' && a[j]<='z')
                c2++;
            else if(a[j]>='0' && a[j]<='9')
                c3++;
            else
                c4++;
            j++;
        }

    printf("大写字母个数:%d\n小写字母个数:%d\n数字个数:%d\n其他字符个数:%d\n空格个数:%d\n",c1,c2,c3,c4,num);
    return 0;
}

 

 

5.求Sn=a+aa+aaa+$\overbrace{aa+\dots+a}^{n个a}$之值,其中a是一个数字,n表示a的位数,n由键盘输入。

例如:

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

 

#include<stdio.h>
#include<math.h>
int main()
{
    int i,a,n,m=0,sum=0;
    printf("请输入数字和数字位数:\n");
    scanf("%d %d",&a,&n);
    for(i=1;i<=n;i++)
    {
        m=a*(int)pow(10,i-1)+m;
        sum=sum+m;
    }
    printf("Sn=%d\n",sum);
    return 0;
}

 

 

 

 

6.求 $\sum\limits_{n=1}^{20}n!$  (即求1!+2!+3!+4!+…+20!)。

#include<stdio.h>
int main()
{
    long long int i,j,sum=0;
    for(i=1;i<=20;i++)
    {
        long long int sum0=1;
        for(j=1;j<=i;j++){
            sum0*=j;
        }

        sum+=sum0;
    }
    printf("1~20n! sum=%lld\n",sum);
    return 0;
}

 

 

 

7.求$\sum\limits_{k=1}^{100}k$+$\sum\limits_{k=1}^{50}{k}^2$+$\sum\limits_{k=1}^{10}{\frac{1}{k}}$。

#include<stdio.h>
int main()
{
    double i,j,sum1=0,sum2=0,sum3=0.0;
    for(i=1;i<=100;i++)
        sum1+=i;
    for(i=1;i<=50;i++)
        sum2+=i*i;
    for(i=1;i<=50;i++)
        sum3+=1.0/i;
    printf("sum=%lf\n",sum1+sum2+sum3);
    return 0;
}

 

 

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

#include<stdio.h>
int main()
{
    int a,b,c,i;
    for(i=100;i<=999;i++)
    {
        a=i/100;
        b=(i/10)%10;
        c=i%10;
        if(a*a*a+b*b*b+c*c*c==i)
            printf(" %d",i);
    }
    return 0;
}

 

9.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1,2,3

#include<stdio.h>
int main()
{
    int b,c,i,j,m;
    for(i=2;i<1000;i++)
    {
        int a[50]={0};
        m=0;
        b=0;
        for(j=1;j<i;j++)
        {
            if(i%j==0)
                a[m++]=j;
        }
        for(j=0;j<m;j++)
        {
            b+=a[j];
        }
        if(b==i)
        {
            printf("%d its factors are ",i);
            for(j=0;j<m;j++)
                printf("%d,",a[j]);
            printf("\n");
        }
    }
    return 0;
}

 

10.有一个分数序列

$\frac{2}{1} \frac{3}{2} \frac{5}{3} \frac{8}{5} \frac{13}{8} \frac{21}{13} $

求出这个数列的前20项之和。

 

#include<stdio.h>
int main()
{
    float a=2.0,b=1.0,i;
    float sum=2.0;
    for(i=1;i<20;i++)
    {
        float t;
        t=a;
        a=a+b;
        b=t;
        sum+=(a/b);
    }
    printf("%f",sum);
    return 0;
}

 

 

11.一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。

#include<stdio.h>
int main()
{
    float i,a=100.0,sum=0.0;
    for(i=0;i<10;i++)
    {
        sum+=a;
        a=a/2;
        sum+=a;
    }
    sum=sum-a;
    printf("10次共经历%f米,第10次反弹%f米\n",sum,a);
    return 0;
}

 

 

12.猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。

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

 

​ 

13.用迭代法求x=$\sqrt{a}$求平方根的迭代公式为$x_{n+1}=\frac{1}{2}(x_{n}+\frac{a}{x_n})$要求前后两次求出的x的差的绝对值小于$10^{-5}$。

#include<stdio.h>
#include<math.h>
int main()
{
    float n1,n2,a;
    printf("请输入一个数:\n");
    scanf("%f",&a);
    n1=a;
    n2=(n1+a/n1)/2;
    do
    {
        n1=n2;
        n2=(n1+a/n1)/2;
    }while(fabs(n2-n1)>1e-6);
    printf("%f\n",n2);
    return 0;
}

 

14.用牛顿迭代法求下面方程在1.5附近的根:

$2x^3- 4x^2+ 3x- 6= 0$

 

#include<stdio.h>
#include<math.h>
int main()
{
    double x1,x2,x3,n;
    n=1.5;
    do
    {
        x1=n;
        x2=2*x1*x1*x1-4*x1*x1+3*x1-6;
        x3=6*x1*x1-8*x1+3;
        n=x1-(x2/x3);
    }while(fabs(n-x1)>1e-6);
    printf("%lf\n",n);
    return 0;
}

 

 

15.用二分法求下面方程在(-10,10)的根:

$2x^3-4x^2+3x-6= 0$

#include<stdio.h>
#include<math.h>
int main()
{
    double l=-10.0,r=10.0,mid;
    double temp=10.0;
    while(fabs(temp)>1e-5)
    {
        mid=(l+r)/2;
        temp=2*mid*mid*mid-4*mid*mid+3*mid-6;
        if(temp<0)
        {
            l=mid;
        }
        if(temp>0)
        {
            r=mid;
        }
    }    
    printf("%lf\n",mid);
    return 0;
}

 

 

16.输出以下图案:

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=4-i;j++)
        {
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++)
            printf("*");
        printf("\n");
    }
    for(i=1;i<4;i++)
    {
        for(j=1;j<=i;j++)
        {
            printf(" ");
        }
        for(j=1;j<=7-2*i;j++)
            printf("*");
        printf("\n");
    }
    return 0;
}

 

 

17.两个乒乓球队进行比赛,各出3人。甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单。

#include<stdio.h>
int main()
{
    int i,j,z;
    char a[3]={'X','Y','Z'};
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            for(z=0;z<3;z++)
            {

                if(i==0 || z==0 || z==2) continue;
                if(i==j || i==z || j==z) continue;
                printf("比赛选手为:\nA vs %c\nB vs %c\nC vs %c\n",a[i],a[j],a[z]);
            }
        }
    }
    return 0;
}

 

 

标签:main,include,int,x1,mid,谭浩强,课后,printf,第五版
来源: https://www.cnblogs.com/lazyheartkx/p/16280799.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有