如何用C语言做出下面规定的条件?

某班有30个学生,按如下要求编写程序。

(1)用input( )函数输入学生的学号、姓名、数学成绩、计算机成绩;

(2)用output( )函数输出每个同学的学号、姓名、数学成绩、计算机成绩;

(3)用avg( )函数输出每个同学的平均分;

(4)用pass( )函数统计两门课成绩都及格的学生人数;

(5)用maxc( )函数输出计算机成绩最高的学生;

(6)在main( )函数中调用这些函数。

#include <stdio.h>
#define STUDENTS_NUMBER 3
struct Student{
    long num;   // 学号
    char name[20];  // 姓名
    float score[2];  // 数学计算机成绩
    float aver;     // 平均成绩
};

struct Student* input(struct Student students[]);
void output(struct Student *p1);
void avg(struct Student *p1);
void pass(struct Student *p1);
void maxc(struct Student student[]);

int main(void)
{
    struct Student students[STUDENTS_NUMBER];
    struct Student *p = students, *p1;

    p1 = input(p);
    output(p1);
    avg(p1);
    pass(p1);
    maxc(students);

    return 0;
}

struct Student* input(struct Student students[])
{
    int i;
    printf("输入学生信息(学号,姓名,数学,计算机成绩,不同信息用空格分隔)\n");
    printf("在此开始输入:");
    for (i = 0; i < STUDENTS_NUMBER; i++){
        scanf("%ld %s %f %f", &students[i].num, students[i].name, &students[i].score[0], &students[i].score[1]);
        students[i].aver = (students[i].score[0] + students[i].score[1]) / 2;
    }
    return students;
}

void output(struct Student *p1)
{
    int i;
    for (i = 0; i < STUDENTS_NUMBER; i++){
        printf("==========第%d位学生成绩==========\n", i+1);
        printf("学号:%ld\n姓名:%s\n数学成绩:%f\n计算机成绩:%f\n", p1->num, p1->name, p1->score[0], p1->score[1]);
    }
}

void avg(struct Student *p1)
{
    int i;
    for (i = 0; i < STUDENTS_NUMBER; i++){
        printf("==========第%d位学生的平均分==========\n", i+1);
        printf("学号:%ld\n姓名:%s\n平均分:%f\n", p1->num, p1->name, p1->aver);
    }
}

void pass(struct Student *p1)
{
    int pass = 0, i;
    for (i = 0; i < STUDENTS_NUMBER; i++){
        if (p1->score[0] >= 60 && p1->score[1] >= 60) {
            pass++;
        }
    }
    printf("\n");
    printf("两门课都及格的人数有:%d人\n", pass);
    printf("两门课都不及格的人数有:%d人\n", STUDENTS_NUMBER - pass);
    printf("\n");
}

void maxc(struct Student students[])
{
    int i, max = 0;
    float aver;

    for (i = 0; i < STUDENTS_NUMBER; i++) {
        if (students[i].aver > students[max].aver) {
            max = i;
        }
    }
    printf("*****计算机成绩最高学生*****\n");
    printf("学号:%ld\n姓名:%s\n计算机分数:%f\n", students[max].num, students[max].name, students[max].score[1]);
}

 

#include <stdio.h>
typedef struct _student
{
    char id[20];
    char name[20];
    float maths;
    float comp;
}student;

void input(student *p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
         printf("请输入第%d个学生的学号、姓名、数学成绩和计算机成绩:\n",i+1);
         scanf("%s%s%f%f",p[i].id,p[i].name,&p[i].maths,&p[i].comp);
    }
}
void output(student *p,int n)
{
    int i=0;
    printf("%21s%21s%20s%20s\n","学号","姓名","数学成绩","计算机成绩");
    for(i=0;i<n;i++)
      printf("%21s%21s%20.1f",%20.1f\n",p[i].id,p[i].name,p[i].maths,p[i].comp);
}

void avg(student *p,int n)
{
    int i=0;
    printf("%21s%20s\n","姓名","平均分");
    for(i=0;i<n;i++)
        printf("%21s%20.1f\n",p[i].name,(p[i].maths+p[i].comp)/2);
}

int pass(student *p,int n)
{
    int i=0,count=0;
    for(i=0;i<n;i++)
        if(p[i].maths>=60 && p[i].comp>=60)
            count++;
     return count;
}

void maxc(student *p,int n)
{
    int m = 0;
    int i=0;
    int idx = 0;
    for(i=0;i<n;i++)
    {
        if(p[i].comp > m)
        {
            m = p[i].comp;
            idx = i;
        }
    }
    printf("计算机最高分学生为:%s\n",p[idx].name);
}

int main()
{
    int count = 0;
    student stu[30];
    input(stu,30);
    output(stu,30);
    avg(stu,30);
    count = pass(stu,30);
    printf("两门课都及格的有%d个人\n",count);
    maxc(stu,30);
    return 0;
}

首先明确数据类型为结构体,对于每一个学生都有学号、姓名、数学成绩、计算机成绩,外加平均分一项

struct student {
    char no[10];
    char name[10];
    float math_score;
    float pc_score;
    float avg;
} stu[30];

所以定义一个大小为30的结构体数组
剩下的就是写几个函数,先录入学生信息然后在这个结构体数组里面统计、增加平均分、查找符合条件的学生就行

凑个热闹


/*
某班有30个学生,按如下要求编写程序。
(1)用input( )函数输入学生的学号、姓名、数学成绩、计算机成绩;
(2)用output( )函数输出每个同学的学号、姓名、数学成绩、计算机成绩;
(3)用avg( )函数输出每个同学的平均分;
(4)用pass( )函数统计两门课成绩都及格的学生人数;
(5)用maxc( )函数输出计算机成绩最高的学生;
(6)在main( )函数中调用这些函数。
*/

#include <string.h>
#include <stdio.h>
#define N 30                            // 学生数量 

struct Student                          // 声明结构体类型 
{
    int num;                              // 学号 
    char name[20];                         // 姓名 
    float math_score, computer_score;    // 数学成绩、计算机成绩 
    float aver;                            // 平均成绩 
};

void input(struct Student stu[])        // 定义input函数 
{
    int i;
    printf("请输入各学生信息:学号、姓名、数学成绩、计算机成绩:\n");
    for(i=0; i<N; i++)
    {
        // 输入数据 
        scanf("%d %s %f %f", &stu[i].num, &stu[i].name, &stu[i].math_score, &stu[i].computer_score);
        stu[i].aver = (stu[i].math_score + stu[i].computer_score) / 2.0;
    }
}

void output(struct Student stu[])        // 定义output函数 
{
    int i;
    printf("各学生信息:学号、姓名、数学成绩、计算机成绩:\n");
    for(i=0; i<N; i++)
    {
        // 输出数据 
        printf("%d %s %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].math_score, stu[i].computer_score);    
    }
}

void avg(struct Student stu[])          // 定义avg函数 
{
    int i;
    printf("各学生平均分:\n");
    for(i=0; i<N; i++)
    {
        // 输出数据 
        printf("姓名:%s, 平均分:%.2f\n", stu[i].name, stu[i].aver);
    }
}


int pass(struct Student stu[])          // 定义pass函数 
{
    // 统计两门课成绩都及格的学生人数
    int i;
    int count = 0;
    for(i=0; i<N; i++)
    {
        if(stu[i].math_score >= 60 && stu[i].computer_score >= 60)
            count++;
    }
    return count;
}


struct Student maxc(struct Student stu[])  // 定义maxc函数 
{
    int i,m=0;
    for(i=0; i<N; i++)
    {
        if(stu[i].computer_score > stu[m].computer_score)
        {
            m = i;
        }
    }
    printf("计算机成绩最高的学生为:%s\n", stu[m].name);
}


int main()
{
    struct Student stu[N], *p = stu;
    input(p);
    output(p);
    avg(p);
    printf("两门课成绩都及格的学生人数为:%d\n", pass(p));
    maxc(p);
}