我在aula0602.c文件的strtoul函数中做错了一些事情,并且我无法打印这三个矩阵显然文件aula0601.h和aula0601.c是可以的,但是当我执行二进制文件时,在命令行中不会打印任何文件。
我在Linux上的bash上编写以下命令:
gcc-c-墙aula0601.c
gcc-c-墙aula0602.c
合同通用条款-o aula0602 aula0601.o aula0602.o
./aula0602 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 20 21 23 24 25 26 27
编辑:
我执行以下命令,但没有打印任何内容(我在commments空间中查看了指令)。
-->gcc-c-墙aula0601.c
-->gcc-c-墙aula0602.c
-->合同通用条款-o aula0602 aula0601.o aula0602.o
-->./aula0602 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 20 21 23 24 25 26 27
-->
/* aula0601.h */
#ifndef _AULA0601_
#define _AULA0601_ "@(#)aula0601.h $Revision$"
#define LINHAS_1 5
#define COLUNAS_1 3
#define LINHAS_2 3
#define COLUNAS_2 4
void
MultiplicarMatrizes (float [LINHAS_1][COLUNAS_1],
float [LINHAS_2][COLUNAS_2],
float [LINHAS_1][COLUNAS_2]);
#endif
/* aula0601.c */
#include "aula0601.h"
void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
float matriz2 [LINHAS_2][COLUNAS_2],
float matrizResultado [LINHAS_1][COLUNAS_2])
{
unsigned contador1, contador2, contador3;
for (contador1 = 0; contador1 < LINHAS_1; contador1++)
{
for (contador2 = 0; contador2 < COLUNAS_2; contador2++)
{
matrizResultado[contador1][contador2] = 0;
for (contador3 = 0; contador3 < COLUNAS_1; contador3++)
{
matrizResultado[contador1][contador2] =
matrizResultado[contador1][contador2] +
matriz1[contador1][contador3] * matriz2 [contador3][contador2];
}
}
}
}
/* aula0602.c */
#include <stdio.h>
#include <stdlib.h>
#include "aula0601.h"
#define NUMERO_DE_ARGUMENTOS LINHAS_1 * COLUNAS_1 + LINHAS_2 * COLUNAS_2 + 1
#define OK 0
#define NUMERO_DE_ARGUMENTOS_INVALIDO 1
#define ARGUMENTO_INVALIDO 2
#define EOS '\0'
void
MostrarMatriz1 (float [LINHAS_1][COLUNAS_1]);
void
MostrarMatriz2 (float [LINHAS_2][COLUNAS_2]);
void
MostrarMatrizResultado (float [LINHAS_1][COLUNAS_2]);
void
MostrarMatriz1 (float matriz1 [LINHAS_1][COLUNAS_1])
{
unsigned linhas1, colunas1;
printf("\n");
for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
{
for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
printf("%03f\t", matriz1 [linhas1][colunas1]);
printf("\n");
}
printf("\n");
}
void
MostrarMatriz2 (float matriz2 [LINHAS_2][COLUNAS_2])
{
unsigned linhas2, colunas2;
printf("\n");
for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
{
for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
printf("%03f\t", matriz2 [linhas2][colunas2]);
printf("\n");
}
printf("\n");
}
void
MostrarMatrizResultado (float matriz1 [LINHAS_1][COLUNAS_2])
{
unsigned linhas1, colunas2;
printf("\n");
for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
{
for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
printf("%03f\t", matriz1 [linhas1][colunas2]);
printf("\n");
}
printf("\n");
}
int
main (int argc, char *argv[])
{
unsigned char linhas1, colunas1, linhas2, colunas2;
float matriz1 [LINHAS_1][COLUNAS_1];
float matriz2 [LINHAS_2][COLUNAS_2];
float matrizResultado [LINHAS_1][COLUNAS_2];
char *validacao;
if (argc != NUMERO_DE_ARGUMENTOS)
{
printf("Número de argumentos invalido.\n");
printf("Uso: <a11> <a12> ... <a52> <a53> <b11> <b12> ... <b33> <b34>\n");
exit (NUMERO_DE_ARGUMENTOS_INVALIDO);
}
for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
{
for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
{
matriz1 [linhas1][colunas1] =
(float) strtoul (argv [(linhas1 * COLUNAS_1) + colunas1 + 1], &validacao, 10);
if (*validacao != EOS)
{
printf("Caractere invalido: \"%c\"\n", *validacao);
exit(ARGUMENTO_INVALIDO);
}
}
}
for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
{
for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
{
matriz2 [linhas2][colunas2] =
(float) strtoul (argv [(linhas2 * COLUNAS_2) + colunas2 + 1], &validacao, 10);
if (*validacao != EOS)
{
printf("Caractere invalido: \"%c\"\n", *validacao);
exit(ARGUMENTO_INVALIDO);
}
}
}
#ifdef _MY_DEBUG_
MostrarMatriz1 (matriz1);
MostrarMatriz2 (matriz2);
#endif
MultiplicarMatrizes (matriz1, matriz2, matrizResultado);
#ifdef _MY_DEBUG_
MostrarMatrizResultado (matrizResultado);
#endif
return OK;
}
最佳答案
用gcc -Wall -D _MY_DEBUG_ aula0601.c aula0602.c -o aula0602
编译这些文件来定义、编译和链接似乎是可行的。
考虑使用index
调用strtol
以简化索引argv
。
这也适用于一个打印功能MostrarMatriz
。
aula0601.h型
#define LINHAS_1 5
#define COLUNAS_1 3
#define LINHAS_2 3
#define COLUNAS_2 4
#define NUMERO_DE_ARGUMENTOS_INVALIDO 1
#define ARGUMENTO_INVALIDO 2
#define NUMERO_DE_ARGUMENTOS LINHAS_1 * COLUNAS_1 + LINHAS_2 * COLUNAS_2 + 1
#define EOS '\0'
void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
float matriz2 [LINHAS_2][COLUNAS_2],
float matrizResultado [LINHAS_1][COLUNAS_2]);
aula0601.c公司
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aula0601.h"
void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
float matriz2 [LINHAS_2][COLUNAS_2],
float matrizResultado [LINHAS_1][COLUNAS_2])
{
unsigned contador1, contador2, contador3;
for (contador1 = 0; contador1 < LINHAS_1; contador1++)
{
for (contador2 = 0; contador2 < COLUNAS_2; contador2++)
{
matrizResultado[contador1][contador2] = 0;
for (contador3 = 0; contador3 < COLUNAS_1; contador3++)
{
matrizResultado[contador1][contador2] =
matrizResultado[contador1][contador2] +
matriz1[contador1][contador3] * matriz2 [contador3][contador2];
}
}
}
}
aula0602.c公司
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aula0601.h"
void
MostrarMatriz (int linhas, int colunas, float matriz [linhas][colunas])
{
int linhas1;
int colunas1;
printf("\n");
for (linhas1 = 0; linhas1 < linhas; linhas1++)
{
for (colunas1 = 0; colunas1 < colunas; colunas1++)
printf("%12.2f", matriz [linhas1][colunas1]);
printf("\n");
}
printf("\n");
}
int main( int argc, char *argv[])
{
unsigned char linhas1, colunas1, linhas2, colunas2;
float matriz1 [LINHAS_1][COLUNAS_1];
float matriz2 [LINHAS_2][COLUNAS_2];
float matrizResultado [LINHAS_1][COLUNAS_2];
char *validacao;
int index = 1;
if (argc != NUMERO_DE_ARGUMENTOS)
{
printf("Número de argumentos invalido.\n");
printf("Uso: <a11> <a12> ... <a52> <a53> <b11> <b12> ... <b33> <b34>\n");
exit (NUMERO_DE_ARGUMENTOS_INVALIDO);
}
index = 1;
for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
{
for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
{
matriz1 [linhas1][colunas1]
= (float) strtoul (argv [index++], &validacao, 10);
if (*validacao != EOS)
{
printf("Caractere invalido: \"%c\"\n", *validacao);
exit(ARGUMENTO_INVALIDO);
}
}
}
index = ( LINHAS_1 * COLUNAS_1) + 1;
for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
{
for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
{
matriz2 [linhas2][colunas2]
= (float) strtoul (argv [index++], &validacao, 10);
if (*validacao != EOS)
{
printf("Caractere invalido: \"%c\"\n", *validacao);
exit(ARGUMENTO_INVALIDO);
}
}
}
#ifdef _MY_DEBUG_
MostrarMatriz ( LINHAS_1, COLUNAS_1, matriz1);
MostrarMatriz ( LINHAS_2, COLUNAS_2, matriz2);
#endif
MultiplicarMatrizes ( matriz1, matriz2, matrizResultado);
#ifdef _MY_DEBUG_
MostrarMatriz ( LINHAS_1, COLUNAS_2, matrizResultado);
#endif
exit ( 0);
}