Impara ad utilizzare il debug o in sua assenza i printf
#include <stdio.h>
#include <stdlib.h>
void prodRC (short *a, short *b, short *c, short R, short C, short P);
void main()
{
short *a,*b,*c;
short x=1,y=1,i,j;
short R,C,RR,CC,P;
printf("Inserisci numero righe prima matrice: "); scanf("%d",&R);
printf("Inserisci numero colonne prima prima matrice: "); scanf("%d",&C);
RR=C;
P=C;
printf("Inserisci numero colonne seconda matrice: "); scanf("%d",&CC);
printf("\n\n");
a=malloc(R*C*sizeof(short));
b=malloc(RR*CC*sizeof(short));
c=malloc(R*CC*sizeof(short));
for(i=0;i<R;i++) //inserisco elementi nella prima matrice
{
for(j=0;j<C;j++)
{
*(a+(i*C)+j)=x;
x=x+1;
}
}
for(i=0;i<RR;i++) //inserisco elementi nella seconda matrice
{
for(j=0;j<CC;j++)
{
*(b+(i*CC)+j)=y;
y=y+1;
}
}
printf("Prima matrice: \n\n");
for(i=0;i<R;i++) //visualizzo la prima matrice
{
for(j=0;j<C;j++)
{
printf("\t%d ",*(a+(i*C)+j));
}
printf("\n\n");
}
printf("\n\nSeconda matrice: \n\n");
for(i=0;i<RR;i++) //visualizzo la seconda matrice
{
for(j=0;j<CC;j++)
{
printf("\t%d ",*(b+(i*CC)+j));
}
printf("\n\n");
}
prodRC (a,b,c,R,CC,P);
printf("\n\nMatrice prodotto: \n\n");
for(i=0;i<R;i++) //visualizzo la prima matrice
{
for(j=0;j<CC;j++)
{
printf("\t%d ",*(c+(i*CC)+j));
}
printf("\n\n");
}
printf("\n\n\n"); system("pause");
}
void prodRC (short *a, short *b, short *c, short R, short C, short P)
{
short i,j,k;
for(i=0;i<R;i++) //inserisco tutti 0 nella matrice prodotto
{
for(j=0;j<C;j++)
{
*(c+(i*C)+j)=0;
}
}
for(i=0;i<R;i++) //inserisco elementi nella prima matrice
{
for(j=0;j<C;j++)
{
for(k=0;k<P;k++)
{
printf("%d,%d,%d\t%d * %d = %d\n",i,j,k, *(a+(i*P)+k), *(b+(k*C)+j), *(a+(i*P)+k)*(*(b+(k*C)+j)));
*(c+(i*C)+j)=*(c+(i*C)+j)+(*(a+(i*P)+k))*(*(b+(k*C)+j));
}
printf("c[%d][%d] = somma dei 3 numeri sopra\n\n", i, j);
}
}
}
solo così puoi trovare gli errori. Ma utilizzare le matrici in forma canonica a
[j] ecc non era meglio?