分类 C/C++ 下的文章

C 语言输出 杨辉三角

原理自己看下注释,最好是自己在纸上写出几行(如 6 行),寻找规律(每个数等于它上方两数之和。)

关于`杨辉三角,请查看 杨辉三角-百度百科

C 代码:

#include <stdio.h>

int main() {
    //      row:表示 行
    // column:表示 列
    int row,column;
    
    //设置 <第0行第0列> 值为1
    //设置 <第1行第0列、第1列> 值为1
    int arr[10][10]={{1}, {1,1}};
    
    for(row=2; row<10; row++){
        arr[row][0] = 1;//设置第 row 行第 0 列的值为 0
        for(column=1; column<row; column++){
            //该值 = 上一行<该列-1> + 上一行<该列> 的值
            //例如:row=2, column=1,则 arr[2][1] 的值为
            //arr[2-1][1-1]+arr[2-1][1]
            arr[row][column] = arr[row-1][column-1]+arr[row-1][column];
        }
        arr[row][column] = 1;//设置第 row 行第 column 列的值为 1
    }
    
    printf("输出<10行>杨辉三角:\n");
    for(row=0; row<10; row++){
        for(column=0; column<10; column++){
            if(arr[row][column] != 0){//输出值不为0的数
                printf("%4d", arr[row][column]);
            }
        }
        printf("\n");
    }
}

C 语言 | 猴子吃桃问题 循环结构程序设计-第12题

题目

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

解题思路

1.假设 桃子 总共有 x 个,则可以列出式子:

y1:第1天剩下的桃子数量
y2:第2天剩下的桃子数量
...
y9:第9天剩下的桃子数量
y1 = x/2 - 1
y2 = y1/2 - 1
y3 = y2/2 - 1
y4 = y3/2 - 1
y5 = y4/2 - 1
y6 = y5/2 - 1
y7 = y6/2 - 1
y8 = y7/2 - 1
y9 = y8/2 - 1

2.根据题目得知,第9天还剩一个桃子,故我们可解方程得出:

因为 y9 = 1
所以将 y9=1 带入 y9 = y8/2 - 1,解得方程
y8 = 1+1*2
y8 = 4
然后继续往上解,即可得到第1天摘了多少个桃子

C 代码

#include <stdio.h>

int main() {
    int days=1, peach=1, eat;
    
    do{
        peach = (peach+1)*2;
        days++;
    }while(days<10);
    printf("猴子第 1 天摘了:%d 个桃子", peach);
    
    printf("\n-------------------------------\n");
    printf("验证结果:\n");
    
    days = 1;
    do{
        eat = peach/2+1;//吃了多少个桃子
        peach -= eat;//桃子的剩余数量
        printf("第%2d 天:吃了 %3d 个,剩余 %3d 个桃子\n",days,eat,peach);
        days++;
    }while(days<=10);
    
}

运行结果

猴子第 1 天摘了:1534 个桃子
-------------------------------
验证结果:
第 1 天:吃了 768 个,剩余 766 个桃子
第 2 天:吃了 384 个,剩余 382 个桃子
第 3 天:吃了 192 个,剩余 190 个桃子
第 4 天:吃了  96 个,剩余  94 个桃子
第 5 天:吃了  48 个,剩余  46 个桃子
第 6 天:吃了  24 个,剩余  22 个桃子
第 7 天:吃了  12 个,剩余  10 个桃子
第 8 天:吃了   6 个,剩余   4 个桃子
第 9 天:吃了   3 个,剩余   1 个桃子
第10 天:吃了   1 个,剩余   0 个桃子

Snipaste_2019-04-19_13-56-06.png

C 语言 | 求分数数列前20项之和 循环结构-第10题

C 代码

#include <stdio.h>

int main() {
    //molecule:分子
    //denominator:分母
    double i, sum, molecule, denominator, tmp;
    
    molecule = 2;//初始分子值
    denominator = 1;//初始分母值
    for(i=1; i<=20; i++){
        sum += molecule/denominator;
        
        printf("第 %.0f  项:", i);
        printf("%.0f/%.0f\n", molecule, denominator);
        
        tmp = molecule;//用 tmp 暂存 分子
        molecule = molecule+denominator;//下一个分子 = 分子+分母
        denominator = tmp;//下一个分母 = 前一项得分子
    }
    
    printf("\n这个数列的前20项之和为:%f", sum);
}

运行结果:

第 1 项:2/1
第 2 项:3/2
第 3 项:5/3
第 4 项:8/5
第 5 项:13/8
第 6 项:21/13
第 7 项:34/21
第 8 项:55/34
第 9 项:89/55
第 10 项:144/89
第 11 项:233/144
第 12 项:377/233
第 13 项:610/377
第 14 项:987/610
第 15 项:1597/987
第 16 项:2584/1597
第 17 项:4181/2584
第 18 项:6765/4181
第 19 项:10946/6765
第 20 项:17711/10946

这个数列的前20项之和为:32.660261

C 语言 | 循环结构程序设计-习题第5题

题目:

求 S(n) = a+aa+aaa+...+aa...a 之值,其中 a 是一个数字,n 表示 a 的位数,n 由键盘输入。
例如:2+22+222+2222+22222(此时 a=2,n=5)

C 代码实现:

#include <stdio.h>
#include <math.h>

int main() {
    int S,a,n,t;
    int i,j;
    
    printf("请输入a的值:");
    scanf("%d", &a);
    
    printf("请输入n的值:");
    scanf("%d", &n);
    
    if(n<=1){
        printf("n 的值必须大于 1");
        return 0;//退出程序
    }
    
    S = a;
    //printf("第1次:%d\n", a);
    printf("%d", a);
    
    for(i=1; i<n; i++){
        t = 0;

        for(j=i; j>=0; j--){
            t = t+a*pow(10, j);
        }

        printf("+%d", t);
        //printf("第%d次:%d\n", i+1, t);
        S = S+t;
    }
    
    printf("=%d", S);
    
    return 0;
}

运行结果:

请输入a的值:2
请输入n的值:5
2+22+222+2222+22222=24690

Snipaste_2019-04-19_13-35-02.png

C 语言 | 选择结构程序设计, 第12题

有 4 个圆塔,圆心分别为 (2, 2)、(-2, 2)、(-2, -2)、(2, -2),圆半径为 1,见下图。这 4 个塔的高度为
10m,塔以外无建筑物。今输入任何一点的坐标,求该点的建筑高度(塔外的高度为 0m)

解题思路

输入一个坐标点 x和y,判断该点与上述的 4 个坐标中的其中一个坐标的距离是否 小于或等于 圆的半径 1
如果与上述 4 个坐标 中有一个成立,则你输入的这个坐标点的建筑物高度是 10m;
否则是 0m,即在建筑物外面。

那如何计算 输入的坐标点如 (2, 2) 的距离?请查看:计算两点之间距离

C 语言代码:

#include <stdio.h>
#include <math.h>

int main() {
    double x,y,d1,d2,d3,d4;

    printf("请输入坐标:");
    scanf("%lf %lf", &x, &y);

    d1 = sqrt(pow(x-2, 2)+pow(y-2, 2));//第一象限    2, 2
    d2 = sqrt(pow(x+2, 2)+pow(y-2, 2));//第二象限   -2, 2
    d3 = sqrt(pow(x+2, 2)+pow(y+2, 2));//第三象限   -2,-2
    d4 = sqrt(pow(x-2, 2)+pow(y+2, 2));//第四象限    2,-2

    if(d1<=1 || d2<=1 || d3<=1 || d4<=1) {
        printf("该点的建筑高度是 10m");
    } else {
        printf("该点的建筑高度是 0m");
    }

    return 0;
}

运行结果:

请输入坐标:1.5 2.3
x=1.500000      y=2.300000
该点的建筑高度是 10m
--------------------------------
Process exited after 7.869 seconds with return value 0
请按任意键继续. . .