新しく質問する

C言語の課題

役に立った:1件
  • 質問者:wing444
  • 投稿日時:2010/01/08 18:55
  • 困り度:すぐに回答が欲しいです

1、整数型の変数を2個だけ使い、キーボードから5個の整数を読み込み負の整数のみの和を表示プログラムを作れ

2、1、の問題について使える変数を3個に増やしたうえでwhile文を使ったプログラムを作れ

3、1、の問題について使える変数を3個に増やしたうえfor文を使ったプログラムを作れ

1を作ろうとするとかなり長くなってしまうのです…
ヒントでもいいので教えてください。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:0件

No.15ベストアンサー20pt

  • 回答者:hiroshi09s
  • 回答日時:2010/01/11 10:08

 連休も今日まで。明日から授業が始まるでしょうから回答しましょう。ここで質問したついでに、課題にない do~while も覚えてしまいましょう。これで繰り返し文のカラクリをマスターしましたね。
 なお、main()プログラムは「int main(void)」+「return 0;」の組み合わせで覚えておくことを勧めます。理由は gccで(コンパイラーによっては) warningが出るからです。


/* 回答1 *
#include <stdio.h>
int main(void) {// この定番を覚えよう。
int a, b;// 変数を2個使う。

b = 0;// まず、合計をゼロに設定する。
printf("Input a1: ");// わかるように入力をうながして
scanf("%d", &a);// データを取り込む。
if (a < 0)// もし、aが負ならば
b += a;// 加算する(b = b + a;)。
printf("Input a2: ");// 以下、これを残り4回繰り返す。
scanf("%d", &a);
if (a < 0)
b += a;
printf("Input a3: ");
scanf("%d", &a);
if (a < 0)
b += a;
printf("Input a4: ");
scanf("%d", &a);
if (a < 0)
b += a;
printf("Input a5: ");
scanf("%d", &a);
if (a < 0)
b += a;
printf("result= %d\n", b);// 最後に、合計を表示する。

return 0;// int main() ゆえ、システムにゼロを返す。
}
*/

/* 回答2
#include <stdio.h>
int main(void) {
int a, b, c;// 変数を3個使う。

b = 0;// まず、合計を0にする。
c = 0;// カウントも0にする。
while(c < 5) {// カウントが5以下なら {} を実行し
printf("Input a%d: ", c);// 以下、回答1と同じ。
scanf("%d", &a);
if (a < 0)
b += a;
c += 1;// カウントを1つ増やす( c++)。
}
printf("result= %d\n", b);// 最後に、合計を表示する。

return 0;
}
*/


/* 回答3
#include <stdio.h>
int main(void) {
int a, b, c;// 変数を3個使う。

b = 0;// まず、合計を0にする。
for (c = 0; c < 5; c += 1) {// ループを5回繰り返し、
printf("Input a%d: ", c);// 以下、回答1,2に同じ。
scanf("%d", &a);
if (a < 0)
b += a;
}
printf("result= %d\n", b);

return 0;
}
*/


/* ついでに、do~while も覚えよう。*/
#include <stdio.h>
int main(void) {
int a, b, c;// 変数を3個使う。

b = 0;// まず、合計を0にする。
c = 0;// カウントも0にする。
do {
printf("Input a%d: ", c);// 以下、回答1と同じ。
scanf("%d", &a);
if (a < 0)
b += a;
c += 1;// カウントを1つ増やす( c++)。
} while (c < 5);// カウントが5以下なら do{ へ
printf("result= %d\n", b);// 最後に、合計を表示する。

return 0;
}

通報する

この回答へのお礼

遅くなってしまいました。すいません。
課題は無事(?)提出しました。ありがとうございます。

提出はしたもののどこが間違っているか教えてくれないので回答を載せてくれて本当にたすかります。
(教えてくれないのが当たり前なのでしょうか…?)

  • 参考になった:0件

No.14ベストアンサー10pt

  • 回答者:koi1234
  • 回答日時:2010/01/10 07:38

まだ閉じてないのでついでで書いておきますと
厳密に言うと実はプログラムとしては深刻な問題箇所が一箇所あります

(ほとんど答えかいてるようなもんですが)ヒント
入力値の変数は int
和の変数も   int
入力するのは5回
この5回でintの最大値入力されたら・・・・・・さあどうなる
修正自体は非常に簡単なのでお考えください(各変数型で扱えるデータ範囲を調べましょう)

通報する

  • 参考になった:0件
  • 回答者:hiroshi09s
  • 回答日時:2010/01/09 19:33

>elseの部分をどうすればいかわからないんです…
#12さんの補足です。
 「else」は if ~ else 文ですから、【9行の「if(a<0)」のとき10行の「c=a+c」の計算をしますが、11行のelseの「入力した値のa=0またはa>0」のときは「break」を実行せよ。】という内容になっています。
 つまり、2とか5とかの正の整数を入力したら、「break」が機能し、while() 文を脱出することになります。while(b<5)文を継続するには11,12行は不要であるということです。
 また、main()関数内の「int a,b,c」変数は、そのままではデタラメな数値が入った不定なものとなっています。ですから、その都度、bだけではなく cも0に設定しなければならないんですよ(b=c=0;)。この設定を抜くと答えが実行毎に変わったりします。「C言語は、手のかかる言語である」ことを前提にプログラミングしてください。
 でも、第1問はクリアできたようですし、第3問の for()文は、この第2問の while() より簡単ですから7~8割は理解できたというところですよ。頑張ってください。


001: #include<stdio.h>
002: void main(void) // おまけ。末尾に「return 0;」なし、引数もなし。
003: {
004:  int a,b,c;
005:  b=0;
006:  while(b<5){
007:   printf("Enter an integer:");
008:   scanf("%d",&a);
009:   if(a<0)
010:    c=a+c;
011:   else
012:    break;
013:   b++;
014:  }
015:  printf("%d\n",c);
016: }

通報する

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 01:04

>elseの部分をどうすればいかわからないんです…
回答しちゃうと・・・不要です(あると正の値入れた段階でプログラム終了します)

通報する

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:53

#10追記
どうも気が付かなくて追記になってしまう
更に余分な処理が入ってました if文のelse処理でどうなるかよく考えましょう

通報する

この回答への補足

ありがとうございます

elseの部分をどうすればいかわからないんです…

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:50

>と作ってみたのですが…

・・・・の後に何か続きます?
もし私の意見を求めているのなら・・・・おしい
0クリアしてる変数が足りませんーーーー分かりますよね?

通報する

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:37

追記
>int a,b;
の後で和を代入する変数bを0クリア(代入)してください
そうしないと値が不定です

でもって
課題1は 一回の処理 5回書く(実行する)
課題2は 一回の処理を while分で5回実行させる
課題3は 一回の処理を for分で5回実行させる
ということになります

通報する

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:25

> b=b+aでいいのでしょうか…?
そうです
(b+=a; と書いても同じ意味です)

通報する

この回答への補足

#include<stdio.h>
main()
{
int a,b,c;
b=0;
while(b<5){
printf("Enter an integer:");
scanf("%d",&a);
if(a<0)
c=a+c;
else
break;
b++;
}
printf("%d\n",c);
}

と作ってみたのですが…

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:09

#6訂正
>質問者さんは
>初回の入力が負のときそのif文の中で更に残りの4回分の入力処理を
>使用として長くなっているようです
使用 しようの間違い
さらによく見たらそんな訳でもなさそうでした

なんか書いてあるコードでも200行行きそうな気はしませんが
括弧の書き忘れかなんかですかね?
なんか構文がおかしいですね (if文でprintだけ実行してるみたいですが)
やっぱり上の訂正部分のやり方しようとしてるのかな?

通報する

  • 参考になった:0件
  • 回答者:koi1234
  • 回答日時:2010/01/09 00:02

>これじゃややこしくなるだけでしょうか…?
ですね・・・・

まず5回の入力で 変数a と変数b 両方の変数使ってしまってますが
そんな必要ありません

1.変数a に値を入れてください --- キーボードからの入力値格納変数

2.入力された値が負の値であるかをif文使って判断します

3.負だった場合 変数 b に 入力された 変数a を加算します
1に戻る(5回同じ事を行う)

それで終わりとなります

質問者さんは
初回の入力が負のときそのif文の中で更に残りの4回分の入力処理を
使用として長くなっているようです
そんな必要ありません(一回の入力で判断 必要に応じて和の取得処理を完結させてください)

通報する

この回答への補足

>負だった場合 変数 b に 入力された 変数a を加算

これがよくわからないです…
b=b+aでいいのでしょうか…?

   1  2 次の回答→
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ