C语言精髓2(二维数组2)

       在昨天我们初步学习了C语言的二维数组部分,今天我们将继续昨天的学习,继续学习二维数组。话不多说,我们先来看看今天的学习目标:
1、求二维数组所有元素和、平均值

2、求二维数组中所对应平面位置的对角线之和,反对角线元素和

3、求每一行元素和、每一列元素之和

4、求所有元素的最大值、最小值

5、求每一行元素的最大值和最小值(求出每一行元素的最大值存入一个一维数组中,求改一维数组的升序排序)

6、简单地输出杨辉三角

7、把二维数组a赋值给数组b

8、二维数组的转置

       一、求二维数组所有元素和、平均值

       分析:1、定义求和变量并初始化为0(sum=0)

                2、将数组元素(a[ i ][ j ])进行累加(sum+=a[ i ][ j ])

       二、求二维数组中所对应平面位置的对角线之和,反对角线元素和

              1、正对角线的判断条件(行下标==列下标)

              2、反对角线的判断条件(行下表+列下标==最大下标)

        注:橙色为正对角线,绿色为反对角线。

       三、求每一行元素和、每一列元素之和

       假设定义一个数组int a[ 2 ][ 3 ]; 求每一行每一列元素之和

       分析:1、先了解两个【】之间谁控制行?谁控制列?

                2、按行求值

                     求第一行 sum=0; sum=sum+a[ 0 ][ j ];

                     求第二行 sum=0; sum=sum+a[ 1 ][ j ];

                3、按列求值

                     求第一列 sum=0; sum=sum+a[ i ][ 0 ];

                     求第二列 sum=0; sum=sum+a[ i ][ 1 ];

求第三列 sum=0; sum=sum+a[ i ][ 2 ];

       四、求所有元素的最大值、最小值

       假设定义一个数组int a[ 2 ][ 3 ]; 求 所有元素的最大值和最小值

       分析:

1、定义最大值变量max,最小值变量min
       2、假设定义第一个元素为最大值(max=【0】【0】)

          假设定义第一个元素为最小值(max=【0】【0】)

       3、数组范围之内,进行逐一比较

       If(max<a【i】【j】){max=a【i】【j】;}

       If(min>a【i】【j】){min=a【i】【j】;}

五、求每一行元素的最大值和最小值(求出每一行元素的最大值存入一个一维数组中,求改一维数组的升序排序)

              假设定义一个数组int a[ 2 ][ 3 ]; 求每一行元素的最大值

分析:

  1. 定义一个最大值变量max,一个最小值变量min
  2. 按行求值

第一行:

假设第一个元素为最大值最小值(max=a【0】【0】      min=a【0】【0】)

逐一比较        if(max<a【i】【j】){max=a【i】【j】;}

                      If(min>a【i】【j】){min=a【i】【j】;}

第二行:

假设第一个元素为最大值最小值(max=a【1】【0】      min=a【1】【0】)

逐一比较        if(max<a【i】【j】){max=a【i】【j】;}

                      If(min>a【i】【j】){min=a【i】【j】;}

第三行:

假设第一个元素为最大值最小值(max=a【2】【0】      min=a【2】【0】)

逐一比较        if(max<a【i】【j】){max=a【i】【j】;}

                      If(min>a【i】【j】){min=a【i】【j】;}

                                                                                           

六、简单地输出杨辉三角

如图所示我们总结一下杨辉三角的一些特性:

1、第一列和正对角线的元素均为1( if(j==0) | | j==i {a【i】【j】=1} )

2、其余所有元素均等于正上方元素及左上方元素之和( else{ a【i】【j】=a【i-1】【j】+a【i-1】【j-1】; } )

七、将二维数组a赋值给数组b(数组赋值)

       先定义一个数组int a【2】【3】{1,2,3,4,5,6};将二位数组a赋值给数组b,输出b中所有的元素

       分析

  1. 定义二维数组int b【2】【3】;
  2. 在a数组范围之内,逐一进行赋值,将a的元素给相对应的b元素

b【i】【j】= a【i】【j】;

八、二维数组的转置

       转置,进行行列转换,行变成行,行变列

如图所示:

分析:

              以元素5为例,在数组a中6的下标为a【1】【2】

                                     在数组b中6的下标为b【2】【1】

              总而言之行列交换a【i】【j】=》b【j】【i】

好了到这里我们也就完成了今天的学习,今天的内容比较多,所以也需要大家花更多的时间去理解消化,我相信大家通过对自己不断地高要求学习最终一定可以掌握C语言的技能学习。我还是会在底下放思维导图供大家理解,谢谢!

1、求和
	①所有元素求和
	sum=0;
	for(i=0; i<h; i++)
	{
		for(j=0; j<l; j++)
		{
			sum = sum + a[i][j]; 
		}
	} 
	printf("和是%d" , sum);
	②满足条件元素求和
	for(i=0; i<h; i++)
	{
		for(j=0; j<l; j++)
		{
			if(条件)	//奇偶数、四边、非四边、对角线、非对角线…… 
			{
				sum = sum + a[i][j];
			} 
		}
	}
		if(a[i][j]%2==0)	偶数
		if(a[i][j]%2!=0)	奇数
		if(i==0 || i==h-1 || j==0 || j==lm -1)	四边
		if( !(i==0 || i==h-1 || j==0 || j==l-1) ) 		非四边
		if(i==j || i+j==h-1)	对角线【正对角线\ 、 反对角线/】 【存在对角线、行列一定相等】 
		if( !(i==j || i+j==h-1) ) 		非对角线 
		if(i%2!=0 && a[i][j]%2==0)		行下标为奇数的偶数元素 
	③每一行元素求和
	for(i=0; i<3; i++)
	{
		sum=0;
		for(j=0; j<4; j++)
		{
			sum = sum + a[i][j];
		}
		printf("第%d行元素之和是%d" , i+1 , sum);
	} 
	④每一列元素求和
	for(j=0; j<4; j++)
	{
		sum=0;
		for(i=0; i<3; i++)
		{
			sum = sum + a[i][j];
		}
		printf("第%d列元素之和是%d" , j+1 , sum);
	} 
	
2、最大值
	①所有元素最大值
	//1、找第一个元素站上去		a[0][0]
	max = a[0][0];
	maxline = 0;
	maxlist = 0; 
	for(i=0; i<line; i++)
	{
		for(j=0; j<list; j++)
		{
			if(max < a[i][j])
			{
				max = a[i][j];
				maxline = i;
				maxlist = j;
			}
		}
	} 
	printf("最大值是%d在第%d行第%d列" , max , maxline+1 , maxlist+1);
	②每一行元素的最大值 
	for(i=0; i<h; i++)
	{
		max = a[i][0];
		for(j=0; j<l; j++)
		{
			if(max < a[i][j])
			{
				max = a[i][j];
			}
		}
		printf("%d " , max);
	}
	②每一列元素的最大值 
	for(j=0; j<l; j++)
	{
		max = a[0][j];
		for(i=0; i<h; i++)
		{
			if(max < a[i][j])
			{
				max = a[i][j];
			}
		}
		printf("%d " , max);
	}
	
	
	
3、边边角角的分析	【行数和列数相等的时候我们进行分析】 
	①正对角线		i == j 
	②反对角线		i+j == 行数-1 
	③四边			i==0 || i==n-1 || j==0 || j==n-1 
	④非四边		! (i==0 || i==n-1 || j==0 || j==n-1)
	⑤反对角先i+j==n-1将矩阵分为 左上角 VS 右下角	i+j<n-1			i+j>n-1
	⑥正对角线i==j将矩阵分成 右上角 VS 左下角	i<j				i>j	
	中间行			i==h/2
	中间列			j==l/2
	
	
4、转置
	行列互换,int a[3][4];	>> int b[4][3];
			b[j][i] = a[i][j] 
	先转置		
	for(i=0; i<h; i++)
	{
		for(j=0; j<l; j++)
		{
			b[j][i] = a[i][j];
		}
	}
	再输出
	for(i=0; i<list; i++)			//注意注意:i < list
	{
		for(j=0; j<line; j++)		//注意注意:j < line
		{
			printf("%d " , b[i][j]);
		}
	}
	
	
5、关于技能赋初始值
	int sum = 0;
	int count = 0;
	int p = 1;
	char b[100] = ""; 
	
6、杨辉三角形
	1
	1 1
	1 2 1
	1 3 3 1
	1 4 6 4 1 
	特点:	①第一列 和 正对角线 都为1 					if(j==0 || i==j)	a[i][j] = 1; 
			②其余元素都等于上面两个角的元素之和 		else				a[i][j] = a[i-1][j] + a[i-1][j-1];
	for(i=0; i<line; i++)
	{
		for(j=0; j<=i; j++)			//三角形	j<=i 
		{
			if(j==0 || j==i)
			{
				a[i][j] = 1;
			}
			else
			{
				a[i][j] = a[i-1][j] + a[i-1][j-1];
			}
		}
	} 
	//输出
	//正三角形输出 
	for(i=0; i<line; i++)
	{
		for(j=0; j<=i; j++)			//三角形	j<=i 
		{
			printf("%d " , a[i][j]); 
		}
	}  
	//倒三角形输出 
	for(i=h-1; i>=0; i--)
	{
		for(j=0; j<=i; j++)			//三角形	j<=i 
		{
			printf("%d " , a[i][j]); 
		}
	}

  • 31
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值