- 締切済み
while文の作成について
キーボードに整数を打ち込み、0を打ち込むと終了し、その合計を出すプログラムを以下のように作りました。 #include<stadio.h> int main(void){ int num=0 int sum=0 printf("整数を入力"\n"); do{ scanf("%d",&num); sum +=num; }while(num); printf("合計は%dです。\n",sum); returen 0; } 次に負の値が入力されるまで整数を読み込み続け、その合計をを求めるプログラムを作りたいのですが、whileのところを }while(num>=0); としてみたのですが、うまくいきません。また分かり易くするため、入力した整数の個数も表示できるようにしたいです。どうすればよいでしょうか。詳しい方、教えてください。
- tarakou
- お礼率70% (82/116)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>次に負の値が入力されるまで整数を読み込み続け、その合計を求める・・ ここからは、最後の「負の値」までの「合計を求める」と読めますが、そうではないのですね。 「負の値」は、単にストッパーの役割?で、合計には加えたくない。 だから、 >・・、うまくいきません。 ですね。 もし、これが邪推でしたら以降、無視して下さい。 -------------------------------------------------------------------- ヒント ・入力、積算、正負判定(質問者様のプログラム) ・入力、正負判定、積算 まっ、「判定」を while() で行っているため、それをうまく使いたい、というのは判りますが・・。 iCnt = 0; ← 「入力した整数の個数」用変数 do{ scanf( "%d", &num ); num が負であったら break; ← 判定★ iCnt++; ← 実際に合計する(した)ものをカウント、下のステップの下でも・・。 sum += num; }while( 1 ); ←でも・・、正負判定の役割を★に移す。
- Tacosan
- ベストアンサー率23% (3656/15482)
「うまくいかない」というのは, 何がどう「うまくいかない」のですか? あなたがどのような動作を期待しているのか, そして実際の動作がどうであるのかをちゃんと書いてください.
補足
回答ありがとうございます。詳細が欠けていてすみません。 今の状態で実行しますと、例えば、 整数を入力 5 4 -8 合計は1です。 となります。そうではなくマイナスが出る前、すなわちここでは5と4の合計が出せるようにしたいというのが一点。 もう一点は5、4、ー8の横に例えば整数1、整数2、整数3のような個数を表示できるようしたいというものです。
関連するQ&A
- c言語 for文
/*指定された個数だけ整数を読み込んで合計値・平均値を算出*/ #include <stdio.h> int main(void) { int i; int sum=0; int num,tmp; printf("整数は何個ですか:"); scanf("%d",&num); for(i=0;i<num;i++) {printf("No.%d:",++i); scanf("%d",&tmp); sum = sum + tmp; } printf("合計値:%d\n",sum); printf("平均値:%.2f\n",(double)sum / num); return(0); } C言語の勉強を始めたばかりのものです。 指定された個数だけ読み込めません 汗 前置と後置をまぜたあたりがよくないのかなと思うのですが。。。 どうしておかしくなるのか教えてください。 内部でどういった処理が行われているのかまだあまりわからない状態です。 ちなみに4と入力した結果は以下です。 整数は何個ですか:4 No.1:4 No.3:3 合計値:7 平均値:1.75
- 締切済み
- 数学・算数
- C言語初心者です。次の問題で質問です。
(問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。
- ベストアンサー
- C・C++・C#
- for文
#include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp; } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。
- ベストアンサー
- C・C++・C#
- ループ
#include<stdio.h> int main(void) { int i=1,sum=0; int num=1; while(num>0) { printf("整数を入力してください。(マイナスの値で終了)\n"); scanf("%d",&num); printf("%dが入力されました。(%d番目の繰り返しです)\n",num,i); sum+=i; printf("1から%dまでをたすと%dです。\n",i,sum); i++; } printf("繰り返しが終わりました。\n"); printf("加算値は%dです。\n",sum); printf("%d回繰り返しました。\n",i); return 0; } このプログラムで101以上の数値は加算しないようにするにはどうすればいいですか。
- ベストアンサー
- C・C++・C#
- while文を使った問題なのですが・・
はじめまして。 C言語初心者です。 while文のところまでやっとたどり着きましたが、次の問題がどうしても解くことができません。 ********************** 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 ********************** #include<stdio.h> int main(void) { int a; scanf("%d", &a); while(a!==0){ printf("%d*\n", a); } } こんな感じでつくってみたのですが、whileの条件部分がさっぱり分かりません。 int a の数字文だけ、*で表示する、というのも方法が思いつきません。 アドバイス、お願いいたします。
- 締切済み
- C・C++・C#
- C言語のプログラミング (基礎)教えてください。
以下のような問題があります。 プログラムを作ってみたのですが、 コンパイルすると無限ループになったり、 正しく結果が出ません。 どのように直せば良いか教えていただけると助かります。 よろしくお願いします。 整数が入力される度に今までの合計を出力するプログラムを作成しなさい。なお、0 が入力されたら終了するものとする。 ただし、繰り返しの命令は while 文を使用し、条件は常に真 ( 1 ) とし、break 文を使うこと。 ▼実行例 整数:1 合計:1 整数:2 合計:3 整数:3 合計:6 整数:0 ******************************** #include<stdio.h> int main(void) { int n,sum; sum=0; while(1){ printf("¥n整数:"); scanf ("%d", &n); sum=sum+n; printf("¥n 合計:%d", sum); scanf ("%d", &sum); if(n==0){ break; } } }
- ベストアンサー
- C・C++・C#
- C言語初心者です。次のプログラムを簡潔にしたいです
二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。
- ベストアンサー
- C・C++・C#
- C言語(while構文)
#include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); } getch()の代わりに、scanf()を使って整数値を入力させ、負の数が入力されたら終了するプログラム(正を入力したら「次の数値を入力せよ」とだして、繰り返す。)を造りたいのですが、どこを変えればよいか教えてください。
- ベストアンサー
- C・C++・C#
- コンパイルエラー
コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }
- ベストアンサー
- C・C++・C#
お礼
回答ありがとうございます。 >「負の値」は、単にストッパーの役割 はい、そうです。今のままだと負の値も足してしまいますので。 breakを使うということはwhile文でなく、switch文で書くべきなのでしょうか。