C语言指针与二维数组的使用错误
矩阵转置问题:#include<stdio.h>#include<stdlib.h>#defineN100voidTranspose(int*a,intx);voidma...
矩阵转置问题:#include<stdio.h>#include<stdlib.h>#define N 100void Transpose(int *a,int x);void main(){ int i,j,n; int a[N][N]; printf("请输入矩阵表的行,列数:\n"); scanf("%d",&n); printf("请输入矩阵:\n"); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i*N+j]); //运行到这里有错误 Transpose(*a,n); for(i=0;i<n;i++) { printf("\n"); for(j=0;j<n;j++) printf("%-2d ",a[i*N+j]); }}//交换矩阵:void Transpose(int *p,int x){ int i,j,temp; for(i=0;i<x;i++) for(j=0;j<x;j++) { temp=p[i*N+j]; p[i*N+j]=p[j*N+i]; p[j*N+i]=temp; }}
#include<stdio.h>
#include<stdlib.h>
#define N 100
void Transpose(int *a,int x);
void main()
{
int i,j,n;
int a[N][N];
printf("请输入矩阵表的行,列数:\n");
scanf("%d",&n);
printf("请输入矩阵:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i*N+j]); //运行到这里有错误
Transpose(*a,n);
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%-2d ",a[i*N+j]);
}
}
//交换矩阵:
void Transpose(int *p,int x)
{
int i,j,temp;
for(i=0;i<x;i++)
for(j=0;j<x;j++)
{
temp=p[i*N+j];
p[i*N+j]=p[j*N+i];
p[j*N+i]=temp;
}
} 展开
#include<stdio.h>
#include<stdlib.h>
#define N 100
void Transpose(int *a,int x);
void main()
{
int i,j,n;
int a[N][N];
printf("请输入矩阵表的行,列数:\n");
scanf("%d",&n);
printf("请输入矩阵:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i*N+j]); //运行到这里有错误
Transpose(*a,n);
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%-2d ",a[i*N+j]);
}
}
//交换矩阵:
void Transpose(int *p,int x)
{
int i,j,temp;
for(i=0;i<x;i++)
for(j=0;j<x;j++)
{
temp=p[i*N+j];
p[i*N+j]=p[j*N+i];
p[j*N+i]=temp;
}
} 展开
1个回答
展开全部
好好的二维数组,C也提供了二维数组的操作办法,干嘛要降成一维数组操作?舍简求繁降一维当然也行,可是用的是二维数组名作指针,并未强制成一维数组指针,当然那些类似i*N+j这样计算下标的算法都注定要失败。下面是我给你改过的,改得较多,有标记,所以就不细说。你对照看,可续问。
#include "stdio.h"
#define N 100
void Transpose(int (*p)[N],int x){//有改
int i,j,temp;
for(i=0;i<x;i++)
for(j=0;j<i;j++){//有改
temp=p[i][j];//有改
p[i][j]=p[j][i];//有改
p[j][i]=temp;//有改
}
}
int main(int argc,char *argv[]){
int i,j,n;
int a[N][N];
printf("请输入矩阵表的行,列数:\n");
scanf("%d",&n);
printf("请输入矩阵:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);//有改 //运行到这里有错误a[i*N+j]
Transpose(a,n);//有改
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n;j++)
printf("%-2d ",a[i][j]);//有改
}
return 0;
}
运行样例:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询