资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
温故而知新,下笔如有神近两上半年程序员考试专项试题训练及答案-下午卷试题一(共15分)阅读以下说明和流程图,回答问题1至问题3,将解答填入答题纸的对应栏内。说明信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转90后可以形成另一个矩阵,如下图所示: ABCDEFGH1JKLMNOPMIEANJFBOKGCPLHD流程图1-1描述了对n*n矩阵的某种处理。流程图1-2是将矩阵A顺时针旋转90形成矩阵B的具体算法。流程图1-1流程图1-2 问题1(3分)请写出以下3*3单位矩阵沿顺时针方向旋转90后所形成的矩阵。问题2(3分)如果以下3*3矩阵沿顺时针方向旋转90后所形成的矩阵就是原来的矩阵:其中,位于*处的元素需要考生填写请完整地写出该矩阵。问题3(9分)在上述流程图1-1和1-2的算法中,(1)矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?(2)A(i,j)后来又被复制到矩阵C中的哪个位置?(3)填补流程图1-2中的空缺。 试题二(共15分)阅读以下说明和C语言函数,将应填入_(n)_处的字句写在答题纸的对应栏内。说明函数chanse(int num)的功能是对四位以内(含四位)的十进制正整数num进行如下的变换:将num的每一位数字重复一次,并返回变换结果。例如,若num=5234,则函数的返回值为55223344,其变换过程可描述为:(4*10+4)*1 + (3*10+3)*100 + (2*10+2)*10000 + (5*10+5)*1000000 = 55223344C语言函数long change (int num)int d, m =num;long result, mul; if (num O) d = m % 10;m = _(3)_;result = result + (_(4)_) * mul;mul = _(5)_;return result; 试题三(共15分) 阅读以下说明和C语言函数,将应填入_(n)_处的字句写在答题纸的对应栏内。说明函数bool Del_elem(STACK *S,char para_ch)的功能是:删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回FALSE,否则返回TRUE。其中,STACK是栈的类型名。函数Del_lem实现上述功能的方法是c利用栈的基本操作,先将栈*s中所有比parlch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s_bak中的元素依次存回栈*s。在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下;void InitStack(STACK*S):初始化栈。void Push(STACK*S,char e):将一个字符压栈,栈中元素数目增1。void Pop(STACK*S);栈顶元素出栈,栈中元素数目减1。char Top(STACK S):返回非空栈的栈顶元素值,栈中元素数目不变。bool IsEmpty(STACK S);若S是空栈,则返回TRUE:否则返回FALSE。 bool类型定义如下:typedef enum FALSE=0,TRUE=1 bool;C语言函数bool Del_elem(STACK *S,char para_ch)STACK s_bak; /*定义临时工作栈s_bak */char Ch;bool tag=FALSE; _(1)_; /*初始化临时工作栈s_bak*/*将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s_bsk中*/while(!IsEmpty(*s)ch_(2)_; /*取栈顶元素:/Pop(S);if(Chpara_ch)tag=TRUE:break;_(3)_;/*将暂存于1临时工作栈s_bak中的元素存回栈*s*/while (_(4)_)Ch=Top(s_bak);_(5)_;Push(s,ch);return tag; 从下列的2道试题(试题四至试题五)中任选1道解答。 如果解答的试题数超过1道,则题号小的1道解答有效。试题四(共15分)阅读以下说明和C语言函数,将应填入_(n)_处的字句写在答题纸的对应栏内。说明某工厂A负责为某大型企业B加工零件,A每天必须为B提供一定数量的零件。由于某种客观原因,A每天生产的零件的单价都不相同。若A某天生产的零件数多于B需要的数目,则多余的零件可以放到第二天及以后再使用,但需要收取每个零件的保管费 (产品单价之外附加的费用),每个零件在不同日期收取的保管费也不相同。例如,在5天的生产中,B要求的零件需求量及A核算出的零件单价和保管费用如表1所示: 表1 第一天 第二天 第三天 第四天 第五天 需求量(个) 25 15 30 35 30 零件的单价(元) 20 30 32 25 35 单个零件的保管费用(元) 4.5 8.0 6.8 5.5 6.1 A可以制订多种生产计划,但费用可能不同。例如,表2所示为生产计划及其费用。 表2 计划产量(个)总费用(元)第一天第二天第三天第四天第五天计划1 25 15 30 35 39 3835 计划2 40 0 30 50 15 3685 计划3 70 0 0 65 0 3632.5 计划4 35 10 20 40 35 / 注:(1)计划1的总费用:25*20+15*30+30*32+35*25+30*35=3835(元)(2)计划2的总费用:40*20+15*4.5+30*32+50*25+15*5.5+15*35=3685(元)(3)计划3的总费用:70*20+45*4.5+30*8+65*25+30*5.5=3632.5(元)(4)计划4不可行,虽然第一天和第二天生产的零件总数比需求量多5个,但加上第三天生产的20个零件(共25个),仍不能满足B第三天的需求量(30个)。函数finla_plan(FILE*in)的功能是:从文件中读入若干个生产计划,从可行的计划中选出费用最小者,记录该生产计划并返回该最小费用。全局结构体数组data用于保存表1所示的数据(data0不用),说明如下:datai.Qty_req:int型,表示第i天的零件需求量。datai.Price:double型,表示第i天生产的零件单价(元)。datai.Keeping_fee:double型,表示第i天保管单个零件的费用(元)。C语言函数int B_sDAYS+1;/*扫记录成本最小的生产计划,ls0不用,DAYS定义为天数*/double find_a_plan(FILE *inf) int P numDAYS+1,acc_reqDAYS+1:int i,tag=0,acc_qty=0;double mincost=1.0e20,costProduce,cost_Keep; for (i=1;i=DAYS;i+)/*到第i天时的累计零件需求量存入acc_reqi*/accjty += datai.Qty_req;acc_reqi = acc_qty; while (!feof(inf)for(i=1;i=DAYS;i*)/*读入一个生产计划,第i天的产量存入P_numi*/if (!feof(inf)fscanf(inf,*%d,&P_numi);tag=0; cost_Produce=0; cost_Keep=0:for(i=1,_(1)_;i=DAYS;i+) /*考察当前的生产计划*/acc_qty += P_numi);/*acc_qty计录到第i天时的累计零件生产量*/if (acc_qty acc_reqi) /*当前生产计划不能满足需求*/tag=1; break; /*if*/cost_Produce += _(2)_;/*计算当前生成计划的总零件价格*/*计算当前生成计划下的零件保管费*/cost_Keep+=(_(3)_)*datai.Keeping_fee; /*for*/if(_(4)_) /*若当前生产计划不可行,则继续读取下一计划*/continue;if(_(5)_) /*记录成本更小的生产计划*/mincost=cost_Produce+cost_Keep;for(i=1;i*按钮(名称为cmdSelect),就能将该课程复制到“所选课程”列表框(名称为List2)中(但要注意不要出现重复项);如果单击“”按钮(名称为cmdSelAll),就能将全部供选课程名复制到列表框List2中(注意应先删除List2中的已选项);如果在“所选课程”列表框中选中某个课程,再单击“”按钮(名称为cmdD
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号