三级数据库技术机试-241_第1页
三级数据库技术机试-241_第2页
三级数据库技术机试-241_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、三级数据库技术机试 -241( 总分: 100.00 ,做题时间: 90 分钟 )一、上机题( 总题数: 5,分数: 100.00)1. 下列程序的功能是:计算出自然数 SIX和NINE,它们满足的条件是 SIX+SIX+SIX=NINE+NINE的个数ent 以及满足此条件所有的SIX与NINE的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat(),把结果ent和sum输出到 OUT.DAT文件中。其中,S、I、X、N E各代表一个十进制数。注意:部分源程序已经给出。请勿改动主函数 main() 和输出数据函数 writeDat() 的内容。#incl

2、ude < stdio.h >int cnt,sum;void countValue()void writeDat()FILE *fp;fp=fopen("OUT.DAT","w");fprintf(fp,"%d/n%d/n",cnt,sum);fclose(fp);void main()cnt=sum=0;countValue();printf("满足条件的个数 =%d/n",cnt);printf(”满足条件所有的 SIX与NINE的和=%d/n",sum);writeDat();分数:

3、20.00 ) 正确答案: (void countValue()int S,I,X,N,E;/* 定义 5个循环变量 ,他们分别代表题目所述的 5个数字*/int SIX,NINE;/* 用穷举法遍历这 5 个数字的所有组合 */for(S=1;S < 10;S+) /*S 为SIX的百位数字不能为 0,故取值范围为19*/ for(I=0;I <10;I+)for(X=0;X < 10;X+)for(N=1;N < 10;N+)/*N 是NINE的千位不能为 0,故范围为19*/for(E=0;E <10;E+)SIX=S*100+I*10+X; /* 组合成

4、SIX 值*/NINE=N*1000+l*100+N*10+E;/* 组合成 NINE值*/if(SIX*3=NINE*2) /* 如果 SIX*3 等于 NINE 乘以 2, 则找到一个解 */cnt+; /* 计数值 cnt 增 1*/sum+=SIX+NINE; /* 将 SIXSHNINE累加进 sum*/)解析:2. 已知在IN.DAT文件中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称me(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中:金额=单价x数量。函数ReadDat()是读取这100个销售记录并存入结

5、构数组 sell中。请编写函数 SortDat(),其功 能是:按产品名称从大到小进行排列,若产品名称相等,则按金额从大到小进行排列,最终排列结果仍存 入结构数组sell中,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。注意:部分源程序已经给出。请勿改动主函数 main() 、读数据函数 ReadDat() 和输出数据函数 WriteDat() 的内容。#include < stdio.h >#include < string.h >#include < conio.h >#include < stdlib.h >#defi

6、ne MAX 100typedef structchar dm5; /* 产品代码 */char mc11; /* 产品名称 */int dj; /*单价 */int sl; /*数量 */long je; /* 金额 */PRO;PRO sellMAX;void ReadDat();void WriteDat();void SortDat()void main()memset(sell,0,sizeof(sell);ReadDat();SortDat();WriteDat();void ReadDat()FILE *fp;char str80,ch11;int i;fp=fopen(&quo

7、t;IN.DAT","r");for(i=0; i < 100;i+)fgets(str,80,fp);memcpy(selli.dm,str,4);memcpy(selli.mc,str+4,10); memcpy(ch,str+14,4);ch4=0;selli.dj=atoi(ch); memcpy(ch,str+18,5);ch5=0;selli.sl=atoi(ch); selli.je=(long)selli.dj*selli.sl;fclose(fp);void WriteDat()FILE *fp;int i;fp=fopen("O

8、UT.DAT","w");for(i=0;i v 100;i+)printf("%s%s%4d%5d%5d/n", selli.dm,selli.mc,selli.dj,selli.sl,selli.je);fprintf(fp,"%s%s%4d%5d%5d/n",selli.dm,selli.mc,selli.dj,selli.sl,selli.je);fclose(fp);分数: 20.00 ) 正确答案: (void SortDat ()int i,j;PRO xy;/* 对数组 sell 的所有 100 条记录进行选

9、择排序 */for(i=0;i v 99;i+) for(j=i+1;j v100;j+)/*按每条记录me字段(产品名称)的大小进行降序排列*/ if(strcmp(selli.inc,sellj.inc)v 0)xy=selli;selli=sellj;sellj=xy;else if(stremp(selli.me,sellj.me)=0) /*若me字段相等则按je字段(金额)的大小进行降序排列*/ if(selli.je v sellj.je)xy=selli; selli=sellj;sellj=xy;)解析:3. 函数 ReadDat() 实现从 in.dat 文件中读取 20

10、行数据并存放到字符串数组 xx 中( 每行字符串长度均小于 80) 。请编写函数 jsSort() ,其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其 ASCII 值从小到大的顺序进行排序, 排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat() 把结果 xx 输出到 out.dat 文件中。例如: 位置 0 1 2 3 4 5 6 7源字符串 h g f e d c b a则处理后字符串 h a f c d e b g 注意:部分源程序已经给出。请勿改动主函数 main() 、读数据函数 ReadDat() 和输出数据函数 WriteDat() 的内容

11、。#include < stdio.h >#include < string.h >#include < conio.h >char xx2080;void jsSort()void ReadDat()FILE *in;int i=0;char *p;in=fopen("in.dat","r");while(i< 20 fgets(xxi,80,in)!=NULL)p=strchr(xxi,'/n');if(p)*p=0;i+;fclose(in);void WriteDat()FILE *out

12、;int i;out=fopen("out.dat","w");for(i=0;i <20; i+)printf("%s/n",xxi);fprintf(out,"%s/n",xxi);fclose(out);void main()ReadDat();jsSort();WriteDat();分数: 20.00 ) 正确答案: (void jsSort ()int i,j,k,strl;char ch;for(i=0;i < 20;i+)/*循环遍历数组 xx中的20行字符串*/strl=strlen(x

13、xi);/* 对当前行下标为奇数的字符进行选择排序 */for(j=1;j <strl-2;j=j+2) /* 循环从 1开始每次增 2,即遍历奇数 */for(k=j+2;k< strl;k=k+2)if(xxij> xx【i【k) /* 前面的数大于后面的数则交换 ,即升序排列 */ch=xxij;xxij=xxik;xxik=ch;)解析:4. 函数 ReadDat() 实现从 in.dat 文件中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于 80) 。请编写函数 jsSort() ,其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后

14、的结 果仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat() ,把结果 xx 输出到 out.dat 文件中。 条件:从字符串中间一分为二,左边部分按字符的 ASCII 值降序排序,排序后左边部分与右边部分进行交 换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。例如: 位置 0 1 2 3 4 5 6 7 8源字符串 a b c d h g f e1 2 3 4 9 8 7 6 5则处理后字符串 h g f e d C b a8 7 6 5 9 4 3 2 1 注意:部分源程序已经给出。请勿改动主函数 main() 、读数据函数 ReadDat()

15、和输出数据函数 WriteDat() 的内容。#include < stdio.h >#include < string.h >#include < conio.h >char xx2080;void jsSort()void ReadDat()FILE *in;int i=0;char *p;in=fopen("in.dat","r");while(i < 20 && fgets(xxi,80,in)!=NULL) p=strchr(xxi,'/n');if(p)*p=0;i+;

16、fclose(in);void WriteDat()FILE *out;int i;out=fopen("out.dat","w");for(i=0;i <20; i+) printf("%s/n",xxi); fprintf(out,"%s/n",xxi);fclose(out);void main()ReadDat(); jsSort();WriteDat();分数: 20.00 ) 正确答案: (void jsSort ()int i,j,k,strl,half;char ch;for(i=0;i &l

17、t; 20;i+) /* 循环遍历数组 xx 中的 20 行字符串 */strl=strlen(xxi);half=Str1/2;/* 对当前行前半部分字符进行选择排序 */for(j=0;j < half-1;j+)for(k=j+1;k(half;k+)if(xxij < xxik) /* 前面的数小于后面的数则交换 , 即降序排列 */ch=xxij;xxij=xxik;xxik=ch;/* 双循环变量的 for 循环 , 一个从字符串中间往前遍历 , 一个从末尾往前遍历 */for(j=half-1,k=strl-1;j> =0;j-,k-)/* 循环中交换两个循环变

18、量位置处的字符 , 即交换字符串的前半部分和后半部分 */ ch=xxij;xxij=xxik; xxik=ch;) 解析:5. 已知数据文件 in.dat 中存有 200 个四位数,并已调用读函数 readDat() 把这些数存入数组 a 中。请编写 函数 jsVal() ,其功能是:依次从数组 a 中取出一个四位数,如果该四位数连续大于该四位数以前的五个 数且该数是偶数 ( 该四位数以前不满五个数,则不统计 ) ,则统计出满足此条件的个数 cnt 并把这些四位数 按从大到小的顺序存入数组 b 中,最后调用写函数 writeDat() ,把结果 cnt 以及数组 b 中符合条件的四位 数输出

19、到 out.dat 文件中。注意:部分源程序已经给出。程序中已定义数组: a200 ,b200 ;已定义变量: cnt 。请勿改动数据文件 in.dat 中的任何数据及主函数 main() 、读函数 readDat() 和写函数 writeDat() 的内容。 #include < stdio.h >#define MAX 200 int aMAx,bMAX,cnt=0;void jsVal() void readDat()int i;FILE *fp; fp=fopen("in.dat","r"); for(i=0;i <MAX; i+) fscanf(fp,"%d,",ai);fclose(fp);void writeDat()FILE *fp;int i;fp=fopen("out.dat","w"); fprintf(fp,"%d/n",cnt);for(i=0; i < cnt;i+) fprintf(fp,"%d

温馨提示

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

评论

0/150

提交评论