A:
试题描述
按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。n和矩阵元素均由用户从键盘输入。已知n值不超过10。
void Transpose(int a[][N], int n);
输入
输入包含n + 1行:
第一行是整数n(0 < n <= 10)。
第二行到第n + 1行每行均有n个整数,相邻两项之间用一个空格隔开。
输出
输出包含n行,是转置后的矩阵。每行均有n个整数,相邻两项之间用一个空格隔开。
输入示例
3
1 2 3
4 5 6
7 8 9
输出示例
1 4 7
2 5 8
3 6 9
数据范围
输入输出均为int范围的整数
#include <stdio.h>
#define N 10
void Transpose(int a[][N],int n);
int main(){
int a[10][10],n,i,j;
scanf("%d",&n);
for (i=0;i<n;i++){
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
Transpose(a,n);
for (i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
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++)
b[i][j]=a[i][j];
}
for (i=0;i<n;i++){
for(j=0;j<n;j++)
a[i][j]=b[j][i];
}
}
(本案例有些许不足,未能发现,欢迎大神指正)
B:
试题描述
按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。n和矩阵元素均由用户从键盘输入。已知n值不超过10。
void Transpose(int (*a)[N], int n);
#include <stdio.h>
#define N 10
void Transpose(int (*a)[N], int n);
void swap(int *a,int *b);
int main(){
int n,i,j,a[10][10];
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++) scanf("%d",&a[i][j]);
}
Transpose(a,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++) printf("%d ",a[i][j]);
printf("\n");
}
}
void Transpose(int (*a)[N], int n){
int i,j;
for(i=0;i<n;i++){
for (j=i+1;j<n;j++)
swap(&a[i][j],&a[j][i]);
}
}
void swap(int *a,int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
C:
试题描述
按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。n和矩阵元素均由用户从键盘输入。已知n值不超过10。
void Transpose(int *a, int n);
#include <stdio.h>
void Transpose(int *a, int n);
void swap(int *a,int *b);
int main(){
int n,i=0,a[10][10],*p;
scanf("%d",&n);
for (p=a[0];p<a[0]+n*n;p++) scanf("%d",p);
p=a[0];
Transpose(p,n);
for (p=a[0];p<a[0]+n*n;p++,i++) {
printf("%d ",*p);
if ((i+1)%n==0) printf("\n");
}
}
void Transpose(int *a, int n){
int i=0,j;
for (;i<n;i++) {
for(j=i+1;j<n;j++) swap(a+n*i+j,a+i+n*j);
}
}
void swap(int *a,int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
(学习尚少,仅供参考,若有不足,欢迎一起探讨。)