您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 三级上机考试题型分析
三级网络、三级信息技术和三级数据库技术上机考试题介绍上机考试究竟考什么、怎样考对于考生来说是至关重要的。这里对历届上机考试题库中的试题仔细分析,总结出上机考试的重点、难点。上机考试考查的是C语言在VisualC++6.0环境下的基本技术、编程和调试。考生应在掌握C语言基础知识的基础上,多进行上机练习。根据考查知识点及题型,我们认为上机考试有以下几种类型:1.销售记录排序问题2.4位数排序和筛选问题3.数据排序问题4.数学类问题5.英文文章、字符串操作问题6.选票问题下面给出以上几种类型抽中的概率:大类名称小类名称抽中概率销售记录排序(结构体)问题10%4位数排序或筛选问题根据数位数字的关系排序13%组和成新的十位数字后再筛选排序8%统计及求平均值4%4位数字之间比较后再统计排序4%数据排序问题5%数学类问题数学计算类5%范围查找类8%统计及求平均值13%字符串操作类问题字符串替代10%字符串更改或移动11%字符串排序及调换6%选票问题3%现在对这些题型进行分析及解答。第一套销售记录排序问题试题内容已知在文件INT.DAT中有100个产品记录,每个产品由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)、几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从小到大进行排列,最终结果仍存在入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT.DAT中。注意:部分源程序已给出。请勿改动主函数main()、读函数ReanDat()和写函数WriteDat()的内容。【题型分析】本题考查结构体数组的排序。考查的知识点包括:结构体成员的运算,字符串的比较,数组排序。【解题思路】解题时,应注意3个关键点:关键点1如何按产品名称从大到小排序;关键点2如果产品名称相同;关键点3如何按金额从小到大排列。数组排序可以用冒泡法实现,冒泡法的思路是:将较大的值像空气一样逐渐“上浮”到数组的顶部,而较小的的数值逐渐“下沉”到数组的底部。具体为第一趟用第1个记录第2个记录进行比较,如果第1个记录小于第2个记录,就进行交换,然后用第1个记录和第3个记录比较,直到第1个记录和最后1个记录比较完成,这样完成1趟比较后,第1个记录的值就不小于后面所有记录的值,比较了99次;第2趟用第2个记录和3个记录比较,直到最后1个记录,比较了98次,以此类推。本题一共需要比较99趟,每趟比较n-j次。在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,strcmp(sell[i].dm,sell[j].dm)的函数值返回值为一个整数,若比较的两个字符串相等返回0,前者大于后者返回一个正整数,前者小于后者返回一个负整数。程序的流程是:首先调用memset()函数,该函数的功能是将sell数组的前sizeof(sell)个字节的值赋为0。然后调用ReadDat()函数读入数据到结构体数组sell中。由考生编制的SortDat()函数处理后,再由WriteDat()函数写回文件OUT.DAT中。所以,在查看结果时,这一题在屏幕上是没有显示的,而需要考生打开OUT.DAT文件进行查看。IN.DAT原始数据片段如下:1001软件世界51001002计算机用户61201003网上生活2711004网络互连45101005威宝3.55100010063M3.531501007办公自动化901001008JAVA48151009中文WORD9768101010EXCLE97981031011OFFICE97108181012ACCESS64781013二级BASIC65661014二级PASCAL66891015二级C67991016二级FOR66121017二级FOX661001018AUTOCAD988711019PhotoShop68641020一级781011021一级B类9810001022三级A类787651023三级B类788881024四级886661025INTERNET5818581001软件世界51011002计算机用户61201003网上生活27311004网络互连451000源程序及题解如下:#includestdio.h#includestring.h#includestdlib.h#defineMAX100typedefstruct{chardm[5];/*产品代码*/charmc[11];/*产品名称*/intdj;/*单价*/intsl;/*数量*/longje;/*金额*/}PRO;PROsell[MAX];voidReadDat();voidWriteDat();voidSortDat(){inti,j;/*定义循环控制变量*/PROtemp;/*定义数据交换时的暂存变量(这里是PRO类型的的结构体变量*/for(i=0;i99;i++)/*利用冒泡法进行排序*/for(j=i+1;j100;j++)if(strcmp(sell[i].mc,sell[j].mc)0)/*产品名称从大到小排列*/{temp=sell[i];sell[i]=sell[j];sell[j]=temp;}elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若产品名称相同*/if(sell[i].jesell[j].je)/*则按金额从小到大进行排列*/{temp=sell[i];sell[i]=sell[j];sell[j]=temp;}}voidmain(){memset(sell,0,sizeof(sell));ReadDat();SortDat();WriteDat();}voidReadDat(){FILE*fp;charstr[80],ch[11];inti;fp=fopen(IN.DAT,r);for(i=0;i100;i++){fgets(str,80,fp);memcpy(sell[i].dm,str,4);memcpy(sell[i].mc,str+4,10);memcpy(ch,str+14,4);ch[4]=0;sell[i].dj=atoi(ch);memcpy(ch,str+18,5);ch[5]=0;sell[i].sl=atoi(ch);sell[i].je=(long)sell[i].dj*sell[i].sl;}fclose(fp);}voidWriteDat(){FILE*fp;inti;fp=fopen(OUT.DAT,w);for(i=0;i100;i++){fprintf(fp,%s%s%4d%5d%10ld\n,sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}fclose(fp);}第二套4位数排序或筛选问题(根据数位数字的关系排序)试题内容:已知数据文件IN.DAT中存有300个4位数,并已调用读函数ReadDat()把这些数据存入数组a中,请编制函数jsValue(),其功能是:求出千位数上的数加上个位数上的数等于百位数上的数加十位数上的数的个数cnt,再把所有满足此条件的4位数依次存入数组b中,然后对数组b的4位数按从小到大的顺序进行排序,最后调用写函数writeDat()把数组b中的数输出到OUT.DAT文件中。例如:6712,6+2=7+1,则该数满足条件,存入数组b中,且个数cnt=cnt+1。8129,8+9≠1+2,则该数不满足条件忽略。注意:部分源程序已给出。程序中已定义数组:a[300],b[300],已定义变量:cnt。请勿改动主函数main()、读函数ReanDat()和写函数WriteDat()的内容。【题型分析】本题考查对多个整数的筛选以及排序。考查的知识点包括:多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】此题属于4位数的筛选问题,并且需求出各位数的数字,再筛选排序。解此类题目需主要解决3个问题:问题1如何取得4位数的各个数位数字;问题2如何通过条件(本题为千位数字加上个数字等于百位数字加上十位数字)筛选出满足条件的数;问题3如何对数组中的数进行排序。解此类题的一般思路为:先求出每个数的各位数字,再根据各位数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。对于问题1,通过算术取余和整除可以分解得到4位数的各个数位上的数字;对于问题2,通过if条件语句和逻辑表达式可以实现;对于问题3,排序可以通过双循环的冒泡法来完成。源程序及题解如下:#includestdio.hinta[300],b[300],cnt=0;voidreadDat();voidwriteDat();voidjsValue(){inti,j;inta1,a2,a3,a4;inttemp;for(i=0;i300;i++){a4=a[i]/1000;/*求四位数的千位数字*/a3=a[i]%1000/100;/*求四位数的百位数字*/a2=a[i]%100/10;/*求四位数的十位数字*/a1=a[i]%10;/*求四位数的个位数字*/if(a4+a1==a3+a2)/*如果千位数字加个位数字等于百位数字加十位数字*/{b[cnt]=a[i];/*将满足条件的数存入数组b中*/cnt++;/*统计满足条件的数的个数cnt*/}}for(i=0;icnt-1;i++)/*对b数组的4位数从小到大升序排序*/for(j=i+1;jcnt;j++)if(b[i]b[j]){temp=b[i];b[i]=b[j];b[j]=temp;}}voidmain(){inti;readDat();jsValue();writeDAt();printf(“cnt=%d\n”,cnt);for(i=0;icnt;i++)printf(“b[%d]=%d\n”,i,b[i]);}voidreadDat(){FILE*fp;inti;fp=fopen(“IN.DAT”,“r”)for(i=0;i300;i++)fscanf(fp,“%d”,&a[i]);fclose(fp);}voidwriteDat(){FILE*fp;inti;fp=fopen(“OUT.DAT”,“w”);fprintf(fp,“%d\n”,cnt);for(i=0;i300;i++)fprintf(fp,“%d,\n”,b[i]);fclose(fp);}第三套4位数排序或筛选问题(组和成新的十位数字后再筛选排序)试题内容:已知数据文件IN.DAT中有200个4位数,并已调用读函数readDat()把这些数存入数组中,请编制一个函数jsValue(),其功能是:把千位数字和十位数字重新组成一个新的2位数ab(新2位数的十位数字是原4位数的千位数字,新2位的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新2位数的十位数字是原4位数的个位数字,新2位数的个位数字是原4位数的百位数字),如果新组成的2个2位数ab-cd=0且ab-cd=10且两个数字均是奇数,同时两个新十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT.DAT中。注意:部分源程序已给出。程序中已定义数组:a[200],b[200],已定义变量:cnt。请勿改动主函数main()、读函数ReanDat()和写函数WriteDat()的内容。【题型分析】本题考查对多个整数的筛选及排序。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,数组排序的算法。【解题思路】此题属于4位数的筛选类题,并且需要将各位数组成新
本文标题:三级上机考试题型分析
链接地址:https://www.777doc.com/doc-2807929 .html