首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下程序说明和C语言程序,将应填入(n)处的字句写在对应栏内。 【说明】 希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应
阅读以下程序说明和C语言程序,将应填入(n)处的字句写在对应栏内。 【说明】 希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应
admin
2010-01-15
47
问题
阅读以下程序说明和C语言程序,将应填入(n)处的字句写在对应栏内。
【说明】
希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩从高分至低分的顺序进行排队录取。公司的录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。
程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都做了录取处理。
程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。
【程序】
#include<stdio.h>
#include<malloc.h>
#define M 20
#define PEMARK 5
typedef struct stu{
int no, total, z[2], sortm, zi;
struct stu *next;
}STU;
struct rzmode{
int Imt, count;
STU *next;
}rz[M];
STU *head=NULL, *over=NULL;
int all
FILE *fp;
char dataf[]="pp07.dat";
print(STU *p){
for(;p!=NULL;p=p->next)
printf("%d(%d)\t",p->no,p->total);
}
insert(STU **p, STU *u){
STU *v, *q;
for(q=*p;q!=NULL;v=q,(1))
if(q->sortm<u->sortm)break;
if(q==*p)(2);
else (3);
U->next=q;
}
main(){
int zn, i, no, total, z1, z2;
STU *p, *v, *q;
fp=fopen(dataf, "r");
if(fp==NULL){
printf("Can’t open file %s.\n",dataf);
exit(0);
}
fscanf(fp, "%d",&zn);
for(all=0,i=1;i<=zn;i++){
fscanf(fp,"%d",&rz
.Imt);
rz
.count=0;rz
.next=NULL;
all+=(4);
}
for(;;){
if((fscanf(fp, "%d%d%d%d",&no,&total,&z1,&z2))!=4)
break;
p=(STU*)malloc(sizeof(STU));
p->no=no;
p->total=p->sortm=total;
p->zi=0;p->z[0]=z1;p->z[1]=z2;
(5);
}
fclose(fp);
for(;all && head !=NULL;){
p=head; head=head->next;
if(rz[p->z[p->zi]].count<(6)){
rz[p->z[p->zi]].count++;
insert(&rz[p->z[p->zi]].next,p);
all--;
continue;
}
if(p->zi>=1){
p->next=over;over=p;
continue;
}
p->sortm-=DEMARK; (7);
insed(&head,p);
}
for(i=1;i<=zn;i++){
printf("%d:\n",i);
print(rz
.next);
printf("\n");
}
printf("over:\n");print(head);
print(over);printf("\n");
}
选项
答案
(1)q=q->next或q=v->next (2)*p=u (3)v->next=u (4)rz[i].1mt (5)insert(&head,p) (6)rz[p->z[p->zi]].1mt (7)p->zi++或p->zi=1
解析
本题考查C语言的基本语法知识。
题目的要求在程序说明中表现得已经很清楚了,下面直接分析程序。
自定义函数insert()是主函数中的常用函数,其功能是向一个降序链表中插入一个元素,使链表仍为降序。
insert(STU **p,STU *u){
STU*v, *q;
for(q=*p;q !=NULL; v=q,(1))
if(q->sortm<u->sortm)break;
上面的循环功能是查找插入点,所以要从q链表的首结点开始逐个与u比较,当q结点的值比u结点的值小时,可以确定u应插入到q之前。因此,(1)空应填q=q->next。
if(q==*p) (2);
else (3);
u->next=q;
}
这里分两种情况,如果q==*p,表示u结点的插入点为链表首,所以(2)空应填:*p=u;如果q!=*p,表示u结点要插入的位置不是链表首部,又因为v是q的前趋结点(这一点可以从上面的for(..;v==q..)看出),所以(3)空应填v->next=u。
接下来,我们来看主函数main()。
main(){
…
for(all=0,i=1;i<=zn;i++){
fscanf(fp,"%d",&rz
.1mt);
rz
.count=0;rz
.next=NULL;
all+=(4);
}
由于题目中提到“数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数”,结合上面的处理代码,我们可知rz[].1mt是计划招聘人数,rz[].count是已录取人数,all是代表计划招聘总人数,所以(4)空应填rz
.1mt。
for(;;){
if((fscanf(fp,"%d%d%d%d",&no,&total,&z1,&z2))!=4)
break;
这里输入一个应聘者的编号、总成绩、第一志愿、第二志愿。如果输入的数据少于4个,则退出循环。
p=(STU*)malloc(sizeof(STU));
p->no=no;
p->total=p->sortm=total;
p->zi=0;p->z[0]=z1;p->z[1]=z2;
(5);
}
上面的语句段是为输入的数据建立一个结点,并保存,但如果没有(5)空的处理,当下次执行循环体时,上一次的结点p将被覆盖掉。因此,(5)空的功能应是把结点连成链表。这时我们应想到前面分析过的函数insert(),因为此函数可以把一个结点插入到已知链表中。又因为从下面的语句可以看出head为本程序要处理链表的首指针,所以(5)空应填insert(&head,p)。
fclose(fp);
for(;all && head !=NULL;){
下面这段程序是进行录取工作,all是还要招聘的人数,head是应聘人员的列表。
p=head;head=head->next;
把p结点从head表中删除。
if(rz[p->z[p->zi]].count<(6)){
因为题目中有“数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数”,所以结合上面的分析可知rz[].count为已招聘人数,rz[].1mt为计划招聘人数。当已招人数还未达到计划招收人数时应继续招聘,所以(6)空应填rz[p->z[p->zi]].1mt。
rz[p->z[p->zi]].count++;
insert(&rz[p->z[p->zi]].next,p);
把结点p加入到rz[p->z[p->zi]].next链表中,表示其已被录用。
all--;
continue;
}
招到一个人后,还要招收的人数就应减1。
p->next=over;over=p;
continue;
}
从这里可以看出p->zi是应聘次数的标志,其初值为0,如果p->zi>=1,则表示应聘者已经进行完两次应聘,均没有聘上,所以没有资格再进行应聘。用continue语句使循环立即跳到开始处,进行下一名应聘者的录取工作。
p->sortm-=DEMARK; (7);
如果程序执行了此语句,则代表p所指示的应聘者第一志愿落选,按题目要求,当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。语句p->sortm-=DEMARK用于将他的成绩扣去5分,insert(&head,p)用于重新排队。这样,(7)空看起来似乎没什么用,其实不然。整段程序都没有对p->zi>=1进行调整,而p->zi的值是用于标志此应聘者的应聘次数,当应聘了一次后应加1或直接置1,否则判断条件if(p->zi>=1)永远也不会成立。因此,(7)空应填p->zi++或p->zi=1。
转载请注明原文地址:https://kaotiyun.com/show/MIjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
信息处理技术员资格考试的试卷包括信息处理基础知识、计算机基础知识、法律法规知识、专业英语、办公软件使用技能五个方面。某次考试后,对这五个方面分别统计了各考生的得分率以及全国的平均得分率。为了直观展现每个考生在各个方面的水平以及该考生的整体水平,并与全国平均
某地区去年粮食产量资料如下表:根据该表可以推算出,该地区去年薯类的产量为()万吨。
将四个元素a,b,c,d分成非空的两组,不计组内顺序和组间顺序,共有()种分组方法。
某互联网公司建立的用户画像(标签化的用户信息)包括人口属性和行为特征两大类,()属于行为特征。
假设100个数据的平均值为82.31,其中有10个数据又发生了如下增减变化:+3.52,+2.87,-4.13,+5.34,-2.87,+2.50,-3.52,+4.23,-5.04,+0.10,则新的平均值变为(26)。
(1)是固化在主板ROM内的程序,为计算机提供最底层、最直接的硬件访问和控制。
请根据图2-13网页的显示效果,解释该ASP程序中用下画线标出的语句的含义,即填写(1)、(3)、(4)、(6)、(10)空缺处的解释内容。请根据图2-13网页的显示效果,将ASP程序中(2)、(5)、(7)、(8)、(9)空缺处的代码补充完整。A
阅读下列说明和HTML文本,分析其中嵌入的JavaScript脚本,将应填入(n)处的语句填到对应栏内。[说明]在文本框中实现时钟显示功能,格式如下:“-年-月-日小时:分:秒星期几”[HTML文本]<html>
阅读下列说明和HTML文本,分析其中嵌入的JavaScrlpt脚本,将应填入<u>(n)</u>处的语句写在对应栏内。[说明]本题实现用鼠标拖拽图片在Web页内移动的功能。将鼠标放在图片上,按下左键,移动鼠标便可带动图片一起移动。[
/etc/dhcpd.conf文件中的配置语句:hostCIU_DHCP{hardwareethemet52.54.AB.3B.B6.45fixed-address192.168.1.15;}表示的是什么意思?当配置文件配置好以后,还
随机试题
各学科教材的编写都要以“三个面向”“三个代表”和“科学发展观”重要思想为指导,寓思想政治教育于学科教学内容之中。这体现了编写教科书要遵循的()原则。
简述选定全部文件或文件夹的方法。
索赔费用的计算方法主要有()。
王某持有政府债券、公司债券和股票,同时在银行有若干储蓄,其中不属于目前我国《证券法》调整的“证券”的是()。
库存管理者的责任是测量特定地点的现有库存量,其中库存需求量的确定需要在()的基础上进行。
学习者通过观察其他人实施这种行为后所得到的结果来决定自己的行为指向,这是一种()。
下列哪一项不属于法律原则在法律适用中的作用?()
现代自然科学,不是单单研究一个个事物,一个个现象,而是研究事物、现象的变化发展过程,研究事物相互之间的关系,这就使自然科学发展成为严密的综合起来的体系,这是现代自然科学的重要特点。这段文字的主旨是()。
根据以下资料,回答问题。2012年,重庆市实际利用内资项目16679个,同比增长10.5%:实际利用内资金额5914.64亿元,增长20.2%。合同资金千万元以上项目快速增长,实际引进内资5489.05亿元,增长18.6%。其中,到位资金上10
WhyMinorityStudentsDon’tGraduatefromCollege[A]BarryMills,thepresidentofBowdoinCollege,wasjustifiablyproudofBow
最新回复
(
0
)