C语言是面向过程的,而C++是面向对象的
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
问题描述
编写一个程序,将一个3行3列的矩阵转置。
小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
问题分析
要解决该问题应该清楚什么是矩阵的转置。矩阵转置在数学上的定义为:设A为m×n阶矩阵(即m行n列的矩阵),其第i行第j列的元素是a(i,j),
即:A=a(i,j)m×n定义A的转置为这样一个n×m阶矩阵B,满足:B=a(j,i)m×n
即b(i,j)=a(j,i)(B的第 i行第j列元素是A的第j行第i列元寒),记为A’=B。
假设有如下的矩阵A:
则经过转置后,即将矩阵的第i行变成了现在的第i列,则原来的矩阵A变为如下矩阵B:
算法设计
解决矩阵问题时通常都是先将矩阵存放在一个二维数组中,而当矩阵发生变化时,二维数组中的对应元素也会发生变化。
以问题分析中提到的A矩阵为例,要实现A的转置,首先应将其存放在一个二维数组n中,该二维数组中的元素及其内容如表A所示。
A
将A转置后,二维数组中元素的内容会发生变化。A转置后,二维数组n中的元素内容如表B所示。
小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
B
转置后矩阵主对角线上的数组元素n[0][0]、n[1][1]、n[2][2]的值并没有发生变化,只是位于对角线右上方的三个元素与位于对角线左下方的三个元素的值进行了交换。具体为:n[0][1]与n[1][0]进行了交换,n[0][2]与n[2][0]进行了交换,n[1][2]与进行了交换。
根据这个发现就可以来设计算法,在对一个3x3阶矩阵转置时,只需将主对角线右上方的数组元素n[0][1]、n[0][2]、n[1][2],分别与主对角线左下放的数组元素n[1][0]、n[2][0]、n[2][1]的值,通过一个临时变量进行交换即可,总共只要进行3次交换就可以实现矩阵的转置。
下面是完整的代码:
#include
int main()
{
int n[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j, temp;
printf("原始矩阵: ");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d ", n[i][j]); /*输出原始矩阵*/
printf(" ");
}
for(i=0; i<3; i++)
for(j=0; j<3; j++)
{
if (j>i)
{ /*将主对角线右上方的数组元素与主对角线左下方的数组元素进行单方向交换*/
temp=n[i][j];
n[i][j]=n[j][i];
n[j][i]=temp;
}
}
printf("转置矩阵: ");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d ", n[i][j]); /*输出原始矩阵的转置矩阵*/
printf(" ");
}
return 0;
}
运行结果:
知识点补充
已知有一个3×4的矩阵,要求编程求出其中值最大的那个元素所在的行号和列号及该元素的值。
显然,要解决这个问题必须要遍历矩阵中的每个元素,因此,程序的结构就是一个双重的for循环,在循环体中进行的就是矩阵元素的比较,找出最大元素。
下面是完整的代码:
#include
int main()
{
int i, j, row=0, column=0,max;
int a[3][4]={{2, 7, 3, 6}, {8, 1, 9, 5}, {10, 4, 2, 5}};
max=a[0][0]; /*设置max的初值*/
/*矩阵中每一个元素逐一与max进行比较*/
for(i=0; i<=2; i++)
for(j=0; j<=3; j++)
if(a[i][j]>max)
{
max=a[i][j];
row=i;
column=j;
}
printf("矩阵的最大值为:%d,其所在行为第%d行,所在列为第%d列 ", max, row, column);
return 0;
}
运行结果:
小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
矩阵在线性代数中会学到,像成为大神,矩阵就得学好啊!
这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等