拿c语言怎么写,总是写不全

img


这个那c语言怎么写,到比大小那里就写不出来了,不知道从哪里开始写,能不能写一下

为啥不让定义个结构体呢???搞那么多数组多麻烦

#include <stdio.h>
int main()
{
    int n;
    float score[30][3];
    int num[30],s[30] = {0};
    float sum[30] = {0};
    float aver[30],ft;
    int i,j,t;
    printf("输入学生人数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
        s[i] = i;
    printf("输入学生序号及三门课成绩:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&num[i]);
        for(j=0;j<3;j++)
        {
            scanf("%f",&score[i][j]);
            sum[i] += score[i][j];
        }
        aver[i] = sum[i]/3;
    }
    //
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(sum[j] < sum[j+1])
            {
                t = sum[j];
                sum[j] = sum[j+1];
                sum[j+1] = t;
                t = s[j];
                s[j] = s[j+1];
                s[j+1] = t;
                t = num[j];
                num[j]= num[j+1];
                num[j+1] = t;
            }
        }
    }
    //
    printf("%10s%10s%10s%10s%10s%10s\n","学号","数学","英语","计算机","总分","平均分");
    for(i=0;i<n;i++)
    {
        printf("%10d%10.1f%10.1f%10.1f%10.1f%10.1f\n",num[i],score[s[i]][0],score[s[i]][1],score[s[i]][2],sum[i],aver[s[i]]);
    }
    printf("输入查找学号:");
    int oneNum;
    scanf("%d",&oneNum);
    for(i=0;i<n;i++)
    {
        if(num[i] == oneNum)
        {
            printf("%10s%10s%10s%10s%10s%10s\n","排名","数学","英语","计算机","总分","平均分");
            printf("%10d%10.1f%10.1f%10.1f%10.1f%10.1f\n",i+1,score[s[i]][0],score[s[i]][1],score[s[i]][2],sum[i],aver[s[i]]);
            break;
        }
    }
    if(i==n)
        printf("查无此人");
    return 0;
}


#include  <stdio.h>  
#define STU 30  
#define COURSE 3  
void Input(long num[], int score[][COURSE], int n);
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[]);
void Sort(long num[], int score[][COURSE], int n, int sum[], float aver[]);
void Print(long num[], int score[][COURSE], int n, int sum[], float aver[]);
int Search(long num[], int n, long x);
 
int main(void)  
{  
    int n, score[STU][COURSE],sum[STU],pos;  
    long num[STU],x;  
    float aver[STU];  
    printf("Please enter the total number of the students(n<=30):");  
    scanf("%d", &n);                    //输入参加考试的学生人数  
    printf("Enter No. and score as: MT  EN  PH\n");  
    Input(num, score, n);                //输入学生成绩
    GetSumAver(score, n, sum, aver);    //计算总分和平均分  
    printf("Before sort:\n");  
    Print(num, score, n, sum, aver);  
    Sort(num, score, n, sum, aver);        //排名次  
    printf("After sort:\n");  
    Print(num, score, n, sum, aver);
    printf("Please enter searching number:\n");
    scanf("%ld", &x);//以长整型的格式输入待查找学生的学号
    pos = Search(num, n, x); //名次查询
    if(pos != -1)
    {
        printf("position:   %8s\t|%6s%6s%6s%7s%8s\n","  NO    ","MT","EN","PH","SUM","AVER"); 
        printf("%8d    %4ld\t|%6d%6d%6d%7d%8.0f\n",
               pos+1, num[pos], score[pos][0], score[pos][1], score[pos][2], sum[pos], aver[pos]);
 
    }
    else
    {
        printf("Not found!\n");
    }
    return 0;  
}  
 
// 函数功能:输入某班学生期末考试三门课程成绩  
void Input(long num[], int score[][COURSE], int n)  
{  
    int  i, j;  
    for (i=0; i<n; i++)  
    {  
        scanf("%ld", &num[i]);  
        for (j=0; j<COURSE; j++)  
        {  
                scanf("%d", &score[i][j]);  
        }  
    }  
}
 
// 函数功能:计算每个学生的总分和平均分,结果存入对应的sum数组和aver数组  
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])
{
    int i, j;
    for(i=0; i<n; i++)
    {
        sum[i] = 0;
        for(j=0; j<COURSE; j++)
        {
            sum[i] = sum[i] + score[i][j];
        }
        aver[i] = (float)sum[i] / COURSE;
    }
}
 
// 函数功能:按总分成绩由高到低排出成绩的名次。注意,对应的学号、成绩、总分和平均分都需要保持一致
void Sort(long num[], int score[][COURSE], int n, int sum[], float aver[])
{
    int i, j, k, m;
    int temp1;
    long temp2;
    float temp3;
    for(i=0; i<n-1; i++)
    {
        k = i;
        for(j=i+1; j<n; j++)
        {
            if(sum[j] > sum[k])
            {
                k =j;
            }
        }
        if(k != i)
        {
            temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;
            temp2 = num[k]; num[k] = num[i]; num[i] = temp2;
            temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;
            for(m=0; m<COURSE; m++)
            {
                temp1 = score[k][m];
                score[k][m] = score[i][m];
                score[i][m] = temp1;
            }
        }
    }
}
 
// 函数功能:输出名次表,表格内包括学生编号、各科分数、总分和平均分  
void Print(long num[], int score[][COURSE], int n,  
            int sum[], float aver[])  
{  
    int  i, j;
    printf("%8s\t|%6s%6s%6s%7s%8s\n","  NO    ","MT","EN","PH","SUM","AVER");  
    printf("---------------------------------------------------\n");
    for (i=0; i<n; i++)  
    {  
        printf("%ld\t|", num[i]);  
        for (j=0; j<COURSE; j++)  
        {  
                printf("%6d", score[i][j]);  
        }  
        printf("%7d%8.0f\n", sum[i], aver[i]);  
    }  
}
 
//函数功能:在学号数组中顺序查找学生学号
//              找到时,返回学生学号在学号数组中的小标位置,否则返回值-1
int Search(long num[], int n, long x)
{
    int i;
    for(i=0; i<n; i++)
    {
        if(num[i] == x)
        {
            return i;
        }
    }
    return -1;
}

用结构体应该比较方便吧

这种简单的算法还是自己慢慢想吧