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

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

ただいまの
回答率

90.32%

  • C#

    7714questions

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

  • Visual Studio

    2005questions

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

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 314

hillclub

score 3

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

質問内容

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

問題内容

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

回答内容

自分の回答

using System;

namespace Seigyo
{
    class Control
    {
        static void Main(string[] args)
        {
            int realScore= 75;
            int maxScore = 100;
            int minScore = 0;
            int passingScore = 65;


            if (maxScore >= realScore & passingScore <= realScore)
                Console.WriteLine("おめでとうございます。合格です。");

            else if (minScore >= realScore & passingScore >= realScore)
                Console.WriteLine("残念です。不合格です。");

            else
                Console.WriteLine("試験の得点が正しく入力されていません。");
        }
    }
}

回答例

using System;

namespace ConditionalFlowExercise
{
    class MainClass
    {
        static void Main(string[] args)
        {
            var realScore = 75;
            bool examineeHasPassed = (realScore >= 65 && realScore <= 100);
            bool examineeHasFailed = (realScore >= 0 && realScore < 65);

            if (examineeHasPassed)
            {
                Console.WriteLine("おめでとうございます。合格です。");
            }
            else if (examineeHasFailed)
            {
                Console.WriteLine("残念です。不合格です。");
            }
            else
            {
                Console.WriteLine("試験の得点が正しく入力されていません。");
            }
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+2

テストすべき値は、

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/12 19:15

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

    キャンセル

checkベストアンサー

+1

(minScore >= realScore & passingScore >= realScore)

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

最初の&&で第一オペランドしか評価しないので、
問題中の"ありえない値"も評価対象に入ってしまうため&で良いと考えました。

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


&と&&について

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/12 01:39

    最後のelseに"試験の得点が正しく入力されていません。"
    とあるので125点等、入力ミス?する事が想定されるのかと思いました。

    それより不合格にならなくなっていた事を教えて頂き有難うございます。
    もう一度書き直そうと思います。

    キャンセル

  • 2018/10/12 01:42

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

    キャンセル

+1

オレするなら、

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

とゆーふーに

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/12 19:12

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

    キャンセル

  • 2018/10/14 19:53

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

    キャンセル

  • 2018/10/14 21:11

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

    キャンセル

0

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

    class AndAnd1
    {
        static void Main(string[] args)
        {
            int realScore = 75;


            if (realScore > 100 || realScore < 0)
                Console.WriteLine("試験の得点が正しく入力されていません。");

            else if (realScore >= 65)
                Console.WriteLine("おめでとうございます。合格です。");

            else
                Console.WriteLine("残念です。不合格です。");
        }
    }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    7714questions

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

  • Visual Studio

    2005questions

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