阅读以下应用程序说明和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;