2013-05-10 50 views
0

我整理一個程序,我讀了一堆非負的雙打到一個數組,然後計算平均值,站在價值的開發。其次,平均值加上支架dev的代表獲得A B
我有下一部分,在那裏我需要找到數字的陣列最低得分會給我A 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

對於第二個問題,不使用fscan(%d, &x)輸入讀取,而創建一個字符陣列(例如,char [] str = new char[5];)和掃描與fscan(%s, &str)。然後,比較字符串包含「EOF」使用if (strcmp(str, eofStr) == 0) break另一個字符串。使用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]; 
} 
+0

做你有一個例子,而我寫I可以引用我的代碼是最低和最高分數部分?這會有很多幫助 – Student 2013-05-10 06:33:03

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; 
} 
0

首先,如果你打算在-ansi -pedantic C中編程,所有變量必須在塊的頂部定義。例如:

正確: FUNC(){

variable v1; 
variable v2; 

perform_stuff(); 

}

在正確的: FUNC(){

perform_stuff() 

variable v1; 

}

,現在你的問題: 如果你想持有一個數組o f 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 來搜索你想要的值至。

,或者您也可以使它在O3效率(N)以這種方式工作:

INT heighest_smaller_than_mean = 0;

int smallest_smaller_than_mean = mean;

爲(I = 0;我<意味着;我++){

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]; 

}

希望我理解正確:)

相關問題