我正在为大学的编程课程编写一个程序。我得到了大部分工作正常,但我试图使用的结束循环不能正常工作。我不太清楚最新情况。我想学习更多,并弄清楚它为什么这样做。我的问题是在最后,我显示百分比之间的年增长。我想要(年+ 1)年/(年+ 1)。现在我将变量作为整数,我想将分母投射到浮点数。当我运行程序时,我的答案一直是100.00%,-1。#J%和98.24%。下面是我到目前为止的副本。很乐意帮助。
#include <stdio.h>
#include <stdlib.h>
#define years 4
#define months 12
int main(void)
{
float percentage [4];
float answer = 0.0;
int i = 0, j = 0, n = 0, sum = 0;
int time[] = {2012,2013,2014,2015};
int value[years];
const char* name[]= {" JAN "," FEB ", " MAR ", " APR ", " MAY ", " JUN ", " JUL ","AUG "," SEP "," OCT "," NOV "," DEC "};
int range[years][months] = {
{ 5626, 5629, 5626, 5606, 5622, 5633, 5647, 5656, 5673, 5682, 5728, 5728},
{ 5741, 5793, 5814, 5811, 5831, 5854, 5857, 5874, 5900, 5923, 5954, 5939},
{ 5999, 6020, 6062, 6103, 6115, 6128, 6169, 6194, 6219, 6233, 6256, 6301},
{ 6351, 6378, 6371, 6409, 6426, 6426, 6437, 6441, 6451, 6484, 6549, 6597}
};
printf("YEAR");
for(n=0; n < months; n++)
printf("%s", name[n]);
for (i = 0; i < years; i++) {
printf(" \n%i ", time[i]);
for (j = 0; j < months; j++)
printf("%2i ", range[i][j]);
printf("\n");
}
for (i = 0; i < years; i++) {
for(j = 0, sum = 0; j < months; j++)
sum += range[i][j];
printf("\n This is the sum of months for %i: %i", time[i], sum);
}
printf("\n\n");
for (i = 0; i < years-1; i++)
{
value[i] = 0;
for(j = 0, sum = 0; j < months; j++)
{
value[i] += range[i][j];
percentage[i]= (value[i+1]-value[i])/(float)value[i+1];
}
printf("\n The increase from %i to %i was: %.2f%% ", time[i], time[i+1], percentage[i]*100);
}
return 0;
}
答案 0 :(得分:0)
在最后一个for循环中,你不能说percentage[i]= (value[i+1] -value[i])/(float)value[i+1];
,因为你还没有初始化value[i+1]
。你唯一能做的就是使用像((float)value[i] - (float)value[i-1])/(float)value[i];
这样的反向索引
在第一次计算的情况下,它不会起作用,但在第一次计算中,你有0%的增长,因为它是第一年,你没有什么可比较的。
实际上,试试吧。我认为这符合您的目标:
printf("\n\n");
for (i = 0; i < years; i++) {
value[i] = 0;
for(j = 0, sum = 0; j < months; j++) value[i] += range[i][j];
}
for(i = 0; i < years-1; i++) {
percentage[i]= (value[i+1]-value[i])/(float)value[i+1];
printf("\n The increase from %i to %i was: %.2f%% ", time[i], time[i+1], percentage[i]*100);
}