送分啦,回答一个C问题
- C/C++ code
#include <stdafx.h>void main(){ void chnum(int a[3][3]); int a[3][3],m,n; for(m=0;m<3;m++) { for(n=0;n<3;n++) { scanf("%d",&a[m][n]); } } printf("该数组成员依次为:\n"); for(m=0;m<3;m++) { for(n=0;n<3;n++) { printf("a[%d][%d]=%d,",m,n,a[m][n]); } } printf("\b。\n"); printf("调整后的数组成员依次为:\n"); chnum(a);}void chnum(int a[3][3]){ int m,n,t; for(m=0;m<3;m++) { for(n=0;n<3;n++) { t=a[m][n]; a[m][n]=a[n][m]; a[n][m]=t; } } for(m=0;m<3;m++) { for(n=0;n<3;n++) { printf("a[%d][%d]=%d,",m,n,a[m][n]); } } printf("\b。\n");}这个是关于3*3数组行和列互换位置的函数(即原先的行变成对应的列),可是我测试的时候,发现行和列上的数据都没互换,难道是我的函数写错啦?可是,我检查发现应该也没问题的,不知道出在哪里了?
请大侠帮忙看看。
[解决办法]
不能传二维数组,只能传指针和一维数组,比如void chnum(int a[], int rows, int cols),然后a[m][n]可以用a[m * cols + n]来表达。
[解决办法]
最好
void chnum(int a[3][3])
-》
void chnum(int **a)
[解决办法]
楼主的错误是把 数组的值对调了两次最后还是原来的样子, 正如楼主说的要层层递缩。你那种方法就是只用户矩阵的对角线一半了,原来的两半都用,所以被交换了两次,所以还是原来的值。
[解决办法]
- C/C++ code
#include <stdio.h>void check_sum(int a[3][3]){ int i,j,t; for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ if(i >j) { t = a[i][j] ; a[i][j] = a[j][i]; a[j][i] = t; } } }}int main(void){ int a[3][3] = {0}; char i,j; puts("Please Input Your Number:"); for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ scanf("%d",&a[i][j]); } } for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ printf("%d ",a[i][j]); if(j==2)puts(" "); } } check_sum(a); for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ printf("%d ",a[i][j]); if(j==2)puts(" "); } } return 0;}