トップページ⇒tech
1001コメント289KB

C言語なら俺に聞け(入門篇) Part 30

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/06/13(金) 23:38:08
言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいならこちらへ。
 C/C++の宿題を片付けます 108代目
 http://pc11.2ch.net/test/read.cgi/tech/1211980711/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 29
http://pc11.2ch.net/test/read.cgi/tech/1212329099/
過去スレ
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
0002デフォルトの名無しさん2008/06/13(金) 23:38:32
Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/
Part 15 ttp://pc11.2ch.net/test/read.cgi/tech/1182719692/
0003デフォルトの名無しさん2008/06/13(金) 23:38:57
Part 16 ttp://pc11.2ch.net/test/read.cgi/tech/1184003625/
Part 17 ttp://pc11.2ch.net/test/read.cgi/tech/1185286631/
Part 18 ttp://pc11.2ch.net/test/read.cgi/tech/1187213990/
Part 19 ttp://pc11.2ch.net/test/read.cgi/tech/1190342593/
Part 20 ttp://pc11.2ch.net/test/read.cgi/tech/1192455273/
Part 21 ttp://pc11.2ch.net/test/read.cgi/tech/1194384258/
Part 22 ttp://pc11.2ch.net/test/read.cgi/tech/1196489491/
Part 23 ttp://pc11.2ch.net/test/read.cgi/tech/1198295362/
Part 24 ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/
Part 25 ttp://pc11.2ch.net/test/read.cgi/tech/1203343907/
Part 26 ttp://pc11.2ch.net/test/read.cgi/tech/1206196600/
Part 27 ttp://pc11.2ch.net/test/read.cgi/tech/1209429897/
Part 28 ttp://pc11.2ch.net/test/read.cgi/tech/1211198816/
Part 29 ttp://pc11.2ch.net/test/read.cgi/tech/1212329099/
0004デフォルトの名無しさん2008/06/13(金) 23:43:46
otu>>1;
000542008/06/13(金) 23:47:50
1,文字列に母音(a,i,u,e,o)が何個含まれているかをint型数値として返すような関数VowelNumber()を作成せよ。
また,この関数を使用して,キーボードから入力された文字列に
母音が何個含まれているかを表示するプログラムを作成せよ。


2,
(1)
ある自然数に対して,その自然数の約数は何個かを関数値として返すような
関数FactorQuantity()を作成せよ。
例として20の場合は{1,2,4,5,10,20}なので個数は6となる。
(2)
ある自然数Nの約数の個数が2個だけ(1とNだけ)の場合,Nは素数である。
そこで(1)の関数FactorQuantity()を利用してNが素数がどうかを判定し,
Nが素数なら1を返し,素数でなければ0を返す関数Prime()を作成せよ。
(3)
(2)の関数Prime()を用いて次のプログラムを作成せよ。
2つの自然数a,bを入力させ(a<bとする),a以上b以下の素数を全て表示するプログラムを作成せよ。
※ソースファイルは1つのファイルにまとめよ。

という2問です。
OSはリナックスです。
いままで習ったのは、printf、scanf、ループ文、if文、配列などです。まだポインタは習っていません。
解説も少し加えてくれるとありがたいです。
よろしくお願いします。
000652008/06/13(金) 23:48:41
>>5 すいません5でした。
0007デフォルトの名無しさん2008/06/13(金) 23:49:32
>>5
>>1
0008デフォルトの名無しさん2008/06/14(土) 00:16:08
>>前スレ994
float関数群が追加されたのはC95な。
0009デフォルトの名無しさん2008/06/14(土) 00:16:55
C95なんてあったのか。
0010デフォルトの名無しさん2008/06/14(土) 00:21:24
質問なのですが
数値演算ライブラリと数値計算ライブラリは同一のものなのでしょうか?
数値演算ライブラリと検索しても詳しく出てこなくて
よろしくお願いします
0011デフォルトの名無しさん2008/06/14(土) 00:25:19
日本語がわかるならそんくらい分かるだろ\・・
001252008/06/14(土) 00:32:18
>>7
すいません
こちらへはURLをさしてたんですね…
0013デフォルトの名無しさん2008/06/14(土) 00:33:04
JavaScript なら俺に聞け、な?
0014デフォルトの名無しさん2008/06/14(土) 00:39:45
日本語能力に問題がありすぎる・・・
0015デフォルトの名無しさん2008/06/14(土) 00:44:06
数値演算ライブラリが何か知りたくて検索してみたのですが詳しく書いてあるサイトが無く
数値演算ライブラリと数値計算ライブラリが関係があるような記述があったので…
数値演算ライブラリとは何のことなのでしょうか
よろしくお願いします
0016デフォルトの名無しさん2008/06/14(土) 00:54:44
>>15
もし君がC言語の標準ライブラリのことを言っているのなら、それはたぶん数学関係ライブラリ <math.h> のことだ。
そうでないなら、それがどのようなものであるかは、すべてそのライブラリそのものに依存する。
ライブラリのマニュアルを読むこと。
0017デフォルトの名無しさん2008/06/14(土) 01:01:09
>>15
標準ライブラリの数値演算関数って事ですか、たぶん1年の初期の問題なんでこれなんだと思います
ありがとうございました。
0018デフォルトの名無しさん2008/06/14(土) 01:41:32
いきなり難解なやりとりだね
0019デフォルトの名無しさん2008/06/14(土) 02:09:31
CPUの命令セットにない高機能な数学用関数などを
実現するライブラリのコードとか入ってるんだよね

最近のCPUは浮動小数点用の高機能命令が増えた
から数値演算ライブラリそのものが小さくなってるけど、
昔のCPUは浮動小数点演算そのものの機能がなくて
エミュレータが入っていた

今も組み込み用CPUだと浮動小数点演算ができない
ものはたくさんある
0020デフォルトの名無しさん2008/06/14(土) 02:34:26
浮動小数点のビット列ってどういう法則になってるの?
0021デフォルトの名無しさん2008/06/14(土) 02:40:14
>>20
基本的にはIEEE754とIBMエクセス64形式があるけど
ちょっと長いけど下のリンクを印刷でもしてじっくり読んでくれ
必ず役に立つ

http://docs.sun.com/source/806-4847/ncg_goldberg.html
0022デフォルトの名無しさん2008/06/14(土) 02:45:13
単にIEEE754でぐぐってもよい
山ほど出てくる
0023デフォルトの名無しさん2008/06/14(土) 02:53:11
>>21
なんだか大変そうだけど俺頑張るよ父ちゃん!
0024デフォルトの名無しさん2008/06/14(土) 04:30:42
初歩的な事で申し訳ないのですが
例えばif文でint形変数iが1〜9までの範囲ならtureだとする時はどうすればいいのでしょう。

if(i == 1,2,3,4,5,6,7,8,9)とやってみたところ、なぜか10以上の数でもtureになってしまいました。
0025デフォルトの名無しさん2008/06/14(土) 04:32:26
if(1<=i && i<=9)
0026デフォルトの名無しさん2008/06/14(土) 04:34:45
>>24
if()の中で,で区切って複数入れると一番右のものを判定する。
つまり、
if(i == 1,2,3,4,5,6,7,8,9) は if(9) と同じになり、9は真だから常にtrueになる。
0027デフォルトの名無しさん2008/06/14(土) 04:35:44
カンマ演算子で左から右に読んでって、最後に0以外である9が評価されて必ずtrueになってる
0028デフォルトの名無しさん2008/06/14(土) 04:36:20
>>25-26

おおっ!なるほど。
言われてみれば、そのとおりです。
ありがとうございました。
0029デフォルトの名無しさん2008/06/14(土) 04:37:01
>>27

trueのスペルも間違えてましたorz
みなさん本当に感謝です
0030デフォルトの名無しさん2008/06/14(土) 20:16:39
書き込みが無いな
0031デフォルトの名無しさん2008/06/14(土) 20:44:37
誰かB木のソースもってません?
実行時間比較したいんでお願いします
0032デフォルトの名無しさん2008/06/14(土) 20:57:40
>>31
C言語によるアルゴリズム事典(奥村晴彦)の付録のでは駄目なの?
手数料だけでフロッピーディスクで入手できるけど...
0033デフォルトの名無しさん2008/06/14(土) 21:03:02
>>31
STLじゃだめか?
0034デフォルトの名無しさん2008/06/14(土) 21:33:40
STL で使ってんのは赤黒木じゃなかったっけ?
0035デフォルトの名無しさん2008/06/14(土) 21:40:41
「B木」って「ビーき」なのかな。「〜木」はたいてい連濁させていたんだけど。
0036デフォルトの名無しさん2008/06/14(土) 21:42:39
びーぼく
0037デフォルトの名無しさん2008/06/14(土) 21:49:31
プログラミング言語CのことをC言語って言うことについてどう思いますか?
英語圏では単にCと呼ばれてるみたいなのですが。
話をする場合にはCと言っても問題ないと思うのですが。
JavaやC++の語尾に言語ってつけたりしませんよね?
Cだと一文字なので検索がしづらいということがありますが。
0038デフォルトの名無しさん2008/06/14(土) 22:00:58
だってCってsexの意味もあるじゃん
0039デフォルトの名無しさん2008/06/14(土) 22:01:41
ツェーとか言ってみる
0040デフォルトの名無しさん2008/06/14(土) 22:07:41
参考書 「はじめてのC」
0041デフォルトの名無しさん2008/06/14(土) 22:07:41
wikipediaは、最初「Java言語」だったけどそれじゃ変だろってことで「Java」に変更。
「C言語」も同様の提案があったけど、アホな人が頑張って「C言語」のまま。
0042デフォルトの名無しさん2008/06/14(土) 22:08:08
>>38
確かにそうですが、ある単語が複数の意味を持っているということはよくあることなので。
それに中学生ではないのでCと聞いてセックスって思いませんよ普通。
文脈からプログラミング言語なのかセックスなのか分かると思いますが。

# 「はじめてのC」という書籍があります。
0043デフォルトの名無しさん2008/06/14(土) 22:10:40
「はじめてのキス」という魚の本もあった。まさに釣られた。
0044デフォルトの名無しさん2008/06/14(土) 22:10:54
母なる大地
Cなる言語
言語C
観念ι
勇者ライディーン

「エスペラント語」みたいなもんでしょ。呼び名としてはわかりやすいからいいんじゃないの。

>英語圏では単にCと呼ばれてるみたいなのですが。

むしろ英語圏での「the C language」「the C programming language」を直訳したんじゃないのw
0045デフォルトの名無しさん2008/06/14(土) 22:12:26
>>41
それは正式名称は何かっていう議論だよね。あれはアホじゃないだろうかと思ったけど、
まあ世の中そういうものだと思う
0046デフォルトの名無しさん2008/06/14(土) 22:14:35
K&Rの演習をやってるんだけど、難しいです
これ一通り解けなきゃ何かを作るときとかまずいの?
0047デフォルトの名無しさん2008/06/14(土) 22:19:56
>>46
できあがるものはろくなもんじゃないだろうな
基礎は大事
0048デフォルトの名無しさん2008/06/14(土) 22:21:24
>>46
全然まずくない。むしろ(ry
0049デフォルトの名無しさん2008/06/14(土) 22:22:30
>>47
>>48
どっちだ・・・
0050デフォルトの名無しさん2008/06/14(土) 22:26:11
C調言語に御用心
0051デフォルトの名無しさん2008/06/14(土) 22:47:11
>>46
まずいって、何がまずいの?
C言語理解してなくても生きていけるし、
K&Rの演習が分からなくてもプログラムは書けるよ?
0052デフォルトの名無しさん2008/06/14(土) 22:51:29
解かなくても別に問題はないけど
解こうとして解けないのは大問題だろ
0053デフォルトの名無しさん2008/06/15(日) 01:00:10
>>46
ドラクエで言うと
レベル1で「がいこつ」と戦うと「まったく勝てない」んです。
けど、ある程度レベルが上がると「何とか勝てる」んです。
もっとレベルが上がると「余裕で勝てる」んです。

「がいこつ」に余裕で勝てるようになると今度は
「まほうつかい」に「何とか勝てる」ようになったりするんです。

「がいこつ」に勝てないのに「まほうつかい」に挑んでもしょうがないんです。
がんばってくださいよ。ラダトームの勇者さん。
0054スライム2008/06/15(日) 01:02:13
オレのことは無視かよ
0055デフォルトの名無しさん2008/06/15(日) 01:02:39
がいこつ>>>まほうつかい
0056デフォルトの名無しさん2008/06/15(日) 01:04:29
PRGなんてレベルを上げれば、ほとんどの敵を余裕で倒せるが
中には特殊な道具が必要、イベント上絶対に倒せない(ことになっている)とか
プログラミングに於いては、必要なライブラリやAPIがなきゃ厳しい、無理なんて
ものもあるしぃ〜。いくらプログラマのレベルを上げても駄目なこともあるのさぁ〜
ベイビー
0057デフォルトの名無しさん2008/06/15(日) 01:33:04
>>54
スライムさんはレベル1で勝てちゃうから、ね。
けれど、あなたがいない世界では決して勇者は育たず、永遠に世界に平和が訪れません。
あなたがいたからこそりゅうおうを倒すことができた、それを忘れる事はないでしょう。

>>55
そうだっけ!?そいつぁ大きなミスだったorz

>>56
ようせいのふえがあればゴーレムをすぐ倒せるのに、使い方を知らなかったために
ゴーレムと死闘する羽目になった。つまり、APIの知識が乏しいばかりに
車輪の再開発をするプログラマのことを指しているんですよね?
0058デフォルトの名無しさん2008/06/15(日) 01:40:19
ん〜まぁそんなもん。いくら経験値を稼いでLv.99にしても、それは
無駄とは言えなくとも、他に手段を選べる、必要なものを取り込む
知識や知恵も必要ということさ。そこで、攻撃重視の戦士や武道家
だけでなく、魔法が使えるキャラ、そして攻略本も。
何か参考になる資料や開発環境を整えておくことも重要さ。
0059デフォルトの名無しさん2008/06/15(日) 01:43:24
>>51
K&Rの演習がプログラミングの基礎を抑えてると思ったんです。
ですが、どうやらもう少し簡単なものからやった方が自分にはいいみたいです。

>>52
すみません。未熟者です。

>>53
なるほど。
とりあえずスライム探してきます。
はぐれメタルもいるんですよね、きっと。

>>56
まず、道具の使い方がわかるくらいまでは勉強してみようと思います。
0060デフォルトの名無しさん2008/06/15(日) 11:24:18
有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?
0061デフォルトの名無しさん2008/06/15(日) 11:26:51
シェークスピア全集だってその方法で書けるよ。
0062デフォルトの名無しさん2008/06/15(日) 13:03:23
>>60
天才!
あとは、そのプログラムが自分の望む動きをするかどうかを
自動判定するプログラムを作ればいいだけだな。

頑張れ。
0063デフォルトの名無しさん2008/06/15(日) 13:33:31
量子コンピュータがあれば一瞬だぜ。
0064デフォルトの名無しさん2008/06/15(日) 13:34:37
>>60
激しく既出。(1726年イギリスの鬼痴骸による)
http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%AA%E3%83%B4%E3%82%A1%E3%83%BC%E6%97%85%E8%A1%8C%E8%A8%98
0065デフォルトの名無しさん2008/06/15(日) 16:06:48
>>60
万能検証プログラムがないとゴミプログラムに埋もれて死ねる
0066デフォルトの名無しさん2008/06/15(日) 16:53:16
検証プログラムも生成されるから大丈夫だよ
0067デフォルトの名無しさん2008/06/15(日) 16:56:03
検証プログラムかどうかを検証するプログラムを作らないとな
0068デフォルトの名無しさん2008/06/15(日) 17:00:38
悪意の無いプログラムかどうかも確認する必要があるな
0069デフォルトの名無しさん2008/06/15(日) 17:40:20
式の値が0のときtrueになるというものをif文で書くとき
if (![変数とか])
と書くべきか
if ([変数とか] == 0)
と書くべきかどちらですか?
あとヌルポインタを判定する場合も流儀があれば教えてください。
if (p == NULL)
か
if (!p)
かということ。
0070デフォルトの名無しさん2008/06/15(日) 17:42:36
好みかな。一貫して使えばどれでもいい。
0071デフォルトの名無しさん2008/06/15(日) 18:00:29
>>69
個人的に
◎ if (![変数とか]) <− Ok
○ if ([変数とか] == 0) <− ちょっと冗長な気がする

◎ if (p == NULL) <− Ok
△ if (!p) <− NULLは0なのだろうか!?という問題がある。
0072デフォルトの名無しさん2008/06/15(日) 18:01:56
>>71
NULLは0ではないが、
0はNULLだから...
0073デフォルトの名無しさん2008/06/15(日) 18:03:11
>>71
お前ド素人だろ?w
Cでプログラム書くなよw
周りが迷惑だからなw
0074デフォルトの名無しさん2008/06/15(日) 18:05:05
まぁ全体で一貫してくれ
0075デフォルトの名無しさん2008/06/15(日) 18:22:12
>>71
char *p;
if(!p) { }
はOK. というか C++ では NULL よりは 0 の方が好まれているようです。
>>73
あ な た の 存 在 が 迷 惑 で す。
0076デフォルトの名無しさん2008/06/15(日) 18:23:36
正常な状態を検知するのに否定を使うのはセンスに欠けると思う。
0077712008/06/15(日) 18:27:21
ちょっと調べてみた

NULLの値が0でなくても、
if(!p)
if(p != 0)
if(p != NULL)
は同じ結果になるようです。

サンクス
0078デフォルトの名無しさん2008/06/15(日) 18:28:52
>>75
ド素人をド素人のままのさばらせておくお前もあいつと同じく迷惑な存在。
http://www.kouno.jp/home/c_faq/c5.html#3
0079デフォルトの名無しさん2008/06/15(日) 18:31:32
>>76
trueが正常とは限らないだろう。例えば、
if (!(p = malloc(n))) {
perror("malloc");
return 1;
}
正常だった場合の処理;

もっとも、この書き方は、コーディング規約で禁止しているところもあると聞くが。

それはともかく、
if (!strcmp(a, b)) ...
は頂けないかな。
0080デフォルトの名無しさん2008/06/15(日) 18:38:05
>>78
ド素人のスレなので、そこんとこよろしく
0081デフォルトの名無しさん2008/06/15(日) 18:39:12
if (!strcmp(a, b)) ... で等しい時に真なんだもんな。
直感に反するわ。
0082デフォルトの名無しさん2008/06/15(日) 18:40:06
>>69
んーまあ比較演算子のない条件式を「変」だと思えるピュアな心があればいいんじゃないかな。
ただし、識別子と意味が食い違って紛らわしくなるような場合はいかん。いかんよ。
0083デフォルトの名無しさん2008/06/15(日) 18:40:47
>if(!p)
>if(p != 0)
>if(p != NULL)
>は同じ結果になるようです。

流石ド素人。
なかなか諧謔のセンスがある。
このような頭の悪い人間はプログラミングの世界から手を引いた方がよい。
疑似科学の学者になったほうがよいのではないか?
0084デフォルトの名無しさん2008/06/15(日) 18:42:09
>>71 >>77
まあ逝ってきなさい
http://www.kouno.jp/home/c_faq/c5.html
0085デフォルトの名無しさん2008/06/15(日) 18:47:03
このおばちゃんは元気でやってるの?
この画像がニュースで流れて以来、情報が無いのですが
ちゃんと避難できたでしょうか?
http://2chart.fc2web.com/2chart/obachannnigeteeeeeeeee.html
0086デフォルトの名無しさん2008/06/15(日) 18:58:34
>>83
うっかりミスだとわかるだろうに
天下を取ったようなその書き込み

もっと大きな気持ちで行こうよ
0087デフォルトの名無しさん2008/06/15(日) 19:04:23
いや、人には色々心の傷があるんだよ。触れないでおくも吉
0088デフォルトの名無しさん2008/06/15(日) 19:04:47
>>83のような口調でエラー/警告メッセージを吐くコンパイラがあったとしたら、
俺なら窓から投げ捨てる。
0089デフォルトの名無しさん2008/06/15(日) 19:07:34
いやちょっと欲しいかも
0090デフォルトの名無しさん2008/06/15(日) 19:08:34
>>82
if (isdigit(c)) ...
とかだと比較演算子が現れないけど、これを無理矢理
if (isdigit(c) != 0) ...
とか書く訳?
0091デフォルトの名無しさん2008/06/15(日) 19:11:41
>>86
ごめんなさい、今日ちょっとイライラしているんです。
そもそも>>69を書いたのは私で論争を起こそうと考えたからなんです。
あー、ごめんなさいごめんなさい、CもしたことがないのにCのポインタがナントカとか言って
ごめんなさい。人間ド素人は私の方なんです。あぁ、こういうことを平然というから味の素並に
嫌われる元なんですね、ごめんなさいごめんなさい。
0092デフォルトの名無しさん2008/06/15(日) 19:15:29
いちいちageる奴にろくなのは居ない
0093デフォルトの名無しさん2008/06/15(日) 19:41:48
>>90
真偽を返す関数は逆に比較すべきじゃない。
0094デフォルトの名無しさん2008/06/15(日) 20:06:42
>>90
それは特殊だなって見ればわかるじゃん
0095デフォルトの名無しさん2008/06/15(日) 20:10:25
書いてもいいし書かなくてもいい
ただ、自分のやり方として首尾一貫するのが大事
0096デフォルトの名無しさん2008/06/15(日) 21:55:51
そそ if(p) と if(p != 0) では同じ実行結果となるけどコンパイラが展開したコードは微妙に違うのをだすよね(オプティマイズの指定にもよるけど)

てことは置いといてもっと気楽に行こうよ。
そう書いたらダメとか、それは間違ってる・・とかより >>74 や >> 95 に一票(もしかすると同一人?)

>>90 は頭を柔らかくね。何年かして、そのプログラム見たときに何か感じるものがあればいいんじゃない?
0097デフォルトの名無しさん2008/06/15(日) 22:03:36
pがポインタ型なら全く同じ意味だから、
まともなコンパイラなら同じコードを生成するよ。
0098デフォルトの名無しさん2008/06/15(日) 22:45:51
逆に、違うコードを吐いたところで9割9分くらいは目くじら立てることないと思う。
0099デフォルトの名無しさん2008/06/15(日) 22:55:03
GetRandom関数の意味を教えてください
0100デフォルトの名無しさん2008/06/15(日) 22:55:37
>>99
スレ違い
0101デフォルトの名無しさん2008/06/15(日) 23:02:35
>>100
すいませn
どこいけばいいですか?
■ このスレッドは過去ログ倉庫に格納されています