1349682459 C言語を教えてくれている先生が非常に採点に厳しい方で、つくったプログラムを提出したいのですがどうにも不安です。画像がそれなのですが、こうしたほうがいいというようなアドバイスがあれば教えてくださると嬉しいです。

///プログラム課題内容///
整数xを入力すると,√xをA√B の形に変形するプログラムを作成せよ.ただし,xが負の場合 A√B i と虚数を表示すること.
また,B=1のとき(A√1のとき)はAのみ表示し,A=1のときは√B(または√B i)だけ表示すること.

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/10/08 16:47:39
  • 終了:2012/10/15 16:50:07

回答(3件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982012/10/08 17:47:08

重要なのはエラー処理です。
想定していない値や文字、記号などを入力された場合
どうなるのかということですね。

そのとき、おかしな結果や システム的なエラーが出てとまってしまったらまずいです。

id:a-kuma3 No.2

a-kuma3回答回数4366ベストアンサー獲得回数18022012/10/08 17:54:29

まず、普通に突っ込まれそうなところ。

  • 整数x に、0 を指定したときの動作
  • 整数x に、1 を指定したときの動作

問題が要求するレベルによるけれど、仕事だと必ず突っ込まれるケース。

  • 入力で、整数以外を入力された時の動作

採点者の好みとか、授業で教えた内容によると思うけど、書き方として気になるところ。

  • #include の後は、スペースを入れたい(無くても動くけど)
  • return 0; 括弧が要らない理由を分かっているか?
  • if で中括弧を省略できるケース。書いてることは正しいけど、バグの温床になるケースが多い。
  • 変数 a 以外は、宣言での初期化は要らない


後は、適切な空白の挿入かな(好みと言ってしまえば、好みの範疇ではあったりする)。

    for(i=2;i<=x;++i){
        if(x%(i*i)==0){
            a=i;
            b=x/(i*i);
        }
    }

と、

    for (i = 2 ; i <= x ; ++i) {
        if (x % (i * i) == 0) {
            a = i;
            b = x / (i * i);
        }
    }

の、どっちが読みやすいでしょうね、という話。

他11件のコメントを見る
id:Bookmarker
  • int main以外はC99においても処理系定義である
  • 処理系定義である理由は、宣言と定義が一致しない関数では呼び出すことすらできない可能性があるため

int mainしか対応していない処理系で勝手にvoid mainと定義すると、復帰値が不定ということ以前に、正常に呼び出すことすらできない可能性があります。

2012/10/13 09:53:15
id:a-kuma3

質問立てた。

2012/10/13 12:31:57
id:Bookmarker No.3

しおり回答回数191ベストアンサー獲得回数342012/10/08 19:40:00

計算ロジックは置いておいてプログラムの書き方を見ると、

printf("整数を入力してください。:");

では改行コードを出力していないので、scanf()する前にfflush()しないと出力されないと思います。
それから、scanf()のエラー処理が必要です。
厳密に言うとprintf()やputchar()のエラー処理も必要です。
また、オーバーフローのチェックも必要です。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません