我正在完成一个程序,在这个程序中,我将一堆非负的双精度数读入数组,然后计算值的平均值和值。然后平均值加上展位dev表示得到B
我在下一部分遇到问题,我需要从数字数组中找到得分最低,这将给我一个B,然后是最高值做没有得到B 的数组。我对这部分遇到了很多麻烦,任何帮助都会令人惊讶
当我输入EOF
时,我也必须停止程序,但我也无法解决这个问题,所以对此的任何帮助也将受到赞赏。现在我只是让它适用于所有正值,并在引入负值时停止,这是我的代码:
#include <stdio.h>
#include <math.h>
int main () {
int arr[100];
int y, x;
int i;
double mean = 0;
double std = 0;
double this = 0;
i = 0;
printf("Enter next number, EOF to stop > ") ;
scanf("%d",&x);
while (x >= 0) {
arr[i++] = x;
printf ("Enter next number, EOF to stop > " );
scanf("%d",&x);
}
y = i;
double sum = 0;
double sum1= 0;
for(i = 0; i < y; i++){
sum = sum + arr[i];
}
mean = sum / y;
for (i = 0; i < y; i++){
sum1 = sum1 + pow((arr[i] - mean), 2);
}
std = sum1 / ((float)y - 1);
this = mean + sqrt(std);
if (10 > y) {
printf("**You must enter atleast 10 scores***\n");
return 0;
}
printf("Mean = %.2lf, Standard Deviation = %.2lf\n", mean, sqrt(std));
printf("Scores above %.2lf get a B\n", this);
return 0;
}
答案 0 :(得分:0)
对于第二个问题,请不要使用fscan(%d, &x)
读入输入,而是创建一个字符数组(例如,char [] str = new char[5];
)并使用fscan(%s, &str)
进行扫描。然后,使用if (strcmp(str, eofStr) == 0) break
将字符串与包含“EOF”的另一个字符串进行比较。使用atoi将字符串转换为整数。
要使用B查找最低分数,请存储使用B保存最小数字的整数。将初始值设置为A级值。迭代循环并与每次迭代的分数进行比较。如果分数较低,但仍为B,则将此分数与当前最低分数进行交换。完成循环,你将获得最低分数和B.你可以做同样的事情,以获得没有B的最高分。
int low = this + sqrt(std);
for (int i = 0; arr[i] > 0; i++) {
if (low > arr[i] && arr[i] >= this) low = arr[i];
}
答案 1 :(得分:0)
代码:
#include <stdio.h>
#include <math.h>
int main () {
int arr[100];
int y, x;
int i;
double mean = 0;
double std = 0;
double margin = 0;
i = 0;
printf("Enter next number, EOF to stop > ") ;
scanf("%d",&x);
while (x >= 0) {
arr[i++] = x;
printf ("Enter next number, EOF to stop > " );
scanf("%d",&x);
}
y = i;
if (10 > y) {
printf("**You must enter atleast 10 scores***\n");
return 0;
}
double sum = 0;
double sum1= 0;
for(i = 0; i < y; i++){
sum = sum + arr[i];
}
mean = sum / y;
for (i = 0; i < y; i++){
sum1 = sum1 + pow((arr[i] - mean), 2);
}
std = sum1 / ((float)y - 1.0);
margin = mean + sqrt(std);
printf("Mean = %.2lf, Standard Deviation = %.2lf\n", mean, sqrt(std));
printf("Scores above %.2lf get a B\n", margin);
int below = arr[0]; // highest value in the array that will not get a B
int above = arr[0]; // lowest value in the array that will give a B
for (i=0; i<y; i++) {
if ((arr[i] > below) && (arr[i] < margin)) {
below = arr[i];
}
else if ((arr[i] > margin) && (arr[i] < above)) {
above = arr[i];
}
}
return 0;
}
答案 2 :(得分:0)
首先,如果您打算在-ansi -pedantic C中编程,则必须在块的顶部定义所有变量。 e.g:
正确: func(){
variable v1;
variable v2;
perform_stuff();
}
正确: func(){
perform_stuff()
variable v1;
}
现在问你的问题: 如果你想保存一个double值数组,那么数组应该是double类型而不是类型为int。
找到数组中的最小数字: 对于那个可能的选项很少,首先,您可以要求用户输入从最低到最高的值,然后只是到达数组[0](第一个位置=最低值)。但如果你不能/不能,请始终使用快速排序:http://www.cquestions.com/2008/01/c-program-for-quick-sort.html 将数组从最低值排序到最高值,然后使用二进制搜索找到您想要的值:http://www.cquestions.com/2008/01/c-program-for-binary-search.html 搜索你想要的价值。
或者你也可以用O(N)的效率这样做:
int heighest_smaller_than_mean = 0;
int smallest_smaller_than_mean = mean;
for(i = 0; i&lt; mean; i ++){
if(heighest_smaller_than_mean < arr[i])
heighest_smaller_than_mean = arr[i];
if(smallest_smaller_than_mean < arr[i])
smallest_smaller_than_mean = arr[i];
}
希望我能正确理解你:)