-Thanks
#include <stdio.h>
int gvalue;
struct Node {
int row;
int column;
int value;
Node *next;
};
void AddNode(Node *&listpointer,int r,int c,int v);
void getValue(Node *listpointer, int grow, int gcol);
void search(Node *listpointer, int srow, int scol);
void display(Node *listpointer,int drow,int dcol,int dvalue);
Node *A,*B,*result;
int main(){
A = NULL;
B = NULL;
result = NULL;
int row1p1,row1p2,row2p1,row2p2; //row 1 position 1 etc
//matrix A values!
printf("Enter the first row of values for matrix A: ");
scanf("%d %d",&row1p1,&row1p2);
printf("\nEnter the second row of values for matrix A: ");
scanf("%d %d",&row2p1,&row2p2);
AddNode(A,0,0,row1p1); //matrix created...
AddNode(A,0,1,row1p2);
AddNode(A,1,0,row2p1);
AddNode(A,1,1,row2p2);
//matrix B values!
printf("\n\nEnter the first row of values for matrix B: ");
scanf("%d %d",&row1p1,&row1p2);
printf("\nEnter the second row of values for matrix B: ");
scanf("%d %d",&row2p1,&row2p2);
AddNode(B,0,0,row1p1); //matrix created...
AddNode(B,0,1,row1p2);
AddNode(B,1,0,row2p1);
AddNode(B,1,1,row2p2);
//next part...
int a_row1p1,a_row1p2,a_row2p1,a_row2p2;
int b_row1p1,b_row1p2,b_row2p1,b_row2p2;
int sum;
//-------------------------------------------------------------------------------|
getValue(A,0,0); //RESULT NODE for position 0,0
a_row1p1=gvalue;
getValue(B,0,0);
b_row1p1=gvalue;
sum=a_row1p1+b_row1p1;
AddNode(result,0,0,sum);
getValue(A,0,1); //RESULT NODE for position 0,1
a_row1p2=gvalue;
getValue(B,0,1);
b_row1p2=gvalue;
sum=a_row1p2+b_row1p2;
AddNode(result,0,1,sum);
getValue(A,1,0); //RESULT NODE for position 1,0
a_row2p1=gvalue;
getValue(B,1,0);
b_row2p1=gvalue;
sum=a_row2p1+b_row2p1;
AddNode(result,1,0,sum);
getValue(A,1,1); //RESULT NODE for position 1,1
a_row2p2=gvalue;
getValue(B,1,1);
b_row2p2=gvalue;
sum=a_row2p2+b_row2p2;
AddNode(result,1,1,sum);
printf("success\n");
//-------------------------------------------------------------------------------|
search(A,0,0);
printf("success\n"); //issue????
search(A,0,1);
search(A,1,0);
search(A,1,1);
search(B,0,0);
search(B,0,1);
search(B,1,0);
search(B,1,1);
search(result,0,0);
search(result,0,1);
search(result,1,0);
search(result,1,1);
return 0;
}
void AddNode(Node *&listpointer,int r,int c,int v){
Node *temp;
temp = new Node;
temp->row = r;
temp->column = c;
temp->value = v;
temp->next = listpointer;
listpointer = temp;
}
void getValue(Node *listpointer, int grow, int gcol){
Node *current;
current = listpointer;
while (current != NULL){
if (current == NULL){break;}
if ( (current->row == grow ) && (current->column == gcol) ){
gvalue = current->value;
break;
}
current = current->next;
}
}
void search(Node *listpointer, int srow, int scol){
Node *current;
current = listpointer;
while (current != NULL){
if (current == NULL){break;
}
if ( (current->row == srow) && (current->column == scol) ){
display(current,srow,scol,current->value); //call to display
}
}
}
void display(Node *listpointer,int drow,int dcol,int dvalue){
if (listpointer == A){
printf("\n\nMatrix A\n");
}
if (listpointer == B){
printf("Matrix B\n");
}
if (listpointer == result){
printf("Matrix Result\n");
}
//---------------------------------------------------------|
if ( (drow == 0) && (dcol == 0) ){
printf("%d ",dvalue);
}
if ( (drow == 0) && (dcol == 1) ){
printf("%d\n",dvalue);
}
if ( (drow == 1) && (dcol == 0) ){
printf("%d ",dvalue);
}
if ( (drow == 1) && (dcol == 0) ){
printf("%d\n\n",dvalue);
}
}
答案 0 :(得分:2)
我假设这是家庭作业。如果当前电流不符合您检查的两个条件中的任何一个,循环将如何结束。您需要在某个时刻将当前设置为列表的下一个节点。
while (current != NULL){
if (current == NULL){break;
}
if ( (current->row == srow) && (current->column == scol) ){
display(current,srow,scol,current->value); //call to display
}
}
答案 1 :(得分:0)
您永远不会更新current
。
如果输入搜索时当前不为NULL,则会在while循环中结束。
void search(Node *listpointer, int srow, int scol){
Node *current;
current = listpointer;
while (current != NULL){
if (current == NULL){break;
}
if ( (current->row == srow) && (current->column == scol) ){
display(current,srow,scol,current->value); //call to display
}
}
}
答案 2 :(得分:0)
您的搜索应该是这样的(不是最好的方式...我只是通过对现有代码进行少量更改来提供一种方法):
void search(Node *listpointer, int srow, int scol){
Node *current;
current = listpointer;
while (current != NULL){
if ( (current->row == srow) && (current->column == scol) ){
display(current,srow,scol,current->value); //call to display
}
current = current->next;
}
}
在显示方法中,您打印(1,0)值而不是(1,1)
if ( (drow == 1) && (dcol == 0) ){
printf("%d\n\n",dvalue);
}
应该是:
if ( (drow == 1) && (dcol == 1) ){
printf("%d\n\n",dvalue);
}
如果检查getValue函数,则存在冗余。
答案 3 :(得分:0)
鉴于此
该计划的目的是采取 2,2乘2矩阵并将它们添加到 创建一个名为result的矩阵。
我想知道为什么像下面这样的三个二维数组是不够的。我错过了什么?
#define N 2
int a[ N ][ N ];
int b[ N ][ N ];
int result[ N ][ N ];
for( i = 0; i < N; ++i )
for( j = 0; j < N; ++j )
result[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ];