国家三级(数据库技术)机试模拟试卷3(共9题)_第1页
国家三级(数据库技术)机试模拟试卷3(共9题)_第2页
国家三级(数据库技术)机试模拟试卷3(共9题)_第3页
国家三级(数据库技术)机试模拟试卷3(共9题)_第4页
国家三级(数据库技术)机试模拟试卷3(共9题)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家三级(数据库技术)机试模拟试卷3(共9套)(共9题)国家三级(数据库技术)机试模拟试卷第1套一、程序设计题(本题共1题,每题1.0分,共1分。)1、在文件in.dat中有200个数据。函数ReadDat()读取这200个数据存放到整型数组aa中,请编制函数jsSod(),其函数的功能是:要求在200个数据中找出满足以下条件的三元组(a,b,c),其中a、b、c是所给200个数据中的三个不同的数,且以a、b、c为边长的三边能构成三角形。满足条件三元组的个数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中(要求bb[i].x1<bb[i].x2<bb[i].x3),再对bb中的数据按照每组数据构成三角形的周长进行升序排列,排序后的结果仍重新存入结构数组bb中,最后调用函数WriteDat()把结果bb输出到文件out.dat中。部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。#include<stdio.h>#include<string.h>#include<conio.h>typedefstruct{intx1,x2,x3;}data;intaa[200];databb[200];intjsSort(){}voidmain(){intcount;readDat();count=jsSort();/*返回满足条件的个数*/writeDat(count);}readDat(intcount){FILE*in;inti;in=fopen("in.dat","r");for(i=0;i<200;i++)fscanf(in,"%d",&aa[i]);fclose(in);}WriteDat(intcount){FILE*out;inti;clrscr();out=fopen("out.dat","w");for(i=0;i<count;i++){fprintf(out,"%d,%d,%d\n",bb[i].x1,bb[i].x2,bb[i].x3);}fclose(out);}标准答案:intjsSort(){inti,i,u,k;0;dataswap;/*定义一个结构体变量,作为交换时的临时存放地*/datatmp;/*定义一个结构体变量,作为新构造的三元组(不一定满足条件)的存放地*/for(i=0;i<200;i++)for(j=i+1;j<200;j++)for(u=j+1;u<200;u++){if(aa[i]<aa[j]){tmp.x1=aa[i];tmp.x3=aa[j];}else{tmp.x1=aa[j];tmp.x3=aa[i];}if(aa[k]<tmp.x1){/*aa[k]在三个数中最大*/tmp,x2=tmp.x1;tmp.x1=aa[k];}elseif(aa[k]>tmp.x3){/*aa[k]在三个数中最小*/tmp.x2=tmp.x3;tmp.x3=tmp;}elsetrap,x2=aa[k];/*aa[k]在三个数中居中*//*按照要求构造结构*/if(tmp.x1+tmp,x2>tmp.x3)bb[k++]=tmp;/*将符合条件的数存入bb数组中*/}for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)if((bb[i].xl+bb[i].x2+bb[i].x3)>(bb[j].xl+bb[j].x2+bb[j].x3)){swap-bb[ii;bb[i]=bb[j];bb[j]=swap;/*在BB数组中进行选择排序(从小到大)*/}returnk;}知识点解析:类型:整数排序。关键:条件判断和排序算法。最后排序采用选择排序。国家三级(数据库技术)机试模拟试卷第2套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知在文件IN20.DAT中存有若干个(个数〈200)4位数字的正整数,函数ReadDat()的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出这文件中共有多少个正整数totNum;(2)求出这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT20.DAT中。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include〈stdio.h>#include〈conio.h>#defineMAXNUM200intxx[MAXNUM];inttotNum=0;/*文件IN20.DAT中共有多少个正整数*/inttotCnt=0;/*符合条件的正整数的个数*/doubletotPjz=0.0;/*平均值*/intReadDat(void);voidWritedat(void);voidCalValue(){}main(){inti;clrscr();for(i=0;i〈MAXNUM;i++)xx[i]=0;if(Readdat()){printf("数据文件IN20.DAT不能打开!\007\n");return;}CalValue();printf("文件IN20.DAT中共有正整数=%d个\n",totNum);printf("符合条件的正整数的个数=%d个\n",totCnt);printf("平均值=%.21f\n",totPjz);Writedat();}intReaddat(void){FILE*fp;inti=0;if((fp=fopen("IN20.DAT","r"))==NULL)return1;while(!feof(fp)){fscanf(fp,"%d,",&xx[i++]);}fclose(fp);return0;}voidWritedat(void){FILE*fp;fp=fopen("OUT20.DAT","w");fprintf(fp,"%d\n%d\n%.21f\n",totNum,totCnt,totPjz);fclose(fp);}标准答案:voidCalValue(){inti,thou,hun,ten,data;intab;longsum=0;for(i=0;i〈HAXNUM;i++){if(MX[i]>0){totNum++;/*统计正整数的个数*/thou=xx[i]/1000;/*求正整数的千位数*/hun=xx[i]%1000/100;/*求正整数的百位数*/ten=xx[i]%100/10;/*求正整数的十位数*/data=xx[i]%10;/*求正整数的个位数*/ab=thou+hun+ten+data;if(ab%2==0)/*如果各位数字之和是偶数*/{totCnt++;sum=sum+xx[i];}/*计算满足条件的数的个数totCnt和这些数的总和sum*/}}totPjz=sum/totCnt;/*求这些数的算术平均值totPjz*/}知识点解析:本题的解题思路是首先利用一个for循环来依次从数组中取得的数,由于题目要求求数组中正整数的个数,因此,对于为零的整数,不做任何处理,接着去取下一个数。只要某个数大于零,则该数一定是正整数,这时就给变量totNum(正整数的个数)累加1,用语句“thou=xx[i]/1000;hun=xx[i]%1000/100;ten=xx[i]%100/10;data=xx[i]%10;”可以实现取得当前被处理数的千位、百位、十位,以及个位上的数字值,之后判断求得的各个位上的数字值之和是否是偶数。若上述条件成立,则给变量totCnt的值加1,同时把当前符合条件的数累加到变量sum中去,最终利用totPjz来求得满足所给条件的所有数的平均值。国家三级(数据库技术)机试模拟试卷第3套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffCal(),其功能是:把一个四位数的个位数字上的值减去千位数字上的值,再减去百位数字上的值,最后减去十位数字上的值,如果得出的值大于等于0且原四位数是偶数,则统计出满足此条件的数的个数count,并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。注意:部分源程序已经给出。程序中已定义数组a[200]、b[200],已定义变量count。请勿改动数据文件IN.dat中的任何数据、主函数main()、读函数Rdata()和写函数Wdata()的内容。#include<stdio.h>#defineMAX200inta[MAX],b[MAX],count=0;voiddiffCal(){}voidRdata(){inti;FILE*fp;fp=fopen("IN.dat","r");for(i=0;i<MAX;i++)fscanf(fp,"%d,",&a[i]);fclose(fp);}voidWdata(){FILE*fp;inti;fp=fopen("OUT.dat","w");fprintf(fp,"%d\n",count);for(i=0;i<count;i++)fprintf(fp,"%d\n",b[i]);fclose(fp);}voidmain(){inti;Rdata();diffCal();printf("满足条件的数=%d\n",count);for(i=0;i<count;i++)printf("%d",b[i]);printf("\n");Wdata();}标准答案:voiddiffCal(){inti,thou,hun,ten,data,j;for(i=0;i<MAX;i++){thou=a[i]/1000;hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;if(data-thou-hun-ten>=0&&a[i]%2!=1){b[count]=a[i];count++;}}for(i=0;i<count-1;i++)for(j=i+1;j<count;j++)if(b[i]>b[j]){data=b[i];b[i]=b[j];b[j]=data;}}知识点解析:暂无解析国家三级(数据库技术)机试模拟试卷第4套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()实现从文件eng.in中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件ps10.dat中。替代关系:f(p)=p*43mod256(p是数组中某一个字符的ASCII值,fO)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后fb)值小于等于32,则该字符不变,否则将qp)所对应的字符进行替代。部分源程序己给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。#include<stdio.h>#include<string.h>#include<conio.h>#include<ctype.h>unsignedcharxx[50][80];intmaxline=0;/*文章的总行数*/intReadDat(void)voidWriteDat(void)voidencryptChar(){}voidmain(){clrscr();if(ReadDat()){printf("数据文件ENG.IN不能打开!\n\007");return;}encryptChar();WriteDat();}intReadDat(void){FILE*fp;inti=0;unsignedchar*p;if((fp=fopen("eng.in","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(void){FILE*fp;inti;fp-fopen("ps10.dat","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}标准答案:voidencryptChar(){/*字符替换过程中,运算的中间结果可能超过256*//*因此采用整型存储中间结果*/inti,j,t;for(i=0;i<maxline;i++)/*遍历每一行*/{for(j=0;i<strlen(xx[i]);j++){/*用控型变量进行所有运算*/t=xx[i][j];t=t*43%256;/*判断替换条件*/if(t<=32||xx[i][j]%2==0)continue;xx[i][j]=t;}}}知识点解析:关键点:1.字符串读写。2.由于fgets()函数读入数据时读入换行符’\n’,因而需要在xx数组每一行末尾将换行符’\n’替换成结束符’\0’。本题中此步已经在ReadDat()函数中完成。3.算法:让字符指针pf指向每一行的开头然后逐一往后移动,在移动过程中按要求进行转换。*pf%2=0用于判断是否为偶数。If()条件语句用于控制不替代字符。4.中间变量的类型选择整型。国家三级(数据库技术)机试模拟试卷第5套一、程序设计题(本题共1题,每题1.0分,共1分。)1、请编制函数ReadDat()实现从文件IN83.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中奇数的个数odd、奇数的平均值ave1、偶数的平均值ave2及所有奇数的方差toffc的值。最后调用函数WriteDat()把结果输出到OUT83.DAT文件中。计算方差的公式如下:设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。注意:部分源程序已给出。请勿改动主函数main()和输写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleavel=0.0,ave2=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void){FILE*fp;if((fp=fopen("IN83.DAT","r"))==NULL)return1;fclose(fp);return0;}voidCompute(void){}voidmain(){inti;for(i=0;i<MAX;i++xx[i]=0;if(ReadDat()){printf("数据文件IN83.DAT不能打开!\007\n");return;}Compute();printf("ODD=%d\nAVEl=%f\nAVE2=%f\nTOTFC=%f\n",odd,avel,ave2,totfc);WriteDat();}voidWriteDat(void){FILE*fp;inti;fp=fopen("OUT83.DAT","w");fprintf(fp,"%d\n%lf\n%lf\n%lf\n",odd,ave1,ave2,totfc);fclose(fp);}标准答案:intReadDat(void){FILE*fp;inti,j;if((fp=fopen("IN83.DAT","r"))==NULL)return1;for(i=0;i<100;i++){for(j=0;j<10;j++)fscanf(fp,"%d,",&xx[i*10+j]);fscanf(fp,"\n");if(feof(fp))break;}fclose(fp);return0;}voidCompute(void){inti,yy[MAX];for(i=0;i<1000;i++)if(xx[i]%2!=0){odd++;/*计算出xx中奇数的个数odd*/ave1+=xx[i];/*求奇数的和*/yy[odd-1]=xx[i];/*将奇数存入数组yy中*/}else{even++;/*计算出xx中偶数的个数even*/ave2+=xx[i];/*求偶数的和*/}ave1/=odd;/*求奇数的平均值*/ave2/=even;/*求偶数的平均值*/for(i=0;i<odd;i++)totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd;/*求所以奇数的方差*/}知识点解析:本题考查的知识点如下:(1)从文件中读取数据。(2)奇偶数的判断和方差的求法。在C语言中,有一结构体类型FILE,其中包含文件的一些属性信息。可定义指针指向该结构体,这个指针称为文件指针。要从文件中读取数据,首先要判断该文件是否能以“读”的方式打开。若能打开,使用函数intfscanf(FILE*fp,char*format,args)从fp所指向的文件中依次读取数据。在本题中,数据的存放很有规律,将数据读出存入数组xx时,只要控制数组下标就可以了。若文件结束,则退出读取循环。最后要关闭文件。若一个数除以2取余得0,则该数是偶数,否则为奇数。由方差公式可知,这是求一些连续的数的表达式的值,所以可以使用循环求得方差。国家三级(数据库技术)机试模拟试卷第6套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN68.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果4位数各位上的数字均是奇数,则统计出满足此条件的个数cnt,并把这些4位数按从大到小的顺序存入数组b中。最后调用函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT68.DAT文件。注意:部分源程序已给出。程序中已定义数组:a[200],b[200],已定义变量:cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include<stdio.h>#defineMAX200inta[MAX],b[MAX],cnt=0;voidjsVal(){}voidreadDat(){inti;FILE*fp;fp=fopen("IN68.DAT","r");for(i=0;i<MAX;i++)fscanf(fp,"%d",&a[i])fclose(fp);}voidmain(){inti;readDat();jsVal();printf("满足条件的数=%d\n",cnt);for(i=0;i<cnt;i++)printf("%d",b[i]);printf("\n");writeDat();}writeDat(){FILE*fp;inti;fp=fopen("out68.dat","w");fprintf(fp,"%d\n",cnt);for(i=0;i<cnt;i++)fprintf(fp,"%din",b[i]);fclose(fp);}标准答案:voidjsVal(){inti,thou,hun,ten,data,j;for(i=0;i<200;i++){thou=a[i]/1000;/*求四位数的千位数字*/hun=a[i]%1000/100;/*求四位数的百位数字*/ten=a[i]%100/10;/*求四位数的十位数字*/data=a[i]%10;/*求四位数的个位数字*/if(thou%2!=0&&hun%2!=0&&ten%2!=0&&data%2!=0)/*如果4位数各位上的数字均是奇数*/{b[cnt]=a[i];/*将满足条件的数存入数组b中*/cnt++;/*统计满足条件的数的个数*/}}for(i=0;i<cnt-1;i++)/*将数组b中的数按从大到小的顺序排列*/for(j=i+1;j<cnt;j++)if(b[i]<b[j]){data=b[i];b[i][b[j];b[j]=data;}}知识点解析:本题考查的知识点如下:(1)“%”与“/”的使用。(2)循环结构与判断结构的使用。(3)数据的排序。本题中,首先借助“%”与“/”将4位数各位上的数拆成独立的数字:将1个4位数整除1000则可得到其千位上的数字,除以1000取余再整除100则可得百位上的数字,除以100取余再整除10则可得十位上的数字,除以10取余则得个位上的数字。1个数除以2取余所得的数不等于0,则此数是奇数。题中要求将符合条件的4位数按从大到小的顺序存入数组b中,我们可以先将符合条件的4位数存入数组b,然后对b中的数进行排序。排序使用“选择排序法”。国家三级(数据库技术)机试模拟试卷第7套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件中共有的正整数个数totNum;②求这些数右移1位后,产生的新数是奇数的数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totAve。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。#include<stdio.h>#include<conio.h>#defineMAXNUM200intnumber[MAXNUM];inttotNum=0;/*文件IN.dst中共有的正整数个数*/inttotCnt=0;/*符合条件的正整数的个数*/doubletotAve=0.0;/*平均值*/intReadDat(void);voidwriteDat(void);voidCalValue(void){}voidmain(){inti;for(i=0;i<MAXNUM;i++)number[i]=0;if(ReadDat()){printf("数据文件IN.dst不能打开!\007\n");return;}CalValue();printf("文件IN.dst中共有的正整数个数=%d个\n",totNum);printf("符合条件的正整数的个数=%d个\n",totCnt);printf("平均值=%.2f\n",totAve);writeDat();}intReadDat(void){FILE*fp;inti=0;if((fp=fopen("IN.dat","r"))==NULL)return1;while(!feof(fp))fscanf(fp,"%d,",&number[i++]);fclose(fp);return0;}voidwriteDat(void){FILE*fp;fp=fopen("OUT.dat","w");fprintf(fp,"%d\n%d\n%6.2f\n",totNum,totCnt,totAve);fclose(fp);}标准答案:voidCalValue(void){inti,data;for(i=0;i<MAXNUM;i++){if(!number[i])break;if(number[i]>0)totNum++;data=number[i]>>1;if(data%2){totCnt++;totAve+=number[i];}}totAve/=totCnt;}[解题思路]在for循环语句中,自变量i从0递增到MAXNUM对数组number中的每个数进行判断,如果number[i]的值大于0,说明number[i]的值为正整数,统计正整数个数的变量totNum加1;然后number[i]右移1位得到data的值;再对data的值除2求余数,如果其值为1,则统计变量totCnt加1,同时把number[i]的值加到totAve上,得到这些数的和。退出循环后,用totAve的值除以totCnt,就得到了这些数的算术平均值totAve。知识点解析:暂无解析国家三级(数据库技术)机试模拟试卷第8套一、程序设计题(本题共1题,每题1.0分,共1分。)1、下列程序的功能是:将一正整数序列{K1,K2,…,K91重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比KI大的数都在K1的右面(后续的再向右存放),从K1向右扫描。要求编写函数JsValue()实现此功能,最后调用函数writeDat()把新序列输出到文件out90.dat中。说明:在程序中已给出了.10个序列,每个序列中有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。例如:序列排序前{6,8,9,1,2,5,4,7,3}序列排序后{3,4,5,2,1,6,8,9,7}注意:部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。试题程序:#includejsValue(inta[lO][9]){}main(){inta[10][9]={{6,8,9,1,2,5,4,7,3},{3,5,8,9,1,2,6,4,7},{8,2,1,9,3,5,4,6,7},{3,5,1,2,9,8,6,7,4},{4,7,8,9,1,2,5,3,6},{4,7,3,5,1,2,6,8,9},{9,1,3,5,8,62,4,7}{2,6,1,9,8,35,7,4}{5,3,7,9,1,82,6,4}{7,1,3,2,5,89,4,6}};inti,j;jsValue(a);for(i=0;i<10;i++){for(j=0;j<9;j++){printf("%d",a[i][j]);if(j<=7)printf(",");}printf("\n");}writeDat(a);}writeDat(intail0][9]){FILE*fp;inti,j;fp=fopen("outg0.dat","w");for(i=0;i<10;i++){for(j=0;j<9;j++){fprintf(fp,"%d",a[i][j]);if(j<=7)fprintf(fp,",");}fprintf(fp,"\n");}fclose(fp);}标准答案:voidjsValue(inta[10][9]){intvalue,i,j,k,hum;for(i=0;i<10;i++){value=a[i][0]);/*将一行的第一个元素赋给value*/for{j=0;j<9;j++)if(a[i][j]<value)/*若后面的数中有比第土个数据小的数*/{num=a[i][j];/*则把这个数取出,赋给num*/for(k=j;k>0;k--)/*将这个数据左侧的数依次向右移动*/{a[i][k]=a[i][k-1];}a[i][0]=num;/*再将这个数放在最左侧*/}}}知识点解析:本题考查的知识点如下:(1)二维数组的访问和数组元素的移动。(2)循环结构和判断结构的嵌套使用。数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较,若后面的数中有比第1个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数),然后将这个数放在最左侧。扫描完一行后,比第1个数小的数就都在第1个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。国家三级(数据库技术)机试模拟试卷第9套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN69.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数JsVal(),其功能是:把一个4位数的千位数上的值减百位数上的值再减十位数上的值最后减个位数上的值,如果得出的值大于等于零且此4位数是奇数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论