#include <stdio.h>
#define N 10
void Transpose(int a[][N],int n)
{
int i,j,b[N][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++)
{
b[i][j]=a[j][i];
}
}
printf("\n转置后的矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]=b[i][j]);
}
printf("\n");
}
}
int main()
{
int a[N][N],n;
printf("输入转置矩阵的n=");
scanf("%d",&n);
printf("请输入一个%dx%d的矩阵\n" ,n,n);
Transpose(a,n);
return 0;
}
这个是对的 请帮忙用指针的方式改一下
void Transpose(int (*a)[N],int n)一个这样
void Transpose(int *a,int n)一个是这样
多谢大神
c语言矩阵转置 运用二维数组和指针
答案:3 悬赏:30
解决时间 2021-02-23 12:19
- 提问者网友:朱砂泪
- 2021-02-22 18:56
最佳答案
- 二级知识专家网友:狙击你的心
- 2021-02-22 19:49
形参int (*a)[N]和int a[][N]在编译时都被解释为“a是指向长度为N的一维数组的指针”,所以函数体内的操作可以二者完全一样。就是说如果你这个函数是正确的的话,把第一个形参改为int (*a)[N],其余不变就是完全正确的。所以这没有什么新e799bee5baa6e997aee7ad94e58685e5aeb931333361303061的意义,这里就不费笔墨了。至于改为形参int *a,那得稍费周折,因为int *a是个一级指针,不能接受二维数组的全部信息,要在函数中作点预处理;调用的地方也要做点处理。举例如下:
#include "stdio.h"
#define N 10
void Transpose(int *a,int n){
int i,j,b[N][N],*p[N];
for(j=i=0;i<N;p[i++]=a+j,j+=n);//处理一下指针,以便操作方阵
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&p[i][j]);//输入矩阵a
b[j][i]=p[i][j];//转置为b
}
}
printf("\n转置后的矩阵为:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d ",p[i][j]=b[i][j]);//改写a为转置后的矩阵
printf("\n");
}
}
int main(void){
int a[N][N],n;
printf("输入转置矩阵的n=");
scanf("%d",&n);
printf("请输入一个%dx%d的矩阵\n" ,n,n);
Transpose((int *)a,n);//这里对指针a要强制为与函数形参类型一致
return 0;
}
#include "stdio.h"
#define N 10
void Transpose(int *a,int n){
int i,j,b[N][N],*p[N];
for(j=i=0;i<N;p[i++]=a+j,j+=n);//处理一下指针,以便操作方阵
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&p[i][j]);//输入矩阵a
b[j][i]=p[i][j];//转置为b
}
}
printf("\n转置后的矩阵为:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d ",p[i][j]=b[i][j]);//改写a为转置后的矩阵
printf("\n");
}
}
int main(void){
int a[N][N],n;
printf("输入转置矩阵的n=");
scanf("%d",&n);
printf("请输入一个%dx%d的矩阵\n" ,n,n);
Transpose((int *)a,n);//这里对指针a要强制为与函数形参类型一致
return 0;
}
全部回答
- 1楼网友:心与口不同
- 2021-02-22 21:53
#include "stdafx.h"
#include<iostream>
using namespace std;
void input();
void output();
void sort();
int a[4][4];
int main()
{
cout << "请输入二维数组中的7a64e59b9ee7ad943133336339643116个数" << endl;
input();
cout << "转置前的二维数组为" << endl;
output();
sort();
cout << "转置后的二维数组为二维数组为:" << endl;
output();
return 0;
}
void input()
{
for (int i = 0; i<4; i++)
for (int j = 0; j < 4; j++)
cin >> a[i][j];
}
void output()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
cout << a[i][j] << "\t";
}
cout << endl;
}
}
void sort()
{
int t;
int (*pa)[4];
pa = a;
for(int i=0;i<4;i++)
for (int j = i+1; j < 4; j++)
{
t = *(*(pa+i)+j);
*(*(pa + i) + j) = *(*(pa + j) + i);
*(*(pa + j) + i) = t;
}
}
- 2楼网友:努力只為明天
- 2021-02-22 20:38
帮你改正了. 你看看.
#include <stdio.h>
main() { void zhuanzhi(int * p); int a[3][3],i,j;
for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]);
zhuanzhi( ( int * )a ); //将二维数组强制转换成指针.传递给函数.
for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",a[i][j]); printf( "\n" ); //加个回车.效果会明显些. }
getch(); }
void zhuanzhi(int * p) { int i,j,t; for(i=0;i<3;i++) { for(j=0; j<=i; j++) //交换一半就行了.否则会再次交换回去.. { t=*(p+i*3+j); *(p+i*3+j)=*(p+j*3+i); *(p+j*3+i)=t; } }
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯