C语言定义30名学生包含成绩,姓名和学号实际人数从键盘输入,使用选择法
时间: 2024-12-22 21:19:20 浏览: 4
在C语言中,如果你想定义一个结构体来表示30名学生的信息,并根据实际人数从键盘动态输入,你可以创建一个名为`Student`的结构体,包括`name`(姓名)、`student_id`(学号)和`score`(成绩)。然后,你可以使用数组或动态内存分配(如`malloc`)来存储这些学生的数据。这里是一个基本的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
struct Student {
char name[50];
int student_id;
float score;
};
int main() {
int num_students; // 学生总数
printf("请输入学生总人数: ");
scanf("%d", &num_students);
struct Student *students = (struct Student*) malloc(num_students * sizeof(struct Student)); // 动态分配内存
if (students == NULL) {
printf("内存分配失败!\n");
return 1;
}
for (int i = 0; i < num_students; i++) {
printf("请输入第%d位学生的姓名: ", i+1);
fgets(students[i].name, sizeof(students[i].name), stdin); // 防止换行符
students[i].name[strcspn(students[i].name, "\n")] = '\0'; // 清除换行符
printf("请输入第%d位学生的学号: ", i+1);
scanf("%d", &students[i].student_id);
printf("请输入第%d位学生的成绩: ", i+1);
scanf("%f", &students[i].score);
}
// 使用选择法或其他操作对这些学生数据进行处理...
// 示例:按分数排序
// qsort(students, num_students, sizeof(struct Student), compare_scores);
// ...然后可以询问用户是否继续输入或进行其他操作
free(students); // 释放内存
return 0;
}
// 比较函数(根据需要自定义)
int compare_scores(const void* a, const void* b) {
const struct Student* s1 = a;
const struct Student* s2 = b;
return (s2->score > s1->score) ? -1 : ((s2->score < s1->score) ? 1 : 0);
}
阅读全文