C语言、用指针方法实现一个3*3矩阵的转置

作者&投稿:韶慧 (若有异议请与网页底部的电邮联系)
用C语言的指针方法处理:写一函数,将一个3*3的整形矩阵转置~

方型矩阵转置比较简单,对上三角或下三角做交换即可。

#include "stdio.h"

void Transpose(int (*matrix)[3])
{
int temp;
int i, j;

for(i=1;i<3;i++)/*转置*/
{
for(j=0;j<i;j++)
{
temp = *(*(matrix+j)+i);
*(*(matrix+j)+i) = *(*(matrix+i)+j);
*(*(matrix+i)+j) = temp;
}
}
}

void main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Transpose(a);
for(int i = 0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("
");
}
}

#include

void main()
{
int p[3][3]; //改成这样,数据才有存放地方。原的只能存3个地址值。
int t;
int i,j;
printf("Input 3*3 :
");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&p[i][j]);
for(i=0;i<3;i++)
for(j=0;j<i;j++) //j<3改为j<i才行。
{
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",p[i][j]); //加上空格好些!
printf("
");
}
}

#include&lt;iostream&gt;

#include&lt;iomanip&gt;

using namespace std;

int main()

{

void move(int*pointer);//函数声明

int a[3][3],i,j;

int*p;

cout&lt;&lt;"请输入矩阵元素:"&lt;&lt;endl;

for(i=0;i&lt;3;i++)//输入数组

{

for(j=0;j&lt;3;j++)

{

cin&gt;&gt;a&lt;i&gt;[j];

}

}

cout&lt;&lt;"输出原矩阵:"&lt;&lt;endl;//输出矩阵

for(i=0;i&lt;3;i++)

{

for(j=0;j&lt;3;j++)

{

cout&lt;&lt;setw(5)&lt;&lt;a&lt;i&gt;[j];

}

cout&lt;&lt;endl;

}

p=&a[0][0];//将数组首元素赋给指针变量p

move(p);//函数调用

cout&lt;&lt;"处理后的矩阵:"&lt;&lt;endl;

for(i=0;i&lt;3;i++)//输出处理后的矩阵

{

for(j=0;j&lt;3;j++)

{

cout&lt;&lt;setw(5)&lt;&lt;a&lt;i&gt;[j];

}

cout&lt;&lt;endl;

}

return 0;

}

//交换函数

void move(int*pointer)

{

int i,j,t;

for(i=0;i&lt;3;i++)

{

for(j=i;j&lt;3;j++)

{

t=*(pointer+3*i+j);//这是关键将矩阵转置的条件

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

}

}

}



扩展资料:

用函数

#include&lt;stdio.h&gt;

int main()

{

void move(int*s);

int a[3][3];int i=0;

int*p=&a[0][0];

printf("请输入一个3*3的数组:
");

for(i=0;i&lt;3;i++)

{

scanf("%d%d%d",&a&lt;i&gt;[0],&a&lt;i&gt;[1],&a&lt;i&gt;[2]);

}

move(p);

printf("转置后的结果:
");

for(i=0;i&lt;3;i++)

{

printf("%d%d%d
",a&lt;i&gt;[0],a&lt;i&gt;[1],a&lt;i&gt;[2]);

}

return 0;

}

void move(int*s)

{

int i,j,t;

for(i=0;i&lt;3;i++)

{

for(j=i;j&lt;3;j++)

{

t=*(s+3*i+j);

*(s+3*i+j)=*(s+3*j+i);

*(s+3*j+i)=t;

}

}

}



只能用指针吗?

void mtrix_reverse(int arr[][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i > j) {
        //指针实现
int tmp = *(*(arr + i) + j);
*(*(arr + i) + j) = *(*(arr + j) + i);
*(*(arr + j) + i) = tmp;
}
}
}
}
void main() {
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
mtrix_reverse(arr);
}
}

转置之后结果如下:



把2提到积分外面就等于2倍的空间区域的体积,空间区域的体积不难算出=1/12,故答案为D,1/6


C语言题目:用指针的方法,输入五位同学四门课的成绩,并输出没有不及格...
j<=9-i;j++){ if(a[j]<a[j+1]){ temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } } for(i=0;i<r;i++){ if(a[i]!=NULL){ printf("%d\\t",a[i]);} } printf("\\n");return 0;} 代码中我图简单都用的int,现实中一般还是用float或者double。附上结果图望采纳 ...

C语言 必须用指针方法编程 输入一个一维实型数组,输出其中最大值...
1 创建数组;2 输入数组各个元素值;3 遍历,求最大,最小,和平均值;4 输出结果。为提高效率,其中2,3两步可在同一个循环中完成。代码如下:int main(){ float a[10]; int i; float *p, *pmax,*pmin, ave = 0; p = pmax= pmin = a; scanf("%f",p); for...

用C语言编程序:用指针方法处理,输入10个整数,将其中最小的数与第一个...
define n 10 main(){ int a[n],max,min,big=0,small=0;scanf("%d",&a[0]);max=a[0];min=a[0];for(int i=1;i<10;i++){ scanf("%d",&a[i]);if(a[i]>max){max= a[i];big=i;} if(a[i]<min){min= a[i];small=i;} } swap(a[0],a[small]);swap(a[n-...

c语言 指针实现加法乘法运算
include <stdio.h> double add(double* a,double*b){return *a+*b; } double multiply(double*a,double*b){return (*a)*(*b) ;} int main(){ double p,q;printf("请输入两个数:\\n");scanf("%f,%f",&p,&q);printf("和=%f,积=%f",add(&p,&q),multiply(&p,&q));} ...

C语言 指针方法?
int *p=a;\/\/将数组a的首地址赋给指针p for(int i=0;i<10;i++)scanf("%d",&p[i]);\/\/指针下标法输入 } int max_min(int *a){ int *p=a;\/\/将数组a的首地址赋给指针p int max,min,x=0,y=0,t;max=min=p[0];for(int i=0;i<10;i++){ if(p[i]>=max){ max=p[i...

c语言中指针怎么使用?
1、使用场景 使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:include<stdio.h> include <stdlib.h> int main(int argc, char const *argv[]){ int a[5]={0,1,2,3,4};int *b,*d;int c=2;int *e=a; \/\/e指向a数组首地址 \/\/*b=2; 无法直接初始...

...计算在字符串1中字符串2出现的次数,用指针实现。
gets(a); \/\/从缓冲区获取源字符串. printf( "Please input find string: " ); gets(b); \/\/从缓冲区获取查找字符串. temp = a; \/\/将源字符串赋给指针操作. while( temp ) { temp = strstr( temp, b ); \/\/在源字符串中查找\/\/第一次出现的位置,找到返回所处位置...

用c语言实现超市商品管理系统,用指针实现商品的插入、删除操作。
可以用链表,大致就是,你创建一个结构体,结构体里有商品的一些信息,然后关键的是有个该结构体的指针,这个指针是指向下一个商品的结构体地址的,依次类推,直到最后一个商品的指针是指向null的,然后开始插入商品的思路:①创建新商品的信息②先让你要插入的结构体的指针指向要插入的那个位置后边的...

C语言 将这个代码用指针实现,对学生信息的输入和显示 求大神改进_百度...
printf("c语言成绩:\\t");scanf("%d",&p->score.clanguage);printf("英语成绩:\\t");scanf("%d",&p->score.english);printf("高数成绩:\\t");scanf("%d",&p->score.math);p++; \/\/指针 要指向下一个 } } void output(){ printf("\\n %d的学生信息:\\n===\\n",LEN);printf("姓...

用C语言编程序:用指针方法处理:写一函数,实现两个字符串的比较。即...
int strcmp(char *p1, char *p2){ while (*p1 && *p2){ if (*p1 > *p2)return 1;else if (*p1 < *p2)return -1;else {p1++; p2++;} } if (*p1==0 && *p2==0)return 0;else if (*p1==0)return -1;else return 1;} ...

裕安区13594748080: 用C语言的指针方法处理:写一函数,将一个3*3的整形矩阵转置 -
庾亭镇咳: 方型矩阵转置比较简单,对上三角或下三角做交换即可.#include "stdio.h" void Transpose(int (*matrix)[3]) { int temp; int i, j; for(i=1;i<3;i++)/*转置*/ { for(j=0;j<i;j++) { temp = *(*(matrix+j)+i); *(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;...

裕安区13594748080: 用C语言,键盘输入3*3的整数矩阵,求对角线元素的和,使用指针变量实现. -
庾亭镇咳: #include <stdio.h>#include <stdlib.h> int main() { //define and init int *p; int n, result; n = 3; p = (int *)malloc( n * n * sizeof( int *)); int i,j; //input for ( i = 0; i < n; i++){ for (j = 0; j < n; j++) scanf("%d", (p + i * n + j)); printf("\n"); } //output result = 0; for (i ...

裕安区13594748080: c语言问题:用指针的方式实现,3*3矩阵转置.初学指针.不知错在哪里求高手帮忙. -
庾亭镇咳: 指针在使用之前一定要有具体的地址内容才能操作!!!你这里使用了两个较为复杂的指针应用: 1. int **p; 二维指针 2. int *t[3]; 指针数组 不知道你对这两种数据是否清楚其意义,乱用指针会使程序甚至机器出问题的!(好好看书去理解吧)...

裕安区13594748080: C语言编程题,用指针,不用函数讲一个3*3矩阵转置 -
庾亭镇咳: #include <stdio.h> main() { int a[3][3],i,j,t; int (*p)[3]=a; printf("input a array:\n"); for(i=0;i<3;i++) { printf("the %d row:",i+1); for(j=0;j<3;j++) scanf("%d",&p[i][j]); } printf("first:\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%4d",p[i][j]); printf("\n...

裕安区13594748080: c语言问题.用指针(3*3)矩阵转置 -
庾亭镇咳: #include<stdio.h> void main() { int p[3][3]; //改成这样,数据才有存放地方.原的只能存3个地址值. int t; int i,j; printf("Input 3*3 :\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&p[i][j]); for(i=0;i<3;i++) for(j=0;j<i;j++) //j<3改为j<i才行. { t=p[i][j]; ...

裕安区13594748080: 求助c语言高手:利用指针,将一个3*3的整型矩阵转置 -
庾亭镇咳: 楼上的没用到指针吧 不过话说回来,数组的名字本身就是一个指针,所以楼主的问题表述不明确 于是我再来一个动态数组,供参考吧 这个是动态数组,不同于楼上那个#include <stdio.h> main() { int **matrix; int temp; int i, j; for(i=0;i<3;i++) matrix[...

裕安区13594748080: C语言编程求一个3*3矩阵转置(即行列互换)并输出矩阵中最大值及位置.(要求用二维数组double num[3][3]存储矩阵,用行指针变量dopuble (*p)[3]访问二维数组 -
庾亭镇咳: 你好,很高兴为你解答问题. #include <stdio.h> void main() { double a[3][3]={1,2,3,4,5,6,7,8,9}; //为方便直接赋值了 int m, n; //m,n分别记录最大值的行列 double t=a[0][0]; //t记录最大值 double (*p)[3] = a; //下面for实现行列交换 for(int i=0;i<3;i++) ...

裕安区13594748080: C语言的矩阵转置 -
庾亭镇咳: #include "StdAfx.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#define length 3//指定长度/*装置矩阵*/ void transposition(int Array[length][length]) { int ArrayTemp[length][length]; for (int i = 0;i < length;i++) { for (int j = 0;j < length;j++) { ...

裕安区13594748080: C语言,用指针做3*3数组的转置 -
庾亭镇咳: #include <stdio.h>void change(int *str[3][3]);//先申明 int main() { //指针数组,这样才能指针操作, //str里是9个指针,每个指针指向一个数据int *str[3][3]={{1,2,3},{4,5,6},{7,8,9}};change (str);return 0; }void change(int *str[3][3]) {int *p=str,i,j,...

裕安区13594748080: c语言 矩阵转置 指针 -
庾亭镇咳: 有两个错误 1. trans(p); 应该是trans(a); 2. void trans(int (*pointer)[3]) 把矩阵翻了两遍,所以又翻回去了,只翻一半就行了 for(i=0;i<3;i++) for(j=0;j<i;j++)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网