网友您好, 请在下方输入框内输入要搜索的题目:
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。
【说明】
以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底的顺序)、总成绩、同一名次的学生人数、同一名次学生的学号(按学号由小到大的顺序)。
该应用程序约定学生学习课程不超过30种,课程成绩文件的第1个数字就是课程号。统计过程中,同一课程号的成绩文件不能重复输入。
该应用程序采用链表结构存储学生的相关信息,链表中的每个表元对应一位学生。在数据输入过程中,形成一个按学号从小到大顺序链接的有序链表。当数据输入结束后,程序按总成绩从高到低,学号从小到大的顺序对链表排序。最后程序按指定格式输出链表中的信息。
【C程序】
include<stdio.h>
define M 30
define NLEN 10
typedef struct node {
int cur_s; /* 最近输入成绩的科目*/
Char no[NLEN];
int score;
struct node *next;
} NODE;
int s[M], sp, ss, i, mark, order, C;
FILE *fp; NODE *h, *U, *V, *p;
Char fname[80], no[NLEN], ans;
main()
{ for(h = NULL, sp = 0; ;)
{ printf("输入科目成绩文件名(输入aaaa表示强行结束)。 \n");
while(1)
{ scanf("%s", fname);
if (strcmp(fname, "aaaa") == 0)
break;
if ((fp = fopen(fname, "r")) == NULL)
printf("不能打开文件%s, 请重新输入科目文件名。 \n", fname);
else
break;
}
if (strcmp(fname, "aaaa") == 0) break;
fscanf(fp, "%d", &ss); /* 输入科目号 */s[sp]=s;
for (i=0; s[i] ! = ss; 1++);
if ( (1) )
{ printf("该科目的成绩已输入,请输入别的科目成绩文件。\n");
continue;
}
sp++;
while (fscanf(fp, "%s%d", no, &mark) == 2)
{ /* 在链表中寻找最近输入的学号 */
for(v = h; v != NULL && strcmp(v-> no, no)<0; u=v, v= v-> next);
if (v !=NULL && strcmp(v->no, nb) == 0)
{ /* 该生已有成绩 */
if (V->cur_s != ss)
{ /* 该生的当前科目成绩是第一次输入 */
v->score += mark; /* 累计总成绩 */
v->cur_s = ss;
} /* 同一科目成绩重复输入,后输入成绩被忽略 */
}
else
{ p = (NODE *)malloc(sizeof(NODE)); /* 一位新的学生 */
strcpy(p->no,no);
p->score = mark;
p->cur_s = ss;
p-> next = v;
参考答案