首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 【说明】 以下【C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他(她)的总成绩,并按如图6-14所示格式输出名次(按总成绩由高到底
admin
2009-02-15
66
问题
阅读以下应用程序说明和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
程序员下午应用技术考试
软考初级
相关试题推荐
在Access中,表和数据库的关系是(67)。
已知5个自然数(可有重复)的最小值是20,最大值是22,平均值是21.2,则可以推断,中位数是____________。
对用户来说,信息系统的(14)反映了系统的功能。
某工厂共40人参加技能考核,平均成绩80分,其中男工平均成绩83分,女工平均成绩78分。该工厂参加技能考核的女工有(5)________________人。
Windows7系统运行时,用户用鼠标右击某个对象经常会弹出________________。
在Word2010中,()快捷键可以选定当前文档中的全部内容。
鼠标指针的形状取决于它所在的位置以及与其他屏幕元素的相互关系。在文字处理的文本区域,指针就像(),指向当前待插入字符的位置。
将四个元素a,b,c,d分成非空的两组,不计组内顺序和组间顺序,共有()种分组方法。
以下关于数据录入人员和数据校验人员工作职责的叙述中,不正确的是______。
为了测量航天员每分钟的心跳次数,甲建议测量2分钟的心跳次数再除以2,乙建议测量10秒钟的心跳次数再乘以6,两者相比______。
随机试题
学习策略是指学习者为了提高学习的______有目的有意识地制定的有关学习过程的复杂的方案。
著名油画作品《塔希提少女》是______的代表作之一。()A.凡·高B.高更C.伦勃朗D.毕加索
某病人诊断为吸入性肺脓肿,经足量多种抗生素治疗4个月。仍有发热,咳脓痰。胸片示空洞壁增厚,周围有明显纤维条索影。进一步治疗应选择
余某,32岁,素性多郁,复为情志所伤,致月经紊乱,经量或多或少,乳房胀痛不适,嗳气食少,苔薄,脉弦,辨证属肝郁。宜采用()
女性,45岁,偶然发现左乳房肿块,直径约2cm,质较硬,无压痛,与皮肤有少许粘连。左侧腋下可扪及1cm大小肿大的淋巴结。该患者最可能的诊断是
对于财务报表审计业务,在决定是否信赖以前审计获取的有关控制运行有效性的审计证据时,下列各项中,注册会计师通常无需考虑的是()。(2019年)
西周时期“以财货相告”称为()
Accordingtothepassage,howmanyuniversitiesintheUnitedStatestookpartinthestudy?
Whatdidthewomanthinkatfirst?
Whenaconsumerfindsthatanitemsheorheboughtisfaultyordoesnot【B1】______themanufacturer’sclaimforit,thefirstst
最新回复
(
0
)