用c语言实现1、产生一个以三元组顺序表存储的稀疏矩阵,并对其进行转置。具体要求如下: ① 矩阵的行数不低于8,列数不低于12。 ② 非零元的个数、每个非零元的位置及值可以随机产生,也可以键盘给出。 ③ 打印转置前后的矩阵以验证正确性(采用上课讲到的两种方法进行转置)。
时间: 2024-05-01 17:18:14 浏览: 198
CSDN开发的ChitGPT是一个类ChatGPT的AI,与OpenAI公司开发的ChatGPT没有关系。 以下是用c语言实现产生一个以三元组顺序表存储的稀疏矩阵,并对其进行转置的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define ROW 8
#define COL 12
#define MAX 100
typedef struct {
int row; /*非零元素所在的行*/
int col; /*非零元素所在的列*/
int val; /*非零元素的值*/
} Tri;
typedef struct {
Tri data[MAX + 1]; /*存储非零元素的三元组*/
int row, col, num; /*稀疏矩阵的行数、列数、非零元素个数*/
} TSMatrix;
int transMatrix1(TSMatrix M, TSMatrix *T){
int c, p, q, k;
T->row = M.col;
T->col = M.row;
T->num = M.num;
if(T->num > 0){
q = 1;
for(c = 1; c <= M.col; c++){
for(p = 1; p <= M.num; p++){
if(M.data[p].col == c){
T->data[q].row = M.data[p].col;
T->data[q].col = M.data[p].row;
T->data[q].val = M.data[p].val;
q++;
}
}
}
}
return 0;
}
int transMatrix2(TSMatrix M, TSMatrix *T){
int c, p, k = 1, colStart = 1;
T->row = M.col;
T->col = M.row;
T->num = M.num;
for(c = 1; c <= M.col; c++){
for(p = 1; p <= M.num; p++){
if(M.data[p].col == c){
T->data[k].row = M.data[p].col;
T->data[k].col = colStart;
T->data[k].val = M.data[p].val;
k++;
}
}
colStart++;
}
return 0;
}
int main(){
TSMatrix M, T1, T2;
int i, r, c;
M.row = ROW;
M.col = COL;
M.num = 0;
for(i = 1; i <= MAX; i++){
r = rand() % ROW + 1; /*生成[1, ROW]之间的随机数*/
c = rand() % COL + 1; /*生成[1, COL]之间的随机数*/
if(rand() % 2 == 1){
Tri temp = {r, c, rand() % 100 + 1}; /*在[1, 100]之间生成随机数*/
M.data[++M.num] = temp;
}
}
/*打印M矩阵*/
printf("Origin Matrix M:\n");
for(r = 1; r <= M.row; r++){
for(c = 1; c <= M.col; c++){
int val = 0;
for(i = 1; i <= M.num; i++){
if(M.data[i].row == r && M.data[i].col == c){
val = M.data[i].val;
break;
}
}
printf("%d ", val);
}
printf("\n");
}
/*转置矩阵1*/
transMatrix1(M, &T1);
printf("Transpose Matrix T1:\n");
for(r = 1; r <= T1.row; r++){
for(c = 1; c <= T1.col; c++){
int val = 0;
for(i = 1; i <= T1.num; i++){
if(T1.data[i].row == r && T1.data[i].col == c){
val = T1.data[i].val;
break;
}
}
printf("%d ", val);
}
printf("\n");
}
/*转置矩阵2*/
transMatrix2(M, &T2);
printf("Transpose Matrix T2:\n");
for(r = 1; r <= T2.row; r++){
for(c = 1; c <= T2.col; c++){
int val = 0;
for(i = 1; i <= T2.num; i++){
if(T2.data[i].row == r && T2.data[i].col == c){
val = T2.data[i].val;
break;
}
}
printf("%d ", val);
}
printf("\n");
}
return 0;
}
```
阅读全文