复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41//练习7-9 //计算某个日期对应该年的第几天 #include<stdio.h> int day_of_year(int year,int month,int day); int main() { int year,month, day; printf("Enter year, month, day: "); scanf("%d%d%d",&year,&month,&day); day_of_year(year, month, day); printf("%d",day_of_year(year, month, day)); return 0; } int day_of_year(int year,int month,int day) { int k,leap; int tab[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, // 非闰年天数 {0,31,29,31,30,31,30,31,31,30,31,30,31} // 闰年天数 }; leap=(year %4 ==0&&year%100 !=0||year%400 ==0); //判断闰年 for(k=1; k<month; k++) //闰年,leap=1;非闰年,leap=0; { day=day+tab[leap][k]; } return day; } Enter year, month, day: 2000 3 1 61
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46//练习7-5 //将列下标作为外循环变量,行下标作为内循环变量 #include<stdio.h> int main() { int col,i,j,row; int a[3][2]; printf("Enter 6 intergers: n"); for(j=0; j<2; j++) for(i=0; i<3; i++) scanf("%d",&a[i][j]); //按矩阵的形式输出二维数组 for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("%4d",a[i][j]); printf("n"); } //找出最大值 a[row][col] row=col=0; for(i=0; i<3; i++) for(j=0; j<2; j++) if(a[i][j]>a[row][col]){ row=i; col=j; } printf("max=a[%d][%d]=%dn",row,col,a[row][col]); return 0; } Enter 6 intergers: 3 2 10 -9 6 -1 3 -9 2 6 10 -1 max=a[2][0]=10
不同于例7-7按行存放
练习7-5为按列存放
j i 值 1 0 0 3 2 0 1 2 3 0 2 10 4 0 0 -9 5 0 1 6 6 0 2 2
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39//练习7-6-1 #include<stdio.h> int main() { int i,j,n,temp; int a[6][6]; printf("Enter n: "); scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j]=i*n +j+1; //给数组赋值 for(i=0; i<n; i++) for(j=0; j<n; j++) if(i>=j){ //只需遍历下三角 temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } for(i=0; i<n; i++){ for(j=0; j<n; j++) { printf("%4d",a[i][j]); } printf("n"); } return 0; } Enter n: 3 1 4 7 2 5 8 3 6 9
评价:遍历上三角和下三角结果相同,结果都是i和j的值转换。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39练习7-6-2 #include<stdio.h> int main() { int i,j,n,temp; int a[6][6]; printf("Enter n: "); scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j]=i*n +j+1; //给数组赋值 for(i=0; i<n; i++) for(j=0; j<n; j++) if(i>=j||j>=i){ //遍历整个矩阵 temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } for(i=0; i<n; i++){ for(j=0; j<n; j++) { printf("%4d",a[i][j]); } printf("n"); } return 0; } Enter n: 3 1 2 3 4 5 6 7 8 9
评价:将i转换成j,又将j的值转换成i,结果不变。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47//练习7-7 //计算除了矩阵副对角线,最后一列,最后一行的所有元素之和 #include<stdio.h> int main() { int i,j,n,temp,sum; int a[6][6]; printf("Enter n: "); scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j]=i+j; for(i=0; i<n; i++){ for(j=0; j<n; j++) { printf("%4d",a[i][j]); } printf("n"); } sum=0; for(i=0; i<n; i++) for(j=0; j<n; j++) if(i!=n-1&&j!=n-1&&(i+j)!=n-1) { sum+=a[i][j]; } printf("%d",sum); return 0; } Enter n: 6 0 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 7 3 4 5 6 7 8 4 5 6 7 8 9 5 6 7 8 9 10 80
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54//练习7-8 //方阵循环右移 #include<stdio.h> int main() { int n,i,j,m; int a[6][6],b[6][6]; printf("Enter n: "); scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) scanf("%d",&a[i][j]); for(i=0; i<n; i++){ for(j=0; j<n; j++) { printf("%4d",a[i][j]); } printf("n"); } printf("Enter m: "); scanf("%d",&m); for( i=0; i<n; i++ ){ for( j=0; j<n; j++ ){ b[i][(j+m)%n ] = a[i][j]; //列元素向右移m各位置 } } for(i=0; i<n; i++){ for(j=0; j<n; j++) { printf("%4d",b[i][j]); } printf("n"); } return 0; } Enter n: 3 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 Enter m: 2 2 3 1 5 6 4 8 9 7
最后
以上就是纯情云朵最近收集整理的关于C语言学习系列二十七——二维数组训练(矩阵计算)的全部内容,更多相关C语言学习系列二十七——二维数组训练(矩阵计算)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复