ls布置的c语言任务,自己写的老是有误差,应该怎么写啊?

ls布置的c语言任务,自己写的老是有误差,应该怎么写啊?要求用函数,且保留6位小数

img

供参考:

#include <stdio.h>
int main()
{
    int    n, i;
    double s = 1.0, t = 1.0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        t *= i * 1.0 / (2 * i + 1);
        s += t;
    }
    printf("%.10f", s);
    return 0;
}

用函数这么写,供参考:

#include <stdio.h>
double fun(int n)
{
    int i;
    double s = 1.0, t = 1.0;
    for (i = 1; i <= n; i++)
    {
        t *= i * 1.0 / (2 * i + 1);
        s += t;
    }
    return s;
}
int main()
{
    int    n;
    scanf("%d", &n);
    printf("%.10f", fun(n));
    return 0;
}

#include <stdio.h>
double calcn(n)
{
int a = 1;
int b = 1;
for (int i = 1; i <= n; i++)
{
a *= i;
b *= ((i * 2) + 1);
}
return a / (double)b;
}
int main()
{
int n;
double s = 1;
scanf("%d", &n);
for (int i = 1; i < n; i++)
s += calcn(i);
printf("%.6lf", s);
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7704268
  • 这篇博客你也可以参考下:C语言实现 设计一个递归算法,删除不带头结点的单链表L中所有值为X的节点
  • 除此之外, 这篇博客: c语言格式化输出控制长度中的 今天在实现ls命令的时候,输出的文件名是上下对齐: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1    2    a.c    b    crawler  text  公共的  视频  文档  音乐
    1.c  2.c  a.out  b.c  git      win   模板    图片  下载  桌面

    便想着实现对齐,想到了c的格式化输出:

    printf("%-10s",s);

    这样便实现了将字符串s占10格居左输出.
    但却由一个难以解决的问题,上述的 10 不能提前预支,是程序运行时计算出来的,便想着能否这样输出:

    int a=5;
    char s[]="hell";
    printf("%-%ds",a,s);

    实际证明这样时不行的,必须想别的解决办法.
    然后观察printf的格式,printf的格式控制是在”“之中的,是否意味着可以用字符串代替”“,然后尝试:

    char a[]="%05s";
    char s[]="hello";
    printf(a,s);

    成功输出:

         hello

    看来这样可行,便编写了代码:

        int n=13;
        char na[3];
        if(n > 9) {
            na[0] = (n/10) + 48;
            na[1] = (n%10) + 48;
            na[2] = '\0';
        }
        else {
            na[0] = n + 48;
            na[1] = '\0';
        }
        char a[10]="%-";
        strcat(a,na);
        char s[]="s ";
        strcat(a,s);
        char b[]="hellow";
        puts(a);
        printf(a,b);

    n为ls输出的文件名的最大长度(目测应该不会大于99).