#include <stdio.h>
#include <stdlib.h>
void show(int v[],int n)//將壓縮矩陣轉變為原矩陣輸出
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i>=j)//比較行和列下標
printf("%5d",v[i*(i+1)/2+j]);
else
printf("%5d",v[j*(j+1)/2+i]);
}
printf("\n");
}
}
void multiply(int va[],int vb[],int c[][n],int n)
{
int i,j,k,s,op1,op2;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
s=0;
for(k=0;k<n;k++)
{
if(i>=k)//比較行和列的下標,行不變,列改變 k相當于列下標
{
op1=va[i*(i+1)/2+k];
}
else
{
op1=va[k*(k+1)/2+i];
}
if(k>=j)//比較行和列的下標,列不變,行改變 k相當于行下標
{
op2=vb[k*(k+1)/2+j];
}
else
{
op2=vb[j*(j+1)/2+k];
}
s+=op1*op2;
}
c[i][j]=s;
}
}
for(i=0;i<n;i++)//列印二維陣列
{
for(j=0;j<n;j++)
{
printf("%5d",c[i][j]);
}
printf("\n");
}
return;
}
void Destroy(int **a,int n)//二維動態陣列銷毀
{
int i;
for(i=0;i<n;i++)
{
free(a[i]);
}
}
int main()
{
int n,k,i,j;
int *a,*b;
int **c=(int**)malloc(n*sizeof(int*));//動態分配二維陣列
for(i=0;i<n;i++)
{
c[i]=(int*)malloc(sizeof(int)*n);
}
printf("請輸入階數n:\n");
scanf("%d",&n);
k=n*(n+1)/2; //k作為一維陣列來存盤n階對稱矩陣一維陣列要求的元素個數
a=(int*)malloc(sizeof(int)*k);//動態分配一維陣列a
b=(int*)malloc(sizeof(int)*k);//動態分配一維陣列b
printf("生成矩陣A 請輸入%d個壓縮矩陣中的數:\n",n*(n+1)/2);
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);//輸入壓縮矩陣元素
}
printf("矩陣A為 :\n");
show(a,n);//將壓縮矩陣轉變為原矩陣輸出
printf("生成矩陣B 請輸入%d個壓縮矩陣中的數:\n",n*(n+1)/2);
for(i=0;i<k;i++)
{
scanf("%d",&b[i]);////輸入壓縮矩陣元素
}
printf("矩陣B為 :\n");
show(b,n);//將壓縮矩陣轉變為原矩陣輸出
printf("A*B=:\n");
multiply(a,b,c,n);//回傳二維陣列的地址
Destroy(c,n);//銷毀二維陣列
return 0;
}
為什么會報錯?


uj5u.com熱心網友回復:
void multiply(int va[], int vb[], int c[][n], int n) //這里的int c[][n]的n不是常量,不能這樣定義動態陣列,要用指標int **c(或者把n定義為宏)。這個動態陣列問題我怎么覺得lz不止一次問過了,怎么還是老犯同樣的錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/211532.html
標籤:C語言
