【C语言】N×N型二维数组中矩阵三角形到转置矩阵的思想演变

本文分享了在C语言中如何处理N×N型二维数组,包括将右上或左下三角形区域的值扩大n倍,以及实现矩阵转置的过程。作者强调了代码实现中对角线元素处理的细节。
摘要由CSDN通过智能技术生成

分享一下我做二级C语言时经验的总结,说法仅限于N×N型二维数组,冥冥中感觉这两个似乎有什么关联,但又说不上来,就觉得这俩题型很相似,我将这两种题型都放到下面,请读者们自行食用,如果有什么特别独到见解之处,还请不要吝啬

1.N×N型二维数组中矩阵三角形的变化

首先我们来看一道题:

C语言中给出一个N×N二维矩阵,通过键盘输入n,将它的右上三角形或者左下三角形变为原来的n倍

我们可以用如下代码实现(这里以右上三角形为例):

#include <stdio.h>
#include <stdlib.h>
#define N 3
 
void fun (int array[N][N], int n)
{
	int i,j,t;
	for(i=0;i<N;i++)
	{	
		for(j=i;j<N;j++)
		{
			array[i][j]*=n;
		}
	}
}
void main()
{
	int i,j,n;
	int array [N][N]={{100,200,300},{400,500,600},{700,800,900}};
	printf("n=");
	scanf("%d",&n);
	printf("Original array:\n ");
	for (i=0;i<N;i++)
    {	
		for (j=0;j<N;j++)
			printf("%7d ",array[i][j]);
		printf("\n ");
    }
	fun(array,n);
	printf("Result array:\n ");
	for (i=0;i<N;i++)
	{ 
		for (j=0;j<N;j++)
			printf("%7d ",array[i][j]);
		printf("\n ");
    }
}

运行结果如下:

c16463af527e468fa977469ce8d34cda.png

我们发现包括对角线在内的右上三角形区域的值都比原数值扩大了n倍,因为要保证是对角线以上区域的数值改变,所以在第二层循环的时候要确保j的下标始终从i的下标开始一直遍历到最后(如果是左下三角形j则从0开始但有不能超过i的限制)


2.N×N型二维数组中转置矩阵的实现

接着再看另一道题:

C语言中给出一个N×N二维矩阵,编写一个函数,实现返回这个二维矩阵的转置矩阵

我们可以用如下代码实现:

#include <stdio.h>
#include <stdlib.h>
#define N 3
 
void fun (int array[N][N])
{
	int i,j,t;
	for(i=0;i<N;i++)
	{	
		for(j=i+1;j<N;j++)
		{	
			t=array[i][j];
			array[i][j]=array[j][i];
			array[j][i]=t;
		}
	}
}
void main()
{
	int i,j;
	int array [N][N]={{100,200,300},{400,500,600},{700,800,900}};
	printf("Original array:\n ");
	for (i=0;i<N;i++)
    {	
		for (j=0;j<N;j++)
			printf("%7d ",array[i][j]);
		printf("\n ");
    }
	fun(array);
	printf("Converted array:\n ");
	for (i=0;i<N;i++)
	{ 
		for (j=0;j<N;j++)
			printf("%7d ",array[i][j]);
		printf("\n ");
    }
}

运行结果如下:

7a64f16a61734898af030b3261846158.png

矩阵转置的思想简单的来说就是二维数组的行列互换,但是对于N×N型矩阵来说就是对角线元素不改变,其他元素按对角线对称互换

因为这里对角线元素的值我们不需要进行改变,所以N×N型二维数组我们进行转置的编写时第二层循环j就要从比i大一位的位置进行遍历

因为免除了对角线元素的参与,所以该循环的i和j值在整个循环过程中始终不存在相等的情况,所以只需要改变i和j值的先后顺序就可以实现其余元素沿对角线对称互换


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值