質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

4回答

1785閲覧

if文の問題を解いたので答え合わせしてほしい。

hillclub

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/10/11 15:54

独学でC#学習しています。

#質問内容
if文についてある問題集があり回答例と自分の回答が少し違うのですが、
自分の回答について修正点あれば教えてください。
回答例を見て、自分の回答の方が正しいと思ってしまいました。
bool式はif文にまとめ、最初の&&で第一オペランドしか評価しないので、
問題中の"ありえない値"も評価対象に入ってしまうため&で良いと考えました。
ちなみに実行結果は同じで、おめでとうございます。合格です。でした。
よろしくお願いします。

#問題内容

テストがあります。足きり点が65点です。満点が100点です。下限点が0点です。

足きり点以上、満点以下の場合、合格です。
コンソール画面に『おめでとうございます。合格です。』と表示します。
下限点以上、足きり点未満なら、不合格です。
コンソール画面に『残念です。不合格です。』と表示します。
それ以外の場合、ありえない値なので、『試験の得点が正しく入力されていません。』と表示します。
今回の受験者の実際の得点は75点でした。

#回答内容
自分の回答

c#

1using System; 2 3namespace Seigyo 4{ 5 class Control 6 { 7 static void Main(string[] args) 8 { 9 int realScore= 75; 10 int maxScore = 100; 11 int minScore = 0; 12 int passingScore = 65; 13 14 15 if (maxScore >= realScore & passingScore <= realScore) 16 Console.WriteLine("おめでとうございます。合格です。"); 17 18 else if (minScore >= realScore & passingScore >= realScore) 19 Console.WriteLine("残念です。不合格です。"); 20 21 else 22 Console.WriteLine("試験の得点が正しく入力されていません。"); 23 } 24 } 25} 26

回答例

c#

1 2using System; 3 4namespace ConditionalFlowExercise 5{ 6 class MainClass 7 { 8 static void Main(string[] args) 9 { 10 var realScore = 75; 11 bool examineeHasPassed = (realScore >= 65 && realScore <= 100); 12 bool examineeHasFailed = (realScore >= 0 && realScore < 65); 13 14 if (examineeHasPassed) 15 { 16 Console.WriteLine("おめでとうございます。合格です。"); 17 } 18 else if (examineeHasFailed) 19 { 20 Console.WriteLine("残念です。不合格です。"); 21 } 22 else 23 { 24 Console.WriteLine("試験の得点が正しく入力されていません。"); 25 } 26 } 27 } 28} 29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

テストすべき値は、

  • 境界の値: 0, 65, 100
  • 境界間の値: 30, 75 (任意の値)
  • 範囲外の値: -10, 120 (任意の値)

この程度なので、自分で答え合わせして下さい。

投稿2018/10/12 00:17

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hillclub

2018/10/12 10:15

境界間の値を注視すべきなんですね、演算子使えばいいみたいなので今思うとたしかにこの程度でした。有難うございます!
guest

0

オレするなら、

if (maxScore < realScore || minScore > realScore){
// ありえない
}else if(passingScore <= realScore){
// 合格
}else{
// 不合格
}

とゆーふーに

投稿2018/10/12 00:02

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hillclub

2018/10/12 10:12

なるほどこれでも良いわけですね。シンプルで好きなコードです!有難うございます。
Zuishin

2018/10/14 10:53

「これでも良い」ではなく「この方が良い」です。早期リターンとガード節を調べてください。
hillclub

2018/10/14 12:11

ガード節、早期リターン調べ納得しました。方法として確立されていたのですね。 今後見直しを必ずするようにして慣れていこうと思います。有難うございます。
guest

0

ベストアンサー

(minScore >= realScore & passingScore >= realScore)

不合格にならなくなってます。

最初の&&で第一オペランドしか評価しないので、

問題中の"ありえない値"も評価対象に入ってしまうため&で良いと考えました。

「"ありえない値"も評価対象に入ってしまう」というのがよくわかりませんが
今回の場合は短絡した方がどちらかというとよいでしょう。
もちろん前提条件として足きり点が満点以下、下限点以上である事は事前に確認が必要ですが


&と&&について

状態変化を含む式をオペランドとして渡さない限りboolの&&&は同値になります。

投稿2018/10/11 16:16

編集2018/10/11 16:22
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hillclub

2018/10/11 16:39

最後のelseに"試験の得点が正しく入力されていません。" とあるので125点等、入力ミス?する事が想定されるのかと思いました。 それより不合格にならなくなっていた事を教えて頂き有難うございます。 もう一度書き直そうと思います。
asm

2018/10/11 16:42

足きり点が満点以下、下限点以上である場合 足きり点以上ならば必然的に下限点以上です 足きり点以下ならば必然的に満点以下です
guest

0

先にありえない値を弾く事で、else ifの条件式を省く事ができました。
また、minScore=0;等の変動しない値は定義しなくても良さそうなので直入力しました。
65,55,125それぞれの境界の値で正常動作しました。

c#

1 2 class AndAnd1 3 { 4 static void Main(string[] args) 5 { 6 int realScore = 75; 7 8 9 if (realScore > 100 || realScore < 0) 10 Console.WriteLine("試験の得点が正しく入力されていません。"); 11 12 else if (realScore >= 65) 13 Console.WriteLine("おめでとうございます。合格です。"); 14 15 else 16 Console.WriteLine("残念です。不合格です。"); 17 } 18 } 19

投稿2018/10/12 13:05

hillclub

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問