三级数据库技术机试-240_第1页
三级数据库技术机试-240_第2页
三级数据库技术机试-240_第3页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

1、三级数据库技术机试 -240( 总分: 100.00 ,做题时间: 90 分钟 )一、上机题( 总题数: 5,分数: 100.00)1. 已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数 readDat() 把这些数存入数组 a 中。请编写 函数 jsVal() ,其功能是:依次从数组 a 中取出一个四位数,如果该四位数连续大于该四位数以前的五个 数且该数是奇数,且该数必须能被 7 整除(该四位数以前不满五个数,则不统计 ) ,则统计出满足此条件的 个数 cnt 并把这些四位数按从大到小的顺序存入数组 b 中,最后调用写函数 writeDat() ,把结果 cnt 以及 数

2、组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序已经给出。程序中已定义数组: a200 ,b200 ;已定义变量: cnt 。请勿改动数据文件IN . DAT中的任何数据及主函数main()、读函数readDat()和写函数writeDat()的内容。#include < stdio.h >#define MAX 200int aMAx,bMAx,cnt=0;void jsVal() void readDat()int i;FILE *fp;fp=fopen("IN.DAT","r");for(i=0;i < MAX;

3、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/n",bi);fclose(fp);void main()int i;readDat();jsVal();printf(" 满足条件的数 =%d/n",cnt);for(i=0;i

4、 < cnt;i+) printf("%d",bi);printf("/n"); writeDat();分数: 20.00 ) 正确答案: (void jsVal ()int i,j,flag=0;/* 循环以遍历数组 a 的第 6 至最后一个数 */for(i=5;i(MAX;i+) /* 循环以遍历当前数的前 5 个数 */for(j=i-5;j v i;j+)if(ai > aj) /* 若当前数大于前 5 个数则设标志 flag 为 1*/flag=1;else /* 否则设标志 flag 为 0 并跳出循环 */flag=0;bre

5、ak;if(flag=1 ai%2=1 ai%7=0) /*若flag为1说明当前数连续大于前5个数,且又为奇数又能被7整除的话*/bcnt=ai; /* 把当前数存入数组 b*/cnt+; /* 计数值 cnt 增 1*/* 对数组 b 的前 cnt 个数进行选择排序 */for(i=0;i(cnt-1;i+)for(j=i+1;j(cnt;j+)if(bi v bj) /* 前面的数小于后面的数则交换 , 即降序排列 */flag=bi;bi=bj;bj=flag;)解析:2. 已知在IN.DAT文件中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称me(字

6、符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中:金额 =单价 x数量。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编写函数 SortDat(),其功能是:按金额从大到小进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结 构数组sell中,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。注意:部分源程序已经给出。请勿改动主函数 main() 、读数据函数 ReadDat() 和输出数据函数 WriteDat() 的内容。#inelude v stdio.h >#inelude v

7、string.h >#inelude v eonio.h >#include < stdlib.h >#define 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();SortDa

8、t();WriteDat();void ReadDat()FILE *fp;char str80,ch11;int i;fp=fopen("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)

9、selli.dj*selli.sl;fclose(fp);void WriteDat()FILE *fp;int i;fp=fopen("OUT.DAT","w");for(i=0; i < 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(

10、fp);(分数: 20.00 )正确答案: (void SortDat ()int i,j;PRO xy;/* 对数组 sell 的所有记录进行选择排序 */for(i=0;i(MAX-1;i+)for(j=i+1;j < MAX;j+)/* 按每条记录 je 字段(产品金额 )的大小进行降序排列 */if(selli.je < sellj.je)xy=selli;selli=sellj;sellj=xy;else if(selli.je=Sellj.je)if(strcmp(Selli.dm,Sellj.dm)> 0) /*若je字段相等则按dm字段(代码)的大小进行升序排

11、列*/xy=selli;selli=sellj;sellj=xy;)解析:3. 已知数据文件 in.dat 中存有 300 个四位数,并已调用读函数 ReadDat() 把这些数存入数组 a 中。请编写 函数 jsValue() ,其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数 cnt ,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数 writeDat() ,把结果输出到 out.dat 文件中。例如: 6712, 6+2=7+1 ,则该数满足条件存入数组 b 中,且个数 cnt=cnt+1 。8129,

12、8+9<> 1+2,则该数不满足条件,忽略。注意:部分源程序已经给出。程序中已定义数组: a300 , b300 ;已定义变量: cnt 。请勿改动主函数 main() 、读函数 ReadDat() 和写函数 writeDat() 的内容。#include < stdio.h >int a300,b300,cnt=0;void jsValue() void ReadDat()FILE *fp;int i;fp=fopen("in.dat","r");for(i=0; i v 300;i+)fscanf(fp,"%d,&q

13、uot;,ai);fclose(fp);void writeDat()FILE *fp;int i;fp=fopen("out.dat","w"); fprintf(fp,"%d/n",cnt);for(i=0;i v cnt;i+)fprintf(fp,"%d/n",bi);fclose(fp);main()int i;ReadDat();jsValue();writeDat(); printf("cnt=%d/n",cnt);for(i=0; i v cnt;i+)printf("

14、b%d=%d/n",i,bi);分数: 20.00 ) 正确答案: (void jsValue ()int i,thou,hun,ten,data,j;for(i=0;i v 300;i+) /*循环以遍历数组 a中的所有300个四位数*/thou=ai/1000; /* 取当前数的千位数字 */hun=ai%1000/100; /* 取当前数的百位数字 */ ten=ai%100/10; /* 取当前数的十位数字 */ data=ai%10; /* 取当前数的个位数字 */if(thou+data=hun+tlq) /* 若干位加个位等于百位加十位的话 */ bcnt=ai; /*

15、 将此数存入数组 b*/ cnt+; /* 让计数值 cnt 增 1*/* 用选择排序对数组 b 的前 cnt 个数进行排序 */for(i=0;i(cnt-1;i+) for(j=i+1;j v cnt;j+) if(bi > bj) /* 若前面的数大于后面的 , 则交换两者 ( 即升序排列 )*/data=bi;bi=bj;bj=data;)解析:4. 已知数据文件 in.dat 中存有 300 个四位数,并已调用读函数 ReadDat() 把这些数存入数组 a 中。请编写 函数 jsValue() ,其功能是:求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数 cn

16、t , 再求出所有满足此条件的四位数平均值 pjz1 ,以及不满足此条件的四位数平均值 pjz2 ,最后调用写函数 writeDat() ,把结果输出到 out.dat 文件中。例如:9123, 9-1-2-3 >0,则该数满足条件,计算平均值pjzl,且个数cnt=cnt+1。9812,9-8-1-2 V 0,则该数不满足条件,计算平均值pjz2。注意:部分源程序已经给出。程序中已定义数组: a300 ;已定义变量: cnt , pjz1 , pjz2 。请勿改动主函数 main() 、读函数 ReadDat() 和写函数 writeDat() 的内容。#include V stdio

17、.h >int a300,cnt=0;double pjz1=0.0,pjz2=0.0;void jsValue()void ReadDat()FILE *fp;int i;fp=fopen("in.dat","r");for(i=0;i V 300;i+)fscanf(fp,"%d,", ai);fclose(fp);void writeDat()FILE *fp;fp=fopen("out.dat","w");fprintf(fp,"%d/n%7.2f/n%7.2f/n&qu

18、ot;,cnt,pjz1,pjz2);fclose(fp);main()ReadDat();jsValue();writeDat();printf("cnt=%d/n 满足条件的平均值 pzj1=%7.2f/n 不满足条件的平均值 pzj2=%7.2f/n",cnt,pjz1,pjz2);分数: 20.00 ) 正确答案: (void jsValue ()int i,thou,hun,ten,data,n=0;for(i=0;i v 300;i+)/*循环以遍历数组 a中的所有300个四位数*/thou=ai/1000; /* 取当前数的千位数字 */ hun=ai%100

19、0/100; /* 取当前数的百位数字 */ ten=ai%100/10; /* 取当前数的十位数字 */ data=ai%10; /* 取当前数的个位数字 */if(thou-hun-ten-data> 0) /* 若干位减百位减十位减个位大于 0 的话 */cnt+; /* 让计数值 cnt 增 1*/pjz1+=ai; /* 将此数累加至 pjz1*/else /* 否则让计数值 n 增 1, 并将此数累加至 pjz2*/n+;pjz2+=ai;pjz1/=cnt; /* 计算符合条件的数的平均值 */pjz2/=n; /* 计算不符合条件的数的平均值 */)解析:5. 函数 Re

20、adDat() 实现从 in.dat 文件中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于 80) 。请编写函数 jsSort() ,其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结 果仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat() ,把结果 xx 输出到 out.dat 文件中。 条件:从字符串中间一分为二,左边部分按字符的 ASCII 值升序排序,排序后左边部分与右边部分进行交 换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。例如: 位置 0 1 2 3 4 5 6 7 8源字符串 d C b a h

21、 g f e4 3 2 1 9 8 7 6 5则处理后字符串 h g f e a b C d8 7 6 5 9 1 2 3 4 注意:部分源程序已经给出。请勿改动主函数 main() 、读函数 ReadDat() 和写函数 WriteDat() 的内容。#include v stdio.h >#include v string.h >#include v conio.h >char xx2080;void jsSort() void ReadDat()FILE *in;int i=0;char *p;in=fopen("in.dat","r");while(i v 20 fgets(xxi,80,

温馨提示

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

评论

0/150

提交评论