【发布时间】:2015-07-01 17:11:43
【问题描述】:
该程序读取两个文件并将它们存储在两个数组中。 array1 是数据,array2 是与之对应的类型。 ex array1: 183, 183, 182, 195.3, 187 array2: 1, 1, 1, 2, 2 它将array1中的重复数字设置为0,并将array2中的相应数字设置为零。例如:array1: 0, 0, 182, 195.3, 187 array2: 0, 0, 1, 2, 2 然后它应该忽略 for 循环中的零并计算所有相同类型的数字的总和。例如:(出于某种原因称为均值)mean[2] = 195.3 + 187 它似乎忽略了至少一个 if 语句 > .5 并在遇到零时转到 else 语句。有任何想法吗?
文件中的示例数据(不是完整的数据),一旦它看到 182.6000061 彼此相邻,它会将它们设置为零和 array2 中的相应数字,但它会忽略其中一个 if 语句并转到 else 语句.输出为 2822.799、881.400、1997.8 等。其中第一个值应该更接近 6000。
输入数据到array1:182.6000061 183 182.6000061 182 177.8000031 183.3999939 183 180.6000061 147.6000061 166.6000061 168 182 181.6000061 164.1999969 180.3999939 177.3999939 177.6000061 182.6000061 182.6000061 181.6000061 179.8000031 160 177.3999939 181.3999939 183.1999969 183.1999969 182.8000031 181.3999939 179.6000061 182.1999969 183.8000031 176.8000031
输入数据到array2:2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2912 2979 2979 2979 2979 2979 2979 2979 2979 2979
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
float array1[1000] = {0}, array2[1000] = {0}, mean[1000] = {0}, average[1000] = {0}, counter[1000] = {0}, range[1000] = {0}, upper[1000] = {0}, lower[1000] = {0};
int a, h, i, r, j = 0, pos, found = 0, extrinsic[1000] = {0};
int b=0;
int linect = 1;
char buf[128];
i = 0;
j = 0;
fp = fopen("data.txt", "r");
if(fp == NULL)
{
puts("Cannot open file for reading");
scanf("%d", &a);
exit(EXIT_FAILURE);
}
while( linect < 1000 )
{
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%f", &array1[i]);
//printf("Set %d - 1st: %f\n", linect, array1[i]);
linect++;
i++;
}
fclose(fp);
linect = 0; //reads lot data file and puts it in array2
i = 0;
fp = fopen("lot_numbers.txt", "r");
if(fp == NULL)
{
puts("Cannot open file for reading");
scanf("%d", &a);
exit(EXIT_FAILURE);
}
while( linect < 1000 )
{
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%f", &array2[i]);
// printf("Set %d - 1st: %f\n", linect, array2[i]);
linect++;
i++;
}
for (i = 0; i < 999; i++) //searches array sets repeated points to zero
{
if (array1[i] == array1[i+1])
{
array1[i] = 0;
array2[i] = 0;
}
}
for (i = 0; i < 99; i++) //searches array
{
if (array2[i] > .5 && array2[i] < 50000)
{
if (array2[i] == array2[i+1])
{
if (array1[i] > .5 && array1[i] < 500){ //ignores zeros and junk data
mean[j] = mean[j] + array1[i];
counter[j]= counter[j] + 1;
}
}
else {
average[j] = mean[j]/counter[j];
range[j] = average[j] * 0.1;
upper[j] = average[j] + range[j];
lower[j] = average[j] - range[j];
j++;
}
}
}
j = 0;
while (j <10){
printf("\n%f", mean[j]);
j++;
}
scanf("%d", &a);
return 0;
}
【问题讨论】:
-
用几个宏替换magic numbers。到时候你很可能会看到你的问题。
-
请发布示例输入、预期输出和实际输出。
-
更新了部分输入