C语言练习题-数组

  1. 现有一实型数组A[12],其各元素在内存中的排列的顺序为:
    1.0,15.5,9.5,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.5
  • 数组中元素值最小的数组元素。
  • 数组中元素值最大的数组元素。
  • 数组中某数组元素值等于另外两个数组元素值之和的等式。
  • 数组中某数组元素值等于另外两个数组元素值之差的等式。
 
#include
int main(){
     
	double A[12]={
     1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.5};
	double max,min;
	int i,j,k;
	max=min=A[0];
	for(i=0;i<12;i++){
     
		if(max<A[i]){
     
			max=A[i];
		}
		if(min>A[i]){
     
			min=A[i];
		}	
	}
	for(i=0;i<12;i++){
     
		for(k=0;k<12;k++){
     
			for(j=0;j<12;j++){
     
			 	if(A[i]+A[k]==A[j]){
     
					printf("%lf+%lf=%lf \n",A[i],A[k],A[j]);
				}
			 if(A[i]-A[j]==A[k]){
     
			 		printf("%lf-%lf=%lf \n",A[i],A[k],A[j]);
			 }
				
			}
		}
	}
	printf("max=%lf,min=%lf \n",max,min);
}  
  1. 现有一实型数组A[3][4],其各元素在内存中的排列的顺序为:
    4.0,28.0,15.5,-9.5,-23.0,8.0,56.0,2.0,28.0,7.0,6.2,5.0
  • 数组中元素值最小的数组元素。
  • 数组中元素值最大的数组元素。
  • 数组中某数组元素值等于另外两个数组元素值之积的等式。
  • 数组中某数组元素值等于另外两个数组元素值之商的等式。
#include
int main(){
     
	double A[4][3]={
     4.0,28.0,15.5,-9.5,-23.0,8.0,56.0,2.0,28.0,7.0,6.2,5.0};
	int j,k,i,z,x,y;
    double max,min;
    max=min=A[0][0];
	for(j=0;j<4;j++){
     
		for(k=0;k<3;k++){
     
		  if(max<A[j][k]){
     
		  	max=A[j][k];
		  }
		  if(min>A[j][k]){
     
		  	min=A[j][k];
		  }
		}
	}
		for(j=0;j<4;j++){
     
		  for(k=0;k<3;k++){
     
			for(i=0;i<4;i++){
     
				for(z=0;z<3;z++){
     
					for(x=0;x<4;x++){
     
						for(y=0;y<3;y++){
     
							if(A[j][k]*A[i][z]==A[x][y]){
     
								printf("%lf*%lf=%lf \n",A[j][k],A[i][z],A[x][y]);
							}
							if(A[j][k]/A[i][z]==A[x][y]) {
     
								printf("%lf/%lf=%lf \n",A[j][k],A[i][z],A[x][y]);
							}
						}
					}
				}
			}
		}
    }
    printf("max=%lf,min=%lf",max,min);
}
  1. 用数组定义语句和scanf函数完成。
  • 现有一实型数组A[12],其各元素在内存中的排列的顺序为:
    1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0
  • 整型二维数组A[3][3],其各元素值在内存中排序的顺序为:
    1,2,3,4,5,6,7,8,9
  • 实型三维数组A[2][3][2],其各元素值在内存中排列的顺序为:
    1.0 ,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0
/*#include
int main()
{
	double A[12];
	int i;
	for(i=0;i<12;i++){
	scanf("%lf",&A[i]);
	printf("%lf \t",A[i]);
  } 

} */
/*#include
int main(){
	double A[3][3];
	int i,j;
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%lf",&A[i][j]);
			printf("%lf \t",A[i][j]);
		}
	}
	
}*/
#include
int main(){
     
	double A[2][3][2];
	int i,j,k;
	for(i=0;i<2;i++){
     
		for(j=0;j<3;j++){
     
			for(k<2;k<2;k++){
     
				scanf("%lf",&a[i][j][k]);
				printf("%lf",&a[i][j][k]);
			}
		}
	}
} 
  1. 有一整型二维数组a[10][10],按下列要求.
  • 按行输出所有的数组元素。
  • 按列输出所有的数组元素。
  • 输出主对角线上的所有元素。
  • 输出副对角线上的所有元素。
  • 输出上三角形(包含主对角线上的元素)的所有元素。
  • 输出上三角形(包含副对角线的元素)的所有元素。
  • 输出下三角形(包含主对角线上的元素)的所有元素。
  • 输出下三角形(包含副对角线的元素)的所有元素。
#include
int main(){
     
	int a[10][10];
	int i,j;
	int x;
	printf("输入数组元素:");
	for(i=0;i<10;i++){
     
		for(j=0;j<10;j++){
     
			scanf("%d",&a[i][j]);
		}
	}
	printf("按行输出所有的数组元素:"); 
  for(i=0;i<10;i++){
     
	for(j=0;j<10;j++){
     
		printf("%3d",a[i][j]);
	 }
	 printf("\n");	
	}
		printf("按列输出所有的数组元素:"); 
	 for(j=0;j<10;j++){
     
		for(i=0;i<10;i++){
     
		printf("%3d",a[i][j]);
		}
		printf("\n");
	}
	printf("主对角线的元素为:");

     	j=0;
	  for(i=0;i<10;i++){
     
		printf("%3d",a[i][j]);
		j++;
		
		
	}
	printf("\n");
	i=0;
	printf("副对角上的元素为:"); 
	for(j=9;j>=0;j--){
     
		
		printf("%3d",a[i][j]);
		i++;
	}
	printf("\n"); 
	printf("上三角形的所有元素(包含主对角线):"); 
	for(i=0;i<10;i++){
     
		for(j=0;j<10;j++){
     
			if(i!=0&&j==9&&i!=9){
     
				printf("%3d",a[i][j]);
			}
			
			if(i==0&&j!=0){
     
			printf("%3d",a[i][j]);
			}
				 
		}
	printf("\n"); 	
	}
		printf("\n"); 
		j=0;
	for(i=0;i<10;i++){
     
		printf("%3d",a[i][j]);
		j++;
		
		
	}
	printf("\n"); 
	printf("上三角形的所有元素(包含副对角线):"); 
	for(i=0;i<10;i++){
     
		for(j=0;j<10;j++){
     
			if(i!=9&&j==0){
     
			printf("%3d",a[i][j]);
			}
			if(i==0&&j!=0&&j!=9){
     
			printf("%3d",a[i][j]);	
			}
		}
		printf("\n"); 
	}
	printf("\n"); 
		i=0;
	for(j=9;j>=0;j--){
     
		
		printf("%3d",a[i][j]);
		i++;
	}
	printf("\n"); 
	printf("下三角形的所有元素(包含主对角线):"); 
	for(i=0;i<10;i++){
     
		for(j=0;j<10;j++){
     
			if(i==9&&j!=9){
     
			 printf("%3d",a[i][j]);	
			}
			if(i!=0&&i!=9&&j==0){
     
			 printf("%3d",a[i][j]);		
			}
		}
			printf("\n"); 
	}
		printf("\n"); 
		j=0;
	for(i=0;i<10;i++){
     
		printf("%3d",a[i][j]);
		j++;
		
		
	}
		printf("\n"); 
	printf("下三角形的所有元素(包含副对角线):"); 	
	for(i=0;i<10;i++){
     
		for(j=0;j<10;j++){
     
			if(i==9&&j!=9){
     
				printf("%3d",a[i][j]);	
			}
			if(i!=9&&j==9&&i!=0){
     
				printf("%3d",a[i][j]);	
			}
		}
	
	}
		i=0;
	 	for(j=9;j>=0;j--){
     
		
		printf("%3d",a[i][j]);
		i++;
	}
	 
}
  1. 给定一个整型一维数组a[100]赋值,要求给奇数下标的元素负值,偶数下标值得元素赋正值。
#include
int main(){
     
	int a[100];
	int i;
	for(i=0;i<100;i++){
     
		if(i%2==0){
     
			a[i]=1;
		}
		else if(i!=0){
     
			a[i]=-1;
		}
		printf("%3d",a[i]);
	}
} 
  1. 给整型二维数组b[3][4]输入12个数据,计算并输出数组中所有正数之和、所有负数之和。
#include
int main(){
     
	double b[3][4],x,y;
	int i,j;
	x=y=0;
	printf("赋值b[3][4]:");
	for(i=0;i<3;i++){
     
		for(j=0;j<4;j++){
     
		
		scanf("%lf",&b[i][j]);
	}
	}
	for(i=0;i<3;i++){
     
	for(j=0;j<4;j++){
     
		if(b[i][j]>0){
     
			
			x=b[i][j]+x;
		}
		if(b[i][j]<0){
     
			
			y=b[i][j]+y;
		}
	}
	}
	printf("%lf,%lf",x,y);
}
  1. 对稀疏数组a[20],编写一个程序,将所有非零元素值按紧密排列转移到数组的前端。
#include
int main(){
     
	int a[20]={
     0,0,1,0,2,0,0,0,3,4,0,0,0,0,5,0,0,6,1};
	int i,j,k;
	for(i=0;i<20;i++){
     
		printf("%3d",a[i]);
	}
	printf("\n");
	for(i=1;i<20;i++){
     
		if(a[i]==0) continue;
		for(k=i-1;k>=0;k--)
		 if(a[k]!=0) break;
		if(k==i-1) continue;
		a[k+1]=a[i];
		a[i]=0; 
	}
	for(i=0;i<20;i++){
     
		printf("%3d",a[i]);
		printf("\n");
	}
}
  1. 编写一个程序,使存储在整型数组a[100]中的各个元素值按升序排列存放。
#include
int main(){
     
	int a[100];
	int i,x;
	x=0;
	for(i=0;i<100;i++){
     
		a[i]=x;
		x++;
		printf("%d \n",a[i]);
	}
	
}
  1. 编写一个程序,把下面矩阵a转置成矩阵b的形式(两个算法完成)
    C语言练习题-数组_第1张图片
#include
int main(){
     
	int a[3][3]={
     1,2,5,3,4,8,6,7,9};
	int i,j,k,l;
	for(i=0;i<3;i++){
     
		for(j=0;j<3;j++){
     
			printf("%3d",a[i][j]);
			
		}
		printf("\n");
   	}
   	printf("\n");
		for(i=2;i>=0;i--){
     
		for(j=2;j>=0;j--){
     	
			printf("%3d",a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(i=0;i<3;i++){
     
		k=a[0][i];
		a[0][i]=a[2][2-i];
		a[2][2-i]=k;
	}
	k=a[1][0];
	a[ 1][0]=a[1][2];
	a[1][2]=k;
	for(i=0;i<3;i++){
     
		for(j=0;j<3;j++)
		printf("%3d",a[i][j]);
		printf("\n");
	}		
	printf("\n");
}

  1. 打印杨辉三角形的前10行。
#include
int main(){
     
	int a[10][10], i, j;
    for (i = 0; i < 10; i++)
    {
     
        a[i][0] = 1;
        a[i][i] = 1;
    }
    for (i = 2; i < 10; i++)
    {
     
        for (j = 1; j < i; j++)
        {
     
            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
        }

    }
    for (i = 0; i < 10; i++)
    {
     
        for (j = 0; j <= i; j++)
        {
     
            printf("%6d", a[i][j]);
        }
        printf("\n");
    }
}
  1. 设二维数组b[5][4]中有鞍点,即b[i][j]元素值在第i行最小,且在第j列中最大,试编写一个程序找出所有鞍点。也可能没有
#include
int main(){
     
	int b[5][4]={
     17, 2 ,3, 1,5 ,6 ,7 ,8, 9, 10 ,11, 12 ,13 ,14, 15, 16, 0, 18, 19, 20};
	int i,j,k,min,max,y;
	int a[4],c[4],d[4],e[4],f[4],g[4];
	k=0;y=0;
	int r,t,l,p;
	r=t=l=p=0;
	max=b[0][0];
	for(j=0;j<4;j++){
     
		for(i=0;i<5;i++){
     
			 if(max<b[i][j]){
     
				max=b[i][j];
				
			   } 
			 if(i==4){
     
			   a[k]=max;
			   k++;
			   break;
	        }
			

	   }
		 }
		
		printf("\n");
				
	
	min=0;
	for(i=0;i<5;i++){
     
		for(j=0;j<4;j++){
     
			if(i==0&&j<=3){
     
				c[y]=b[i][j];
				y++;	
				
			}
		  else if(i==1&&j<=3){
     
			    
				d[r]=b[i][j];
				r++;
				
     	   }
		 else   if(i==2&&j<=3){
     
			 
			   e[t]=b[i][j];
				t++;
				
		   }
		  else  if(i==3&&j<=3){
     
			
			    f[l]=b[i][j];
				l++;
				
		   }
		  else   if(i==4&&j<=3){
     
			    g[p]=b[i][j];
				p++;
			
		   }

    }
}
    i=0;
	int i1,i2,i3,i4;
	i1=i2=i3=i4=0;
    for(k=4;k>=0;k--){
     
    	for(y=3;y>=0;y--){
     
    		if(a[k]==c[y]){
     
    			i++;
    			printf("b[i][j]中的i行最小值%d等于j行最大值%d \n",a[k],c[y]);
			}
		}
		
	}
	 for(k=4;k>=0;k--){
     
    	for(r=3;r>=0;r--){
     
    		if(a[k]==d[r]){
     
    			i1++;
    			printf("b[i][j]中的i行最小值%d等于j行最大值%d \n",a[k],d[r]);	
			}
		}
		
	}
	  for(k=4;k>=0;k--){
     
    	for(p=3;p>=0;p--){
     
    		if(a[k]==g[p]){
     
    			i2++;
    			printf("b[i][j]中的i行最小值%d等于j行最大值%d \n",a[k],g[p]);		
			}
		}
		
	}
	   for(k=4;k>=0;k--){
     
    	for(t=3;t>=0;t--){
     
    		if(a[k]==e[t]){
     
    			i3++;
    			printf("b[i][j]中的i行最小值%d等于j行最大值%d \n",a[k],e[t]);	
			}
		}
		
	}
	    for(k=4;k>=0;k--){
     
    	for(l=3;l>=0;l--){
     
    		if(a[k]==f[l]){
     
    			i4++;
    			printf("b[i][j]中的i行最小值%d等于j行最大值%d \n",a[k],f[l]);		
			}
		}
		
	}
  printf("b[i][j]鞍点一共有%d",i+i1+i2+i3+i4);
  
  }
 
  1. 从键盘输入一个数,然后在一个整型一维数组a[20]中,用折半查找找出该数是数组中第几行元素的值,如果该数不在数组中,则打印“NO found”。
#include
int main(){
     
	int a[20];
	int i,c;
	printf("输入一个数:"); 
	scanf("%d",&c);	
	printf("给数组赋值:"); 
	for(i=0;i<20;i++){
     
		scanf("%d",&a[i]);
		
	}
	int n,m;m=20;n=0;
	while(n<=m){
     
		i=(n+m)/2;
		if(a[i]==c){
     
			printf("%d",i);
			break;
		}
		 else if(a[i]<c){
     
		 	n=i+1;
		 }
		 else if(a[i]>c){
     
		 	m=i-1;
		 }
		 
    	
	}
     if(a[i]!=c){
     
	printf("No found!!!");
   }
}
  1. 编写一个程序,求一个二维矩阵的转置矩阵,即将原来矩阵行列互换的结果。
#include
int main(){
     
	int a[3][3]={
     1,2,3,4,5,6,7,8,9};
	int i,j,k;
	for(i=0;i<3;i++){
     
		for(j=0;j<3;j++){
     
		 printf("%d",a[i][j]);
		}
		printf("\n");
	}
	printf("列变行\n");
	for(i=0;i<3;i++){
     
    for(j=0;j<3;j++){
     
		 k=a[i][j];
		 a[i][j]=a[j][i];
		 a[j][i]=k;
	
		}
		for(i=0;i<3;i++){
     
		for(j=0;j<3;j++){
     
		 printf("%d",a[i][j]);
		}
		printf("\n");
	}
		
	}

	
}
  1. 输入一串字符,分别统计其中数字0~9和各个字母出现的次数,并按出现的多少输出(先输出出现数多的字母,次数相同的按字母表顺序输出,不出现的字母不输出)
#include
int main(){
     
	int a[256];
	int b[256]={
     0};
	int i,k,max,j;
	char x[]="jdlkajdslhjkfhklqyihqjkfgjhqhj2134145h34j5h3jhjkh52h6jkh546 ";
	for(i=0;i<256;i++)
		a[i]=i;
	for(i=0;x[i]!=0;i++)
		b[x[i]]++;
	for(i=0;i<256;i++){
     
		max=i;
		for(j=1+i;j<256;j++)
		if(b[max]<b[j])
			max=j;
		if(max==i)
			continue;
		k=a[i];a[i]=a[max];a[max]=k;
		k=b[i];b[i]=b[max];b[max]=k;
	 }	
	 for(i=0;i<256&&b[i]!=0;i++){
     
	 	printf("字符%c:%d次 \n",a[i],b[i]);
	 }
}
	

  1. 编程打印一下图形
    C语言练习题-数组_第2张图片
#include
int main(){
     
	char a[5][5];
	int i ,j;
	for(i=0;i<5;i++){
     
		for(j=0;j<5;j++){
     
			a[i][j];
		}
		
	}
	for(i=0;i<5;i++){
     
		for(j=0;j<5;j++){
     
			if((i==0&&j==2)||(i==1&&(j==1||j==3))||(i==2&&(j==0||j==4))||(i==3&&(j==1||j==3))
			||(i==4&&j==2)){
     
				a[i][j]='*';
				printf("%c",a[i][j]);
			}
			else{
     
				a[i][j]=' ';
				printf("%c",a[i][j]);
			}
		}
		printf("\n");
	}
} 
  1. 有一篇文章一共有三行文字,每行有80个字符。要求统计出其英文大写字母,小写字母,数字,空格以及其他字符。
#include
int main(){
     
	char a[3][80];
	int i,j,c,b,d,f,g;
	c=b=d=f=g=0;
	printf("输入这篇文章:"); 
	for(i=0;i<3;i++){
     
		for(j=0;j<80;j++){
     
			scanf("%c",&a[i][j]);
		}
	}
	for(i=0;i<3;i++){
     
		for(j=0;j<80;j++){
     
			if(a[i][j]>='a'&&a[i][j]<='z'){
     
				c++;
			}
			else if(a[i][j]>='A'&&a[i][j]<='Z'){
     
				b++;
			}
			else if(a[i][j]>='0'&&a[i][j]<='9'){
     
				d++;
			}
			else if(a[i][j]==' '){
     
				f++;
			}
			else{
     
				g++;
			}
		}
	}
	printf("大写字母有%d、小写字母有%d、数字有%d、空格有%d、其他字符有%d",b,c,d,f,g);
}
  1. 有一电文,已按下列规律译成码:
    在这里插入图片描述
    即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变,编写一个程序将密码译成原文,并输出密码和原文。
#include
int main(){
     
	char a[10]="love me?";
	char c[53]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
	int i,k,y;
	k=0;
	printf("密码:"); 
	for(i=0;i<10;i++){
     
		printf("%c",a[i]);
	}
	printf("\n");
	printf("原文:");
	for(i=0;i<10;i++){
     
	  for(k=0;k<53;k++){
     
         if((a[i]>='A'&&a[i]<='Z')&&(a[i]==c[k])&&(k>=26&&k<=52)){
     
		        printf("%c",c[52-k]);   
	            }
	     else if((a[i]>='a'&&a[i]<='z')&&(a[i]==c[k])&&((k>=0&&k<=25))){
     
           	     printf("%c",c[25-k]);
		        }
         else if((a[i]>=0&&a[i]<=64)||(a[i]>=91&&a[i]<=96)||(a[i]>=123)){
     
         	if(k==1){
     		 
		 	          printf("%c",a[i]);
		 	   }
		    }
	    }
		        
    }
        
	   
 }





18.编写一个程序,将两个字符串S1和S2比较,若S1>S2,输出正数1;若S1等于S2,输出0;若S1

#include
int main(){
     
	char a[10];
	char b[10];
	int i,z,x,K;
	x=z=0;
	printf("输入S1的元素:");
	for(i=0;i<10;i++){
     
		scanf("%c",&a[i]);
	}
	printf("输入S2的元素:");
	for(K=0;K<10;K++){
     
		scanf("%c",&b[i]);
	}
	for(i=0;i<10;i++){
     
		z+=a[i];
	}
	for(K=0;K<10;K++){
     
		x+=b[i];
	}
	if(z>x){
     
		printf("1\n");
	}
  else	if(z<x){
     
		printf("-1");
	}
  else{
     
  	printf("0");
  }	
	
} 
  1. 输入下述8个国家或地区名字的字符串:CHINA、JAPAN、KOREA、INDIA、CANADA、AMERICA、ENGLAND和FRANCE,将这些国家或地区名字按字典顺序排序。
#include
#include
int main()
{
     
       char str[8][9]={
     "CHINA","JAPAN","KOREA","INDIA","CANADA","AMERICAN","ENGLAND","FRANCE"};
       char temp[9];
       int i,l;
    for (i=0;i<8;i++)
       {
     
              for(l=0;l<9;l++)
              {
     
                     printf("%c",str[i][l]);
              }
              printf("\n");
       }
       printf("按字典中排序:\n");
       int j,k;
       for(j=0;j<8;j++)
       for(k=j+1;k<8;k++)
       {
     
                     if(strcmp(str[j],str[k])>0)
                     {
     
                            strcpy(temp,str[j]);
                            strcpy(str[j],str[k]);
                            strcpy(str[k],temp); 
                     }
       }
              for(i=0;i<8;i++)
                     printf("%s\n",str[i]);
}

源代码链接

你可能感兴趣的:(学习分享,算法,程序设计,c语言)