定义一个二维数组,能存储任意个(由用户输入)学生的任意门(由用户输入)成绩。 输入学生的编号(数组下标),输出其所有成绩。 提示:用动态内存分配、二重指针。 效果如下: 输入: 2 3 70 65 90 88 77 95 0 输出:70 65 90,
时间: 2024-10-17 16:03:29 浏览: 47
这是一个编程题目,要求使用C语言实现一个动态数组,用于存储学生姓名和成绩的数据结构,并支持按学生编号查询成绩的功能。我们可以采用二维动态数组(即动态分配的二维指针)来解决这个问题。
首先,我们需要定义一个结构体`Student`,包含学生的编号`id`和成绩`score`:
```c
typedef struct {
int id;
double score;
} Student;
```
然后,我们创建一个函数`createArray(int numStudents, int numSubjects)`,它接受两个参数,分别是学生总数和科目数,用于动态分配二维数组:
```c
void createArray(int *numStudents, int **subjectScores, int numStudentsInput, int numSubjectsInput) {
*numStudents = numStudentsInput;
*subjectScores = (int **)malloc(numStudentsInput * sizeof(int *));
for (int i = 0; i < *numStudents; i++) {
(*subjectScores)[i] = (int *)malloc(numSubjectsInput * sizeof(int));
}
}
```
接着,编写一个输入成绩的函数`inputScores()`,让用户输入每个学生各科的成绩:
```c
void inputScores(int **subjectScores, int numStudents, int numSubjects) {
for (int i = 0; i < numStudents; i++) {
for (int j = 0; j < numSubjects; j++) {
printf("请输入学生 %d 的第 %d 科成绩:", i + 1, j + 1);
scanf("%d", &(*subjectScores)[i][j]);
}
}
}
```
最后,编写一个输出成绩的函数`outputScoreByID(int id, int **subjectScores, int numStudents)`,根据学生编号查询并打印成绩:
```c
void outputScoreByID(int id, int **subjectScores, int numStudents) {
for (int i = 0; i < numStudents; i++) {
if (i + 1 == id) {
printf("%d 的成绩有:", id);
for (int j = 0; j < numSubjects; j++) {
printf("%d ", (*subjectScores)[i][j]);
}
printf("\n");
break;
}
}
}
```
完整的程序应该包括上述各个部分,以及主函数来控制流程。运行时提示用户输入学生数量、科目数量以及每个学生各科成绩,之后可以按需要查询特定学生的成绩。
阅读全文