请通过定义结构体,分别定义函数完成如 下功能: 1、输入3个学生的信息 2、按成绩排序 3、按姓名排序 4、统计男生所占比例 (提醒:排序交换时,交换 a[i]a[j],就可以把两行同时交 换,不需要每个成员变量分别 交换。)
时间: 2024-05-11 20:15:54 浏览: 35
好的,我会根据您的要求回答问题。以下是答案:
定义结构体:
```
typedef struct {
char name[20];
int score;
char gender;
} Student;
```
输入3个学生的信息:
```
void input(Student* students) {
for (int i = 0; i < 3; i++) {
printf("请输入第%d个学生的姓名、成绩和性别(m表示男性,f表示女性):\n", i + 1);
scanf("%s %d %c", students[i].name, &students[i].score, &students[i].gender);
}
}
```
按成绩排序:
```
void sort_by_score(Student* students) {
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
if (students[i].score < students[j].score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
```
按姓名排序:
```
void sort_by_name(Student* students) {
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
if (strcmp(students[i].name, students[j].name) > 0) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
```
统计男生所占比例:
```
float get_male_ratio(Student* students) {
int male_count = 0;
for (int i = 0; i < 3; i++) {
if (students[i].gender == 'm') {
male_count++;
}
}
return (float)male_count / 3.0;
}
```
注意:以上代码没有进行错误处理,例如输入的成绩类型为非数字或性别不是 m 或 f。如果需要使用,请根据实际情况进行修改。
阅读全文