2016-05-03 108 views
0

我需要你的智慧。看起來不是一個大問題,但我需要一種方法。 首先,我會分享代碼。這段代碼是正確的,但我需要一些補充,內循環有條件,如果電壓大於百分比它沒關係,但都是正確的我只需要一個寫作。我有2個循環,但只需要一個提示。 如果它很混亂,我可以分享原來的問題。感謝你們。2 For循環一個結果

我把原來的問題:

電壓讀數從一個變電站得到一次六小時每小時(所以有六個 讀數)。寫一個C程序在變電站上執行以下檢查: a)顯示與平均值相差超過平均值10%的所有電壓。 b)顯示所有連續小時對,其中從1小時的電壓變化到下一個小時的電壓的變化大於平均值的15%。

實施例1

輸入6點的電壓:210.1 223.2 189.6 206.2 235.1 215.0 平均值爲213.2伏。 10%= 21.3伏。 15%= 32.0伏特。

發生以下問題: 1.第3小時的電壓爲189.6伏(相差23.6伏)。 2.第5小時的電壓爲235.1伏(相差21.9伏)。 3.從小時2到小時3的電壓變化是33.6伏。

實施例2

輸入6點的電壓:233.1 201.0 221.5 240.2 222.7 208.1 平均值爲221.1伏。 10%= 22.1伏。 15%= 33.2伏。

沒有遇到任何問題。

#include <stdio.h> 
#include <math.h> 
#include <string.h> 

int i; 
float volt[6]; 
float avg, avg10, avg15, total, a, b; 

    int main() { 

    total= 0 ; 
    avg = 0; 
    printf("Enter 6 Volts of Machine\n"); 

    for (i=0; i<6; i++) { 
    printf("Type %d. volt", i+1); 
    scanf("%f",&volt[i]); 

    total = total + volt[i]; 
} 
avg = total/6; 
avg10 = (avg * 10)/100; 
avg15 = (avg * 15)/100; 
printf("------------------------------------------\n"); 
printf("The machine Avarage Voltage is %.2f\n", avg); 
printf("The Machine Avarage is%.2f\n", avg10); 
printf("The Machine 15 Avarage is%.2f\n\n\n", avg15); 


    for (i=0;i<6;i++) { 
     a = fabs(volt[i] - avg); 

     if(a > avg10) { 
    printf("\nVoltage at hour %d was %.2f volts (diffrence of %.2f volts)\n\n", i+1, volt[i], a); 
     } 
    } 


    for (i=0; i<5; i++) { 

     b = fabs(volt[i+1] - volt[i]); 
     if(b > avg15) { 
    printf("\nVoltage change from hour %d to hour %d was %.2f\n\n", i+1, i+2, b); 
     } 
    } 
+0

是你的問題如何打印「沒有問題遇到」第二個例子? –

+0

是的,因爲我只需要一個「沒有遇到問題」的答案。我嘗試了很多次,我看到了循環的所有可能性,所以11「沒有遇到任何問題」或者當我在循環中添加3.if時,我看到電壓正確後顯示「沒有遇到問題」結果。 – Axis

回答

0

如果你只需要一個循環嘗試這樣的事:

for (i=0;i<6;i++) 
{ 
    if((a = fabs(volt[i] - avg)) > avg10) 
    { 
     printf("\nVoltage at hour %d was %.2f volts (diffrence of %.2f volts)\n\n", i+1, volt[i], a); 
    } 
    if((i < 5 && (b = fabs(volt[i+1] - volt[i])) > avg15) 
    { 
     printf("\nVoltage change from hour %d to hour %d was %.2f\n\n", i, i+1, b); 
    } 
} 
+0

謝謝安德烈試圖幫助。我試過你的代碼,看起來像工作,但我得到了一個新的問題,首先如果語句和第二如果語句結果應該是分開的,首先如果語句結果然後第二,所以你的代碼都嵌套。再次感謝您爲您提供反饋。 – Axis

0

如果你想沒有遇到問題時打印出一個消息,你必須記住,如果任何或有多少錯誤,報告。當然,你不能在循環內打印出這樣的消息,因爲八次說「沒有發生錯誤」並報告三個錯誤是有點矛盾的。

您的預期輸出顯示了錯誤的枚舉,因此最好保留一個錯誤計數。繼續如下:

  • 無論何時打印錯誤消息,增加錯誤計數。
  • 在你這樣做之前,檢查這是否是報告的第一個錯誤。如果是,則打印標題(「發生以下錯誤」)
  • 如果您已經檢查了所有內容並且沒有發生錯誤,請打印成功消息。

或者,代碼:

int nerror = 0; 

for (i = 0; i < n; i++) { 
    double v = fabs(volt[i] - avg); 

    if (v > avg10) { 
     if (nerror == 0) { 
      puts("The following problems occurred:"); 
     } 

     nerror++; 
     printf("%d. Voltage at hour %d was %.2f volts " 
      "(diffrence of %.2f volts)\n", 
      nerror, i + 1, volt[i], v); 
    } 
} 

for (i = 1; i < n; i++) { 
    double diff = fabs(volt[i - 1] - volt[i]); 

    if (diff > avg15) { 
     if (nerror == 0) { 
      puts("The following problems occurred:"); 
     } 

     nerror++; 
     printf("%d. Voltage change from hour %d to " 
      "hour %d was %.2f\n", 
      nerror, i, i + 1, diff); 
    } 
} 

if (nerror == 0) puts("No problems were encountered."); 
+0

您可以使用優化版本。 –

0

謝謝大家,我的問題得到了解決。快樂的編碼!

代碼是:

#include <stdio.h> 
#include <math.h> 


int i; 
float volt[6]; 
float avg, avg10, avg15, total, a, b; 

    int main() { 
    int voltageproblem1 = 0; 
    int voltageproblem2 = 0; 
    total= 0 ; 
    avg = 0; 
    printf("Enter 6 Volts of Machine\n"); 

    for (i=0; i<6; i++) { 
    printf("Type %d. volt", i+1); 
    scanf("%f",&volt[i]); 

    total = total + volt[i]; 
} 
avg = total/6; 
avg10 = (avg * 10)/100; 
avg15 = (avg * 15)/100; 
printf("------------------------------------------\n"); 
printf("The machine Avarage Voltage is %.1f\n", avg); 
printf("The Machine Avarage is%.1f\n", avg10); 
printf("The Machine 15 Avarage is%.1f\n\n\n", avg15); 


    for (i=0;i<6;i++) { 
     a = fabs(volt[i] - avg); 

     if(a > avg10) { 
    printf("\nVoltage at hour %d was %.1f volts (diffrence of %.1f volts)\n\n", i+1, volt[i], a); 
    voltageproblem1 =1; 
     } 
    } 
    for (i=0; i<5; i++) { 

     b = fabs(volt[i+1] - volt[i]); 
     if(b > avg15) { 
    printf("\nVoltage change from hour %d to hour %d was %.1f\n\n", i+1, i+2, b); 
    voltageproblem2 = 1; 
     } 
    } 
    if ((voltageproblem1==0)&&(voltageproblem2==0)) { 
    printf("No problems were encountered.\n\n"); 
     } 

}