我正在编写一项作业,要求我执行以下操作:
1。用户输入:十进制数字列表。 (各项代表usd(美元)的数值,第一项是美元兑换比例,
(例如,1usd = 3.58another_currency。)
2.1 例如: 原:[3.58 12 11.50 3.20 4.10] -> 转换后:[(42.96), (41.17), ....] (接下来的每一项乘以 3.58)
看来我已经正确完成了第一步和第二步。但在计算其他货币的总和时,我遇到了问题。只有美元的总和恰好是正确的,但其他货币的总和就有问题。它不仅不正确,而且每次运行时总和都会改变。 绿色的是正确的,红色的是不正确的。
我在两个不同的数组上激活了相同的函数,但它只正确计算了其中一个总和。
我的.H 文件(doll.c):
#define SIZE 10
void dollar_to_shekel(float[], float[]);
void print_array(float[], float[]);
float sum_array(int, float[]);
我的.C 文件(doll.c):
#include <stdio.h>
#include "doll.h"
void dollar_to_shekel(float usd[], float ils[])
{
int i;
for(i=1; i<SIZE; i++)
{
/*the first element in the received list, in index 0, is the dollar ratio*/
ils[i-1] = usd[i] * usd[0];
}
}
void print_array(float usd[], float ils[])
{
int i;
for(i=1; i<SIZE; i++)
{
printf("%.2f \t \t \t \t %.2f\n", usd[i], ils[i-1]);
}
}
float sum_array(int x, float arr[])
{
int i;
float sum = 0;
for(i=x; i<SIZE; i++)
{
sum = sum + arr[i];
}
return sum;
}
int main()
{
float usd[SIZE];
float ils[SIZE];
int i;
printf("Insert a list of numbers:");
for(i=0; i<SIZE; i++)
{
scanf("%f", &usd[i]);
}
dollar_to_shekel(usd, ils);
printf("$ \t \t \t \t IS\n");
print_array(usd,ils);
printf("%.2f \t \t \t \t %.2f\n", sum_array(1,usd), sum_array(0,ils));
return 0;
}
我真的不知道程序在计算一列总和时失败的位置和原因,但在另一列上却完成了工作。
就像在上一次迭代中dollar_to_shekel的循环中一样,您分配了ils[SIZE-1-1],这是正确的,因为您从0开始并且要计算SIZE-1值,所以您没有分配ils[SIZE-1] ,但它包含在 sum_array 的总和中。 ils[SIZE-1] 是一个“随机”值,因此总和的结果也是随机的。 解决方案是求和直到 SIZE-x:
float sum_array(int x, float arr[])
{
int i;
float sum = 0;
for(i=x; i<SIZE-x; i++)
{
sum = sum + arr[i];
}
return sum;
}