首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
admin
2009-02-15
31
问题
阅读以下应用程序说明和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
程序员下午应用技术考试
软考初级
相关试题推荐
以下维护操作系统的做法中,()是不恰当的。
企业中的信息处理过程包括多个阶段,对每个阶段都应有目标要求,有规范的制度,有需要特别注意的事项。以下叙述中正确的是(25)。
在Excel中,选中某单元格并输入123,回车后此单元格的显示内容为¥123,则可知此单元格的格式被设成了(54)。
Windows多窗口的排列方式不包括()。
一般来说,收集到的数据经过清洗后,还需要进行分类、排序等工作。这样做的好处主要是(65)________________。
在Word2010文档中,某个段落最后一行只有一个字符,()不能把该字符合并到上一行。
以下关于数据录入人员和数据校验人员工作职责的叙述中,不正确的是______。
下列传输协议中,采用了加密技术的是______。
在Access中,查询“学生”数据表的所有记录及字段的SQL语句是______。
以下定性的分类变量中,(9)属于有序变量(能排序)。
随机试题
一脑血栓病人,医师为其实行溶栓治疗,为防止并发脑出血,可采用的监测手段是
A.通窍活血汤B.川芎茶调散C.羌活胜湿汤D.大补元煎
当柯氏位投照时,听眦线与X线中心线的夹角为
A.生活事件分值100B.生活事件分值50C.生活事件分值1lD.生活事件分值30E.生活事件分值70小曹,30岁,今天驾车出行,不注意闯了红灯,被警察纠正,罚款100元,心中闷闷不乐。其违章行为若用霍尔姆斯和雷赫生活事件分值分析排位,应为
房地产开发企业取得销售(预售)许可证满()年仍未销售完毕的,主管税务机关可要求纳税人进行土地增值税清算。
聘请书的落款署上发文单位名称即可,无需加盖公章。()
根据以下资料,回答111—115题2000年到2007年中,我国生产资料和生活资料的出厂价格相较上一年的变化方向一致的共有几年?()
考试对于()相当于()对于登机
HowtoWriteaCollegeTermPaper?I.Tip1:Figureoutexactlywhattheprofessorwants.Read【T1】_____verycarefully.【T1】_
A、Theydon’tenjoyswimming.B、Theydon’tknowhowtoswim.C、They’llswiminthelaketomorrow.D、Theywon’tgoswimminginthe
最新回复
(
0
)