首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
admin
2009-02-15
58
问题
阅读以下应用程序说明和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://www.kaotiyun.com/show/5ojZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
以下除(7)外,常选定为数据收集的途径。
动态图像压缩的标准是(10)。
新建一个Word文档,编辑结束后,执行“文件”菜单中的“保存”命令,则______。
下列关于数据库系统的说法中,(62)是错误的。
在Word2010编辑状态下,打开MyDoc.DOCX文档,若要把编辑后的文档以文件名“W1.htm”存盘,可以执行“文件”菜单中的________________命令。
________________是按照科学的城市发展理念,利用新一代信息技术,通过人、物、城市功能系统之间的无缝连接与协同联动,实现自感知、自适应、自优化,形成安全、便捷、高效、绿色的城市形态。
在Excel中,若A1单元格中的内容为“全国计算机技术与软件专业技术资格(水平)考试”,在A2单元格中输入函数=LEFT(A1,2),则A2单元格显示的内容是______。
数据录入工作有两个指标:录入速度和错误率。一般而言,数据录入员在录入大批数据时,录入速度会(65),错误率会(66)。66
计算机使用一段时间后发现,系统启动时间变长,系统响应迟钝,应用程序运行缓慢,为此,需要进行系统优化。系统优化工作不包括___________。
阅读以下说明,回答问题1至问题5。【说明】某局域网的IP地址为202.117.12.0/24,网络结构如图2-1所示。采用DHCP服务器自动分配IP地址,其中DHCPServer2的地址池为202.117.12.3~202.117.12.128。
随机试题
与龋齿缺乏有关的元素是
下列关于楔形板描述正确的是
真菌性角膜溃疡可见角膜基质炎可见
本病诊为狂证,其分型为其治法为
关于公司财产权的说法,下列哪些说法是正确的?()
制定城市规划应遵循的原则是()。
固定资产原值的内容不包括( )。
根据民事法律制度规定,属于法律行为的有()。
Itwastheoldman______hasreportedthefire.
A、Anelephant.B、Ahugesquid.C、Awhale.D、Atuna.B四个选择都是动物名称,留意听有关动物的描述,并在选项旁边做笔记。根据对话,世界上眼睛最大的动物是巨型鱿鱼,故答案是B。
最新回复
(
0
)