《C語言實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)六參考答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)六參考答案(10頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、實(shí)驗(yàn)六
二維數(shù)值數(shù)組(參考答案)
(1) 設(shè)計(jì)程序 sy6-1.c,從鍵盤上輸入一個(gè) 3 行 3 列矩陣各個(gè)元素的值,輸出其主對(duì)角線元素和反向?qū)蔷€元 素之和。
算法分析:
方陣主對(duì)角線上的元素,行下標(biāo)和列下標(biāo)相同;輔對(duì)角線元素,如果行下標(biāo)為 i,列下標(biāo)就為 2-i; 參考答案:
# include
# include
# include
# include
void main()
{
int a[3][3];
int i,j,sum=0;
srand( time( NULL )
2、);
printf("矩陣:\n");
for(i=0;i<3;i++) //用隨機(jī)函數(shù)生成 3 行 3 列的二維數(shù)組并按矩陣格式輸出
{ for(j=0;j<3;j++)
{ a[i][j]=rand()%20;
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<3;i++)
sum=sum+a[i][i]+a[i][2-i];
printf("該矩陣的正、反對(duì)角線元素之和為:%d\n",sum);
}
運(yùn)行結(jié)果:
(2) 設(shè)計(jì)程序 sy6-2.c,找出 N×N 矩陣中每列元素中的最大值,并按順序依次存放
3、于 b 數(shù)組中。
算法分析:
按列序遍歷二維數(shù)組,每列用打擂臺(tái)的方法求最大數(shù),N 列則有 N 個(gè)最大值,分別存于 b 數(shù)組的對(duì)應(yīng) 元素中。
# include
# include
# include
# include
# define N 4
void main()
{ int a[N][N],b[N];
int i,j;
srand( time( NULL ) );
printf("矩陣:\n");
for(i=0;i
4、按矩陣格式輸出 { for(j=0;j
5、結(jié)果:
(3) 設(shè)計(jì)程序 sy6-3.c,定義一個(gè) 3×3 的二維數(shù)組,通過隨機(jī)函數(shù)自動(dòng)賦值。然后輸入一個(gè)整數(shù) n,使數(shù)組 左下三角(含對(duì)角線元素)元素中的值乘以 n 。例如:若 n 的值為 3,a 數(shù)組中的值為
| 1 9 7 |則程序運(yùn)行后 a 數(shù)組中的值應(yīng)為 | 3 9 7 |
| 2 3 8 | | 6 9 8 |
| 4 5 6 | | 12 15 18 |
算法分析:
按行序遍歷二維數(shù)組元素,若用 i 變量表示行下標(biāo),則 i 的范圍是 0~2,用 j 變量表示列下標(biāo),則 j 的 范圍是 0~i(含對(duì)角線元素)。
參考答案:
# include
6、h>
# include
# include
# include
void main()
{ int a[3][3];
int i,j,n;
srand( time( NULL ) );
1 2
? ?
? ÷
3 6 9 12
è ?
4 8 12 16
printf("原矩陣:\n");
for(i=0;i<3;i++) //用隨機(jī)函數(shù)生成 3 行 3 列的二維數(shù)組并按矩陣格式輸出 { for(j=0;j<3;j++)
{ a[i][j]=rand()%20; // rand()%
7、20 產(chǎn)生一個(gè) 20 以內(nèi)的整數(shù) printf("%5d",a[i][j]);
}
printf("\n");
}
printf("請(qǐng)輸入 n:");
scanf("%d",&n);
for(i=0;i<3;i++) //i 控制行下標(biāo)
for(j=0;j<=i;j++) //j 從 0 到 i,即每行的對(duì)角線及前面的數(shù)的列下標(biāo) a[i][j]=a[i][j]*n;
printf("\n 矩陣左下三角元素乘以 %d 后值為:\n",n);
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf(
8、"\n");
}
}
運(yùn)行結(jié)果:
(4) 設(shè)計(jì)程序 sy6-4.c,輸入一個(gè)整數(shù) m(2≤m≤9〕,在 m 行 m 列的二維數(shù)組中存放如下所示規(guī)律的數(shù)據(jù)。
?1 2 3 4 ?
? ÷
例如,若輸入 2,則輸出: ? ÷,若輸入 4,則輸出: ?2 4 6 8 ÷
2 4 ? ÷
? ÷
? ÷
è ?
算法分析:
分析:m 的值是不定的,所以可以申明一個(gè)二維數(shù)組 int a[10][10],當(dāng) m=2 時(shí),只用前兩行兩列,當(dāng) m=4 時(shí),就只用前四行四列;元素 a[i][j]的值和他的行列下標(biāo)可找到規(guī)律如下:a[i][j]=(i+1)*(j+1)。
參考答
9、案:
#include
void main()
{ int a[10][10],i,j,m; //數(shù)組定義到足夠大
printf("Input m:");
scanf("%d",&m);
for(i=0;i
10、.c,將 M 行 N 列的二維數(shù)組中的數(shù)據(jù), 按列的順序依次放到一個(gè)一維數(shù)組中。例如, 二 維數(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。
算法分析:
按列序遍歷原二維數(shù)組,存入的一維數(shù)組元素用第三個(gè)下標(biāo)(例如 k),初值為 0,每用一個(gè)元素,k 加 1,為下一個(gè)元素的下標(biāo)。最終 k 的值為實(shí)際使用一維數(shù)組元素的個(gè)數(shù)。
參考答案:
# include
# include
# include
11、
# include
# define M 3
# define N 4
void main()
{
int a[M][N],b[ M*N ];
int i,j,k=0;
srand( time( NULL ) );
printf("原矩陣:\n");
for(i=0;i
12、0;j
13、果為
3 1 2
6 4 5
9 7 8
算法分析:
二維數(shù)組的移動(dòng),類似于一維數(shù)組的元素移動(dòng);只是在一維數(shù)組移動(dòng)的外面加上控制行的外循環(huán)。即: 對(duì)每一行元素(i 行),首先把最后一列即 a[i][2]用中間變量 t 保存;然后就從第 1 列到第 0 列,每個(gè)元素向 右移動(dòng)一個(gè)位置(a[i][j]=a[i][j-1]);最后再給 a[i][0]賦值為 t(之前 a[i][2]的值)。
參考答案:
# include
# include
# include
# include
void main(
14、)
{ int a[3][3];
int i,j,t;
srand( time( NULL ) );
printf("原來數(shù)組 a 的值:\n");
for(i=0;i<3;i++) //用隨機(jī)函數(shù)生成 3 行 3 列的二維數(shù)組并按矩陣格式輸出
{ for(j=0;j<3;j++)
{ a[i][j]=rand()%20;
printf("%5d",a[i][j]);
}
printf("\n");
}
for(i=0;i<3;i++) //外循環(huán)控制行下標(biāo)
{ t=a[i][2]; //每一行的最后列元素用 t 暫存
for(j=1;j>=0;j--) /
15、/從該行倒數(shù)第二個(gè)元素開始逐個(gè)往右搬動(dòng)一個(gè)位置 a[i][j+1]=a[i][j];
a[i][0]=t; //將暫存于 t 中的最后一個(gè)元素值存入第一個(gè)元素
}
printf("矩陣變換后:\n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
運(yùn)行結(jié)果:
(7) 設(shè)計(jì)程序 sy6-7.c,有 N×N 矩陣,以主對(duì)角線為對(duì)稱線,對(duì)稱元素相加并將結(jié)果存放在左下三角元素中, 右上三角元素置為 0。例如,若 N=3,有
1 2 3
下列矩陣:(4 5 6)
16、
7 8 9
1
計(jì)算結(jié)果為:( 6
10
0
5
14
0
0
9
)
算法分析:
按 行 序 遍 歷 二 維 數(shù) 組 左 下 半 三 角 元 素 , 使 其 和 右 上 半 三 角 元 素 相 加 后 存 入 左 下 半 三 角 (a[i][j]=a[i][j]+a[j][i]),再將右上半三角的元素改為 0(a[j][i]=0 )。
參考答案:
# include
# include
# include
# include
# define N
17、 4
void main()
{ int a[N][N];
int i,j;
srand( time( NULL ) );
700 800 900
300 600 900
printf("原矩陣:\n");
for(i=0;i
18、< i ; j++) //遍歷左下半三角 (不含對(duì)角線) 元素
{ a[i][j]=a[i][j]+a[j][i] ; //與右上半三角對(duì)稱元素相加后置于左下半三角 a[j][i]=0; //將右上角元素改為 0
}
}
printf("結(jié)果矩陣:\n");
for(i=0;i
19、
?100 200 300 ? ? ÷ ?400 500 600 ÷
,程序輸出:
?
?
?
100 400 700
200 500 800
?
÷
÷
。
? ÷
è ?
? ÷
è ?
算法分析:
方陣的轉(zhuǎn)置可以在原矩陣上將主對(duì)角線以下的元素與右上角的對(duì)稱元素交換即可。 參考答案:
# include
# include
# include
# include
# define N 4
void main()
{ int
20、 a[N][N];
7 8 9
3 6 9
10 14 1
int i,j,t;
srand( time( NULL ) );
printf("原矩陣:\n");
for(i=0;i
21、(不含對(duì)角線) 元素
{ t = a[i][j] ;
a[i][j] = a[j][i] ;
a[j][i] = t ;
}
}
printf("轉(zhuǎn)置矩陣是:\n"); for(i=0;i
22、
è ?
其轉(zhuǎn)置矩陣為:
?1 4 7 ? ?2 6 10 ? ? ÷ ? ÷ ?2 5 8 ÷,程序輸出: ?6 10 14 ÷ ? ÷ ? ÷
è ? è ?
。
算法分析:
矩陣 A 和 A 的轉(zhuǎn)置矩陣 A'以及相加后的結(jié)果矩陣 B 大小都一樣,而轉(zhuǎn)置矩陣 A'中 i,j 元素的值正好是 原矩陣 A 中 j,i 元素的值,所以有 b[i][j]=a[i][j]+a[j][i] ,最后輸出 B 矩陣即可 。
參考答案:
# include
# include
# include
23、>
# include
# define N 3
void main()
{ int a[N][N],b[N][N];
int i,j;
srand( time( NULL ) );
printf("矩陣 A :\n");
for(i=0;i
24、;j++) //按列序遍歷矩陣 A 并按矩陣格式輸出即是 A 的轉(zhuǎn)置矩陣
{ for(i=0;i
25、f("%5d",b[i][j]);
printf("\n");
}
}
運(yùn)行結(jié)果:
(10) 設(shè)計(jì)程序 sy6-10.c,求出二維數(shù)組周邊元素的平均值。例如:a 數(shù)組中的值為
0 1 2 7 9
1 9 7 4 5
a = 2 3 8 3 1
4 5 6 8 2
5 9 1) 4 1
則周邊元素的平均值應(yīng)為: 3.375。
算法分析:
N 行 N 列矩陣周邊元素的下標(biāo)特點(diǎn):首行的行下標(biāo)為 0,末行的行下標(biāo)為 N-1;第一列的列下標(biāo)為 0, 最后一列的列下標(biāo)為 N-1。如果先累加了第一行和最后一行的所有元素,則在累加第一列和最后一列元素值 時(shí)應(yīng)跳過與第一
26、行和最后一行相重疊的元素。最后除以元素個(gè)數(shù)即可
參考答案:
# include
# include
# include
# include
# define N 4
void main()
{ int a[N][N],i,j;
double sum=0,ave;
srand( time( NULL ) );
printf("矩陣 A :\n");
for(i=0;i
27、][j]=rand()%10;
printf("%5d",a[i][j]);
}
printf("\n");
}
for( j=0 ; j < N ; j++) // 累加首行和末行的元素值
sum=sum + a[0][j] + a[N-1][j];
for( i=1 ; i < N-1 ; i++) // 累加第一列和最后一列除去首行和末行的元素值
sum=sum + a[i][0] + a[i][N-1];
ave = sum / ( 4*N - 4 ) ;
printf("該矩陣周邊元素的和是 %g . \n",sum);
printf("該矩陣周邊元素的平均值是 %f . \n",ave);
}
運(yùn)行結(jié)果: