C 产生错误输出
我正在为明天的课程编译这段代码,你知道为什么这里会有这样的代码吗:C 产生错误输出,c,data-structures,C,Data Structures,我正在为明天的课程编译这段代码,你知道为什么这里会有这样的代码吗: #include <stdio.h> #include <stdlib.h> typedef struct { int row; int col; int value; } term; void smTranspose(term a[], term b[]) { int m, n, v, i, j, p; m = a[0].row; n = a[0].c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row;
int col;
int value;
} term;
void smTranspose(term a[], term b[]) {
int m, n, v, i, j, p;
m = a[0].row;
n = a[0].col;
v = a[0].value;
b[0].row = n;
b[0].col = m;
b[0].value = v;
if (v > 0) {
p = 1;
for (i = 0; i < n; i++)
for (j = 1; j <= v; j++)
if (a[j].col == i) {
b[p].row = a[j].col;
b[p].col = b[j].row;
b[p].value = a[j].value;
printf("<%d %d %d>\n", b[p].row, b[p].col, b[p].value);
p++;
}
}
}
int main() {
term a[3] = { { 1,1,8 },{ 2,1,9 },{ 1,3,17 } };
term b[3];
smTranspose(a, b);
getchar();
}
#包括
#包括
类型定义结构{
int行;
int col;
int值;
}术语;
无效转置(术语a[],术语b[]{
int m,n,v,i,j,p;
m=a[0]。行;
n=a[0].列;
v=a[0]。数值;
b[0]。行=n;
b[0].col=m;
b[0]。值=v;
如果(v>0){
p=1;
对于(i=0;i 对于(j=1;j这里有一点建议,矩阵可以直接用平面数组表示,这样可以大大简化代码,即:
#include <stdio.h>
void transpose(int *a, int *b) {
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
b[y * 3 + x] = a[x * 3 + y];
}
}
}
void print_matrix(int *m) {
printf("\n");
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
printf("%d ", m[y * 3 + x]);
}
printf("\n");
}
}
int main() {
int a[] = {1, 1, 8, 2, 1, 9, 1, 3, 17};
int b[9];
transpose(a, b);
print_matrix(a);
printf("----------");
print_matrix(b);
}
#包括
无效转置(int*a,int*b){
对于(int y=0;y<3;y++){
对于(int x=0;x<3;x++){
b[y*3+x]=a[x*3+y];
}
}
}
无效打印矩阵(int*m){
printf(“\n”);
对于(int y=0;y<3;y++){
对于(int x=0;x<3;x++){
printf(“%d”,m[y*3+x]);
}
printf(“\n”);
}
}
int main(){
INTA[]={1,1,8,2,1,9,1,3,17};
int b[9];
转置(a,b);
打印矩阵(a);
printf(“--------------”;
打印矩阵(b);
}
固定大小为3x3,无需检查边界
至于你的作业,我会把整个调试交给你;)那么预期的输出是什么?您是否尝试过在调试器中逐行检查代码以查看发生了什么情况?作为新用户,您有责任在发布之前了解规则。阅读。然后阅读。请记住,您需要先完成作业,包括调试代码和描述代码调试尝试的结果。就目前的情况而言,您的问题是一个“为我调试此”请求,而这些请求在这里不太受欢迎。顺便说一下,当您执行b[p]。col=b[j]。行;
那么b[j]
我想可能未初始化。您的意思是使用a[j]。行
?也可以为(j=1;j添加一些有意义的变量名如何?例如,您可以使用inputerms
和resultTerms
,而不是a
和b
。1337 d00dz可能流行晦涩的单字符变量名,但真正的程序员使他们的代码易于理解。
#include <stdio.h>
void transpose(int *a, int *b) {
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
b[y * 3 + x] = a[x * 3 + y];
}
}
}
void print_matrix(int *m) {
printf("\n");
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
printf("%d ", m[y * 3 + x]);
}
printf("\n");
}
}
int main() {
int a[] = {1, 1, 8, 2, 1, 9, 1, 3, 17};
int b[9];
transpose(a, b);
print_matrix(a);
printf("----------");
print_matrix(b);
}