只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。 for(i = 0; i < n; i++)
for(j = 0; j < i; j++) { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; }
若修改为遍历整个程序,方法如下,则运行结果仍将输出原矩阵,无法达到转置要求,原因是矩阵中每个元素相应被交换了2次。 for(i = 0; i < n; i++)
for(j = 0; j < n; j++) { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; }
练习7-7 编写程序,读入 1 个正整数 n(1≤n≤6), 再读入 n 阶方阵 a , 计算该矩阵除副
第60/106页
对角线、最后一列和最后一行以外的所有元素之和(副对角线为从矩阵的右上角至左下角的连线)。 解答:
#include
int a[6][6],i,j,n,sum; printf(\
printf(\d\sum=0;
for (i=0;i printf(\ 练习7-8 编写程序,输出一张九九乘法口诀表。提示:将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。 解答: #include int i,j,n,a[10][10]; for( i=0; i<=9; i++ ) for( j=0; j<=9; j++ ) if( i==0) a[i][j]=j; else if( j==0) a[i][j]=i; else a[i][j]=i*j; for( i=0; i<=9; i++ ){ for( j=0; j<=9; j++ ) if( i==0&&j==0 ) printf( \ else if( i==0||j<=i ) printf( \} return 0; } 练习7-9 编写程序,输入日期(年、月、日),输出它是该年的第几天。要求调用例7-10中定义的函数day_of_year(year, month, day)。 第61/106页 解答: #include \ int year, month,day, day_year; int day_of_year(int year, int month, int day); printf(\th,day: \ day_year=day_of_year(year, month, day); printf(\day_year); return 0; } 7.3.2习题参考答案 一.选择题 1.假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是 D 。 A.3 B.6 C.10 D.20 2.以下能正确定义数组并正确赋初值的语句是。 A.int N=5,b[N][N]; B.int a[1][2]={{1},{3}}; D.int d[3][2]={{1,2},{34}}; C.a [0][3] D.a[1>2][1] D.7个字节 C.int c[2][]={{1,2},{3,4}}; A.a[2][0] 3.若有定义:int a[2][3]; 以下选项中对 a 数组元素正确引用的是。 B.a[2][3] 4.设有数组定义:char array [ ]=\则数组 array所占的空间为。 A.4个字节 B.5个字节 C.6个字节 5.下述对C语言字符数组的描述中错误的是 A.字符数组可以存放字符串 B.字符数组中的字符串可以整体输入、输出 C.可以在赋值语句中通过赋值运算符\对字符数组整体赋值 D.不可以用关系运算符对字符数组中的字符串进行比较 6.有以下定义:char x[ ]=\','g'}; 则正确的叙述为。 A.数组x和数组y等价 B.数组x和数组y的长度相同 D.数组x的长度小于数组y的长度 C.数组x的长度大于数组y的长度 7.以下程序的输出结果是。 int main(void) { } A.4 5 6 int main(void) B.2 5 8 C.3 6 9 D.7 8 9 8.以下程序的输出结果是 int m[][3]={1,4,7,2,5,8,3,6,9}; int i, j, k=2; for (i=0;i<3;i++) printf (\ 第62/106页 { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i, s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf(\B.19 C.13 D.20 } A.11 二.填空题 1.设有定义语句:int a[ ][3]={{0},{1},{2}}; 则数组元素 a[1][2]的值是 2.下列程序的功能是:求出数组 x 中各相邻两个元素的和依次存放到 a 数组中,然后输出。请填空。 int main(void ) { int x[10],a[9],i; for(i=0; i<10; i++) scanf(\; for(i=0; i<9; i+ +) printf(\3.写出下列程序的运行结果是。 int main(void) { } 4.写出下面程序的运行结果。 #include { float s[6]={1, 3, 5, 7, 9}; float x; int i; scanf(“%f”, &x); for (i=4 ; i>=0; i--) if(s[i]>x) s[i+1]=s[i]; else break; printf(\ int a[10]={10,1,-20,-203,-21,2,-2,-2,11,-21}; int j,s=0; for(j=0;j<10;j++) if(a [j]%2==0) s+=a[j]; printf(\ 第63/106页 (1) 如果输入4,则输出 2 。 (2) 如果输入5,则输出 3 。 5.下列程序的功能是输出如下形式的方阵,请填空。 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 int main(void) { int i,j,x; { for(i=1;i<=4;i++) { ; printf(\ printf(\ 6.以下程序的功能是输入一个字符串,输出其中所出现过的大写英文字母。如运行时输入字符串\,则输出\。请填空。 int main(void) { char x[80],y[26]; int i,j,ny=0; gets(x); for(i=0; if(x[i]>='A' { for(j=0;j for(i=0;i 1.编写程序,输入一个正整数n (1 解答: #include int i, index, n, t; int a[10]; printf(\scanf(\ printf(\for(i=0; i for(i=1; i a[0]=a[index]; a[index]=t; index=n-1; for(i=0; i a[n-1]=a[index]; a[index]=t; printf(\for(i=0; i return 0; } 2.编写程序,输入一个正整数n (1 int i, index, k, n, temp; int a[10]; printf(\scanf(\ printf(\for(i=0; i for(i=k+1; i if(a[i]> a[index]) index=i; temp=a[index]; a[index]=a[k]; a[k]=temp; 第65/106页 } printf(\for(i=0; i 3.编写程序,输入一个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a是上三角矩阵,输出“YES”, 否则,输出“NO”。(上三角矩阵,即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线) 解答: #include int a[6][6],flag,i,j,n; printf(\