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

下载本文档

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

文档简介

1、三级数据库技术机试 -232( 总分: 100.00 ,做题时间: 90 分钟 )一、上机题( 总题数: 5,分数: 100.00)1. 已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数 readDat() 把这些数存入数组 a 中。请编写 函数 jsVal() ,其功能是: 把千位数字和十位数字重新组成一个新的十位数 ab( 新十位数的十位数字是原四 位数的千位数字, 新十位数的个位数字是原四位数的十位数字 ) ,以及把个位数字和百位数字组成另一个新 的十位数 cd( 新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字 ) , 如果ab>

2、cd , ab必须是偶数且能被5整除,cd必须是奇数,同时两个新数的十位数字均不为零,则将满 足此条件的四位数按从大到小的顺序存入数组 b 中,并计算满足上述条件的四位数的个数 cnt 。最后 main() 函数调用写函数 writeDat(),把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序已经给出。程序中已定义数组: a200 , b200 ;已定义变量: cnt。请勿改动数据文件 IN.DAT 中的任何数据及主函数 main() 、读函数 readDat() 和写函数 writeDat() 的内容。 #include < stdio.h >

3、#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;i+) fscanf(fp,"%d,", ai); fclose(fp);void writeDat()FILE *fp;int i;fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n",cnt);for(

4、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 < cnt;i+)printf("%d",bi);printf("/n"); writeDat();分数: 20.00 ) 正确答案: (void jsVal()int i,thou,hun,ten,data,j;int ab.cd;for(i=0;i < 200;i

5、+) /*循环以遍历数组 a中的所有200个四位数*/thou=ai/1000; /* 取当前数的千位数字 */hun=ai%1000/100; /* 取当前数的百位数字 */ ten=ai%100/10; /* 取当前数的十位数字 */ data=ai%10; /* 取当前数的个位数字 */if(thou=0|data=0)/* 若干位或个位为 0*/continue; /* 则组成的新数至少有一个十位为 0, 不符合题意继续循环 */ ab=10*thou+ten; /* 把千位数字和十位数字重新组成一个新的十位数*/cd=10*data+hun; /* 把个位数字和百位数字重新组成一个新

6、的十位数*/if(ab >cd && ab%2=0& & ab%5=Qk & cd%2!=0) /*若新组成的两个数 ab> cd且ab为偶数并能被5整除并且cd是奇数的话*/bcnt=ai; /* 将此数存入数组 b*/cnt+; /* 让计数值 cnt 增 1*/* 对数组 b 的前 cnt 个数进行选择排序 */for(i=0;i < cnt-1;i+)for(j=i+1;j < cnt;j+)if(bi < bj) /* 前面的数小于后面的数则交换 ,即降序排列 */data=bi;bi=bj;bj=data;)解析

7、:2. 已知数据文件in.dat中存有300个四位数,并已调用读函数 readDat()把这些数存入数组 a中。请编写 函数jsValue(),其功能是:求出干位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt ,再求出所有满足此条件的四位数平均值 pjz1 ,以及不满足此条件的四位数平均值 pjz2 ,最后调用写函数 writeDat() ,把结果输出到 out.dat 文件中。例如: 6712, 6+2=7+1,则该数满足条件计算平均值 pjz1 ,且个数 cnt=cnt+1 。8129, 8+9<> 1+2,则该数不满足条件计算平均值pjz2 。注意:部分源程序已经

8、给出。程序中已定义数组: a300 ;已定义变量: cnt 、pjz1 、pjz2 。请勿改动主函数 main() 、读函数 readDat() 和写函数 writeDat() 的内容。#include < stdio.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);fclos

9、e(fp);void writeDat()FILE *fp; fp=fopen("out.dat","w");fprintf(fp,"%d/n%7.2f/n%7.2f/n",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 jsVahe (

10、)int i,n=0,thou,hun,ten,data;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+ten) /* 如果千位加个位等于百位加十位的话 */ cnt+; /* 让计数值 cnt 增 1*/ pjz1+=ai; /* 将此数累加到 pjz1 中*/ else /* 否

11、则让计数值 n 增 1, 将此数累加 Npjz2 中 */n+;pjz2+=ai;pjz1/=cnt; /* 计算符合条件的数的平均值 */pjz2/=n; /* 计算不符合条件的数的平均值 */)解析:3. 函数ReadDat()实现从IN.DAT文件中读取一篇英文文章并存入字符串数组xx中。请编写函数SortCharA() ,其功能是: 以行为单位对字符按从小到大的顺序进行排序, 排序后的结果仍按行重新存入字 符串数组xx中,最后调用函数 WriteDat(),把结果xx输出到OUT.DAT文件中。例如,原文: dAe, BfCCCbbAA结果: ,.ABCdefAACCbb原始数据文件存

12、放的格式是:每行的宽度均小于 80 个字符 ( 含标点符号和空格 )。 注意:部分源程序已经给出。请勿改动主函数 main() 、读数据函数 ReadDat() 和输出数据函数 WriteDat() 的内容。#include < stdio.h #include < string.h#include < conio.h文章的总行数 */char xx5080; int maxline=0; /* int ReadDat(void); void WriteDat(void); void SortCharA(void) void main()if(ReadDat()printf(

13、" 数据文件 IN.DAT 不能打开 !/n/007");return;SortCharA();WriteDat();int ReadDat(void)FILE *fp;int i=0;char *p;if(fp=fopen("IN.DAT","r")=NULL)return 1;while(fgets(xxi,80,fp)!=NULL)p=strchr(xxi,'/n');if(p)*p=0;i+;maxline=i;fclose(fp);return 0;void WriteDat(void)FILE *fp;in

14、t i;fp=fopen("OUT.DAT","w");for(i=0;i < maxline; i+)printf("%s/n",xxi);fprintf(fp,"%s/n",xxi);fclose(fp);分数: 20.00 ) 正确答案: (void SortCharA(void)int i,j,k,Strl;char eh;/* 循环以遍历英文文章的每一行 */for(i=0;i < maxline;i+)strl=strlen(xxi);/* 用选择排序法对当前行进行排序 */for(j=0;

15、j < strl-1;j+)for(k=j+1;k< strl;k+)if(xxij> xx【i【k) /* 前面的字符大于后面的字符则交换两者 , 所以此排序是升序排序 */ch=xxij;xxij=xxik;xxik=ch;)解析:4. 已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数 readDat() 把这些数存入数组 a 中。请编写 函数 jsVal() ,其功能是:把一个四位数的千位数字上的值加上个位数字上的值恰好等于百位数字上的值 加上十位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数cnt 并把这些四位数按从小到大的顺序存入数组

16、b 中,最后调用写函数 writeDat() ,把结果 cnt 以及数组 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&qu

17、ot;,"r");for(i=0;i v 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 v cnt; i+)fprintf(fp,"%d/n",bi);fclose(fp);void main()int i;readDat();jsVal();printf("

18、满足条件的数 =%d/n",cnt);for(i=0;i v cnt;i+)printf("%d",bi); printf("/n"); writeDat();分数: 20.00 ) 正确答案: (void jsVal ()int i,thou,hun,ten,data,j;for(i=0;i v MAX;i+) /*循环以遍历数组 a中的所有四位数*/thou=ai/1000; /* 取当前数的千位数字 */ hun=ai%1000/100; /* 取当前数的百位数字 */ ten=ai%100/10; /* 取当前数的卜位数字 */ dat

19、a=ai%10; /* 取当前数的个位数字 */ if(thou+data=hun+ten) ai%2=1) /* 若干位加个位等于百位加十位且原数为奇数的话 */ bcnt=ai; /* 将此数存入数组 b*/Grit+; /* 让计数值 ent 增 1*/* 对数组 b 的前 cnt 个数进行选择排序 */for(i=0;i(cnt-1;i+)for(j=i+1;j(cnt;j+)if(bi > bj) /* 前面的数大于后面的数则交换 , 即升序排列 */data=bi;bi=bj;bj=data;)解析:5. 下列程序的功能是:将一正整数序列K1, K2,,K9重新排列成一个新的

20、序列。新序列中,比K1小的数都在K1的前面(左边),比K1大的数都在K1的后面(右边)。要求编写函数jsValue()实现此功能,最后 调用 writeDat() 函数将新序列输出到 out.dat 文件中。说明:在程序中已给出了 10 个序列,每个序列有 9个正整数,并存入数组 a109 中,分别求出这 10 个 新序列。例如:序列 6, 8, 9, 1, 2, 5, 4, 7, 3经重排后成为 3, 4, 5, 2, 1 , 6, 8, 9, 7注意:部分源程序已经给出。请勿改动主函数 main() 和写函数 writeDat() 的内容。#include < stdio.h >jsValue(int a109)void writeDat(int a109)FILE *fp;int i,j;fp=fopen("out.dat","w");for(i=0; i < 10; i+)for(j=0;j < 9;j+)fprintf(fp,"%d",aij);if(j < =7)fprintf(fp,",&qu

温馨提示

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

最新文档

评论

0/150

提交评论