实验五-参考答案--计算机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;for(i=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");for(i=0;i<3;i+)for(j=0;j<4;j+) printf("%5d",aij);printf("n");min=a00;row=0;colum=0; /首先把第一个数a00看成最小数for(i=0;i<3;i+) /双重循环逐一遍历每个元素aijfor(j=0;j<4;j+)if(min>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的值:");for(i=0;i<3;i+) /生成数组元素,并按矩阵形式输出 for(j=0;j<3;j+)aij=rand()%20; /rand()参看教材385页 /rand()%20 产生一个20以内的整数 printf("%5d",aij); printf("n");printf("请输入n:");scanf("%d",&n);for(i=0;i<3;i+) /i表示每一行for(j=0;j<=i;j+) /j从0到i,即每行的对角线及前面的数的列下标aij=aij*n;printf("n数组左下三角元素乘以n后值为:");for(i=0;i<3;i+)for(j=0;j<=i;j+)printf("%5d",aij); printf("n");return 0;运行结果:(4) 设计程序sy5-4.c,输入一个整数m(2m9,在m行m列的二维数组中存放如下所示规律的数据。例如,若输入2,则输出:,若输入4,则输出: 算法分析:分析:m的值是不定的,所以可以申明一个二维数组int a1010,当m=2时,只用前两行两列,当m=4时,就只用前四行四列;元素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);for(i=0;i<m;i+) /*初始化第一列元素*/ai0=i+1; for(i=0;i<m;i+) /*处理其余元素:为第0列元素*(j+1)*/for(j=1;j<m;j+) aij=ai0*(j+1);for(i=0;i<m;i+) /*输出矩阵*/ for(j=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 计算结果为 31 2 64 5 9 7 8 算法分析: 二维数组的移动,类似于一维数组的元素移动;只是在一维数组移动的外面加上外循环。即:对每一行元素(i行),首先把最终一列即ai2用中间变量t保存;然后就从第1列到第0列,每个元素向后移动一列(aij=aij-1);最终再给ai0赋值为t(以前的ai2)。参考答案:#include<stdio.h>#include<math.h>int main()int a33;int i,j,t;printf("原来数组a的值:n");for(i=0;i<3;i+) /生成数组元素,并按矩阵形式输出 for(j=0;j<3;j+)aij=rand()%20; /rand()参看教材385页 /rand()%20 产生一个20以内的整数 printf("%5d",aij); printf("n");for(i=0;i<3;i+) /i-每一行 t=ai2; /每一行的最终列元素用t保存 for(j=2;j>0;j-) /从最终一列到第1列逐次向后移动一列 aij=aij-1; ai0=t; /给第一列赋值t,即以前行的最终一列printf("矩阵变换后:n");for(i=0;i<3;i+) for(j=0;j<3;j+) printf("%5d",aij);printf("n");return 0;运行结果:5, 设计程序sy4-5.c,从键盘输入m的值(2<=m<=9),并用双重循环给数组赋值,在m行m列的二维数组中存放如下所示的数据,并将结果输出在显示上。例如:输入3 输入5则输出: 则输出: 1 2 3 1 2 3 4 52 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);for(i=0;i<m;i+) /*初始化第一列元素*/ai0=i+1; for(i=0;i<m;i+) /*处理其余元素:为第0列元素*(j+1)*/for(j=1;j<m;j+) aij=ai0*(j+1);for(i=0;i<m;i+) /*输出矩阵*/ for(j=0;j<m;j+) printf("%5d",aij); printf("n");运行结果:第 7 页