C言語なら俺に聞け(入門篇) Part 43
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/01/24(土) 19:00:13教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232001038/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 42
http://pc11.2ch.net/test/read.cgi/tech/1231180205/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0951デフォルトの名無しさん
2009/02/06(金) 22:33:280952デフォルトの名無しさん
2009/02/06(金) 22:33:36gcc --help
0953デフォルトの名無しさん
2009/02/06(金) 22:36:12gcc -o hoge.exe hoge.c
オプションの詳細は「man gcc」を実行。(※英語)
あと、Cygwinには標準で「test」って名前のコマンドがあるので注意。
0954デフォルトの名無しさん
2009/02/06(金) 22:36:550955デフォルトの名無しさん
2009/02/06(金) 22:38:53c = a / b;
と割り算したいのですが、
cには小数切り上げた整数を入れたいのです。
c = (int)(a(double) / b + 0.99999999);
↑
こんなん思いついたのですが、0.99999999では完璧ではありません・・・
(a÷bが3.0000000000000000001だった場合等)
そこで諸先輩のお知恵をお貸し頂きたい!
0956デフォルトの名無しさん
2009/02/06(金) 22:41:380958デフォルトの名無しさん
2009/02/06(金) 22:45:540959>>950
2009/02/06(金) 22:47:02アドバイスどおりやったら出来ました。
0960デフォルトの名無しさん
2009/02/06(金) 22:47:59笑ってる意味が誰にもわからない
駅前のあぶないオヤジと同じ
0961デフォルトの名無しさん
2009/02/06(金) 22:51:020962デフォルトの名無しさん
2009/02/06(金) 22:52:49ポインタがわからなくて挫折したんだな
0963デフォルトの名無しさん
2009/02/06(金) 22:55:320964デフォルトの名無しさん
2009/02/06(金) 22:57:16都市伝説。
0965デフォルトの名無しさん
2009/02/06(金) 23:32:180966デフォルトの名無しさん
2009/02/06(金) 23:32:340967デフォルトの名無しさん
2009/02/06(金) 23:32:38俺とか。
0968デフォルトの名無しさん
2009/02/06(金) 23:41:340969デフォルトの名無しさん
2009/02/06(金) 23:51:290970デフォルトの名無しさん
2009/02/07(土) 00:19:320971デフォルトの名無しさん
2009/02/07(土) 00:27:000972デフォルトの名無しさん
2009/02/07(土) 00:28:330973デフォルトの名無しさん
2009/02/07(土) 00:43:030974デフォルトの名無しさん
2009/02/07(土) 00:48:10日本銀行は銀行の銀行だけどダブル銀行って呼んだらおかしいだろ?
0975デフォルトの名無しさん
2009/02/07(土) 00:49:490976デフォルトの名無しさん
2009/02/07(土) 00:56:25↑に限った話じゃないが、セミコロン単体がソースに入っててもコンパイルするけど
C言語(のコンパイラ)って、『何もない』という物を文とみなしてるの?
void型関数を呼び出すのと同じ事なのだろうか???
『;1,2;』(コンパイルOK) 『;1,,2;』(XX) 『;(void)1,(void)2;』(OK)
『for(;;);;』(OK) 『if((void)2);;』(XX)『if((void)2,1);;』(OK)
感覚的には分かる。forはコンパイラで特殊操作かな。ifは当たり前か?
でも全体的にどこかパッとしない。
0977デフォルトの名無しさん
2009/02/07(土) 01:01:00空文を使うと、終了条件満たすまでずっとループしたい場合に
while(MainLoop())
;
なんてことができたりする。
個人的には
while(MainLoop()) {
/* 終了条件満たすまでひたすらループ */
}
みたいに書くけど。
0978デフォルトの名無しさん
2009/02/07(土) 01:44:54でも、
「void型」=「何も返さない」 、 「空白」=「何もない」=「void型と同処理」
だと思ってたんですが、
『空白+セミコロン』は空文だとして、『空白+演算子+値』はどれもエラー、『void+順次演算子+void』は正常。
が腑に落ちない・・・と思ったんですけど、フリーフォーマットを逆算して考えると解決っぽいですね。
0979デフォルトの名無しさん
2009/02/07(土) 02:00:410980デフォルトの名無しさん
2009/02/07(土) 02:31:54式と文を混同しているな。
文は式文、宣言文、複合文、制御文、ラベル付き文、空文の6つに分けられる。
・ 式文 式にセミコロンを付けたもの。
・ 宣言文 変数、型などの宣言を行う文。
・ 複合文 複数の文を { } で囲んだもの。
・ 制御文 if 文, for 文, while 文など。
・ ラベル付き文 文にラベルをつけたもの。(このため、ラベルの次には必ず文が必要になる)
・ 空文 セミコロンのみの文。
void 型の関数呼び出しは式文に当たる。
例えば void foo(void); という関数があった場合、
foo() という式があって、それにセミコロンをつけて foo(); という式文になる。
foo() という式の型は void 。void 式とか言うこともある、立派な式だ。
空文は式にセミコロンをつけたものではないので、式文ではない。
式文と空文は文法上厳密に区別される。
0981デフォルトの名無しさん
2009/02/07(土) 02:37:050982デフォルトの名無しさん
2009/02/07(土) 02:40:36for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
for(k = 0; k < n; k++) {
if(hoge) goto BREAK2;
}
}
BREAK2:; ←これ
}
0983デフォルトの名無しさん
2009/02/07(土) 02:41:160984デフォルトの名無しさん
2009/02/07(土) 02:51:16変数、関数は、その宣言や定義(関数定義では { } の外)に現れるものを除く。
0985デフォルトの名無しさん
2009/02/07(土) 03:24:460986976
2009/02/07(土) 04:13:19すごく分かりやすかったです!式・文の区別はしてたつもりでしたが
おそらく、コンパイラは内部的に空文をvoid型の式文に変換すると考えてました。
文の読み取りで空白をvoidに置き換えるなら、式でもvoidを扱える条件演算子が機能しない理由は?という風に。
ところで、セミコロンは文の終わりを指しますが、文は必ずしもセミコロンで終わるわけではないですよね。
if(/*此処*/) for(i=0;i<N;/*此処*/) while(/*此処*/) が、疑問として残ってます。
あと、switch文やgoto文でループ内にでも強制的に入れますが、
for(i=0;i<N;i++) FLAG: { /*処理*/ } ができる理由が分かりました。
しかし、forの引数にあたる部分(括弧内)は、文ですよね?
空文・式文は入れてラベル付き文が入れないのが、しっくり来ないです。
今までただただ仕様、と考えてましたが・・・・(飛ぶなよ、ってのは確かですけど)
0987デフォルトの名無しさん
2009/02/07(土) 05:16:05式にセミコロンをつけたものが式文
それだけのこと。
文は文だから、上記2つの「セミコロンで終わる文」も含めて、全て「文」。
for文は、「for (式;式;式) 文」という形の文法が規定されていて、
区切りとしてセミコロンが採用されているだけ。
0988デフォルトの名無しさん
2009/02/07(土) 06:47:410989デフォルトの名無しさん
2009/02/07(土) 07:53:190990デフォルトの名無しさん
2009/02/07(土) 08:24:06C言語なら俺に聞け(入門篇) Part 44
http://pc11.2ch.net/test/read.cgi/tech/1233962622/
0991デフォルトの名無しさん
2009/02/07(土) 11:11:270992デフォルトの名無しさん
2009/02/07(土) 12:58:03単にポインタと言った場合には文脈で判断する必要がある。
もちろん、ポインタ値とポインタ変数は区別して呼ぶのがより良いが、
それはポインタに限った話ではない。
0993デフォルトの名無しさん
2009/02/07(土) 13:34:580994デフォルトの名無しさん
2009/02/07(土) 13:44:380995デフォルトの名無しさん
2009/02/07(土) 15:33:43if (a, b) hoge(); の , はコンマ演算子で、
foo(a, b); の , は関数呼び出し演算子の一部としての扱いになる。
従って >>984 で既に説明されている。
0996デフォルトの名無しさん
2009/02/07(土) 15:38:03C99 では for 文は for(初期化文 式; 式) 文 と定義されてたと思う。
初期化文に書けるのは、式文と宣言文と空文だけだけど。
0997デフォルトの名無しさん
2009/02/07(土) 16:27:330998デフォルトの名無しさん
2009/02/07(土) 16:28:59for(;;)について言えば、初期化文が空文で済むが、あとの式が空でもいいのか?
0999デフォルトの名無しさん
2009/02/07(土) 16:41:28後の2つの部分は式(ただし省略可)というような定義のはず。
1000デフォルトの名無しさん
2009/02/07(土) 16:47:34,―-、 .| ./''i、│ r-,,,,,,,,,,,,,,,,,,,,,,,,―ー. ゙l, `"゙゙゙゙゙ ̄^ \
/ \ ヽ,゙'゙_,/ .゙l、 `i、 \ _,,―ー'''/ .,r'"
.,,,、.,,i´ .,/^'i、 `'i、`` `--‐'''''''''''''''"'''''''''''゙ `゛ .丿 .,/
{ "" ,/` ヽ、 `'i、 丿 .,/`
.ヽ、 丿 \ .\ ,/′ 、ヽ,,、
゙'ー'" ゙'i、 ‘i、.r-、 __,,,,,,,,--、 / .,/\ `'-,、
ヽ .]゙l `゙゙゙゙"゙゙゙゙ ̄ ̄ `'i、 ,/ .,,/ .ヽ \
゙ヽ_/ .ヽ_.,,,,--―――――ー-ノ_,/゙,,/′ ゙l ,"
` ゙‐''"` ゙'ー'"
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。