国家三级(数据库技术)机试模拟试卷90 (题后含答案及解析)
题型有:1. 程序设计题
程序设计题
1. 下列程序的功能是:将一正整数序列{K1,K2,…,K91重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比KI大的数都在K1的右面(后续的再向右存放),从K1向右扫描。要求编写函数JsValue( )实现此功能,最后调用函数writeDat( )把新序列输出到文件out90.dat中。 说明:在程序中已给出了.10个序列,每个序列中有9个正整数,并存入数组a[10][9]中,分别求出这 10个新序列。 例如: 序列排序前 {6,8,9,1,2,5,4,7,3} 序列排序后 {3,4,5,2,1,6,8,9,7} 注意:部分源程序已给出。 请勿改动主函数main( )和写函数writeDat( )的内容。 试题程序: #include jsValue(int a[lO] [9]) { } main( ) { int a[10] [9]={{6,8,9,1,2,5,4,7,3},{3,5,8,9,1,2,6,4,7},{8,2,1,9,3,5,4,6,7},{3,5,1,2,9,8,6,7,4},{4,7,8,9,1,2,5,3,6},{4,7,3,5,1,2,6,8,9}, {9,1,3,5,8,62,4,7} {2,6,1,9,8,35,7,4}
{5,3,7,9,1,82,6,4} {7,1,3,2,5,89,4,6} }; int i,j; jsValue(a); for(i=0;i<10;i++) { for(j=0;j<9;j++) {printf(“%d”,a[i] [j]);if(j<=7) printf(“,”); } printf(“\\n”); } writeDat(a); } writeDat(int ail0] [9]) { FILE *fp; int i,j; fp=fopen(“outg0.dat”,”w”); for(i=0;i<10;i++) { for(j=0;j<9;j++) {fprintf(fp,”%d”,a[i] [j]);if(j<=7) fprintf(fp,”,”); } fprintf(fp,”\\n”); } fclose(fp); }
正确答案:void jsValue(int a[10][9]) { int value,i,j,k,hum; for(i=0;i<10;i++) { value=a[i][0]); /*将一行的第一个元素赋给value*/ for{j=0;j<9;j++) if(a[i][j]<value) /*若后面的数中有比第土个数据小的数*/ { num=a[i] [j]; /*则把这个数取出,赋给num*/ for (k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } }
解析:本题考查的知识点如下:(1)二维数组的访问和数组元素的移动。(2)循环结构和判断结构的嵌套使用。数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较,若后面的数中有比第1个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数),然后将这个数放在最左侧。扫描完一行后,比第1个数小的数就都在第1个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。
因篇幅问题不能全部显示,请点此查看更多更全内容