• ベストアンサー

CをC++に訳して~

C言語で do{ A } while( B ); をC++に直すとどうなるのでしょうか。 私は while( B ){ A } となると思ったのですが どうも違うようです。 分かる方、是非教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

#4です。 A while(B){ A } の誤りでした。

0000ai
質問者

お礼

お答えありがとうございました。 とっても参考になりました。

その他の回答 (6)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.7

No.6です。 A; do{  A; } while( B ); は A; while(B){  A; } に訂正します。

0000ai
質問者

お礼

的確に応えていただき、ありがとうございました。 とても参考になりました。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.6

皆さんが回答しているのは、第一に do{  A; } while( B ); という記述の仕方はCとC++では変わらないということ。 第二に、上と同じ処理を A; do{  A; } while( B ); と書き直せるということ。 これもCとC++で違いはありません。 第3に do{  A; } while( B ); は少なくとも1回は無条件にAを実行するのに対し、 while( B ){  A; } は最初からBが偽(0)なら一度もAを実行しないという違いがあるということ。 これもCとC++で同じです。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

>++に直すとどうなるのでしょうか。 C++に直すわけではありませんが、(CでもC++でも同様) A while(b){ A } になります。 つまり、無条件にAを必ず行います。

  • msykykt
  • ベストアンサー率35% (15/42)
回答No.2

どちらもCの文法ですし、両方ともC++で問題なくコンパイルできます。 ちなみに最初のループはBの如何に関わらずAが一度だけ実行されますが、2つ目のループではBがFALSEの場合、実行されないと言う違いがでますね。

0000ai
質問者

補足

最初のループでコンパイルできるのはわかっていますが、 それをC++で書くとどうなるのか という質問だったのです。わかりづらくてすみません。 msykyktさんがおっしゃっているとおり、 2つ目のループは最初のループと結果が違ってきてしまうのですが、 最初のループと同じ結果をC++ではどう書くのでしょうか。 よかったら教えてください。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.3

C++はCの構文がすべて使えます。 do { A; } while( B ); でいけるはずですが…

参考URL:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/statem_13.asp
0000ai
質問者

お礼

参考URLまで載せていただき、ありがとうございました。

  • uzk
  • ベストアンサー率40% (6/15)
回答No.1

C++でも同じです。 書き直す必要はありません。 殆どの場合、Cの文法はC++でも通用します。

関連するQ&A

  • C言語について…

    C言語についてですが… while文とdo while文はどう違うんですか?プログラムの書き方が違うくらいでしょうか? またwhile文とdo while文のどちらかしか使えない場合、どちらを使いますか?理由もお願いします。

  • c言語のプログラムで

    c言語で 2つの整数を読み込んで小さいほうの数以上で大きいほうの数以下の整数をすべて加えた値を表示するプログラム で最後の表示の仕方がわかりません。 実行結果は 整数1:37 整数2:28 28以上37以下の全整数は325です。と表示されるはずです。 この表示の3行目の28と37の表示がどうやればよいのかわかりません。 #include <stdio.h> int main(void) { int a, b; int sum=0; printf("整数1:"); scanf("%d",&a); printf("整数2:"); scanf("%d",&b); if(a>b) do{ sum=sum+b; b=b+1; }while(b<=a); else do{ sum=sum+a; a=a+1; }while(a<=b); printf("%d以上%d以下の全整数の和は%dです。",a,b,sum); return(0); } 全整数の表示はできます。 do文の中でa=cとかにしてやってみましたが、うまくいきませんでした。 お願いします。

  • 2進数の足し算(C言語)

    C言語初学者です。 タイトル通り、2進数の足し算をするプログラムを作っていますが、行き詰ってしまいました。 特に、桁上げをどうするか悩んでいます。 今の自分の考えでは、入力された数値を10で割り、その余りを足していけばできると思っていたのですが、やはり桁上げや繰り上がりに悩んでいます。 全然できてませんが以下ソースです。 #include <stdio.h> int main(void) { int a, b, i; do { printf("8桁以下の非負の2進数を入力してください(1つ目): "); scanf("%d" ,&a); if (a < 0) puts("負の数を入力しないでください。"); } while (a < 0); do { printf("8桁以下の非負の2進数を入力してください(2つ目): "); scanf("%d" ,&b); if (b < 0) puts("負の数を入力しないでください。"); } while (b < 0); a = a % 10; b = b % 10; よろしくお願いします。

  • C++について・・・。

    学校の課題で、 ゼロが入力されるまで整数を読み込み,その総和と最大値を出力するプログラムを作成しなさい。do while文を使う。 というものが出されました。  [3.1] OS: Windows   [3.2] 言語: C++ Visual C++ 2005 なのですが…手も足も出ないです…誰か教えてください。

  • C言語

    C言語 10進数n(0<n<256)を2進に変換させろ 配列を使うな do-whileでnを入力させることはできましたが、そこから先がわかりません。 for文を使えと言われたのですが……

  • pascalにおけるwhile文の条件について

    「cがA,B,Cのどれかの場合はwhile文の内容を繰り返す」というプログラムは while c in ['A','B','C'] do begin ~ end; と書けますが、「cがA,B,Cのどれかで無い場合はwhile文の内容を繰り返す」というプログラムはどのように書けばよいのでしょうか。私は while not c in ['A','B','C'] do begin ~ end; だと思ったのですが、エラーが発生したのでどうやら違うようです。 わかる人がいれば教えてください。よろしくお願いします。

  • C言語の演算式

    C言語のプログラミングで、4×(1-1/3+1/5-1/7+・・・・・)の式を100000項まで合計した式を作りたいです。答えは3.141591になります。 自分で作成してみたのですが、なかなか上手くいきません。 どうすればよいでしょうか?以下自分の作成したプログラムを「」内に載せます。 答えは0になってしまいます。 「 #include <stdio.h> int main(void) { int i=0,a=1,b; do{ i++; if(i%2) { a+=(-1)/(2*(i-1)+1); } else{ a+=1/(2*(i-1)+1); } }while(i<100000); b=4*a; printf("π=%f\n",b-1); putchar('\n'); return (0); } 」

  • FortranにあってCにない関数?について

    10年間Fortran90でプログラミングをしてきましたが、 C言語を使う必要があって、プログラムを書き直し中の者です。 入門書を数冊読んでいて疑問に思ったのですが、Fortranには、 A=SUM(B) と書けば、配列Bの全ての総和をAに返す、という関数があるのですが、C言語に同じような関数はないのでしょうか?(標準ライブラリに無いという事はないのでしょうか?) Fortranと比べてCは組み込み関数が少ないという印象を持ったのですが実際そうなのでしょうか? また、Fortanでは配列の和をとる時、 do i=0,n a(i)=b(i)+c(i) end do を一行で、 a(0:n)=b(0:n)+c(0:n) と書いても良いですし、もし定義されている全部の配列の要素が対象なら a=b+c と一行で書いても良いのですが、c言語では似たような書き方はできないのでしょうか? つまり、多次元配列を扱う時、Fortranでは単に「a=b+c」と書けば済むところを、Cでは for (i=0,i<=n,i++){ for (j=0,j<=n,j++){ for (k=0,k<=n,k++){ a[i][j][k]=b[i][j][k]+c[i][j][k]; }}} と書かなくてはいけないのか?と悩んでおります。 私がCの機能を知らないだけなのか、Cとはそうゆうことが出来ないのか、浅学なため判断できません。 ご教授ください、どうぞよろしくお願いいたします。

  • C言語のプログラムを作りました。

    以下のプログラムは動くかどうか、確認して頂けませんか? おかしい部分があれば指摘して下さい。 また、自分で考えたのですが、このプログラムはどのように考えられたのか、作成方針は考えられますでしょうか? なぜ聞くかというと、皆さんが考えられるように自分も考えているのかどうか、作成方針を聞くことにより判断したいのです。 →作成方針を記述の上、プログラムについてご指摘の方、よろしくお願い致します。 #include<stdio.h> main() { int a,b,c; b=0; c=1; printf("a="); scanf("&d",&a); do{ c=c+1; b=a%c; }while(!(b==0)); if(c==a); printf("sosu-desu n); }else{ printf("sosu-denai n); } }

  • C言語の無効な値が入力されたときの繰り返しについて

    C言語で最初に入力した整数の5倍になるまで何度も入力を促すプログラムでわからないところがあるのですが #include  "stdio.h" int main() { int a ; do { printf("input a:"); scanf("%d",&a); } while( )     ← printf( ) ←この二つの()内の文字をどうすればよいのか分かりません return 0; } 教えていただけないでしょうか

専門家に質問してみよう