美高梅4858-美高梅4858mgm-[官方网站]

分类 C/C++ 下的文章

[C语言]用递归法求n阶勒让德多项式

题目

用递归法求n阶勒让德多项式,递归公式为:

        { 1                                     (n=0)
Pn(x) = { x                                     (n=1)
        { ((2n-1)*x-Pn-1(x)-(n-1)*On-2(x))/n    (n>=1)

用递归法求n阶勒让德多项式,递归公式为

解题思路

  1. 要求输入 n 和 x 的值
  2. 输出 Pn(x) 的值

C语言代码实现

#include "stdio.h"

int main(){
    double legendre(double n, double x);//声名自定义的函数 legendre
    double n,x;
    
    printf("请输入n、x(空格隔开):");
    scanf("%lf %lf", &n, &x);
    
    printf("结果:%lf", legendre(n, x));

    return 0;
}

double legendre(double n, double x){
    double s;

    if(n == 0){
        s = 1;
    }else if(n == 1){
        s = x;
    }else if(n > 1){
        //使用递归 legendre(n-1.0, x)、legendre(n-2.0, x)
        s = ((2.0*n-1.0)*x-legendre(n-1.0, x)-(n-1.0)*legendre(n-2.0, x))/n;
    }

    return s;
}

测试

输入 n 和 x 的值为:22

预想返回结果:1.5

请输入n、x(空格隔开):2 2
结果:1.500000

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

XML 地图 | Sitemap 地图