谭浩强老师C语言第五版第五章(下)

仅代表个人看法

如有错误请指正

注意第14,15,17题较难,主要与数学公式 有关,思考过程较复杂不做讲解,如有需要请留言

题目10:有一个分数序列求出这个数列的前20项之和。

#include <stdio.h>
int main()
{
    int i, n = 20;
    double a = 2, b = 1, s = 0, t;
    for (i = 1; i <= n; i++)
    {
        s = s + a / b;
        t = a, a = a + b, b = t;
    }
    printf("sum=%16.10f\n", s);
    return 0;
}

结果:

复制请说明

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

#include <stdio.h>
int main()
{
    double sn = 100, hn = sn / 2;
    int n;
    for (n = 2; n <= 10; n++)
    {
        sn = sn + 2 * hn; 
        hn = hn / 2;      
    }
    printf("第10次落地时共经过%f米\n", sn);
    printf("第10次反弹%f米\n", hn);
    return 0;
}

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

#include <stdio.h>
int main()
{
    int day, x1, x2;
    day = 9;
    x2 = 1;
    while (day > 0)  
    {
        x1 = (x2 + 1) * 2;
        x2 = x1;
        day--;
    }
    printf("total=%d\n", x1);
    return 0;
}

题目13:用迭代法。求平方根的迭代公式为(数学符号不好打。。。请原谅)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
    float a, x0, x1;
    printf("enter a positive number:");
    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("The square root of %5.2f is %8.5f\n", a, x1);
    return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
    double x1, x0, f, f1;
    x1 = 1.5;
    do
    {
        x0 = x1;
        f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
        f1 = (6 * x0 - 8) * x0 + 3;
        x1 = x0 - f / f1;
    } while (fabs(x1 - x0) >= 1e-5);
    printf("The root of equation is %5.2f\n", x1);
    return 0;
}

题目15:用二分法求下面方程在(-10,10)的值

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
    float x0, x1, x2, fx0, fx1, fx2;
    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
        {
            x1 = x0;
            fx1 = fx0;
        }
    } while (fabs(fx0) >= 1e-5);
    printf("x=%6.2f\n", x0);
    return 0;
}

题目16:输出以下图案

#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;
}

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

#include <stdio.h>
int main()
{
    char i, j, k; 
    for (i = 'x'; i <= 'z'; i++)
        for (j = 'x'; j <= 'z'; j++)
            if (i != j)
                for (k = 'x'; k <= 'z'; k++)
                    if (i != k && j != k)
                        if (i != 'x' && k != 'x' && k != 'z')
                            printf("A--%c\nB--%c\nC--%c\n", i, j, k);
    return 0;
}

本文遵守Creative Commons 协议

如有征用请说明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值