當使用浮點等級的變數有時等于范圍的開始或范圍的結束時,跳到 else 陳述句。同樣在掃描負數時,丟棄一元符號并充當正數。
樣本輸入 1:3.8 預期結果:優秀 結果:平均
示例輸入 2:1.3 預期結果:通過 結果:無效輸入...
| 年級 | 描述 |
|---|---|
| 3.8 - 4.0 | 出色的 |
| 3.3 - 3.7 | 優越的 |
| 2.8 - 3.2 | 好的 |
| 1.8 - 2.7 | 平均 |
| 1.3 - 1.7 | 低于平均水平 |
| 1.0 - 1.2 | 通過 |
| 低于 1.0 | 失敗 |
| 不在 0.0 - 4.0 范圍內 | 無效的 |
#include<stdio.h>
int main (void){
float grade;
printf("\t\tWhat is your grade?\t\t");
scanf("%f",&grade);
if ((grade<=4.0) && (grade>=3.8)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tExcellent");
}
else if ((grade<=3.7) && (grade>=3.3)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tSuperior");
}
else if ((grade<=3.2) && (grade>=2.8)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tGood");
}
else if ((grade<=3.7) && (grade>=1.8)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tAverage");
}
else if ((grade<=1.7) && (grade>=1.3)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tBelow Average");
}
else if ((grade<=1.2) && (grade>=1.0)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tPassing");
}
else if ((grade<=1.0) && (grade>=0)){
printf("\n\t\tInput grade: %.1f",grade);
printf("\n\t\tFailure");
}
else{
printf("\n\t\tInvalid input...");
}
return 0;
}
uj5u.com熱心網友回復:
equal to sometimes the start of the range or the end of the range, skips...
浮點數很少與您看到的值完全相同。試著想象將分數 1/2 1/4 1/8 1/16... 相加,看看浮點值只能近似等于它們所代表的以 10 為底的舍入值;有時多一點點,有時少一點點。測驗平等可能會令人失望。
下面,用戶可以輕松輸入熟悉的 2 位數成績點。該值立即按比例放大 10(稍微將不情愿的值“推”到截止閾值之上),然后轉換為可靠的二進制值,盡管大 10 倍。
這使得“整數比較”變得輕而易舉。
與 if/else 梯形圖使代碼混亂相比,此代碼效率稍低,但易于通過視覺掃描來確認值。(這些值來自您的代碼。)確定“文本評估”,并提供一個 printf 服務。(在代碼正常作業之前,不要浪費時間處理選項卡和“布局”。)并且,處理負數就好像它們是正值一樣。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
float grade;
printf( "What is your grade? " );
scanf( "%f",&grade );
/* omitting test for success */
int x = abs(grade * 10.0001); // to ensure not "slipping under"
char *eval = NULL;
if( eval == NULL && x > 40 ) eval = "Invalid input";
if( eval == NULL && x >= 38 ) eval = "Excellent";
if( eval == NULL && x >= 33 ) eval = "Superior";
if( eval == NULL && x >= 28 ) eval = "Good";
if( eval == NULL && x >= 18 ) eval = "Average";
if( eval == NULL && x >= 13 ) eval = "Below Average";
if( eval == NULL && x >= 10 ) eval = "Passing";
if( eval == NULL ) eval = "Failure";
printf( "Input grade: %.1f - %s\n", grade, eval );
return 0;
}
編輯:
有些人會討厭它,但有些人會欣賞這個版本的清晰性。處理器進行了許多可能立即被覆寫的分配,但代碼很少,機器周期也很便宜。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
float grade;
printf( "What is your grade? " );
scanf( "%f", &grade );
/* omitting test for success */
int x = abs(grade * 10.0001); // to ensure not "slipping under"
char *eval = "Failure";
if( x >= 10 ) eval = "Passing";
if( x >= 13 ) eval = "Below Average";
if( x >= 18 ) eval = "Average";
if( x >= 28 ) eval = "Good";
if( x >= 33 ) eval = "Superior";
if( x >= 38 ) eval = "Excellent";
if( x > 40 ) eval = "Invalid input";
printf( "Input grade: %.1f - %s\n", grade, eval );
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512689.html
