1.請編寫函數(shù)fun,該函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)據(jù),按列的順序依次放到一維數(shù)組中宝恶。一維數(shù) 組中數(shù)據(jù)的個數(shù)存放在形參n所指的存儲單元中。
例如,若二維數(shù)組中的數(shù)據(jù)為
33 33 33 33
44 44 44 44
55 55 55 55
則一維數(shù)組中的內(nèi)容應(yīng)是:
33 44 55 33 44 55 33 44 55 33 44 55
void fun(int (*s)[10],int *b,int *n,int mm,int nn)
{
int i,j;
for(j=0;j<nn;j++) /*將二維數(shù)組中的數(shù)據(jù)按列的順序依次放入一維數(shù)組中*/
for(i=0;i<mm;i++)
{
b[*n]=*(*(s+i)+j);
*n=*n+1; /*通過指針返回元素個數(shù)*/
}
}
題目要求實(shí)現(xiàn)將二維數(shù)組元素存入一維數(shù)組,需使用for循環(huán)語句來控制二維數(shù)組元素的下標(biāo),同時使用指針變量配合操作。
可以用兩個循環(huán)來處理問題,由于是按列的順序取出,所以第1個循環(huán)用于控制列下標(biāo),第2個循環(huán)用于控制行下標(biāo)赋访。
2.請編一個函數(shù)void fun(int tt[M][N], int pp[N]), tt指向一個M行N列的二維數(shù)組逝淹,求出二維數(shù)組每列中最大元素,并依次放入pp所指的一維數(shù)組中膀值。二維數(shù)組中的數(shù)已在主函數(shù)中給出棍丐。
void fun(int tt[M][N],int pp[N])
{
int i,j,max;
for(j=0;j<N;j++)
{
max=tt[0][j]; /*假設(shè)各列中的第一個元素最大*/
for(i=0;i<M;i++)
if(tt[i][j]>max) /*如果各列中的元素比最大值大,則將這個更大的元素看作當(dāng)前該列中最大元素*/
max=tt[i][j];
pp[j]=max; /*將各列的最大值依次放入pp數(shù)組中*/
}
}
本題中函數(shù)的功能是求出二維數(shù)組中每列的最大元素沧踏。首先歌逢,假設(shè)各列中的第一個元素最大,然后利用行標(biāo)值的移動來依次取得各列中其他元素的值翘狱,并與假設(shè)的最大值進(jìn)行比較秘案,如果遇到更大的,則把這個更大的元素看做當(dāng)前該列中最大的元素,繼續(xù)與該列中其他元素進(jìn)行比較阱高。
3
void fun (int a[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=0; /*將數(shù)組左下半三角元素中的值全部置成0*/
}
對于N×N二維數(shù)組赚导,如何表示其左下半三角元素,可以通過以下語句實(shí)現(xiàn)赤惊。
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
外層循環(huán)用來控制矩陣的行下標(biāo)吼旧,內(nèi)層循環(huán)控制矩陣的列下標(biāo)。注意列下標(biāo)的取值范圍荐捻,因?yàn)橐硎鞠氯窃厥蛏伲詊的范圍是0~i。
4.下列程序定義了N×N的二維數(shù)組处面,并在主函數(shù)中自動賦值厂置。請編寫函數(shù)fun(int a[ ][N],int m)魂角,該函數(shù)的功能是使數(shù)組右上半三角元素中的值乘以m昵济。
例如,若m的值為2野揪,a數(shù)組中的值為:
則返回主程序后a數(shù)組中的值應(yīng)為:
void fun(int a[][N], int m)
{
int i,j;
for(j=0;j<N;j++)
for(i=0;i<=j;i++)
a[i][j]=a[i][j]*m; /*右上半三角元素中的值乘以m*/
}
本程序?qū)崿F(xiàn)將矩陣中右上半三角元素中的值乘以m访忿,使用循環(huán)語句遍歷數(shù)組元素,第1個循環(huán)用于控制行坐標(biāo)斯稳,第2個循環(huán)用于控制列下標(biāo)海铆。