关于#c语言#的问题,请各位专家解答!解决一下思路问题

img

img

img


星号阵列和日期以及相关字符串的问题,有关思路想请专家帮忙想下思路

仅供参考

第一图

img

img

#include <stdio.h>

int gcd(int n, int j)
{
    if (n % j == 0)
        return 1;

    return 0;
}

int main(int argc, char *argv[])
{
    size_t n;
    char c = '*';

    scanf("%zd", &n);

    int a[n];
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);

    for (int i = 0; i < n; i++)
    {
        for (int j = a[i]; j > 0; j--)
        {
            if (gcd(a[i], j))
            {
                int k = j;
                while (k--)
                    printf("%c", c);
                puts("");
            }
        }
    }

    return 0;
}

第二图

img

#include <stdio.h>

int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int isleap(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        return 1;
    return 0;
}

int main(int argc, char *argv[])
{
    size_t n;

    scanf("%zd", &n);

    int arr[n][2];

    for (int i = 0; i < n; i++)
        scanf("%d%d%*d", &arr[i][0], &arr[i][1]);
    for (int i = 0; i < n; i++)
    {
        if (isleap(arr[i][0]))
            printf("366 %d\n", mon[arr[i][1]]);
        else
            printf("365 %d\n", mon[arr[i][1]]);
    }

    return 0;
}

第三图

img

#include <stdio.h>

typedef struct
{
    char name[30];
    float cj;
} p;

void bubS(p *arr, int n)
{
    p tmp;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j].cj < arr[j + 1].cj)
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

int main(int argc, char *argv[])
{
    p stu[5];
    for (int i = 0; i < 5; i++)
    {
        scanf("%29s%f", stu[i].name, &stu[i].cj);
    }

    bubS(stu, 5);

    printf("%s %d\n", stu[2].name, (int)stu[2].cj);

    return 0;
}

供参考:

//第一题
#include <stdio.h>
int main()
{
    int T,a,i,j;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &a);
        while (a){   // a == 0 退出循环
            for(i = a;i > 0;i--)//输出 a 个 '*'
                printf("*");
            printf("\n");
            for(i = a-1; i > 0;i--)//找到上一个 a 的最大因子数
               if(a % i == 0) break;
            a = i;
        }
    }
    return 0;
}



//第二题
#include <stdio.h>
int isleap(int year)//闰年判断函数,是闰年返回 1,反之返回 0
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main()
{
    int T,y,m,d;
    int M[]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    scanf("%d", &T);
    while (T--){
        scanf("%d %d %d", &y, &m, &d);
        printf("%d %d\n",isleap(y) ? 366 : 365,//是闰年就输出366,反之则输出365
                         isleap(y) && m==2 ? M[m-1]+1 : M[m-1]);//是闰年且是2月份天数+1
    }
    return 0;
}



//第三题
#include <stdio.h>
#include <string.h>
int main()
{
    int score[5],i,j,t;
    char name[5][16],ch[16];
    for (i = 0; i < 5;i++)  //输入
        scanf("%s %d", name[i], &score[i]);
    for (i = 4; i > 0; i--){ //按成绩由高到低排序
        for (j = 0;j < i; j++){
            if (score[j] < score[j+1])
            {
                strcpy(ch,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],ch);
                t = score[j]; score[j] = score[j+1]; score[j+1] = t;
            }
        }
    }
    printf("%s %d\n", name[2], score[2]); //输出排名第3的学生姓名和成绩
    return 0;
}