ここから本文です

C言語のプログラムを解説してください! よろしければ、フローチャートの 書き方...

アバター

ID非公開さん

2016/4/2511:49:07

C言語のプログラムを解説してください!
よろしければ、フローチャートの
書き方(表し方)も教えてください!

#include <stdio.h> int main(void) { int max, min; int sum = 0; { in

t num1, num2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); if(num1 > num2) { max = num1; min = num2; } else { max = num2; min = num1; } } printf("%d以上%d以下の整数の和は", min, max); do { sum = sum + min; min = min + 1; } while(min < max + 1); printf("%dです。\n", sum); return(0); }

閲覧数:
210
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

ter********さん

2016/4/2713:27:34

>解説してください

2つの整数入力をnum1とnum2に受け取る。
大きい数をmax、小さい数をminにセットする。2つが同じの時は、maxとminも同じ値。

「min以上max以下の全整数の和は」の表示を変数名ではなく変数値で行う。改行はしない。


doループを使い、合計用変数sumにminを加算し、min+1でmin値を更新する処理を、更新後のmin値がmax+1未満である間、反復して行う。
min+1がmax+1になったら、加算せずにループから抜ける。

前の表示に続けて「sumです。」の表示を変数名ではなく変数値で行う。

フローチャートは、添付図を参照。


●コーディング内容への感想、意見。
この質問は、2016/4/25 11:35:59の質問の後に出されたものなので、書かれているプログラムは改訂版らしいが、次の点で、以前のコーディングの方が良いと考える。
ただし⑤は、コーディングではなく、プログラム仕様が変わったことが問題。

①前のプログラムにあったtmp1、tmp2という作業用変数を使わないのは、「変数の個数を減らす」目的かも知れないが、「入力の最小値」を思わせる変数minの値を書き換えているの良くない。
作成者以外がプログラム改訂担当者になった時、変数名で内容を判断しがちであり、修正ミスが起きやすくなる。作成者が改訂する場合も、半年や1年後になると、変数を特殊に扱ったことは忘れている。

②「min以上max以下の全整数の和はsumです。」と表示するprintfを2つに分け、作業用変数をつかわなくても1を加算できるようにしているが、①以外に、次の点でも良くない。
・2つのprintが、画面上で一行の文を表示するため、最初を改行無しにしているのは不自然で、プログラム改訂担当者がコーディングミスと思い、「ついでに直しておこう」と改行をつける可能性あり
・do-whileループのコーディング行数が多くなると、2つのprintfの関連性がわかりにくい

③int sum = 0;の次にある{と、
printf f("%d以上%d以下の整数の和は", min, max);の前の}は、余分。
あっても間違いではないが、見た人が「何のために?」と思ってしまう。
④do-whileの終了判定「 while(min < max + 1);」の「+1」は、コーディングを見た人が「何のため?」と思ってしまう。
以前のプログラム「 while (tmp2 <= num2);」のように、「<=」を使った方が自然。

⑤プログラム仕様が、「入力した二つの整数が同じ値でもエラー扱いせずに処理を進める」になっている。
この仕様だと、値を入力した人が「num1以上num2以下の全整数の和はsumです。」と表示された文を読んだ時、同じ値の入力の場合、アとイのどちらで処理されたか(文をよく読むか暗算すれば分かることだが)困惑する。

ア.num1とnum2の和へ、さらに二つの間にある全整数も加算した
イ.num1以上で、かつnum2以下でもある、全整数の和


添付図:

>解説してください

2つの整数入力をnum1とnum2に受け取る。...

アバター

質問した人からのコメント

2016/4/27 15:16:55

ありがとうございます!
BAに選ばさせてもらいます!
次もまた質問するかもしれません!
その時もお願いします!

ベストアンサー以外の回答

1〜1件/1件中

k03********さん

2016/4/2511:57:31

ID非公開さん

改行すると、読みやすい。

#include <stdio.h>
int main(void)
{
int max, min;
int sum = 0;
{
int num1, num2;
puts("二つの整数を入力してください。");
printf("整数1:");
scanf("%d", &num1);
printf("整数2:");
scanf("%d", &num2);
if(num1 > num2)
{
max = num1;
min = num2;
}
else
{
max = num2;
min = num1;
}
}
printf("%d以上%d以下の整数の和は", min, max);
do
{
sum = sum + min;
min = min + 1;
} while(min < max + 1);
printf("%dです。\n", sum);
return(0);
}

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる