c语言矩阵转置问题

c语言矩阵转置问题,第1张

其实只是小问题,你自己都编的很好了。就是保存屏幕不在按入Q和Enter键屏幕不会马上消失上面有问题:

你可以用两个getchar()函数来读取键盘输入,前一个数缓冲enter键,后一个等待键盘输入,然后屏幕消失!

代码已修改,如下:

#include <stdioh>

#include <stdlibh>

#define MAXSIZE 20 /矩阵中最大非零元的个数/

typedef struct triple

{

int i; /行标,本程序中从1开始的/

int j; /列标,本程序中从1开始的/

int e; /非零元/

}Triple; /三元组定义/

typedef struct tabletype

{

int mu; /矩阵的行数/

int nu; /列数/

int tu; /非零元个数/

Triple data[MAXSIZE+1]; /非零元的三元组表,/

}Tabletype; /三元组线性表/

void out_matrix(Tabletype ); /输出 矩阵/

/以下为转置程序,将a所指矩阵转置,将结果存入b所指的矩阵中/

int TransposeSMatrix(Tabletype ,Tabletype );

int main( void )

{

char ch;

while(1)

{

printf(" @@@@@@@@@@本程序的功能是实现稀疏矩阵的普通转置@@@@@@@@@@@@@@@@@@@\n");

printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");

/源矩阵a/

Tabletype a= {6,7,8,{ {1,2,12},{1,3,9},{3,1,-3},{3,6,14},{4,3,24},{5,2,18},{6,1,15},{6,4,-7} }};

Tabletype b; /声明矩阵b/

printf("The source Matrix:\n");

out_matrix(&a);

if(TransposeSMatrix(&a,&b)) /若a不为零矩阵则转置a,存入b中/

{ printf("After TransposeSMatrix: \n");

out_matrix(&b);

}

else

{

printf("The matrix is zeros:\n");

out_matrix(&a);

}

do{

printf("Input 'q' to quit and ENTER run again:");

if((ch = getchar()) == 'q' || ch == 'Q')

getchar(); //读取enter

getchar();//任意字符

exit(0);

}while(ch!='\n');

system("cls");

}

return 1;

}

void out_matrix(Tabletype a) / 打印矩阵/

{

int i,j,k = 0;

for(i = 1 ;i <= a->mu; i++)

{

for(j = 1; j<= a->nu; j++)

{ /判断是否为非零元/

if((a->data[k]i == i)&&(a->data[k]j == j))

{

printf("%4d",a->data[k]e);

k++;

}

else

printf("%4d",0);

}

printf("\n");

}

}

int TransposeSMatrix(Tabletype a,Tabletype b)

{

int p,q,col;

b->mu = a->nu; /原矩阵的行数为新矩阵的列数,愿列数为新行数,非零元个数不变/

b->nu = a->mu;

b->tu = a->tu;

if(b->tu) /若a不为零矩阵/

{

q = 0; /b->data下标/

for(col = 1; col < a->nu; col++)

for(p = 0;p < a->tu;p++) /p为a->data的下标/

if(col == a->data[p]j) /按b->data[q]中的列标对a->data[p]进行扫描/

{

b->data[q]i = a->data[p]j;

b->data[q]j = a->data[p]i;

b->data[q]e = a->data[p]e;

q++;

}

return 1;

}

else /a为零矩阵/

return 0;

}

不知道是不是你的要求。希望能帮助你!

#include<stdioh>

int main()

{

int n,t,a[100][100],i,j; scanf("%d",&n);

for(i=0;i<n;i++)

for(j=0;j<n;j++) scanf("%d",&a[i][j]);

printf("转换后:\n");

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

if(j==0) 

printf("%d",a[j][i]); else printf(" %d",a[j][i]);

}

printf("\n");

}}}

 

扩展资料:

C语言书写规则:

1、一个说明或一个语句占一行。

2、用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。

3、低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。

参考资料:

-c语言

#include&lt;iostream&gt;

#include&lt;iomanip&gt;

using namespace std;

int main()

{

void move(intpointer);//函数声明

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

intp;

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(intpointer)

{

int i,j,t;

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

{

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

{

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

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

(pointer+3j+i)=t;

}

}

}

扩展资料:

用函数

#include&lt;stdioh&gt;

int main()

{

void move(ints);

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

intp=&a[0][0];

printf("请输入一个33的数组:\n");

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("转置后的结果:\n");

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

{

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

}

return 0;

}

void move(ints)

{

int i,j,t;

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

{

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

{

t=(s+3i+j);

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

(s+3j+i)=t;

}

}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12158774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存