私はC++の初心者です。数値グレードの横に文字グレードを出力したいだけですが、int Wを変換して文字を出力する方法がわかりません。
char Grade(int W)
{
char A,B,C,F;
if (W == 100)
return W = "A";
else if (W == 99)
return A;
}
私はC++の初心者です。数値グレードの横に文字グレードを出力したいだけですが、int Wを変換して文字を出力する方法がわかりません。
char Grade(int W)
{
char A,B,C,F;
if (W == 100)
return W = "A";
else if (W == 99)
return A;
}
types
C++ プログラムに存在する違いを理解する必要があります。int
は数字用、char
は文字用です。
また、変数の型、名前、値にも違いがあります。宣言
char A,B,C,F;
char
4 つの変数を作成していることを意味します。それらの名前は A、B、C、および F です。ただし、現在は値が含まれていません。したがって、コードを次のように変更できます。
char Grade(int W)
{
char A = 'A',B = 'B',C = 'C',F = 'F'; //now, A has the value 'A', B has the value 'B' etc.
if(W==100)
return A;
else if(W==99)
return A;
}
ここで、変数A
であるchar
変数の値は です'A'
。また、返す型は関数の戻り値の型と同じでなければならないことに注意してください。関数のシグネチャ char Grade(int W)
は です。これは、引数が でint
あり、戻り値の型がであることを意味しますchar
。
に 100 個の異なる値がある場合、どうしますW
か? それぞれの可能性をチェックする必要はありません。そうしないとelse if
、プログラミングの目的に反する 100 個の異なる ... ステートメントになってしまいます。代わりに、90 を超えるものはすべて「A」、80 を超えるものはすべて「B」などとします。したがって、コードは次のように変更されます。
char Grade(int W)
{
char A = 'A',B = 'B',C = 'C',F = 'F';
if(W >= 90) //Now, any value of W that is greater than
//or equal to 90 will return 'A'
return A;
else if(W >= 80) //the 'else' means that (W >= 90) was not true,
//so W must be less than 90. Now we check if W >= 80
return B;
else if ..... //do the same for C, F etc.
}
単純な if/else ブロックを使用して、スコアをレター グレードに変換できます。
char Grade(int score)
{
if(score >= 90) return 'A';
else if(score >= 80) return 'B';
else if(score >= 70) return 'C';
else if(score >= 60) return 'D';
return 'F';
}
他の解釈によると、数値グレードを 100 から 50 から "A" から "F" に変更します。ここで、50 未満のものはすべて自動的に "F" になりますが、現在は何もif..else
記述されていません。結局のところ、それは単純な関係です。
char Grade (int W)
{
return W < 50 ? 'F' : 'F'-(W-50)/10;
}
多少の丸めが必要です。90 から 100 まではすべて "A" を返し、80 から 89 までは "B" を返します。
(プログラミング レベルを考慮した上で) 三項演算子のないバージョンで、ロジックがより明確になる可能性があります。また、可能なすべての組み込み表記のショートカットについて削除されました。
char Grade (int W)
{
if (W < 50)
return 'F';
W = W-50; /* we know W >= 50 at this point */
/* Now W=0..50 */
W = W/10;
/* Now W is 0..5 */
return 'A'+5-W;
}