C 矩阵乘法可以';不可编辑
我在编译这个时遇到了一些麻烦C 矩阵乘法可以';不可编辑,c,visual-studio-2010,compiler-warnings,C,Visual Studio 2010,Compiler Warnings,我在编译这个时遇到了一些麻烦 #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <time.h> int perkalianMatriks(double ** A, double ** B, double ** C, int n); int randomMatriks(double * m, int n); int main(int argc, char *a
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <time.h>
int perkalianMatriks(double ** A, double ** B, double ** C, int n);
int randomMatriks(double * m, int n);
int main(int argc, char *argv[]) {
int n_order = 0 , i, j;
double ** A, ** B, ** C;
time_t time1, time2;
double diff_sec;
randomMatriks(double * m, int n)
A = (double **) malloc(sizeof(double) * n_order);
B = (double **) malloc(sizeof(double) * n_order);
C = (double **) malloc(sizeof(double) * n_order);
for (i = 0; i < n_order; i++) {
A[i] = (double *) calloc(sizeof(double), n_order);
B[i] = (double *) calloc(sizeof(double), n_order);
C[i] = (double *) calloc(sizeof(double), n_order);
}
printf("\nMatrix Sizes : ");
scanf("%d", %n_order);
time(&time1);
perkalianMatriks(A, B, C, n_order);
time(&time2);
diff_sec = difftime (time2,time2);
printf ("Total time to execute %f seconds.\n", diff_sec);
return 0;
}
int randomMatriks(double * m, int n) {
int i;
for (i = 0; i < n_order; i++) {
m[i] = (double) (rand() % 10) + 1;
}
}
int perkalianMatriks(double ** a, double ** b, double ** c, int n) {
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
c[i][j]=0;
for (k = 0; k < n; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
return 0;
}
#包括
#包括
#包括
#包括
内部基准矩阵(双**A、双**B、双**C、内部n);
int随机矩阵(双*m,int n);
int main(int argc,char*argv[]){
int n_阶=0,i,j;
双**A、**B、**C;
时间1,时间2;
双差秒;
随机矩阵(双*m,整数n)
A=(双**)malloc(双)*n_顺序);
B=(双**)malloc(双)*n_顺序);
C=(双**)malloc(双)*n_顺序);
对于(i=0;i
编译时出错
有人能帮我解决这个问题吗?你少了一个分号。而且您不能将变量命名为
double
。我想这一行应该删除,因为它是上面声明的剪切粘贴。如果你需要调用它,你应该用真实的参数调用它。我看不出您为第一个参数定义了任何合适的参数,我猜从代码的后面开始,您打算对第二个参数使用n_order
randomMatriks(double * m, int n)
^^^^^^ ^^^
此scanf
错误,您可能需要&
:
scanf("%d", %n_order);
^^^
变量dif_sec
不存在。打字错误
dif_sec = difftime (time2,time2);
^^^^^^^
printf ("Total time to execute %f seconds.\n", dif_sec);
^^^^^^^
变量n\u顺序
不存在<代码>n可能相反
for (i = 0; i < n_order; i++) {
^^^^^^^
问题是您从未初始化
C
数组,它是指向指向double的指针的指针数组。在perkalianMatriks
中,它被推迟,此时,所有关于指针是什么的赌注都被取消了(在您的例子中是0xfdfd)
(我猜你可能不明白什么是
***
类型,以及它应该如何使用?这不是为*B等分配内存的正确方法。
请参见为双指针(*B)分配内存的示例,以及为其余指针分配内存的示例。
还要注意分号。执行两个矩阵的乘法非常简单
您可以在以下位置获得简单线索:scanf(“%d”,%n\u顺序);需要扫描(“%d”,n_顺序);是的,我改了。对不起,打字错误。。然后是错误?什么是[不完全]声明<代码>随机矩阵> <代码>在你的代码>主< /代码>函数的中间?您已经在
main
之前声明了randommariks
。你为什么决定在main
?@AndreyT内再次执行此操作?我的意思是,调用程序现在编译的函数randomMatriks(随机生成矩阵)。如果调试时遇到问题,那是另一个问题。因此,它必须是randommariks(*m,int n)代码>?是的,我改了。。对不起,我粗心了。现在,仍然是4个错误,对不起……)我留下问题。哦,你能帮我打电话给管理员删除这些问题吗?thanks@sinta当前位置问题还不错,你不应该在问题中修正它。把它装在你的机器上。当你有新问题时,问一个新问题。@sinta:好的,我为你回滚了这个问题。我的答案是基于你的代码的固定版本,现在已经回滚到原始的不可编译版本。:)哦,哈,没问题。我也同意这样一个事实,原来的问题不应该在这样的答案下改变,所以原来的版本应该是“实时”版本,这样的答案不会让未来的人看到这个页面时“嗯??”。
int main(int argc, char *argv[]) {
^^^^ ^^^^
int n_order = 0 , i, j;
^^^