for(i=0;i<=n-2;i++) {《2》;
for(j=i《3》;j
for(i=0;i 五、综合应用 1、插入法:有n个数,已按由小到大顺序排列好,要求输入一个数据,把它插入到原有数列中,而仍然保持有序。 void f(int a[ ],int n,int x) {int I,j; while(a[i]<=x && i {for(j=n-1;j>=I;j--) a[j+1]=a[j]; a[i]=x; } else a[i]=x; } 改写: void f(int a[ ],int n,int x) {int I,j; while(a[i]<=x && i for(j=n-1;j>=I;j--) 16 a[j+1]=a[j]; a[i]=x; } 2、插入法:下面程序的运行结果是( )。 main() { int I=0,n=3,j,k=3; int a[5]={1,4,5}; while(I<=n&&k>a[I]) I++; for(j=n-1;j>=I;j--) a[j+1]=a[j]; a[i]=k; for(I=0;I<=n;I++) printf(―=‖,a[i]); } 3、插入法:若有以下程序段: ………….. int a[]={4,0,2,3,1},I,j,t; for(I=1;I<5;I++) {t=a[i];j=I-1; while(j>=0&&t for(I=0;I<5;I++) printf(―%d ‖,a[i]); ………… 则该程序段的输出结果是( )。 4、下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。 main() { int a[3]={5,9,19}; int b[5]={12,24,26,37,48}; int c[10],I=0,j=0,k=0; while(I<3&&j<5) 17 if(__________) {c[k]=b[j];k++;j++;} else {c[k]=a[i];k++;I++;} while(________) { c[k]=b[j];k++;j++;} while(________) { c[k]=a[i];k++;I++;} for(I=0;I 5、下面程序用“顺序查找法”查找数组a中是否存在某一关键字。请填空。 main() {int a[8]={25,57,48,37,12,92,86,33}; int I,x; scanf(―%d‖,&x); for(I=0;I<8;I++) if(x==a[I]) {printf(―Found! The index is :%d\\n‖,--i);____________;} if(____________) printf(―Can‘t found!‖); } 6、要求写一函数,实现对包含任意个数据的数列实现头尾颠倒。 void f(int a[ ],int n) {int I,t; for(I=0;I t=a[i];a[i]=a[n-i];a[n-i]=t; } } 7、下面程序的运行结果是( )。 main() {int a[10]={1,2,2,3,4,3,4,5,1,5}; 18 int n=0,I,j,c,k; for(I=0;I<10-n;I++) {c=a[i]; for(j=I+1;j<10-n;j++) if(a[j]==c) {for(k=j;k<10-n;k++) a[k]=a[k+1]; n++; } } for(I=0;I<10-n;I++) printf(―%d‖,a[i]); } 8、当从键盘输入18并回车后,下面程序的运行结果是( )。 main() { int x,y,I,a[8],j,u,v; scanf(―%d‖,&x); y=x;I=0; do { u=y/2; a[i]=y%2; I++;y=u; }while(y>=1); for(j=I-1;j>=0;j--) printf(―%d‖,a[j]); } 9、有17个人围成一圈,编号为0—16,从第0号的人开始从1报数,凡报到3的倍数离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号。 main() {int a[17],I,t=0,s=0; for(I=0;I<17;I++) a[i]=1; 19 while(t<=16) { for(I=0;I<17;I++) if(a[i]==0) {s=s+1; if(s%3==0) {a[i]=0;t=t+1;} } } for(I=0;I<17;I++) if(a[i]==1) printf(―%d‖,i); } 10、将一个二维数行、列互换后输出。 Void f(int a[ ],int n,int m ,int b[ ]) {int I,j; for(I=0;I for(I=0;I printf(―M‖,b[j*n+i]); printf(―\\n‖); } } 11、求矩阵对角线元素之和 main() {int a[3[3]={1,3,6,7,9,11,14,15,17},sum=0,I,j; for(I=0;I<3;I++) for(j=0;j<3;j++) if((I==j)||(I+j==3)) sum=sum+a[I][j]; } 12、下面程序的功能是检查一个二维数组是否对称(即:都有a[I][j]=a[j][I])。请填空。 main() {int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int I,j,found=0 20 对所有I和j