请使用C语言,请建立学生数组s1,输入下表s1中的信息,再建立成绩数组s2,输入下表s2中的数据,将数组s2的数据按学号加入到数组s1中并计算总分。计算s1表中的总分平均分avg,找出数组s1中总分大于avg的学生并显示其所有项,要求显示时各栏数据上下对齐。两个表的信息如下: 例如,先显示提示文字: 输入s1表学生的学号、姓名、性别、出生日期: 再输入6个学生的基本信息: 221001 张三 男 2004-3-15 221002 李四 女 2005-12-10 221003 王五 男 2004-4-12 221004 刘一 男 2003-12-5 221005 陈二 男 2004-1-10 221006 赵六 女 2005-6-18 再显示提示文字: 输入s2表学生的学号、三门课的成绩: 再输入6个学生的成绩信息: 221003 75 80 80 221005 80 92 85 221006 88 85 98 221004 82 88 86 221001 85 95 85 221002 90 80 95
时间: 2024-02-14 08:06:31 浏览: 105
用指针移位或指针名下标来访问数组元素。-指针与引用
好的,我来给您编写这个程序。
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 6 // 最大学生数
// 学生结构体
struct student {
char id[10]; // 学号
char name[20]; // 姓名
char gender[4]; // 性别
char birth[20]; // 出生日期
int score[3]; // 成绩
int total_score; // 总分
};
int main() {
struct student s1[MAX_STUDENT]; // 学生数组
int s2[MAX_STUDENT][4]; // 成绩数组
int i, j, sum = 0;
float avg;
// 输入学生信息
printf("输入s1表学生的学号、姓名、性别、出生日期:\n");
for (i = 0; i < MAX_STUDENT; i++) {
printf("学生%d:", i + 1);
scanf("%s %s %s %s", s1[i].id, s1[i].name, s1[i].gender, s1[i].birth);
s1[i].total_score = 0; // 初始化总分
}
// 输入成绩信息
printf("输入s2表学生的学号、三门课的成绩:\n");
for (i = 0; i < MAX_STUDENT; i++) {
printf("学生%d:", i + 1);
scanf("%s %d %d %d", s1[i].id, &s2[i][0], &s2[i][1], &s2[i][2]);
// 计算总分
for (j = 0; j < 3; j++) {
s1[i].score[j] = s2[i][j];
s1[i].total_score += s2[i][j];
}
}
// 计算平均分
for (i = 0; i < MAX_STUDENT; i++) {
sum += s1[i].total_score;
}
avg = (float) sum / MAX_STUDENT;
// 输出总分大于平均分的学生信息
printf("总分大于平均分的学生信息:\n");
printf("学号\t姓名\t性别\t出生日期\t语文\t数学\t英语\t总分\n");
for (i = 0; i < MAX_STUDENT; i++) {
if (s1[i].total_score > avg) {
printf("%s\t%s\t%s\t%s\t", s1[i].id, s1[i].name, s1[i].gender, s1[i].birth);
for (j = 0; j < 3; j++) {
printf("%d\t", s1[i].score[j]);
}
printf("%d\n", s1[i].total_score);
}
}
return 0;
}
```
程序的主要思路是:
1. 定义一个学生结构体,包含学号、姓名、性别、出生日期、成绩、总分等信息。
2. 定义一个二维数组作为成绩数组,每个学生的成绩保存在一个一维数组中。
3. 先输入学生信息,再输入成绩信息,同时计算每个学生的总分。
4. 计算总分平均分,找出总分大于平均分的学生,输出其信息。
这个程序可能比较长,但是思路比较清晰,我相信您可以看懂。
阅读全文