編寫一個C函數sprod(n,x,y),返回2的標量乘積浮點類型的一維數組。該函數將數組的大小爲n(類型爲int的變量)和指向每個數組的第一個成員的指針x和y作爲輸入變量,並返回浮點結果。 main()代碼塊需要調用sprod來計算矩陣乘積a * b,其中類型float matrix a和float float vector b由b = [1 1 1]和a = [1 2 3 4 5 6 7 8 9](其中a是3x3矩陣)。我們可以在f(;;)循環中初始化b,在(;;)循環中使用double(或使用大量的賦值語句)來初始化b。矩陣乘積應通過使用函數sprod的調用來計算,以形成矢量b的每行a的標量乘積;指向這些行的指針由[1],a [2]和a [3]給出。最後,還應該使用一個for(;;)循環來彙總結果標量產品和printf()函數以將結果輸出到屏幕。編寫一個C函數sprod(n,x,y),返回float類型的2個一維數組的標量乘積
結果應該是矩陣a的所有元素的總和。矩陣a和矢量b的副本也應該被打印出來。我們將使用帶有free_matrix()和free_vector()的Numerical Recipes C函數matrix()和vector()來創建a和b作爲動態定義的數組。
我是初學者,當談到編程時,我發現我真的很喜歡它。這是我迄今爲止所做的,當它被編譯時(我知道有些東西被遺漏了),它就像瘋了似的。我嘗試使用gdb來調試它,但我無法讓它工作。任何幫助,將不勝感激。
# include <stdio.h>
# include "nrutil.h"
# include "nrutil.c"
void transp(float **a,int n);
float sprod(int n, float *x, float *y);
int main()
{
int i,j;
float var=0.0, sum=0.0, pro=0.0;
float*b, **a;
int n=3;
float index;
b=vector(0,n-1);
a=matrix(0,n-1,0,n-1);
printf("\nVector b\n");
for(j=0;j<n;j++)
{
b[j]=1;
printf("%.2f\n",b[j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++);
{
var=var+1;
a[i][j]=var;
}
}
printf("\n Matrix a\n");
for(i=0;i<n;i++);
{
for(j=0;j<n;j++);
{
printf("%.2lf",a[i][j]);
}
printf("\n");
}
printf("\nProduct of Matrix a and Vector b\n");
for(i=0;i<n;i++);
{
pro=sprod(n,a[i],b);
printf("%.2f\n",pro);
sum+=pro;
}
printf("\n Sum of Product array\n");
printf("%.2f\n\n", sum);
free_ivector(index,0,n-1);
free_matrix(a,0,n-1,0,n-1);
return 0;
}
float sprod(int n, float *x, float *y)
{
float scalar=0.0;
int j=0;
int sum=0;
for(j=0;j<n;j++);
{
scalar+=x[j]*y[j];
}
return scalar;
}
自從最初發布此代碼以來,我對代碼進行了改進。現在它幾乎工作我只是在第50行的free_ivector位代碼的問題。終端告訴我:'free_ivector'參數1的不兼容類型。我不確定這意味着什麼。代碼採用了David Duncan在下面第一個答案中提出的整體格式。
1.如果是你的原型? 2.你在代碼行11中有一個大括號,並且你沒有用任何東西填充'a 3,3'。 3.對於沒有任何爭論的lops?試着幫助我們理解你的代碼,使其更加完善! :) –
這個編譯? – paddy
@AlbertoBonsanto:不要使用作業標籤。 –