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

下载本文档

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

文档简介

国家三级(数据库技术)机试模拟试卷4(共9套)(共9题)国家三级(数据库技术)机试模拟试卷第1套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数NumCal(),其功能是:把一个四位数的千位数字上的值加上个位数字上的值恰好等于百位数字上的值加上十位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数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;voidNumCal(){}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();NumCal();printf("满足条件的数=%d\n",count);for(i=0;i<count;i++)printf("%d",b[i]);printf("\n");Wdata();}标准答案:voidNumCal(){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((thou+data==hun+ten)&&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;}}[解题思路]对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位上的数字输给变量thou;这个四位数对1000求余数然后再除以100,可得到这个四位数百位上的数字输给变量hun;这个四位数对100求余数然后再除以10,可得到这个四位数十位上的数字输给变量ten;这个四位数对10求余数,可得到这个四位数个位上的数字输给变量data。然后判断表达式(thou+data==hun+ten)&&a[i]%2=1是否成立,如果成立,则把这个数赋给数组b,同时计数变量count加1。最后对数组b中元素进行从小到大的排序。知识点解析:暂无解析国家三级(数据库技术)机试模拟试卷第2套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件IN74.DAT中读取一篇英文文章存入到字符串数组xx中。请编制6数StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位,如果左移后,(字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符中对应的位置。最后把已处理的字符串仍按行重新存入了符串数组xx中,最后调用函数WritcDat()把结果n输出到文件OUT74.DAT中。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>charxx[50][80];intmaxline=0;intReadDat(void);voidWriteDat(void);voidStrCharfL(void){}voidmain(){Clrscr();if(ReadDat()){printf(“数据文件IN74.DAT不能打开\n\007”);return;}StrCharJL();WriteDat();}intReadDat(void){FILE*fp;inti=0;char*p;if((fp=fopen(“IN74.DAT”,“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;clrscr();fp=fopen("OUT74.DAt","w");for(i=0;i<maxline;i++){printf(”%s\n”,xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}标准答案:voidStrCharJL(void){inti,j,strl;for(i=0;i<maxline;i++){strl=strlen(xx[i]);/*求各行的总长度*/for(j=0;j<strl;j++)if(xx[i][j]<<4<=32||xx[i][j]<<4>100);/*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/elsexx[i][j]+=xx[i][j]<<4;/*否则就把左移后的字符ASCII值加上原字符的ASCII*/}}知识点解析:本题考查的知识点如下:(1)字符的计算。(2)左移运算符“<<”的使用。(3)二维数组的访问。(4)判断结构中多条件的布尔运算。本题中,以行为单位处理字符串,首先要求得每行字符串的长度,才可对每一行的字符依次进行处理。字符可参与任何整数运算,实际上是字符的ASCII码参与了运算。所以,可以直接将字符带入计算。这里要使用到左移运算符“<<”。“<<”是双目运算符,左侧是要移动的数,右侧是移动的位数。左移后字符的ASCII码的值小于等于32或大于100,这两个条件满足一个即可,所以两条件之间用“或”运算。使用循环实现对所有行的处理。国家三级(数据库技术)机试模拟试卷第3套一、程序设计题(本题共1题,每题1.0分,共1分。)1、读函数readDat()的功能是从文件IN25.DAT中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),该函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用写函数writeDat()把结果xx输出到文件OUT25.DAT中。条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后,左边部分与右边部分按例子所示进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。例如:位置012345678源字符串dcbahgfe43219876处理后字符串hgfeabcd98761234注意:部分源程序已给出。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include〈stdio.h>#include〈string.h>#include〈conio.h>charxx[20][80];voidjsSort(){}main(){readDat();jsSort();writeDat();}readDat(){FILE*in;inti=0;char*p;in=fopen("IN25.DAT","r");while(i〈20&&fgets(xx[i],80,in)!=NULL){p=strchr(xx[i],’In’);if(p)*p=0;i++;}fclose(in);}writeDat(){FILE*out;inti;clrscr();out=fopen("OUT25.DAT","w");for(i=0;i〈20;i++){printf("%s\n",xx[i]);fprintf(out,"%s\n",xx[i]);}fclose(out);}标准答案:voidjsSort(){inti,j,k,str1,half;charch;for(i=0;i〈20;i++){str1=strlen(xx[i]);/*求字符串的长度*/half=str1/2;/*确定各行中字符串的中间位置*/for(j=0;j〈half-1;j++)/*对中间位置以前的字符进行升序排序*/for(k=j+1;k〈half;k++)if(xx[i][j]>xx[i][k]){ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}for(j=half-1,k=strl-1;j>=0;j--,k--)/*将左边部分与右边部分对应的字符进行交换*/{ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}}}知识点解析:本题考查对二维字符数组的处理。由于对二维字符数组的操作是按照先行后列的顺序,因此,需要首先求得各行字符串的长度(利用求字符串长度的strlen()函数),然后借助循环结构逐个访问各行中的每一个字符。在本题中,应先确定各行中字符串的中间位置(长度的一半就是中间位置),然后先对中间位置以前的字符进行升序排序,排序过程如下:依次用每一个位置的字符与它后面的所有字符(到中间位置前一个字符结束)进行比较,如果发现某字符的ASCII码值小于当前被比较的字符的ASCII码值,则将发现的字符与当前字符进行交换,交换后继续与其后面的字符进行比较。最终比较所得的结果是第一个位置总是存放着最小的字符,第二个位置总是存放着稍大的字符,以此类推就实现了从小到大的排序功能。接着要做的工作是把中间位置前的一个位置定为初始位置,字符串中的最后一个位置也视为初始位置,让两个位置所对应的字符进行交换,交换过后,这两个位置值(也就是下标值)分别前移,再进行对应位置字符的交换。国家三级(数据库技术)机试模拟试卷第4套一、程序设计题(本题共1题,每题1.0分,共1分。)1、请编写函数voidcountValue(int*a,int*n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。注意:部分源程序已给出。请勿改动主函数main()和写函数writeDAT()的内容。试题程序:#include<conio.h>#include<stdio.h>voidcountValue(int*a,int*n){}main(){intaa[1000],n,k;clrscr();countValue(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0){printf("%5d",aa[k]);printf("\n");}elseprintf("%5d",aa[k]);writeDAT();}writeDAT(){intaa[1000],n,k;FILE*fp;fp=fopen("out79.dat","w");countValue(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0){fprintf(fp,"%5d",aa[k]);fprintf(fp,"\n");}elsefprintf(fp,"%5d",aa[k]);fclose(fp);}标准答案:voidcountValue(int*a,int*n){inti;*n=0;for(i=1;i<=1000;i++)if(i%7==0&&i%11)/*将能被7整除但不能被11整除的数存入数组a中*/{*a=i;*n-*n+1;/*统计个数*/a++;}elseif(i%7&&i%11==0)/*将能被11整除但不能被7整除的数存入数组a中*/{*a=i;*n=*n+1;/*统计个数*/a++;}}知识点解析:本题考查的知识点如下:(1)指针的使用。(2)“%”运算符。(3)判断结构中多个条件的布尔运算。本题中,函数countValue()以指针为参数,这里就要涉及到指针的使用。a是指向数组的指针,初始时,指向数组的第一个元素。地址每加1时,依次指向后面的元素。一个数a若能被b整除,则a除以b取余得数为0。能被7或11整除,但不能被7和11同时整除,则有两种情况,能被7整除但不能被11整除,能被11整除但不能被7整除。这里就要用到多个条件的布尔运算。国家三级(数据库技术)机试模拟试卷第5套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN.dat中存有200个四位数,并己调用读函数rData()把这些数存入数组a中,请编写函数spellNum(),其功能是:把个位数字和千位数字重新组成一个新的二位数(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的二位数(新二位数的十位数字是原四位数的百位数字,新二位数的个位数字是原四位数的十位数字),如果新组成的两个二位数一个是奇数,另一个为偶数,并且两个二位数中至少有一个数能被17整除,同时两个新数的十位数字均不为0,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数count。最后main()函数调用写函数wData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。注意:部分源程序已经给出。程序中已定义数组a[200]、b[200],己定义变量count。请勿改动数据文件IN.dat中的任何数据及主函数main()、读函数rData()和写函数wData()的内容。#include<stdio.h>#defineMAX200inta[MAX],b[MAX],count=0;voidspellNum(){}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();spellNum();printf("满足条件的数=%d\n",count);for(i=0;i<count;i++)printf("%d",b[i]);printf("\n");wData();}标准答案:voidspellNum(){inti,thou,hun,ten,data,j;intab,cd;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(data==0||hun==0)continue;ab=10*data+thou;cd=10*hun+ten;if((ab-cd)%2!=0&&(ab*cd)%17==0){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;}}[解题思路]对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位上的数字输给变量thou;这个四位数对1000求余数然后再除以100,可得到这个四位数百位上的数字输给变量hun;这个四位数对100求余数然后再除以10,可得到这个四位数十位上的数字输给变量ten;这个四位数对10求余数,可得到这个四位数个位上的数字输给变量data。因为data和hun作为新的两个二位数字的十位上数字,所以其值不能为0,因而在组建两个二位数之前,首先要判断data和hun这两个数字是否为0。然后用逻辑表达式(ab-cd)%2!=0&&(ab*cd)%17==0来判断新组成的两个二位数是否一个是奇数,另一个为偶数并且至少有一个数能被17整除,如果上述逻辑表达式成立,则这个四位数是符合题目条件的一个数字,把其存入数组b中,同时计数变量count加1。最后利用两重循环对数组b中的数字进行从大到小的排序。知识点解析:暂无解析国家三级(数据库技术)机试模拟试卷第6套一、程序设计题(本题共1题,每题1.0分,共1分。)1、编写函数,isValue,它的功能是:求以下数列中满足t(K)=1的最小的k,结果由函数返回。其中数列t(n)的定义为:t(0)=m(m为给定正整数,m<=300)t(n+1)=t(n)/2(当t(n)为偶数时)或t(n+1)=3*t(n)+1(当t(n)为奇数时)最后调用函数writeDat()读取50个数据m,分别得出结果且把结果输出到文件out.dar中。例如:当t=299时,函数值为117。已知对于m<=300,结果k不超过300部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。#include<stdio.h>intjsValue(intm){main(){intm;m=300;printf("m=%d,k-%d\n",m,jsValue(m));writeDat();writeDat(){FILE*in,*out;inti,m,s;in=fopen("in.dar","r");out=fopen("out.dar","w");for(i=0;i<50;i++){fscanf(in,"%d",&m);s=jsValue(m);printf("%d\n",s);fprintf(out,"%d\n",s);}fclose(in);fclose(out);标准答案:intisValue(intm){/*初值t(0)=m*/intfn=m,k=0;/*t(k)!=1,求t(k+1)*/while(fn>){if(fn%2==1)/*t(k)为奇数*/{fn-3*fn+1;}else/*t(k)为偶数*/{fn=fn/2;}k++;}/*t(k)==1,返回k*/returnk;}知识点解析:类型:序列计算。关键点:分析序列定义,选择合适的方法生成和存储序列或序列中的特定值。根据序列定义,以及题目的输出要求,可选择保存序列中的所有值,也可以只保留与当前项计算相关的几项,采用递推的方式进行计算。对于某些特殊序列,还可以求出通项公式,利用公式直接计算。此题只需要保存当前项,根据当前项计算下一项。国家三级(数据库技术)机试模拟试卷第7套一、程序设计题(本题共1题,每题1.0分,共1分。)1、下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(1+10也是在100以内)的个数cnt,以及这些I之和sum。请编制函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件out64.dat中(数值1不是素数)。注意:部分源程序已给出。请勿改动主函数main()和输出数据函数writeDAT()的内容。试题程序:#include<stdio.h>intcnt,sum;intisPrime(intnumber){inti,tag=1;if(number==1)return0;for(i=2;tag&&i<=number/2;i++)if(number%i==0)tag=0;returntag;}voidcountValue(){}voidmain(){cnt=sum=0;countValue();printf("满足条件的整数的个数=%d\n",cnt);printf("满足条件的整数的和值=%d\n",sum);writeDAT();}writeDAT(){FILE*fp;fp=fopen("out64.dat","w");fprintf(fp,"%d\n%d\n",cnt,sum);fclose(fp);}标准答案:voidcountValue(){inti,count=0,xx[30];intj,k,m;cnt=0;sum=0;for(i=2;i<90;i++)/*找数的范围为100以内*/if(isPrime(i))/*如果该数为素数,则将它存入数组xx中,并统计个数*/{xx[count]=i;count++;}for(i=0;i<count;i++)/*如果数组xx中的素数加4和加10得到的数仍为素数*/if(isPrime(xx[i]+4)&&isPrime(xx[i]+10)){cnt++;/*统计满足条件的数的个数*/sum+=xx[i];/*将满足条件的数组xx中的数求和*/}}知识点解析:本题考查的知识点如下:(1)循环结构与判断结构的嵌套使用。(2)判断结构中多个条件的布尔运算。题中要求判断在100以内,i,i+4,i+10都是素数的个数。因为i+10也必须在100以内,1不是素数,我们可以从2开始判断到89即可(90是偶数,明显不是素数)。可以先找出2到89之间素数的个数,再判断这些素数加4和加10后是否还是素数。加4是素数与加10是素数必须同时满足,所以两个条件间用“与”运算。国家三级(数据库技术)机试模拟试卷第8套一、程序设计题(本题共1题,每题1.0分,共1分。)1、下列程序的功能是;把s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数chg(char*s)实现程序要求,最后调用函数readwriteDat()把结果输出到out63.dat文件中。例如;s字符串中原有内容为Mn,123xyZ,则调用该函数后,结果为n,123xyZM。注意:部分源程序已给出。请勿改动主函数main()和输入输出函数readwriteDAT()的内容。试题程序:#include<conio.h>#include<stdio.h>#defineN81voidreadwriteDAT();voidchg(char*s){}main(){chara[N];clrscr();printf("Enterastring:");gets(a);printf("Theoriginalstringis:");puts(a);chg(a);printf("Thestringaftermodified:");puts(a);readwriteDAT()}voidreadwriteDAT(){inti;chara[N];unsignedchar*p;FILE*rf,*wf;rf=fopen("in63.dat","r");wf=fopen("out63.dat","w");for(i=0;i<10;i++){fgets(a,80,rf);p=strchr(a,’\n’);if(p)*p=0;chg(a);fprintf(wf,"%s\n",a);}fclose(rf);fclose(wf);}标准答案:voidchg(char*s){inti,strl;charch;strl=strlen(s);/*求字符串的长度*/ch=*s;/*将第一个字符暂赋给ch*/for(i=0;i<strt-1/i++)/*将字符依次左移*/*(s+i)=*(S+i+1);*(s+strl-1)=ch;/*将第一个字符移到最后*/}知识点解析:本题考查的知识点如下:(1)数组中元素的移动。(2)指针的使用。我们可以使用一个循环实现数组中所有字符元素的左移。这里要注意的是第1个字符要移至最后1个字符处,所以首先要将第1个字符保存。在移动时,要从左到右依次移动,否则,左侧的字符会在移动前被其右侧的字符覆盖。在这里使用了指针,初始时,指针指向数组的第1个元素,随着地址的增加指针指向数组后面的元素。例如,若地址加2,则指向数组的第3个元素。国家三级(数据库技术)机试模拟试卷第9套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件IN82.DAT中存有300个4位数,并已调用函

温馨提示

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

评论

0/150

提交评论