c语言矩阵转置 运用二维数组和指针
#include<stdio.h>#defineN10voidTranspose(inta[][N],intn){inti,j,b[N][N];for(i=0;i<n;i...
#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)一个是这样
多谢大神 展开
#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)一个是这样
多谢大神 展开
2个回答
展开全部
形参int (*a)[N]和int a[][N]在编译时都被解释为“a是指向长度为N的一维数组的指针”,所以函数体内的操作可以二者完全一样。就是说如果你这个函数是正确的的话,把第一个形参改为int (*a)[N],其余不变就是完全正确的。所以这没有什么新的意义,这里就不费笔墨了。至于改为形参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;
}
追问
怎么让用指针的时候用到 *(*(a+i)+j) 这种形式呢 谢谢
追答
改一下就是了,因为类似p[i][j]和*(*(p+i)+j)是完全对等的:
#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+j)+i);//改写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 "stdafx.h"
#include<iostream>
using namespace std;
void input();
void output();
void sort();
int a[4][4];
int main()
{
cout << "请输入二维数组中的16个数" << 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;
}
}
#include<iostream>
using namespace std;
void input();
void output();
void sort();
int a[4][4];
int main()
{
cout << "请输入二维数组中的16个数" << 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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询