首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
admin
2009-02-15
45
问题
阅读以下应用程序说明和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
! = 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;
if ( v == h)
(2) ;
else
(3) ;
}
}
fclose(fp);
printf(" 还有科目成绩文件要输入吗? (Y/N) ");
scanf("%c", &ans);
if (ans == ’N’ || ans == ’n’) break;
} /* 以下按总成绩和学号对链表排序 */
v = (NODE *)malloc(sizeof(NODE));
v->next = h;
h = v;
while (v->next != NULL)
{ /* 在余下的部分链表中找总成绩高学号小的表元 */
for(p = v, u = v->next; u->next != NULL; u = u->next)
if (u->next->score > p->next->score || u->next->score
== p->next->score && strcmp(u->next->no, p->next->no) < 0)
p = u;
if (p != v)
{ u = p->next;
p->next = (4) ;
(5)= v->next;
v->next = u;
}
v = v->next;
}
v = h; h = h->next; free(v);
printf(" 名次 总成绩 人数 学号\n "); /* 以下按格式要求输出 */
v = h; order = 1;
while (v != NULL)
{ for(c = 1, u = v->next; u != NULL && u->score == v->score;(6);
printf("%4d%7d%8d ", order, v->score, c);
for (order += c, i = 1;(7); v = v->next, i++)
{ if (i > 1 && i%5 == 1)
printf("\n%23c", ’ ’);
printf("%s ", v->no);
}
printf ("\n");
}
}
选项
答案
(1)i<sp或i!=sp或其他等价的形式 (2)h=p (3)u->next=p (4)u->next (5)u->next (6)C++,u=u->next (7)i<=c,或c-!=0,或u!=v,或c->0,或c-或其他等价的形式
解析
通读题干说明和C程序之后可知,该C程序首先从指定的文件中输入某个科目的学生学号和成绩,并进行合法性检查,全部输入完成后,按总成绩进行排序。程序采用链表结构进行存储,最后按指定的格式输出。
该应用程序首先输入数据,(1)空缺处所在的for循环语句是对输入的数据进行检查,数组s的作用是记录已经输入的科目。当输入一个科目之后,就在数组s中进行检查处理。如果已有该科目,就提示“该科目的成绩已输入,请输入别的科目成绩文件”信息,要求用户重新输入。其中,if语句用于判断是否有该科目,因此(1)空缺处所填写的内容是“i<sp”或“i!=sp”。
接着在链表中寻找最近输入的学号,循环语句“for(v=h;v!=NULL && strcmp(v->no,no)<0;u=v,v=v->next);”结束之后,通过if...else语句对循环的出口进行判断,(2)、(3)空缺处是对应没有该学生的成绩(即是一位新学生)的情况,此时需要申请存储空间,然后进行赋值并把它插入到链表中。由于链表是排序的,因此需要判断插入点是否是第1个节点。如果是第1个节点,就需要修改表头节点的指针,因此(2)空缺处所填写的内容是“h=p”,(3)空缺处所填写的内容为“u->next=p”。
接下来程序通过while循环对链表按总成绩的高低和学号从小到大的顺序进行排序。通读C程序可知,指针p所指向的节点应在指针u所指向的节点之前(或等于),指针v所指向的节点为当前节点。在内循环结束之后,若p!=v,则表示找到一个满足排序条件的节点,此时就需要移动指针。因此(4)、(5)空缺处所填写的内容均为“u->next”。
应用程序的最后一个while循环语句,其功能是对排序后的链表按指定的格式进行输出。变量c的功能是计数器,用来记录总成绩相等的人数,因此(6)空缺处所填写的内容的作用是使指针u下移,计数器加1,即该空缺处应填入“c++,u=u->next”。
变量Order的作用是记录名次,而(7)空缺处所在的for循环语句的功能是,输出成绩相同的学生的学号。由于计数器c的初值为1,因此该for循环的结束条件为c=O或i=c。由此进一步推知,(7)空缺处所填写的内容是“c--!=0”或“i<=c”或其他等价的形式。
转载请注明原文地址:https://kaotiyun.com/show/5ojZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
以下除(7)外,常选定为数据收集的途径。
假设某Word文档中已存在宏“Marcol”,则下列方法中(48)不能正确使用这个宏。
数据处理技术员小王为了本企业的利益做了如下几项数据处理,其中________是违法的。
在Excel中,绝对地址在被复制或移动到其他单元格时,其单元格地址______。
用Word2007编辑文件时,查找和替换中能使用的通配符是______。
计算机硬件唯一能够直接识别和处理的语言是(30)________________。
Windows7系统运行时,用户用鼠标右击某个对象经常会弹出________________。
在Word2007中,为使内容更加醒目,文章更具有条理性,可在若干段落前面添加__________。
某年级两个班举行了一次数学统考,一班(共30人)的平均成绩为70分,二班(共 20人)的平均成绩为75分,则该年级的平均成绩为(65)分。
阅读以下说明,回答问题1至问题5。【说明】某企业的网络安装防火墙后其拓扑结构如图4-1所示。
随机试题
管涵通常采用工厂预制钢筋混凝土管的成品管节,管节断面形式分为()等。
【B1】【B4】
患者缘自2周余以前诱因不明开始出现咳嗽,阵发性发作,干咳少痰,体力下降,伴右胸隐痛,咳嗽及深呼吸时明显,午后发热,不伴畏寒寒战,夜间汗多。体格检查体温:37℃,呼吸:20次/分,脉搏:86次/分,血压:110/60mmHg。肺结核的治疗往往需要长时间联
创造一种畅所欲言、自由思考的氛围,诱发人创造性思维的共振和连锁反应,这是经营决策方法中的()。
附认股权证债券筹资与资本成本、债券价值、股权再融资的综合F公司是一家经营电子产品的上市公司。公司目前发行在外的普通股为10000万股,每股价格为10元,预计未来可持续增长率为13.43%。公司现在急需筹集资金16000万元,用于投资液晶显示屏项目
总效用和边际效用的关系()。
教育法律关系的()是教育法律关系的组成要素之一,指的是教育法律关系的主体依据法律规定而享有的权利与义务。
新教师更多关注课堂中发生的细节,专家型教师则很少谈论课堂管理问题和自己教学是否成功。这反映二者在()方面存在差异。
A、 B、 C、 D、 D外表面图只有两个白色的面,而且是相对的,所以折叠后不可能有两个白色的面相邻,可排除A、C;并且在相交的三个面中,至少有一面是白色的,可排除B,所以选D。
Lifeisfullofdangersandsurprises.Yourhousemayburn【C1】______.Youmayfalloutofthewindowand【C2】______yourneck.Mic
最新回复
(
0
)