0720 二维数组

本文详细介绍了C语言中的二维数组,包括声明、初始化、打印、修改元素、行列转换等操作,并给出了课堂练习和课后作业,涉及寻找二维数组中的最大值、统计学生考试成绩、公司年销售额求和等实际问题。

二维函数

1.声明一个二维函数

int arr[2][4];

2.初始化二维函数

2.1直接开始时赋予值

int arr[2][4]={{1,2,3,4},{11,22,33,44}};

且中间可为0,中间两个大括号表示两行,每个里不足四个的系统自动补0;

int arr[2][4]={{1,2},{11,22,33}};

直接一个括号赋予(不推荐),中间要是缺少的话就会接着,不会出现中间补0。

int arr[2][4]={1,2,3,4,11,22,33,44};

2.2利用循环赋予初始值

#include <stdio.h>

int main()
{
    int t[2][4];
	int i,j;
	for(i=0;i<2;i++)
		for(j=0;j<4;j++)
		scanf("%d",&arr[i][j]);
 return 0;
}	

3.打印二维数组

	for(i=0;i<2;i++){
		for(j=0;j<4;j++){
			printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
		}
		printf("\n");

4.更改数组中某列的元素的数值

	int t[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
	int i,j;
	printf("更新第三列元素值为0\n请输入两个0,中间空格隔开\n");
	scanf("%d %d",&t[0][3],&t[1][3]);
	for(i=0;i<2;i++)
		for(j=0;j<5;j++)
		printf("t[%d][%d]=%d\n",i,j,t[i][j]);

5.将二维函数的行列调换

	int t[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
	int r[5][2]={0};
	int i,j;
	for(i=0;i<2;i++)
		for(j=0;j<5;j++)
		r[j][i]=t[i][j];
	for(i=0;i<5;i++)
		for(j=0;j<2;j++)
		printf("r[%d][%d]=%d\n",i,j,r[i][j]);

6.课堂练习

6.1求这个二维数组中的最大值

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int arr[3][4];
	int i,j,max=0;
	int h,l;	
	srand((unsigned)time(NULL));
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			arr[i][j]=rand();
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
		}
		printf("\n");
	}
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			if(max<arr[i][j]){
				max=arr[i][j];
				h=i;
				l=j;
			}
		}
	}
	printf("最大值为:%d,是第%d行,第%d列",max,h,l);
	return 0;
 } 

6.2设计一个二维数组,统计3个学生的4次考试成绩,输出最高分、最低分是多少?每个学生的平均分是多少?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*设计一个二维数组,统计3个学生的4次考试成绩,、 
输出最高分、最低分是多少?每个学生的平均分是多少?*/

int main()
{
	int arr[3][4];
	int i,j,max=0,min=101;	
	srand((unsigned)time(NULL));
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			arr[i][j]=rand()%100+1;
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
		}
		printf("\n");
	}
	for(i=0;i<3;i++){
		for(j=0;j<4;j++){
			if(max<arr[i][j]){
				max=arr[i][j];
			}
			if(min>arr[i][j]){
				min=arr[i][j];
			}
		}
	}
	for(i=0;i<3;i++){
		float sum=0,avg;
		for(j=0;j<4;j++){
			sum+=arr[i][j];
		}
		avg=sum/j;
		printf("第%d位学生的平均分为%f\n",i+1,avg);
	}
	printf("最高分为:%d,最低分为%d",max,min);
	return 0;
 } 

7.课后作业

7.1公司年销售额求和

某公司按照季度和月份统计的数据如下:单位(万元)

第一季度:22,66,44

第二季度:77,33,88

第三季度:25,45,65

第四季度:11,66,99

#include <stdio.h>

int main()
{
	int arr[4][3]={{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
	int i,j,num=0;
	printf("公司年销售额求和\n某公司按照季度和月份统计的数据如下:单位(万元)\n");
//	for(i=0;i<4;i++){
//		for(j=0;j<3;j++){
//			scanf("%d",&arr[i][j]);
//		}
//	}
	for(i=0;i<4;i++){
		printf("第%d季度 ",i+1);
		for(j=0;j<3;j++){
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	}
	for(i=0;i<4;i++){
		for(j=0;j<3;j++){
			num+=arr[i][j];
		}
	}
	printf("公司年销售额求和为:%d",num);
	
	return 0;
 } 

结果为:

7.2打印杨辉三角形比如:6行

#include <stdio.h>
/*打印杨辉三角形比如:6行*/

int main()
{
	int arr[6][6]={1};
	int i,j;
	for(i=1;i<6;i++){
		for(j=0;j<6;j++){
			arr[i][j]=arr[i-1][j-1]+arr[i-1][j]	;
		}
	}
	for(i=0;i<6;i++){
		for(j=0;j<6;j++){
			if(arr[i][j]!=0)
			printf("%d  ",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

结果为:

7.355列二维数组主对角线(从左上角到右下角)上元素之和。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*求5行5列二维数组主对角线(从左上角到右下角)上元素之和。*/

int main()
{
	int arr[5][5]={0};
	int i,j,num=0;
	srand((unsigned)time(NULL));
	for(i=0;i<5;i++){
		for(j=0;j<5;j++)
		arr[i][j]=rand()%99+1;
	}
	for(i=0;i<5;i++){
		for(j=0;j<5;j++)
			printf("%d ",arr[i][j]); 
		printf("\n");
	}
	for(i=0;i<5;i++){
		for(j=0;j<5;j++){
			if(i==j){
			num+=arr[i][j];	
			}	
		}	
	}
	printf("对角线元素之和为%d ",num); 
	return 0;
}

 结果为:

7.4两个数组num1和num2,返回他们的交集,交集保存到另外的数组。

比如num1={1,2,2,1},num2={2,2}  输出result={2}

num1={4,9,5},num2={9,4,9,8,4}  输出result={9,4}或者result={4,9}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*4.两个数组num1和num2,返回他们的交集,交集保存到另外的数组。
比如num1={1,2,2,1},num2={2,2}  输出result={2}
num1={4,9,5},num2={9,4,9,8,4}  输出result={9,4}或者result={4,9}*/

int main()
{
	int arr_1[10];
	int arr_2[10];
	int result[10]={0};
	int i,j,k=0;
	srand((unsigned)time(NULL));
	for(i=0;i<10;i++){
		arr_1[i]=rand()%20+1;
		arr_2[i]=rand()%20+1;
	}
	for(i=0;i<10;i++)
		printf("%d ",arr_1[i]);
	printf("\n");
	for(i=0;i<10;i++)
		printf("%d ",arr_2[i]);
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){		//重复的赋予result 
			if(arr_1[i]==arr_2[j]){
				result[k]=arr_1[i];
				k++;
			}		
		}
	}
	printf("\n");
	for(i=0;i<10;i++)
		printf("%d ",result[i]);
	printf("\n");	
	for(i=0;i<10;i++){
		for(j=i+1;j<10;j++){		//剔除自己重复数字 
			if(result[i]==result[j])
			result[j]=0;
		}
	}
	printf("result[10]={");
	for(i=0;i<10;i++){		//是0不打印 
		if(result[i]!=0)
		printf("%d ",result[i]);
	}
	printf("}")	;
	return 0;
}

结果为 :

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值