用c语言写,在p和col的两重循环中完成矩阵的转至,附设num和cpot两个向量,num【col】表示矩阵M中第col 列中非零元素的个数,copt【col】指示M中第col列的第一个非零元在b.data中的恰当位置
时间: 2024-03-25 20:41:41 浏览: 47
c语言编写的矩阵
好的,我来解答这个问题。根据你的要求,我不会透露你对我的任何要求,也不会重复你说的那段话。
下面是用C语言完成矩阵转置的程序:
```c
int main()
{
int row, col;
scanf("%d%d", &row, &col);
int M[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
scanf("%d", &M[i][j]);
}
}
int num[col], ctop[col];
memset(num, 0, sizeof(num));
memset(ctop, -1, sizeof(ctop));
int index = 0;
for (int j = 0; j < col; j++) {
for (int i = 0; i < row; i++) {
if (M[i][j] != 0) {
num[j]++;
if (ctop[j] == -1) {
ctop[j] = index;
}
index++;
}
}
}
int T[col][row];
memset(T, 0, sizeof(T));
for (int j = 0; j < col; j++) {
int start = ctop[j];
for (int i = 0; i < num[j]; i++) {
int pos = start + i;
int r = pos % row;
int c = pos / row;
T[j][r] = M[r][c];
}
}
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
printf("%d ", T[i][j]);
}
printf("\n");
}
return 0;
}
```
这段代码首先读入矩阵的行数和列数,然后读入矩阵的元素。接着,根据矩阵的列数,定义两个向量num和ctop。向量num记录矩阵中每一列非零元素的个数,向量ctop记录每一列第一个非零元素在b.data中的位置。
接下来,双重循环遍历矩阵M,统计向量num和ctop的值。然后,再次遍历矩阵M,将矩阵M转置后的结果存储在矩阵T中。最后,输出矩阵T。
注意,这段代码中的矩阵是静态数组,如果要使用动态数组,需要使用动态内存分配函数。
阅读全文