• ベストアンサー

問題がとけません

以下の問題がわかりません。 教えていただけますでしょうか? 以下の仕様を満たすプログラムを作成せよ。 キーボードから2整数を読み込み,読み込んだ順に標準出力にそれらの値の10進数表現をスペース文字で区切って1行に書き出し,改行する。読み込んだ一番目の整数の値が1000でなければ,次の2整数を読み込み同様に書き出す。一番目の整数の値が1000のときプログラムの実行を終了する。 ヒント------------------------------------------------- stdio.hをインクルードする。 読み込んだ値を保持するための2つの整変数を宣言して定義する。 2つの整数を読み込んで,その値を書き出すことを繰り返す部分は,次のdo-whileループで実現する。 do { (1) //2整数の読み込み //2整数の書き出し } while(条件); (2) プログラムの実行は上から順に行われるが,(2)で条件が真であれば(1)に戻り,そこから再び下方に順番に実行される。条件が真でなければ,(2)の次の行から下に順番に実行される。したがって,(2)の条件が満たされているかぎり,(1)と(2)の間を繰り返し実行することになる。このdo-whileループは,必ず1回は実行される点で,whileループと異なる。 行中に//があると,そこから行末まではコメントとみなされ書かれている内容は無視される。また,任意の位置に書かれた,一対の/*と*/の間もコメントとみなされる。 この課題の繰り返しの条件は,読み込んだ一番目の整数が1000でないこと。 iを整変数として, i != 1 という論理式の値は,iが1のとき偽,iが1でないとき真である。 2種類ある等値演算子の1つであるこの"!="という2項演算子(演算子の両側に1項ずつの2項を使う演算子)による演算結果は,両側の2つのオペランド(演算子が働きかけるもの)の値が「等しくない」とき真,それ以外のとき偽である。もう一つの等値演算子は"=="で,演算結果は2項が「等しい」とき真,それ以外のとき偽となる。 

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

まず、 ・整変数の宣言方法 ・2整数の読み込み方 ・2整数の書き出し方 は、 http://oshiete1.goo.ne.jp/qa4977613.html で質問された「例題」の中にあります。 たしかに、「2つ」ではありませんが。 プログラムの構造も必要最低限の部分 はここにありますね。 ・プログラムの実行の終了方法 これは、実際には、「繰り返しの方法」 と、「繰り返しの条件」が問題の中に あります。

naka0129
質問者

お礼

確かにありました。 さっきは見ても、なんのことやらわかりませんでしたが、 徐々にわかってきた気がします。 このような形でよろしいのでしょうか? #include <stdio.h> int main() { int a,b; do { scanf("%d%d",&a,&b); printf("%d\n",a); } while(a!=1000); }

その他の回答 (3)

回答No.4

もとの問題は ・「2つ」の変数を読み込む ・「2つ」の変数を表示する ・それを繰り返す ですね。 お書きになったプログラムの1行 づつの意味を考えてみてください。 プログラムの構造としてはこんなも のでしょうが、処理として足りない ところがあります。 答えは、既に、もう一つの質問の なかにあります。

  • tommy1977
  • ベストアンサー率43% (178/410)
回答No.2

えっと・・・ 何から答えればいいか分かりませんが、直では答えません。 ヒント1行目のstadio.hのインクルードからされていません。 また、変数a,bの形に関して”プログラム”から入力するのではなく、 キーボードから入力するので、 int a=1; はそもそも間違い。int a,b;とかにするべき。 (2整数ならmainの定義でも十分だと思うんだけどな) while文の条件も、ヒントにきっかり書いている訳で、 たとえば、整数形が a,b(aが最初に入る変数)とすると、 a != 1000 だったら、aが1000の時 偽、1000ではない時に正ですね。 プログラムの実行終了方法は… 最後まで行ったら終了ですよ(笑) 終了コードをちゃんと返したいのであれば return(0);とでも書いておけばいいわけで。 ところで・・・これって学校の課題?(^^;

naka0129
質問者

お礼

ご回答ありがとうございます。 このような形でよろしいのでしょうか? #include <stdio.h> int main() { int a,b; do { scanf("%d%d",&a,&b); printf("%d\n",a); } while(a!=1000); } はい、学校の課題です。

  • tommy1977
  • ベストアンサー率43% (178/410)
回答No.1

ヒントがそのまま答えじゃないですか。 これまでの授業で習ったこと(聞いていましたよね?) をそのまま当てはめていけば、OKでしょ。 文法に間違いがあればコンパイル時にエラーになりますし。

naka0129
質問者

補足

質問方法が不適切でした。 申し訳ございません。 以下自分でわかる範囲でかいたものです。 (ところどころつぎはぎですが) int main() { int a = 1; int b = 2; do{ printf("%d",a b); } while(=1000); } 下記がわからないところです。 教えていただけますでしょうか? ・整変数の宣言方法 ・2整数の読み込み方 ・2整数の書き出し方 ・プログラムの実行の終了方法 どうぞよろしくお願いいたします。

関連するQ&A

  • 関数の値(scanf)

    初心者なもので、言葉の使い方を間違っていたら申し訳ありません。いいたいことが伝わればよいのですが…。 scanfに関して疑問に思ったことがあります。経験的なことなので、正しいかわからないです。次の(1)と(2)から(3)のことが正しいか教えてください。 (1) int a; do{ printf("整数を入力してください\n"); }while(scanf("%d",&a) ==0); printf("入力した数は、%dです",a) このとき、「(いかなる整数)+(ENTER)」を入力しても、do~whileのループを抜け出す。 (2)また、上のプログラムで、継続条件式の中身を  … }while(scanf("%d",&a)!=0);  … とすると、「(いかなる整数)+(ENTER)」を入力してもループが抜け出せない。 (3)したがって(1)と(2)から、scanf()は入力するだけで、値を真(1)を返す。

  • while文と無限ループの違い

    はじめまして。大学でC++を習い始めたばかりの初心者です。 最近while文とwhile文と使った無限ループを知ったのですが、 両者の違いがイマイチわかりません。 私のイメージですと、while文は条件が真である限り何度でも判定し 条件が偽になればループを抜ける。 一方無限ループもif文を使った条件が真にならない限りbreakしない。 while文の偽と判定する部分がif文で真と判定するだけで、同じような気がするのですが… ド素人の考えで恥ずかしいのですが、違いをわかりやすく教えてください。

  • 三項演算子のカッコについて

    C言語で三項演算子を用いて作成する場合、条件 ? (真の場合) : (偽の場合)のように、括弧をつけてコンパイルするとき、 なぜ括弧がないとコンパイルが通らないか教えてください。

  • 教えてください

    do~while文のループの中にの処理に対して質問させください。 do{ if (Count!=ReceivedCount){ Count = ReceivedCount;   } if (ReceiveData_i==0x51){ break; } }while(ReceiveData_i!=0x51); print("\r\nBye Bye!!\r\n"); 1: Count = ReceivedCountの処理が実行されない。   Count!=ReceivedCountの値は、違います。 2:ReceiveData_i==0x51で、ReceiveData_iが0x51なのに、  breakが実行されない。 3:do~while文から抜け出せないので、print文が実行されない。  ReceiveData_iが0x51です。 何か考えられる原因はありますでしょうか。

  • 問題がとけません

    以下の設問に答えよ。 型はC言語の基本型でchar型を除いたもので答えよ。 1.次の演算結果の型と値を求めよ。 100/10*5 2.次の演算結果の型と値を求めよ。 1.0f/2 3.次の演算結果の型と値を答えよ。 100/10*5.0 4.次の演算結果の値を答えよ。 54321-54321/100*100 5.次の演算結果の値を答えよ。※(int)(式)は,式の値の小数点以下を切り捨ててint型に変換する。 (int)(123/5.0+0.5) 6.次の演算結果の型と値を答えよ。 5<2 7.次の演算結果の型と値を答えよ。 5.0>2 8.変数a,b,cに関して,a<b<cの真偽を評価する論理式を書け。 9.次の文が実行された後,変数i,kの値はいくらになっているか。変数はどちらもint型とする。 i=0; k=0; k=5+(++i); 10.次の文が実行された後,変数kの値はいくらになっているか。変数はどちらもint型とする。 i=5; k=5; k *= i<0 ? (-i) : i; 11.次の文Aは実行されるか。kの型はintである。文法的な誤りはない。 if(k = 0)  文A

  • VBで三項演算子

    CやPerlで三項演算子がありますが、 ret = (1 == 1) ? "真" : "偽"; VBはIFF関数?で同じようなことができますか? 注意点など知りたいです。

  • 和を求める問題

    C言語初心者です・・・。 (1)正の整数値nを読み込んで、1からnまでの和sumを 求めて出力するmain関数を作成して実行。 (2)(1)で作ったプログラムを、異なるnの値を入力して 何回も繰り返すプログラムに変更して実行。 ただし、0または負のnの値が入力されたら、終了。 (入力された数字は出力する) (1)は本を読んで分かりました。 (2)が分かりません。 #include<stdio.h> int main(void) { int i = 1,n,sum = 0; while( n > 0 ) { printf("整数を入力 "); scanf("%d",&n); while( i <= n ) { sum += i; i++; } if( n <= 0 ) { printf("終了\n"); } } printf("合計は%dです\n",sum); return 0; } ↑を試してみましたが、全然うまくいきませんでした。 また、入力した数字を出力する方法が分かりません。 詳しく解説していただければ幸いです。 本を読んで実際に内容を改造したりして、いろいろ動かしてみてはいるのですが、実際にこれを作れと言われると慣れないせいかすごく難しく感じます。 これも、なんかコツがあればついでによろしく お願いします。

  • scanfが実行されません

    Cについて質問です。 whileループに入る前にscanfでchar変数に文字を代入するようにして、その文字でwhileループの条件を設定したのですが、scanfが実行されずにすっ飛ばされてwhileループに入ってしまいます。 同じようなコードををdo-while文で書いてみたところ、一回目のscanfがやはりすっ飛ばされて二回目に入り、そこでscanfが実行されます。 エラーは出ません。何が間違っているのか、さっぱり分かりません。教えてください。

  • do-while文について

    参考書を読んでいて分からないところが有りました。 「配列aの値を先頭から見ていき、その値が-1になるま配列bにコピーしていく。そのとき-1という値もコピーする。という処理をするものです。-1という値もコピーするため、このループは最低1回は実行されることになります。 i=0; do{ b[i]=a[i]; }while(b[i++]!=-1); 」 この場合、a[0]が-1のときにはb[0]に-1がコピーされるかもしれませんが、そうでない場合は「そのとき-1という値もコピーする。」というのは出来ないと思うのですが、どなたかご教授宜しくお願いします。

  • ループの条件設定について

    こんにちは。 題名の通り、ループ条件について質問です。 例えば Rという1次元配列(要素数は4)があり、この配列Rの値が全て0になった場合、ループを抜け出すというようなプログラムを組みたいのです。 上記の例のような要素数が少ない場合はdo-while文で論理演算子を使ってひたすら条件を書けばいいのですが、実際計算させるのは要素数が500とかなので、現実的にはちょっと無理だなと、他の方法を考えているのですが、良い考えが思い浮かびません。。 どなたかアドバイスをお願いします。

専門家に質問してみよう