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;
}
}
展开
 我来答
White_MouseYBZ
2018-10-29 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6328万
展开全部

好好的二维数组,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;
}

运行样例:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式