我想制作一个可以计算带有点积的向量的程序,但是我的总和始终为0,我在此代码中做错了什么?如果这对您很重要,那么我是指针和函数的新手。我只在主函数中编写了所有代码,但它可以工作,但是我希望在另一个函数中进行计算,因为它更清晰,而不是在主函数中编写所有内容。我用-Wall
和-Werror
进行了编译,收到了0条警告。
如果您能在这里帮助我,那将是很好的:)
代码如下:
#include<stdio.h>
#include<stdlib.h>
double calculation(int o, double *a, double *b, int sum) {
int i;
for(i=0;i<o;++i) {
printf("Components of first vector\n");
printf("Component %d: ", i+1);
scanf("%lf", &a[i]);
}
for(i=0;i<o;++i) {
printf("Components of second vector\n");
printf("Component %d: ", i+1);
scanf("%lf", &b[i]);
}
for(i=0;i<o;++i) {
sum += a[i] * b[i];
}
return(0);
}
int main() {
int o;
int sum=0;
printf("How many dimensions should the vectors have?\n");
scanf("%d", &o);
double *a = malloc(o * sizeof(double));
double *b = malloc(o * sizeof(double));
if(a==NULL) {
printf("Memoryallocation was not successfull!!!");
return(1);
}
if(b==NULL) {
printf("Memoryallocation was not successfull!!!");
return(1);
}
calculation(o,a,b,sum);
printf("The dot product is: %d\n", sum);
free(a);
free(b);
a=NULL;
b=NULL;
return(0);
}
答案 0 :(得分:3)
在C中,变量按值传递。这意味着,当您更改width
中<div class="parent">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
的值时,您仅更改了本地副本。
只需要一个值的惯用方式是返回它:
.parent {
width: 100%;
display: flex;
flex-wrap: wrap;
}
.item {
flex-grow: 1;
min-width: calc(100%/8);
}
和主要内容:
sum
或者,如果您需要返回多个值,则可以将指针传递给输出变量
答案 1 :(得分:1)
在double calculation(int o, double *a, double *b, int sum)
中,最后一个参数由值 1 传递。也就是说,当您调用calculation(..., sum);
时,变量sum
被复制,然后传递给函数。
在此函数中,您正在修改sum
,但这只会修改传递的原始变量的副本。要解决此问题,请传递一个指针或仅从函数中返回总和。
答案 2 :(得分:0)
此功能
double calculation(int o, double *a, double *b, int sum) {
应该更改
double calculation(int o, double *a, double *b, double & sum) {
答案 3 :(得分:0)
您的代码存在的问题是sum
是calculation
函数中的局部变量。因此,当您返回main时,变量将被破坏,并且sum in main
仍为0。
此外,如果您获得floating point values
的{{1}},则也必须使用 double作为总和。
一个可能的解决方案可能是这样的:
dimensions
或者您可以通过以下方式将#include<stdio.h>
#include<stdlib.h>
double calculation(int o, double *a, double *b) {
int i;
double sum =0.0;
for(i=0;i<o;++i) {
printf("Components of first vector\n");
printf("Component %d: ", i+1);
scanf("%lf", &a[i]);
}
for(i=0;i<o;++i) {
printf("Components of second vector\n");
printf("Component %d: ", i+1);
scanf("%lf", &b[i]);
}
for(i=0;i<o;++i) {
sum += a[i] * b[i];
}
return sum;
}
int main() {
int o;
double sum =0;
printf("How many dimensions should the vectors have?\n");
scanf("%d", &o);
double *a = malloc(o * sizeof(double));
double *b = malloc(o * sizeof(double));
if(a==NULL) {
printf("Memoryallocation was not successfull!!!");
return(1);
}
if(b==NULL) {
printf("Memoryallocation was not successfull!!!");
return(1);
}
sum = calculation(o,a,b);
printf("The dot product is: %lf\n", sum);
free(a);
free(b);
a=NULL;
b=NULL;
return(0);
}
的地址传递给计算函数:
sum