c - 如何将两个向量相加并打印结果,这也是一个向量
问题描述
我在这段代码中有 3 个函数。第一个vector_add
,取两个向量x和y的总和,并将它们放入另一个向量z中,这三个向量都由N=3元素组成(在顶部定义)。第二个vector_print
,用于printf
遍历 z 中的元素以将第i个元素打印为数组。最后,main 函数定义了我的输入。我的目标是让输出读取:z is 3 5 7
,即x和y的总和。但目前,它输出以下内容:
3.0000005.0000007.000000
z is 10
显然,这不是我想要的。但至少(不知何故),3、5 和 7 都在那里!
专家们,请花点时间查看我的代码并提供建议以接收我想要的输出。我想保持这个代码在相同的通用格式,即 3 个单独的函数。
#include <stdio.h>
// vector length (fixed)
#define N (3)
// ---------------------------------------------------------------------
// vector_add
//
// returns the linear sum of the two vectors and puts them in another
// x: first vector
// y: second vector
// z: solution vector
double
vector_add(double x[N], double y[N], double z[N])
{
for (int i = 0; i < N; i++) {
z[i] += x[i] + y[i];
}
return *z;
}
// ---------------------------------------------------------------------
// vector_print
//
// prints the elements of an N array
int
vector_print(double z[N])
{
for (int i = 0; i < N; i++) {
printf("%f", z[i]);
}
printf("\n");
}
// ---------------------------------------------------------------------
// main
//
// test the vector_add() function
int
main(int argc, char **argv)
{
double x[N] = { 1., 2., 3. };
double y[N] = { 2., 3., 4. };
double z[N] = {0,0,0};
vector_add(x, y, z);
printf("z is %d", vector_print(z)); {
printf("\n");
}
return 0;
}
解决方案
在这一行:
printf("z is %d", vector_print(z));
首先要评估的参数printf()
,这导致执行vector_print(z)
,输出3.0000005.0000007.000000
。
然后,从vector_print()
有效返回 10
printf("z is %d", 10);
被执行,产生你观察到的输出。顺便说一句,这10
是一些随机值,因为您的函数不会返回与其承诺相反的值。
如果你想让你的函数vector_print()
返回一个字符串,你有几个选择。最简单的可能是返回一个指向这样的静态字符数组的指针(未经测试的代码):
char *
vector_print(double z[N])
{
static char buf[100];
char *ptr = buf;
for (int i = 0; i < N; i++) {
ptr += snprintf(ptr, sizeof(buf)-(ptr-buf), "%f ", z[i]);
}
return ptr;
}
然后用
printf("z is %s\n", vector_print(z));
然后它应该按您的预期工作。
推荐阅读
- python - Dataset.from_generator:TypeError:`generator` 必须是可调用的
- javascript - 不同的条件,相同的结果。为什么?
- node.js - 在heroku上部署后,Web应用程序显示空白页面?
- typescript - TS2531:对象可能是“空”,即使我检查它不是
- swift - 在 Swift 属性包装器中公开字典
- javascript - 如何使用node命令一个接一个地运行多个.js文件?
- c# - 如何在 Unity 2020 中使用 Hybrid Renderer V2 从 Burstable ForEach 作业中动态显示或隐藏网格?
- google-chrome - 什么可能导致对话框弹出 chrome 上的会话丢失?
- python - 不能在 Mac 上使用 .so(ELF 魔法不好)
- c++ - 立即返回新对象有什么区别?