1、 按以下要求编写一个学生成绩处理程序: (1) 定义一个包括:学号、姓名、性别、年龄和三门课成绩(语文、数学、外语)的结构体类型struct Student。 (2) 在主函数中定义一个包括5个元素的struct Student类型的数组students。前3个学生给定初值,后两个学生的信息在main函数中调用下面的input函数从键盘输入。 (3) 实现一个画横线的函数line, 用于绘制由n个字符c输出组成的行线,函数原形如下: void line(char c,int n); 参数: c:要输出的字符,n:输出多少个 (4) 实现输入一个学生信息的函数input,函数原型如下: void input( struct Student * stud ); 参数:stud:指向要输入的学生的结构体变量或数组元素 (5) 实现输出一个学生信息的函数print,在一行中输出参数指定学生的所有信息、成绩、总分和平均分,函数原型如下: void print( struct Student * stud ); 参数:stud:指向要输出的学生的结构体变量或数组元素 (6) 实现一个输出所有学生信息的函数print_all,在该函数中输出表头,并调用print函数输出每个学生的信息及其总分和平均分,最后输出所有学生各门课(含个人总分和均分)的平均分。其原型如下: void print_all( struct Student * studs,int n ); 参数:studs:指向结构体数组的第一个元素,n:数组元素的个数 (7) 在主函数中调用input 函数输入后两个学生的信息,调用print_all函数输出所有学生的信息和各门课的平均分(含所有人总分和均分的平均分)。
时间: 2024-02-05 17:12:31 浏览: 121
```
#include <stdio.h>
#include <string.h>
// 定义结构体类型
struct Student {
char id[10];
char name[20];
char gender;
int age;
int chinese;
int math;
int english;
};
// 画横线函数
void line(char c, int n) {
for (int i = 0; i < n; i++) {
printf("%c", c);
}
printf("\n");
}
// 输入学生信息函数
void input(struct Student *stud) {
printf("请输入学生的学号、姓名、性别、年龄、语文成绩、数学成绩和英语成绩:\n");
scanf("%s %s %c %d %d %d %d", stud->id, stud->name, &stud->gender, &stud->age, &stud->chinese, &stud->math, &stud->english);
}
// 输出学生信息函数
void print(struct Student *stud) {
printf("%-10s%-20s%-5c%-5d%-5d%-5d%-5d%-5d%-5.1f\n", stud->id, stud->name, stud->gender, stud->age, stud->chinese, stud->math, stud->english, stud->chinese + stud->math + stud->english, (float)(stud->chinese + stud->math + stud->english) / 3);
}
// 输出所有学生信息和各门课平均分函数
void print_all(struct Student *studs, int n) {
// 输出表头
printf("%-10s%-20s%-5s%-5s%-5s%-5s%-5s%-5s\n", "学号", "姓名", "性别", "年龄", "语文", "数学", "英语", "总分");
line('-', 70);
// 输出每个学生的信息
for (int i = 0; i < n; i++) {
print(&studs[i]);
}
line('-', 70);
// 计算各门课平均分
int chinese_sum = 0, math_sum = 0, english_sum = 0;
float chinese_avg, math_avg, english_avg;
for (int i = 0; i < n; i++) {
chinese_sum += studs[i].chinese;
math_sum += studs[i].math;
english_sum += studs[i].english;
}
chinese_avg = (float)chinese_sum / n;
math_avg = (float)math_sum / n;
english_avg = (float)english_sum / n;
// 输出各门课平均分和所有人总分和均分的平均分
printf("%-10s%-20s%-5s%-5s%-5.1f%-5.1f%-5.1f%-5.1f\n", "平均分", "", "", "", chinese_avg, math_avg, english_avg, chinese_avg + math_avg + english_avg);
}
int main() {
// 定义结构体数组并初始化前3个学生信息
struct Student students[5] = {
{"1001", "张三", 'M', 20, 85, 90, 95},
{"1002", "李四", 'F', 19, 90, 85, 92},
{"1003", "王五", 'M', 21, 78, 88, 92}
};
// 输入后两个学生信息
input(&students[3]);
input(&students[4]);
// 输出所有学生信息和各门课平均分
print_all(students, 5);
return 0;
}
```
阅读全文