2022年实验五参考答案计算机C语言.docx
精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆试验四 参考答案( 参考答案 )1 设计程序 sy5-1.c,从键盘上输入一个3 行 3 列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和;算法分析:对角线上的元素,1 维和 2 维下标相同,反对角线元素,假如行下标为i,列下标就为2-i ;参考答案:#include<stdio.h> int main int a33=1,2,3,4,5,6,7,8,9; int i,j,sum=0; fori=0;i<3;i+ sum=sum+aii+ai2-i; /aii 当前行的主对角线元素 /ai2-i 当前行的反对角线元素printf" 矩阵的正、反对角线元素之和为:%dn",sum; return 0; 运行结果:2 设计程序sy5-2.c,找出一个3× 4 的矩阵中的最小值及其位置;算法分析:第一把二维数组中的第一个数即a00 看成最小值,然后逐行逐列的去遍历每个元素,逐一判定每一个元素是否比最小值仍好小,假如是,就改写最小值,并记录他的下标;参考答案:#include<stdio.h> #include<math.h> int main int a34=10,21,41,5,12,15,46,35,40,21,26,30; int i,j,row,colum,min; printf" 数组 a:n" fori=0;i<3;i+ forj=0;j<4;j+ printf"%5d",aij; 名师归纳总结 - - - - - - -第 1 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆printf"n" min=a00;row=0;colum=0; /第一把第一个数 a00 看成最小数fori=0;i<3;i+ /双重循环逐一遍历每个元素 aij forj=0;j<4;j+ ifmin>aij /假如当前值aij 比最小值仍要小min=aij;row=i;colum=j; /用 aij 改写最小值,并登记他们的下标printf" 矩阵中最小元素是:%d,行下标是 :%d,列下标是 %dn",min,row,colum; return 0; 运行结果:3 设计程序sy5-3.c,定义一个3× 3 的二维数组,通过随机函数自动赋值;然后输入一个整数 n,使数组左下三角(含对角线元素)元素中的值乘以n ;例如:如n 的值为 3,a 数组中的值为| 1 9 7 |就程序运行后a 数组中的值应为| 3 9 7 | | 2 3 8 | | 6 9 8 | | 4 5 6 | | 12 15 18 | 算法分析:主要懂得到对角线即以下元素包含哪些元素,即他们的下标变化;对每一行 i 来说,对角线以下的元素,他们的列下标是 0,1,2,-, i;所以用外循环 i 遍历行,内循环 j(从 0到 i),逐一遍历每一个 aij, 并给 aij 赋值为他的 n 倍;最终输出矩阵;参考答案:#include<stdio.h> #include<math.h> int main int a33; int i,j,n; printf" 原先 a 的值: " fori=0;i<3;i+ /生成数组元素,并按矩阵形式输出 forj=0;j<3;j+ aij=rand%20; /rand 参看教材 385 页/rand%20 产生一个 20 以内的整数名师归纳总结 - - - - - - -第 2 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆printf"%5d",aij; printf"n" printf" 请输入 n:" scanf"%d",&n; fori=0;i<3;i+ /i 表示每一行forj=0;j<=i;j+ /j从 0 到 i,即每行的对角线及前面的数的列下标aij=aij*n; printf"n 数组左下三角元素乘以 n 后值为: " fori=0;i<3;i+ forj=0;j<=i;j+ printf"%5d",aij; printf"n" return 0; 运行结果:4 设计程序sy5-4.c,输入一个整数m(2m9,在 m 行 m 列的二维数组中存放如下所示规律的数据;例如, 如输入 2,就输出:12,如输入 4,就输出:123424682436912481216算法分析:分析: m 的值是不定的,所以可以申明一个二维数组int a1010 ,当 m=2 时,只用前两行两列, 当 m=4 时,就只用前四行四列;元素 aij 的值和他的行列下标可找到规律如下:每行的第 0 列元素 ai0=i+1; 除第 0 列元素其它元素 aij=ai0*j+1;参考答案:#include<stdio.h> 名师归纳总结 - - - - - - -第 3 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆void main int a1010,i,j,m; printf"Input m:" scanf"%d",&m; fori=0;i<m;i+ /* 初始化第一列元素*/ ai0=i+1; fori=0;i<m;i+ /* 处理其余元素:为第0 列元素 * (j+1 )*/ forj=1;j<m;j+ aij=ai0*j+1; fori=0;i<m;i+ /* 输出矩阵 */ forj=0;j<m;j+ printf"%5d",aij; printf"n" 运行结果:5 设计程序sy5-5.c,将 3× 3 矩阵中元素的值按列右移1 个位置,右边被移出矩阵的元素绕回左边;例如,有以下矩阵1 2 3 4 5 6 7 8 9 运算结果为3 1 2 6 4 5 9 7 8 算法分析:二维数组的移动,类似于一维数组的元素移动;只是在一维数组移动的外面加上外循 环;即:对每一行元素(i 行),第一把最终一列即 ai2 用中间变量 t 储存;然后就从第 1 列到第 0 列,每个元素向后移动一列(aij=aij-1);最终再给 ai0 赋值为 t(以前的ai2 );名师归纳总结 - - - - - - -第 4 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆参考答案:#include<stdio.h> #include<math.h> int main int a33; int i,j,t; printf" 原先数组 a 的值: n" fori=0;i<3;i+ /生成数组元素,并按矩阵形式输出 forj=0;j<3;j+ aij=rand%20; /rand 参看教材 385 页 /rand%20 产生一个 20 以内的整数 printf"%5d",aij; printf"n" fori=0;i<3;i+ /i- 每一行 t=ai2; /每一行的最终列元素用 t 储存 forj=2;j>0;j- /从最终一列到第 1 列逐次向后移动一列 aij=aij-1; ai0=t; /给第一列赋值t,即以前行的最终一列 printf" 矩阵变换后: n" fori=0;i<3;i+ forj=0;j<3;j+ printf"%5d",aij; printf"n" return 0; 运行结果:名师归纳总结 - - - - - - -第 5 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆5、设计程序sy4-5.c,从键盘输入m 的值 2<=m<=9 ,并用双重循环给数组赋值,在m 行 m列的二维数组中存放如下所示的数据,并将结果输出在显示上;例如:输入3 输入 5 3 4 5 就输出 : 3 就输出 : 1 2 1 2 2 4 6 2 4 6 8 10 3 6 9 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 算法分析:分析: m 的值是不定的,所以可以申明一个二维数组int a1010 ,当 m=3 时,只用前三行三列, 当 m=5 时,就只用前五行五列;元素 aij 的值和他的行列下标可找到规律如 下:每行的第 0 列元素 ai0=i+1; 除第 0 列元素其它元素 aij=ai0*j+1;参考答案:#include<stdio.h> void main int a1010,i,j,m; printf"Input m:" scanf"%d",&m; fori=0;i<m;i+ /* 初始化第一列元素*/ ai0=i+1; fori=0;i<m;i+ /* 处理其余元素:为第0 列元素 * (j+1 )*/ forj=1;j<m;j+ aij=ai0*j+1; fori=0;i<m;i+ /* 输出矩阵 */ forj=0;j<m;j+ printf"%5d",aij; printf"n" 运行结果:名师归纳总结 - - - - - - -第 6 页,共 7 页精选学习资料 - - - - - - - - - 学而不思就惘,思而不学就殆名师归纳总结 - - - - - - -第 7 页,共 7 页