谭浩强C第五章循环结构课后习题

本文档展示了五个C/C++程序,包括求π的近似值、计算最大公约数和最小公倍数、字符统计、序列求和及特殊数列计算。通过这些实例,读者可以了解基本算法和数值计算在编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.  2022年的一个求近似π的类似考题。
int main()
{
    float s=0,i,m=1;
    int sign=-1,k=0;
    printf("求π的近似值:");
    for (i=1;;i+=2,k++)
    {
        m=1/i;
        sign=-sign;
        s=s+sign*m;
        if (fabs(m)<(1e-6)) break;
    }
    printf("\n%10.8f",s*4);
    return 0;
}

 

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

int main()
{
    int m,n,temp,p,r;
    printf("请输入两个正整数n和m:");
    scanf("%d%d",&n,&m);
    if(n<m)
    {
        temp=n;
        n=m;
        m=temp;
    }
    p=n*m;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }
    printf("它们的最大公约数为:%d\n",n);
    printf("它们的最大公倍数为:%d\n",p/n);  //反斜杠是标识符
    return 0;
}

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

int main()
{
    char c;
    int letters=0,space=0,digit=0,other=0;
    printf("请输入一行字符:\n");
    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;
}

 4.求Sn=a+aa+aaa+aaaa+···+n*a。

int main()
{
    int a,n,i,s=0,tn=0;
    printf("请输入一个数字a和a的位数n:\n");
    scanf("%d%d",&a,&n);
    for(i=1;i<=n;i++)     //注意i取到n的哪儿
    {
        tn=tn+a;          //少用变量
        s+=tn;
        a=a*10;           //a=a*10+a错误,后面的a是一直在变化的
    }
    printf("Sn=%d\n",s);
    return 0;
}

5.求1!+2!+3!+···+n!

int main()
{
    int i;
    double s=0,a=1;
    for(i=1; i<=20; i++)
    {
        a=a*i;
        s=s+a;
        //为什么a=a*(a+1)就错了
    }
    printf("%22.15e",s);     //注意输出的范围,否则越界输出的是错误的值。
    return 0;
}

 

6.求k(1~100)的和+k^2(1~50)的和+1/k(1~10)的和。

int main()
{
    int n1=100,n2=50,n3=10;
    double k,s1=0,s2=0,s3=0;
    for(k=1;k<=n1;k++) s1=s1+k;
    for(k=1;k<=n2;k++) s2=s2+k*k;
    for(k=1;k<=n3;k++) s3=s3+1/k;
    printf("sum=%15.6f",s1+s2+s3);
    return 0;
}

 

7.输出所有的水仙花数。153=1^3+5^3+3^3.

int main()
{
    int i,j,k,n;
    for(n=100;n<1000;n++)
    {
        i=n/100;
        j=n/10-i*10;
        k=n%10;
        if(n==i*i*i+j*j*j+k*k*k)
            printf("%d\n",n);
    }
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值