c语言用图中公式设计程序,首先输入一个字符,如果不是1到18得整数,则break,如果是,则用图中公式计算e得值到小数点后相应位数

img

代码如下:

#include <stdio.h>

long long jc(int n)
{
    long long s = 1;
    int i;
    for(i=1;i<=n;i++)
        s*=i;
    return s;
}

double power(int n)
{
    double s=1.0;
    int i=0;
    for(;i<n;i++)
        s/=10;
    return s;
}


int main()
{
    double e=0;
    double r2=1,ex;
    int k;
    char c ;
     
    while(1)
    {
        c = getchar();
        if(c>=1 && c<=18)
            break;
    }
    ex = power((int)c)/2;
    k = 0;
    while(1)
    {
        r2 = (double)(k+1)/jc(k);
        if(r2 < ex )
            break;
        e += r2;
        k++;
    }
    e/=2.0;
    switch((int)c)
    {
    case 1:
        printf("%.1lf",e);break;
    case 2:
        printf("%.2lf",e);break;
    case 3:
        printf("%.3lf",e);break;
    case 4:
        printf("%.4lf",e);break;
    case 5:
        printf("%.5lf",e);break;
    case 6:
        printf("%.6lf",e);break;
    case 7:
        printf("%.7lf",e);break;
    case 8:
        printf("%.8lf",e);break;
    case 9:
        printf("%.9lf",e);break;
    case 10:
        printf("%.10lf",e);break;
    case 11:
        printf("%.11lf",e);break;
    case 12:
        printf("%.12lf",e);break;
    case 13:
        printf("%.13lf",e);break;
    case 14:
        printf("%.14lf",e);break;
    case 15:
        printf("%.15lf",e);break;
    case 16:
        printf("%.16lf",e);break;
    case 17:
        printf("%.17lf",e);break;
    case 18:
        printf("%.18lf",e);break;
    
    }
    
    return 0;
}

前面是求和,后面是计算阶乘。

#include <stdio.h>
int main()
{
    int n,i=1;
    long long k=1;
    double item = 1;
    double res = 1;
    while(1)
    {
        scanf("%d",&n);
        if(n>=1 && n<=18)
            break;
    }
    while(item >= 1e-6)
    {
        k*=i;
        item = (i+1.0)/k;
        res += item;
        i++;
    }
    res = res/2;
    printf("%d.",(int)res);
    item = res - (int)res;
    for(i=0;i<n;i++)
        item *= 10;
    printf("%lld",(long long)item);
    return 0;
}