当前位置:首页 > 数组练习题
C语言程序设计电子教案 5
do
{mid=(top+bot)/2; if(x==a[mid])
{printf(“found”);find=1;} else if(x }while((top<=bot)&&(find==0)); } 例14:下面程序用“顺序查找法”查找数组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!”); } 例15:要求写一函数,实现对包含任意个数据的数列实现头尾颠倒。 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; } } 例16:下面程序的运行结果是( )。 main() {int a[10]={1,2,2,3,4,3,4,5,1,5}; 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]); } 答案:12345 C语言程序设计电子教案 6 例17:当从键盘输入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]); } 答案:10010 例18:有17个人围成一圈,编号为0—16,从第0号的人开始从1报数,凡报到3的倍数离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号。 main() {int a[17],I,t=0,s=0; for(I=0;I<17;I++) a[i]=1; 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); } 第二节 二维数组 1、二维数组的定义 二维数组定义的一般形式为: 类型说明符 数组名[常量表达式][常量表达式] 注意: 二维数组在内存中是按一维连续顺序存放的。设有一个m*n的二维数组a,其中第i行第j列元素a[i][j]在数组中的顺序号计算公式为:i*n+j 例19:以下对二维数组a的正确说明是( )。 A)int a[3][] B)float a(3,4) C)double a[1][4] D)float a(3)(4) 答案:C 2、二维数组的引用 二维数组的元素的表示形式为:数组名[下标][下标] 例20:若有说明:int a[3][4];则对数组元素的正确引用是( )。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) C语言程序设计电子教案 7 答案:C 3、二维数组初始化 ①分行给二维数组赋初值 如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ②可写在一个花括弧内 如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; ③可给部分赋值 如:int a[3][4]={1,2,3}; 如:int a[3][4]={{1},{2},{3}}; ④可省略一维长度 如:int a[ ][4]={1,2,3,4,5,6,7,8,9,10}; 如:int a[ ][4]={{1},{2},{3}}; 例21:以下不能对二维数组a进行正确初始化的语句是()。 A)int a[2][3]={0}; B)int a[ ][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[ ][3]={1,2,3,4,5,6}; 答案:C 例22:若有说明:int a[ ][3]={1,2,3,4,5,6,7};则a数组第一维的大小是( )。 答案:3 4、函数参数(p 160) 例23:求一个3*4矩阵的所有靠外侧的元素之和。设矩阵为: 3 8 9 10 a= 2 5 –3 5 7 0 -1 4 main() {int add(int m,int n,int arr[]); int total,a[3][4]={3,8,9,10,2,5,-3,5,7,0,-1,4}; total=add(3,4,a[0]); printf(“total=%f”,total); } add(int m,int n,int arr[]) {int I,j,sum=0; for(I=0;I sum=sum+arr[I*n+j]; for(j=0;j 5、二维数组举例 例24:将一个二维数行、列互换后输出。 Void f(int a[ ],int n,int m ,int b[ ]) {int I,j; C语言程序设计电子教案 8 for(I=0;I for(j=0;j b[j*n+i]= a[I*m+j]; for(j=0;j for(I=0;I printf(“M”,b[j*n+i]); printf(“\\n”); } } 例25:求矩阵对角线元素之和 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]; } 例26:下面程序的功能是检查一个二维数组是否对称(即:对所有I和j都有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 for(I=0;I<4;I++) for(j=0;J if(a[i][j]!=a[j][i] ) {found=1;break;} if(found) printf(“No”); } 例27:以下程序是求矩阵a,b的和,结果存入矩阵c中并按矩阵形式输出。请填空。 2 -1 -7 -9 a= -4 0 b= -8 10 3 1 main() {int a[3][2]={2,-1,-4,0,3,1}; int b[4][3]={7,-9,-8,10}; int I,j,k,s,c[3][2]; for(I=0;I<3;I++) for(j=0;j<2;j++) {for(s=0,k=0;k<2;k++) s+=a[i][k]*b[k][j]; c[i][j]=s; } for(I=0;I<3;I++)
共分享92篇相关文档