1、计算机三级数据库技术-12 及答案解析(总分:100.00,做题时间:90 分钟)一、B上机题/B(总题数:5,分数:100.00)1.已知数据文件 IN.DAT中存有 200个四位数,并已调用读函数 readDat()把这些数存入数组 a中。请编写函数 jsVal(),其功能是:把千位数字和十位数字重新组成一个新的两位数(新两位数的十位数字是原四位数的千位数字,新两位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的两位数(新两位数的十位数字是原四位数的个位数字,新两位数的个位数字是原四位数的百位数字),如果新组成的两个两位数均是素数且新数的十位数字均不为零,则将满足
2、此条件的四位数按从大到小的顺序存入数组 b中,并计算满足上述条件的四位数的个数 cnt。最后 main()函数调用写函数 writeDat(),把结果 cnt以及数组 b中符合条件的四位数输出到 OUT.DAT文件中。 注意:部分源程序已经给出。 程序中已定义数组:a200,b200;已定义变量:cnt。 请勿改动数据文件 IN.DAT中的任何数据及主函数main()、读函数 readDat()和写函数 writeDat()的内容。 #include stdio.h #define MAX 200 int aMAX,bMAX,cnt=0; int isprime(int m) int i; f
3、or(i=2;i=m/2;i+) if(mooi=0) return 0; return 1; void jsVal() void readDat() int i; FILE *fp; fp=fopen(“IN.DAT“,“r“); for(i=0;iMAX;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); voi
4、d main () int i; readDat(); jsVal(); printf(“满足条件的数=%d/n“,cnt); for(i=0;icnt;i+) printf(“%d“,bi); printf(“/n“); writeDat(); (分数:20.00)_2.已知数据文件 IN.DAT中存有 200个四位数,并已调用读函数 readDat()把这些数存入数组 a中。请编写函数 jsVal(),其功能是:把千位数字和个位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的个位数字),以及把百位数字和十位数字组成另一个新的十位数(新十位数
5、的十位数字是原四位数的百位数字,新十位数的个位数字是原四位数的十位数字),如果新组成的两个十位数均是奇数并且两个十位数中至少有一个数能被 5整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组 b中,并计算满足上述条件的四位数的个数 cnt。最后 main()函数调用写函数 writeDat(),把结果 cnt以及数组 b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分源程序已经给出。 程序中已定义数组:a200,b200;已定义变量:cnt。 请勿改动数据文件 IN.DAT中的任何数据及主函数 main()、读函数 readDat()和写函数 wri
6、teDat()的内容。 #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;iMAX;i+) fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); vo
7、id main() int i; readDat(); jsVal(); printf(“满足条件的数=%d/n“,cnt); for(i=0;icnt;i+) printf(“/n“); writeDat(); (分数:20.00)_3.已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组 b的四位数按从小到大的顺序进行排序,最后调用写函数 writeDat()
8、,把结果输出到 out.dat文件。 例如:9123, 9-1-2-30,则该数满足条件存入数组 b中,且个数 cnt=cnt+1。 9812,9-8-1-20,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组: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=
9、0;i300;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FIIE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValue(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) printf(“b%d=%d/n“,i,bi);(分数:20.00)_4.
10、已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出于位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组 b的四位数按从大到小的顺序进行排序,最后调用写函数 writeDat(),把结果输出到 out.dat文件中。 例如:7153,7+1=5+3,则该数满足条件存入数组 b中,且个数 cnt=cnt+1。 8129,8+12+9,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组:a300,b30
11、0;已定义变量: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;i300;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FIIE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); fo
12、r(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValue(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) printf(“b%d=%d/n“,i,bi); (分数:20.00)_5.已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出所有这些四位数是素数的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组
13、 b的四位数按从小到大的顺序进行排序,最后调用写函数 writeDat(),把结果输出到 out.dat文件中。 例如,5591 是素数,则该数满足条件存入数组 b中,且个数cnt=cnt+1。9812 是非素数,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组:a300,b300;已定义变量:cnt。 请勿改动主函数 main()、读函数 ReadDat()和写函数writeDat()的内容。 #include stdio.h int a300,b300,cnt=0; int isP(int m) int i; for (i=2;im;i+) if (m%i=0) re
14、turn 0; return 1; void jsValue() void ReadDat() FILE *fp; int i; fp=fopen(“in.dat“,“r“); for(i=0;i300;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValu
15、e(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) (分数:20.00)_计算机三级数据库技术-12 答案解析(总分:100.00,做题时间:90 分钟)一、B上机题/B(总题数:5,分数:100.00)1.已知数据文件 IN.DAT中存有 200个四位数,并已调用读函数 readDat()把这些数存入数组 a中。请编写函数 jsVal(),其功能是:把千位数字和十位数字重新组成一个新的两位数(新两位数的十位数字是原四位数的千位数字,新两位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的两位数(新两位数的
16、十位数字是原四位数的个位数字,新两位数的个位数字是原四位数的百位数字),如果新组成的两个两位数均是素数且新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组 b中,并计算满足上述条件的四位数的个数 cnt。最后 main()函数调用写函数 writeDat(),把结果 cnt以及数组 b中符合条件的四位数输出到 OUT.DAT文件中。 注意:部分源程序已经给出。 程序中已定义数组:a200,b200;已定义变量:cnt。 请勿改动数据文件 IN.DAT中的任何数据及主函数main()、读函数 readDat()和写函数 writeDat()的内容。 #include stdi
17、o.h #define MAX 200 int aMAX,bMAX,cnt=0; int isprime(int m) int i; for(i=2;i=m/2;i+) if(mooi=0) return 0; return 1; void jsVal() void readDat() int i; FILE *fp; fp=fopen(“IN.DAT“,“r“); for(i=0;iMAX;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,
18、“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); void main () int i; readDat(); jsVal(); printf(“满足条件的数=%d/n“,cnt); for(i=0;icnt;i+) printf(“%d“,bi); printf(“/n“); writeDat(); (分数:20.00)_正确答案:(void jsVal() int i,thou,hun,ten,data,j; int ab,cd; for (i=0;i200;i+) /*循环以遍历数组 a中的所有 200个四位
19、数*/ thou=ai/1000; /*取当前数的千位数字*/ hun=ai%1000/100; /*取当前数的百位数字*/ ten=aj%100/10; /*取当前数的十位数字*/ data=ai%10; /*取当前数的个位数字*/ if (thou=0 | data=0)/*若千位或个位为 0*/ contlnue; /*则组成的新数至少有一个十位为 0,不符合题意继续循环*/ ab=10*thou+ten; /*把千位数字和十位数字重新组成一个新的十位数*/ cd=10*data+hun; /*把个位数字和百位数字重新组成一个新的十位数*/ if (isprime(ab) /*将此数存入
20、数组 b*/ cnt+; /*让计数值 cnt增 1*/ cnt+; /*用选择排序对数组 b的前 cnt个数进行排序*/ for (i=0;icnt-1;i+) for (j=i+1;jcnt;j+) if (bibj) /*若前面的数小于后面的,则交换两者(即降序排列)*/ data=bi; bj=data; )解析:2.已知数据文件 IN.DAT中存有 200个四位数,并已调用读函数 readDat()把这些数存入数组 a中。请编写函数 jsVal(),其功能是:把千位数字和个位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的个位数字),
21、以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字,新十位数的个位数字是原四位数的十位数字),如果新组成的两个十位数均是奇数并且两个十位数中至少有一个数能被 5整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组 b中,并计算满足上述条件的四位数的个数 cnt。最后 main()函数调用写函数 writeDat(),把结果 cnt以及数组 b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分源程序已经给出。 程序中已定义数组:a200,b200;已定义变量:cnt。 请勿改动数据文件 IN.DAT中的任何数据及主函数 m
22、ain()、读函数 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;iMAX;i+) fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp
23、,“%d/n“,bi); fclose(fp); void main() int i; readDat(); jsVal(); printf(“满足条件的数=%d/n“,cnt); for(i=0;icnt;i+) printf(“/n“); writeDat(); (分数:20.00)_正确答案:(void jsVal() int i,thou,hun,ten,data,j; int ab,cd; For (i=0;i200;i+) /*循环以遍历数组 a中的所有 200个四位数*/ thou=ai/1000; /*取当前数的干位数字*/ hun=ai%1000/100; /*取当前数的百位
24、数字*/ ten=ai%100/10; /*取当前数的十位数字*/ data=ai%10; /*取当前数的个位数字*/ if (thou=0 | hun=0) /*若千位或百位为 0*/ continue; /*则组成的新数至少有一个十位为 0,不符合题意继续循环*/ ab=10*thou+data; /*把千位数字和个位数字重新组成一个新的十位数*/ cd=10%hun+ten; /*把百位数字和十位数字重新组成一个新的十位数*/ if (ab%2=1 /*将此数存入数组 b*/ cnt+; /*让计数值 cnt增 1*/ cnt+; /*用选择排序对数组 b的前 cnt个数进行排序*/ f
25、or (i=0;icnt-1;i+) for (j=i+1;jcnt;j+) if (bibj) /*若前砸的数小于后面的,则交换两者(即降序排列)*/ data=bi; bi=bj; bj=data; )解析:3.已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组 b的四位数按从小到大的顺序进行排序,最后调用写函数 writeDat(),把结果输出到 out.
26、dat文件。 例如:9123, 9-1-2-30,则该数满足条件存入数组 b中,且个数 cnt=cnt+1。 9812,9-8-1-20,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组: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;i300;i+) f
27、scanf(fp,“%d,“, fclose(fp); void writeDat() FIIE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValue(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) printf(“b%d=%d/n“,i,bi);(分数:20.00)_正确答案:(void jsV
28、alue() int i,thou,hun,ten,data,j; for (i=0;i300;i+) /*循环以遍历数组a中的所有 300个四位数*/ thou=ai/1000; /*取当前数的千位数字*/ hun=ai%1000/100; /*取当前数的百位数字*/ ten=ai%100/10; /*取当前数的十位数字*/ data=ai%l0; /*取当前数的个位数字*/ if (thou-hun-ten-data0) /*若干位减百位减十位减个位大于 0*/ bcnt=ai; /*将此数存入数组 b */ cnt+; /*让计数值 cnt增 1*/ cnt+; /*用选择排序对数组 b
29、的前 cnt个数进行排序*/ for (i=0;icnt-1;i+) for (j=i+1;jcnt;j+) if (bibj) /*若前面的数大于后面的,则交换两者(即升序排列)*/ data=bi; bi=bj; bj=data; )解析:4.已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出于位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组 b的四位数按从大到小的顺序进行排序,最后调用写函数 writeDat
30、(),把结果输出到 out.dat文件中。 例如:7153,7+1=5+3,则该数满足条件存入数组 b中,且个数 cnt=cnt+1。 8129,8+12+9,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组: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=
31、0;i300;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FIIE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValue(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) printf(“b%d=%d/n“,i,bi); (分数:20.00)_正
32、确答案:(void jsValue() int i,thou,hun,ten,data,j; for (i=0;i300;i+) /*循环以遍历数组a中的所有 300个四位数*/ thou=ai/1000; /*取当前数的千位数字*/ hun=ai%1000/100; /*取当前数的百位数字*/ ten=ai%100/10; /*取当前数的十位数字*/ data=ai%10; /*取当前数的个位数字*/ if (thou+hun=data+ten) /*如果千位加百位等于个位加十位*/ bcnt=ai; /*将此数存入数组b*/ cnt+; /*让计数值 cnt增 1*/ cnt+; /*用选
33、择排序对数组 b的前 cnt个数进行排序*/ for (i=0;icnt-1;i+) for (j=i+1;jcnt;j+) if (bibj) /*若前面的数小于后面的,则交换两者(即降序排列)*/ data=bi; bi=bj; bj=data; )解析:5.已知数据文件 in.dat中存有 300个四位数,并已调用读函数 ReadDat()把这些数存入数组 a中。请编写函数 jsValue(),其功能是:求出所有这些四位数是素数的个数 cnt,再把所有满足此条件的四位数依次存入数组 b中,然后对数组 b的四位数按从小到大的顺序进行排序,最后调用写函数 writeDat(),把结果输出到
34、out.dat文件中。 例如,5591 是素数,则该数满足条件存入数组 b中,且个数cnt=cnt+1。9812 是非素数,则该数不满足条件,忽略。 注意:部分源程序已经给出。 程序中已定义数组:a300,b300;已定义变量:cnt。 请勿改动主函数 main()、读函数 ReadDat()和写函数writeDat()的内容。 #include stdio.h int a300,b300,cnt=0; int isP(int m) int i; for (i=2;im;i+) if (m%i=0) return 0; return 1; void jsValue() void ReadDat
35、() FILE *fp; int i; fp=fopen(“in.dat“,“r“); for(i=0;i300;i+) fscanf(fp,“%d,“, fclose(fp); void writeDat() FILE *fp; int i; fp=fopen(“out.dat“,“w“); fprintf(fp,“%d/n“,cnt); for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi); fclose(fp); main() int i; ReadDat(); jsValue(); writeDat(); printf(“cnt=%d/n“,cnt); for(i=0;icnt;i+) (分数:20.00)_正确答案:(void jsValue() int j,i,value; for (i=0;i300;i+) /*循环以遍历数组 a中的所有300个数*/ if (isP(ai) /*如果是素数,则将此数存入数组 b,并让计数值 cnt增 1*/ bcnt=ai;cnt+; /*用选择排序对数组 b的前 cnt个数进行排序*/ for (i=0;icnt-1;i+) for (j=i+1;jcnt;j+) if (bibj) /*若前面的数大于后面的,则交换两者(即升序排列)*/ value=bi; bi=bj; bj=value; )解析: