Member 13543698 Ответов: 1

Почему, когда я компилирую и запускаю этот исходный код C, я ничего не получаю в приложении? Может ли кто-нибудь помочь мне найти ошибки? Срочно! ! !


#include<stdio.h>

main(){
	
	float A[10][10],B[10][10],sum[10][10],sub[10][10],mul[10][10];
	int r,c,size,n,count,z;
	char a[5],b[5],p[20];
	FILE *in,*out;
	
	in=fopen("input.txt","r");
	out=fopen("output.dat","w");
	
	/*header
	/*Name:,class and others*/
fprintf(out,"Name: \nNo Matric: \nClass Section: \tSection 06\nLecture Name: \nProject Title: Matrix Operation Using C\n\n\n");
	fscanf(in,"%d", &n);
	fscanf(in," %s", p);/*just remove the word*/
	for(count=1;count<=n;++count){
	
		fscanf(in," %s", p);
		fscanf(in,"%d", &size);
		/*Scan the matrix*/
		fscanf(in," %s", a);
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				fscanf(in,"%f", &A[r][c]);
			}
		}
		
		fscanf(in," %s", b);
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				fscanf(in,"%f", &B[r][c]);
			}
		}
		/*Calculation*/
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				sum[r][c]=A[r][c]+B[r][c];
				sub[r][c]=A[r][c]-B[r][c];
			}
		}		
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				mul[r][c]=0;
				for(z=1;z<=size;++z){
				mul[r][c]+=A[r][z]*B[z][c];
				}
			}
		}
		
		

/*Printing data*/
		/*Question*/
		printf("%s\n", p);
		fprintf(out,"%s\n", p);
		printf("%s\n", a);
		fprintf(out,"%s\n", a);
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				printf("%5.1f", A[r][c]);
				fprintf(out,"%5.1f", A[r][c]);
			}
			printf("\n");
			fprintf(out,"\n");
		}
		
		printf("%s\n", b);
		fprintf(out,"%s\n", b);
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				printf("%5.1f", B[r][c]);
				fprintf(out,"%5.1f", B[r][c]);
			}
			printf("\n");
			fprintf(out,"\n");
		}
		printf("\n");
		fprintf(out,"\n");
		/*Addition*/
		printf("Summation:\n");
		fprintf(out,"Summation:\n");
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				printf("%5.1f", sum[r][c]);
				fprintf(out,"%5.1f", sum[r][c]);
			}
			printf("\n");
			fprintf(out,"\n");
		}
		printf("\n");
		fprintf(out,"\n");
		/*Substraction*/
		printf("Substraction:\n");
		fprintf(out,"Substraction:\n");
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				printf("%5.1f", sub[r][c]);
				fprintf(out,"%5.1f", sub[r][c]);
			}
			printf("\n");
			fprintf(out,"\n");
		}
		printf("\n");
		fprintf(out,"\n");
		
/*Multiplication*/
		printf("Multiplication:\n");
		fprintf(out,"Multiplication:\n");
		for(r=1;r<=size;++r){
			for(c=1;c<=size;++c){
				printf("%7.1f", mul[r][c]);
				fprintf(out,"%7.1f", mul[r][c]);
			}
			printf("\n");
			fprintf(out,"\n");
		}
		printf("\n\n");
		fprintf(out,"\n\n");
}
	
	fclose(in);
	fclose(out);
}


Что я уже пробовал:

Я попытался скомпилировать и запустить эту программу, и она работает, но она ничего не показывает в приложении и не печатает результат, который я хочу.

CPallini

Не могли бы вы опубликовать входной образец?

Member 13543698

Problem1
Ля=
2 3 4
7 8 9
5 6 8

B=
3 3 3
3 4 6
8 4 7

Problem2
Ля=
12.1 3.4 4.0 1.1
33.0 85.0 19.0 0.4
5.0 26.0 4.1 5.0
1.1 0.9 9.0 4.5

B=
2.2 3.0 0.1 4.0
8.2 4.4 9.0 12.0
5.0 9.0 8.0 33.0
8.0 19.0 16.0 3.5


Problem3
Ля=
0.3 0.1 0.4 1.1 1.8
1.4 1.7 2.2 2.8 4.9
1.5 0.3 0.8 1.8 2.5
4.5 6.2 1.1 0.4 1.8
4.1 2.7 1.3 1.4 2.1

B=
1.1 1.3 0.6 0.8 5.1
1.6 5.3 6.9 3.0 0.5
3.6 7.3 0.6 2.9 1.1
0.0 4.1 0.8 2.1 0.6
0.6 1.8 3.5 5.1 0.4

Member 13543698

Пожалуйста, помогите мне выяснить эти проблемы~ Мне действительно нужна ваша помощь, потому что это программный проект, который мне нужно было передать преподавателю

1 Ответов

Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поставить точку останова на строке:
fscanf(in," %s", p);/*just remove the word*/

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!

Да, я, вероятно, мог бы сказать вам, в чем "проблема" - но это не трудно сделать самому, и вы узнаете что-то действительно стоящее в то же время!


Member 13543698

Можете ли вы сказать мне прямо, в чем заключаются проблемы?Потому что я новичок в программировании и все еще изучаю его.Этот исходный код вводится путем ссылки на примечания по программированию на языке Си.В результате следует вывести сложение ,вычитание и умножение двух матриц.

OriginalGriff

Нет, потому что вы ничего не узнаете таким образом: ввод чего-то не означает, что вы понимаете, как это работает! (Или в данном случае-нет ...)

Используйте отладчик и выясните, что именно он делает.