C語(yǔ)言是面向過(guò)程的,而C++是面向?qū)ο蟮?/p>
C和C++的區(qū)別:
C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。
C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。
C與C++的最大區(qū)別:在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

問(wèn)題描述
編寫一個(gè)程序,將一個(gè)3行3列的矩陣轉(zhuǎn)置。

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
問(wèn)題分析
要解決該問(wèn)題應(yīng)該清楚什么是矩陣的轉(zhuǎn)置。矩陣轉(zhuǎn)置在數(shù)學(xué)上的定義為:設(shè)A為m×n階矩陣(即m行n列的矩陣),其第i行第j列的元素是a(i,j),
即:A=a(i,j)m×n定義A的轉(zhuǎn)置為這樣一個(gè)n×m階矩陣B,滿足:B=a(j,i)m×n
即b(i,j)=a(j,i)(B的第 i行第j列元素是A的第j行第i列元寒),記為A’=B。
假設(shè)有如下的矩陣A:
則經(jīng)過(guò)轉(zhuǎn)置后,即將矩陣的第i行變成了現(xiàn)在的第i列,則原來(lái)的矩陣A變?yōu)槿缦戮仃嘊:
算法設(shè)計(jì)
解決矩陣問(wèn)題時(shí)通常都是先將矩陣存放在一個(gè)二維數(shù)組中,而當(dāng)矩陣發(fā)生變化時(shí),二維數(shù)組中的對(duì)應(yīng)元素也會(huì)發(fā)生變化。
以問(wèn)題分析中提到的A矩陣為例,要實(shí)現(xiàn)A的轉(zhuǎn)置,首先應(yīng)將其存放在一個(gè)二維數(shù)組n中,該二維數(shù)組中的元素及其內(nèi)容如表A所示。

A
將A轉(zhuǎn)置后,二維數(shù)組中元素的內(nèi)容會(huì)發(fā)生變化。A轉(zhuǎn)置后,二維數(shù)組n中的元素內(nèi)容如表B所示。

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
B
轉(zhuǎn)置后矩陣主對(duì)角線上的數(shù)組元素n[0][0]、n[1][1]、n[2][2]的值并沒(méi)有發(fā)生變化,只是位于對(duì)角線右上方的三個(gè)元素與位于對(duì)角線左下方的三個(gè)元素的值進(jìn)行了交換。具體為:n[0][1]與n[1][0]進(jìn)行了交換,n[0][2]與n[2][0]進(jìn)行了交換,n[1][2]與進(jìn)行了交換。
根據(jù)這個(gè)發(fā)現(xiàn)就可以來(lái)設(shè)計(jì)算法,在對(duì)一個(gè)3x3階矩陣轉(zhuǎn)置時(shí),只需將主對(duì)角線右上方的數(shù)組元素n[0][1]、n[0][2]、n[1][2],分別與主對(duì)角線左下放的數(shù)組元素n[1][0]、n[2][0]、n[2][1]的值,通過(guò)一個(gè)臨時(shí)變量進(jìn)行交換即可,總共只要進(jìn)行3次交換就可以實(shí)現(xiàn)矩陣的轉(zhuǎn)置。
下面是完整的代碼:
#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)
{ /*將主對(duì)角線右上方的數(shù)組元素與主對(duì)角線左下方的數(shù)組元素進(jìn)行單方向交換*/
temp=n[i][j];
n[i][j]=n[j][i];
n[j][i]=temp;
}
}
printf("轉(zhuǎn)置矩陣: ");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d ", n[i][j]); /*輸出原始矩陣的轉(zhuǎn)置矩陣*/
printf(" ");
}
return 0;
}
運(yùn)行結(jié)果:

知識(shí)點(diǎn)補(bǔ)充
已知有一個(gè)3×4的矩陣,要求編程求出其中值最大的那個(gè)元素所在的行號(hào)和列號(hào)及該元素的值。
顯然,要解決這個(gè)問(wèn)題必須要遍歷矩陣中的每個(gè)元素,因此,程序的結(jié)構(gòu)就是一個(gè)雙重的for循環(huán),在循環(huán)體中進(jìn)行的就是矩陣元素的比較,找出最大元素。
下面是完整的代碼:
#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]; /*設(shè)置max的初值*/
/*矩陣中每一個(gè)元素逐一與max進(jìn)行比較*/
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;
}
運(yùn)行結(jié)果:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
矩陣在線性代數(shù)中會(huì)學(xué)到,像成為大神,矩陣就得學(xué)好啊!
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等


