#include<stdio.h> struct student{int num;char name[20];int score;}stu[5]; main() {struct student*pt,*p[5]; int i,j,k,sum=0; for(i=0;i<5;i++) {scanf('%d%s%d",&stu[i].num,stu[i].name,&stu[i].score); p[i]=&stu[i]; sum=sum+____________; } for(i=0;i<5;i++) {k=i; for(j=i;j<5;j++) if(______)k=j; if(k!=i){pt=p[i];p[i]=p[k];p[k]=pt;} } for(i=0;i<5;i++) printf(“%d,%s,%d",________); printf("Average=%d\n",__________); }
时间: 2023-07-14 09:54:49 浏览: 27
这是一段C语言代码,其中有一些空缺需要填充。根据代码逻辑和语法,我来回答您的问题:
该代码的作用是什么?
该代码的作用是输入5个学生的学号、姓名和成绩,然后按照成绩从高到低排序,并输出每个学生的学号、姓名和成绩,以及平均成绩。
请问应该在空缺处填什么?
1. 第一个空缺应该填:stu[i].score
2. 第二个空缺应该填:p[j]->score > p[k]->score
3. 第三个空缺应该填:p[i]->num, p[i]->name, p[i]->score
4. 第四个空缺应该填:sum/5
相关问题
#include<stdio.h> #include <stdio.h> struct student { int num; char name[20]; int score;}stu[5]; main() { struct student *pt,*p[5]; int i, j, k,sum=0; for(i=0;i<5;i++) {scanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].score); p[i]=&stu[i]; sum=sum+p[i]; } for(i=0;i<5;i++) { k=i; for(j=i;j<5;j++) if( &stu[j].score>&stu[k].score) k=j; if(k!=i) { pt=p[i]; p[i]=p[k]; p[k]=pt;} } for(i=0;i<5;i++) printf("%d, %s, %d", &stu[i].num,stu[i].name,&stu[i].score); printf("Average=%d\n", sum/10); }
这段代码存在一些错误,可能是因为复制时出现了问题。这里给您列出了一些可能的错误:
1. 在第一行和第二行中重复包含了<stdio.h>头文件。
2. 结构体中的成员变量score应该是整型,而不是字符型。应该改为:int score;
3. 在第11行中,计算sum时应该加上p[i]->score而不是p[i]。
4. 在第23行中,printf语句中应该使用p[i]->num、p[i]->name和p[i]->score而不是&stu[i].num、stu[i].name和&stu[i].score。因为p[i]指向了结构体数组中的元素,而不是数组本身。
5. 在第24行中,计算平均值时应该除以5而不是10。
6. 缺少对结构体指针pt的定义。
有了这些修改,代码将会变得更加稳定,如下所示:
```c
#include <stdio.h>
struct student {
int num;
char name[20];
int score;
} stu[5];
int main() {
struct student *pt, *p[5];
int i, j, k, sum = 0;
for(i = 0; i < 5; i++) {
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
p[i] = &stu[i];
sum += p[i]->score;
}
for(i = 0; i < 5; i++) {
k = i;
for(j = i; j < 5; j++) {
if(p[j]->score > p[k]->score) {
k = j;
}
}
if(k != i) {
pt = p[i];
p[i] = p[k];
p[k] = pt;
}
}
for(i = 0; i < 5; i++) {
printf("%d, %s, %d\n", p[i]->num, p[i]->name, p[i]->score);
}
printf("Average=%d\n", sum / 5);
return 0;
}
```
# include <stdio.h> #include<stdlib.h> struct student { int num; char name[20]; float score; }; int main() { struct student *stu; int i,imax=0,n; printf(" 请输入人数:"); scanf("%d",&n); stu=_____(1)_____; //生成动态数组 printf(" 请输入学生信息:\n"); for(i=0;i<n;i++) scanf ("%d%s%f", _____(2)_____); imax=0; for(i=1;i<n;i++) { if(____(3)_____) imax=i; } printf("\n 最高分:\n"); printf("学号:%d 姓名:%s 成绩:%4.1f\n", stu[imax].num,stu[imax].name,stu[imax].score); return 0; }
程序补充完整如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
float score;
};
int main() {
struct student *stu;
int i, imax = 0, n;
printf("请输入人数:");
scanf("%d", &n);
stu = (struct student*) malloc(n * sizeof(struct student)); //生成动态数组
printf("请输入学生信息:\n");
for(i = 0; i < n; i++) {
scanf("%d%s%f", &stu[i].num, stu[i].name, &stu[i].score);
}
imax = 0;
for(i = 1; i < n; i++) {
if(stu[i].score > stu[imax].score) {
imax = i;
}
}
printf("\n最高分:\n");
printf("学号:%d 姓名:%s 成绩:%4.1f\n", stu[imax].num, stu[imax].name, stu[imax].score);
free(stu);
return 0;
}
```
程序的具体逻辑如下:
1. 定义了一个结构体 `student`,包含学生的学号、姓名和成绩。
2. 定义了一个指向结构体的指针 `stu`,用于指向动态数组。
3. 通过 `malloc` 函数动态生成大小为 `n * sizeof(struct student)` 的数组,并将其指针赋值给 `stu`。
4. 循环输入每个学生的学号、姓名和成绩,存储在结构体数组中。
5. 循环查找最高分的学生,记录其下标 `imax`。
6. 输出最高分的学生的学号、姓名和成绩。
7. 释放动态数组的内存,程序结束。