C 语言教程 在线

1740c-exercise-example24

由规律可以看出,这其实是一个斐波那契数列的除法,我们可以直接用递归写一个斐波那契的通项。然后在求和。

#include <stdio.h>

int Fibonacci(int a, int b, int n)
{
    if (n < 0)
    {
        return 0;
    }
    else if (n == 1)
    {
        return 1;
    }
    else if (n == 2)
    {
        return b;
    }
    else
    {
        return Fibonacci(b, a + b, n - 1);
    }
}

int main(void)
{
    float sum=0;
    int i;
    for (i=2;i<22;i++)
    {
        float son = Fibonacci(1,1,i+1);
        float mother = Fibonacci(1,1,i);
        // 这里不能直接用Fibonacci(1,1,i+1)/Fibonacci(1,1,i),不定义类型会返回一个整除的值,导致结果有误,这是个坑。
        sum = sum + son/mother;
        printf("%d/%d\n",Fibonacci(1,1,i+1),Fibonacci(1,1,i));
    }
    printf("求和得 %9.6f",sum);
    return 0;
}

1739c-exercise-example24

参考解法

#include <stdio.h>
int main()
{
    int i;
    float a[21];
    float s;
    a[0]=1;
    a[1]=2;
    s=a[1]/a[0];
    for(i=2;i<=20;i++)
    {
        a[i]=a[i-1]+a[i-2];
        s+=a[i]/a[i-1];
    }
    printf("s=%f\n",s);
    return 0;
}

1738c-exercise-example23

参考方法:

#include<stdio.h>
int main(void)
{
    int i,j,k;
    for(i = 0;i <= 3; i++)
    {
        for(j = 1;j <= 3 - i; j++)
            printf(" ");
        for(k = 1; k <= 2*i+1; k++)
            printf("*");
        printf("\n");
    }
    for(i = 1; i <= 3; i++)
    {
        for(j = 1; j <= i; j++)
            printf(" ");
        for(k = 1; k <= 7-2*i; k++)
            printf("*");
        printf("\n");
    }
    return 0;
}

1737c-exercise-example23

参考方法:

#include<stdio.h>

int main(void)
{
    int i, j;
    int n;   
    printf("我也不知道你要打印多大的图案:");
    scanf("%d", &n);  
    for (i = 0; i < 2*n+1; i++)
    {
        for (j = 0; j < 2*n+1; j++)
        {
            if (i+j >= n && i+j <= 3*n && j-i <= n && i-j <= n)
            {
                printf("*");
            }
            else printf(" ");
        }
        putchar(10);
    }
    return 0;
}

1736c-exercise-example23

参考方法:

#include<stdio.h>

int main()
{
    int s[7][7]={
                {0,0,0,1,0,0,0},
                {0,0,1,1,1,0,0},
                {0,1,1,1,1,1,0},
                {1,1,1,1,1,1,1},
                {0,1,1,1,1,1,0},
                {0,0,1,1,1,0,0},
                {0,0,0,1,0,0,0},
                };
    int i,j;
    for(i=0;i<7;i++)
       {
       for(j=0;j<7;j++)
       {
        if(s[i][j]==1)
        printf("*");
        else
        printf(" ");
       }
       printf("\n");
       }
       return 0;

}