1 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:24:18 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 20 pc11.2ch.net/test/read.cgi/tech/1192455273/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 99代目 pc11.2ch.net/test/read.cgi/tech/1194262698/
136 名前:デフォルトの名無しさん [2007/11/11(日) 04:03:45 ] >>134 レスありがとうございます. sum += i*i*i; の下にprintfを入れてみたけど,そこの分のprintfが実行されてなさそう… ってことは,for自体が実行されてないんですかね?
137 名前:デフォルトの名無しさん [2007/11/11(日) 04:24:04 ] 若干スレ違いかもしれないですが・・・ Borland C++ Compiler 5.5 Borland Turbo Debugger 5.5 BCC Developer を使ってC言語を勉強してるのですが、最近BCC Developerがよくバグります。 プログラムはちゃんと書けてるのに、いざコマンドプロンプトを開くと「問題が発生したため〜〜を終了します。」 と出てきて、そこで終わってしまいます。 こういうのって開発環境を変えた方が良いんでしょうか??
138 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 05:05:52 ] コマンドプロンプトを開いて何をしたらそのエラーが出る? コマンドプロンプトを開くだけで出るならBCCは関係ないが。
139 名前:137 [2007/11/11(日) 05:36:06 ] >>138 レスありがとうございます。 コマンドプロンプト開くだけなら全然大丈夫なんですが 長時間(っていっても2時間とかそんなもん)プログミングしてるとよくエラーになります。 同じプログラムでもちゃんと出力できるときとそうでないときがあっていまいち原因が分からないです。
140 名前:137 [2007/11/11(日) 06:21:33 ] ごめんなさい。自己解決できました。
141 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 10:01:08 ] >>136 そのとーり。>>135 も指摘しているが、for文の条件判断のところの意味をよく理解しておくこと。
142 名前:デフォルトの名無しさん [2007/11/11(日) 10:03:44 ] >>121 >入力波形を正弦波にしてサンプリング周波数の 1/(2^n) にしてもそうなる? はい。純粋に周波数がf,f1,f2...の正弦波をFFTにかけています。 規格化の方も分かってます。
143 名前:86 [2007/11/11(日) 11:13:09 ] 昨日質問した者ですが、やはり足し算などをすると出力がおかしいみたいです。 このようになるのですが間違っている部分ありますか? www.imgup.org/iup500370.png 宜しくお願いします。
144 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:17:49 ] >>143 printf("%d\n", d); // & いらない
145 名前:86 mailto:sage [2007/11/11(日) 11:21:45 ] >>144 昨日も同じレスもらってたのに気付きませんでした…。 今やったらできました。「&」でしたか… ありがとうございました!!
146 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:44:53 ] 市ねよ &d
147 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:53:20 ] >>135 >>141 レスありがとうございました. forの条件判断は,反復の終了条件ではなく,継続条件なのですね. つまり,その条件が偽になったら終了と. つまらない質問に答えていただき,ありがとうございました.
148 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 13:19:24 ] ちょっと質問させてください。3つの数の最大公約数を 求めるプログラムしてたんですが、下記のこれでもいけますかね? #include<stdio.h> #include<stdlib.h> #define n 3 int main(void { int kazu[n]; int i=0, c,num; while(i < n){ printf("入力 %d < ", i+1); scanf("%d", &kazu[i]); i++; } for(i=1; i< n; i++){ while(kazu[i] != 0){ c = kazu[i]; kazu[i] = kazu[0] % kazu[i]; kazu[0] = c; } } printf("gcd = %d\n",kazu[0]); return 0; }
149 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:18:26 ] 被って申し訳ありませんが質問させてください #include <stdio.h> #define INPUT_CNT 3 int main(void) { int num[INPUT_CNT]; int cnt; for(cnt = 0 ; cnt < INPUT_CNT ; cnt++) { printf("Input number%d : ",cnt+1); scanf("%d",&num[cnt]); } printf("("); for(cnt = 0 ; cnt < INPUT_CNT ; cnt++) { printf("%d +",num[cnt]); } printf(")"); printf("\n"); return 0; } 出力結果 Input number : 10 Input number : 20 Input number : 30 (102030) ↑102030の間に+を表示させるにはどうしたら良いですか?
150 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:23:40 ] 初歩的な質問ですみません。 printfの変換仕様のフィールド幅の部分をマクロで 置き換えたいんですが、方法はありますでしょうか? printf("値: %05d\n", number); を、 define FIELD 5 printf("値: %0FIELDd\n", number); といった感じに。(↑上手く動作しません。)↓はコンパイルできませんでした。 printf("値: %0"FIELD"d\n", number); ちなみに、コンパイラはgccです。よろしくおねがいします。
151 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:26:59 ] >>149 僕がやったところ、下記のような出力結果になってますよ。 Input number1 : 10 Input number2 : 20 Input number3 : 30 (10 +20 +30 +)
152 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:27:08 ] >>150 printf("値: %0*d\n", FIELD, number); でいけたかと
153 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:29:56 ] >>152 いけました! ありがとうございます!!
154 名前:149 mailto:sage [2007/11/11(日) 16:50:50 ] >>151 あっそうなんです どうしても+が一つ多くなってしまうんですが (10 +20 +30) こういうすっきりした形にしたいんですが・・・
155 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:53:28 ] for(cnt = 0 ; cnt < INPUT_CNT - 1 ; cnt++) printf("%d +",num[cnt]); printf("%d", num[cnt]);
156 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:53:53 ] for(cnt = 0 ; cnt < INPUT_CNT ; cnt++) { if(cnt>0){ printf(" +"); } printf("%d",num[cnt]); } これでいいんじゃない
157 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:18:52 ] おすすめできないが、こういう書き方も。 for(cnt = 0 ; cnt < INPUT_CNT - 1 ; cnt++) { printf("%d + ",num[cnt]); } printf("%d",num[cnt]);
158 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:21:12 ] ループの中に無駄な分岐突っ込むよりは、はるかにマシだろ。 まぁ、155が見えないバカにはわからないだろうが。
159 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:03:37 ] VC++2005EE の ^Z の問題は結局どうなったの?
160 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:09:45 ] >>154 もっとおすすめできないが、 return文の2行上のprintf文をこうするとか。 printf("\b)"); \bってのはカーソルを1文字戻すエスケープシーケンスね。
161 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 19:22:26 ] 関数定義で bool hoge(int array[const]) { ... } とやっても良いらしいのだけれど array[const]ってどういう意味の配列になるの?
162 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 19:26:19 ] mainから整数型の配列受け取るだけじゃね?って思ったら受け取る時は普通ポインタ使う品
163 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 19:52:40 ] >>161 bool hoge(int * array)と全く同じ。 >>162 何故main限定?w >>160 お勧め云々以前にダメすぎ。
164 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:03:14 ] >>163 bool hoge(int * const array) というわけでもない?
165 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:07:38 ] 67です 遅くなりましたが、レスさんくすです >>69 VisualStudioは残念ながら所有していません ExpressEditionで試してみます >>71 どうもです 面白そうですね 試してみます その他にも知り合いのJava使いからOpenGrokなるツールを紹介してもらいました これらを参考に仕事がんばらせていただきます どうもありがとうございました
166 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:17:56 ] >>161 >>163 int *const arrayと同じ。 C99から導入された書き方。
167 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:28:30 ] >>166 サンクス。C99からだったか・・。 どうりでわからんわけだ。C99の資料も欲しい。
168 名前:デフォルトの名無しさん [2007/11/11(日) 20:51:19 ] コボルはデータを読み込んで演算させて吐き出すことが主ですがC言語はどうですか また、実務で使われている開発環境はVC++ですか、ボーランドのやつですか エクリプスですか
169 名前:149 mailto:sage [2007/11/11(日) 21:53:42 ] 「-」を入れると出来るんですね 本当にどうもありがとうございました
170 名前:デフォルトの名無しさん [2007/11/11(日) 21:54:20 ] 一時停止させる関数とそのヘッダファイル教えてください
171 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:59:29 ] 何を一時停止?
172 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:00:21 ] >>170 sleep()でググってみそ。
173 名前:デフォルトの名無しさん [2007/11/11(日) 22:00:35 ] while(){ printf("hoge"); 0.5秒待つ ←これを実行するための関数とヘッダファイルです }
174 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:02:10 ] putc(' ', NULL); //stdio.h
175 名前:デフォルトの名無しさん [2007/11/11(日) 22:02:45 ] >>173 システムに依存する。
176 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:04:58 ] >>173 windows.h Sleep(500);
177 名前:173 [2007/11/11(日) 22:06:23 ] ありがとうございます
178 名前:デフォルトの名無しさん [2007/11/11(日) 22:25:26 ] >>172 ゲイツに聞こうぜ あんだけ話題になったんだし matome.info/HatsuneMikuImageSearch/
179 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:46:32 ] 最近初めたばかりなんですが int double floatについて教えてください。 int型は整数型ということを調べていてよく見たのですが int a=0.5 や int b=0.00000005 でもエラーが出ません。 また、範囲が狭いということが書いてあったのですが int a=1234567890 と大きい値を入れても大丈夫でした。 どれくらい大きい値まで大丈夫なのでしょうか。 それと小数点を扱うときはdouble と floatを使うとあったのですが 二つの違いもよくわかりません お願いします
180 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:50:35 ] >>179 www.aso.ecei.tohoku.ac.jp/~yoshi/C/double.html
181 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:52:33 ] そこには普通floatって書いてあるけど、 実際には理由がなければdoubleを使うのが普通。
182 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:59:55 ] >>179 浮動小数点なのでfloat (↑1.1346*10^5とか) doubleは倍精度(おもに小数部分が)なので
183 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:05:11 ] stdio.cとかstring.cってどこにあるの? *.hは/usr/includeにあるけど本体がどこにあるのかわからない。
184 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:05:58 ] > 倍精度(おもに小数部分が)
185 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:06:52 ] >>183 検索しても見つからなかったら、インストールされてないんじゃない?
186 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:07:57 ] >>185 いやトラブルにあったとかそういうことじゃなくて ソースを読むために居場所を知りたい。
187 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:22:59 ] >>179 >int a=0.5 や int b=0.00000005 でもエラーが出ません。 エラーは出ないけど、だまって整数に切り捨てられる。
188 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:26:29 ] エラー出ないのか Cでもいつもキャストしてるから気づかなかった
189 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:26:36 ] >>186 いやだから、ライブラリのソースはインストールしてないと入ってない
190 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:26:48 ] >>186 標準関数のソースは、OSなりコンパイラをインストールするときに、オプションで指定しないと入らないんじゃないの? なんでもいいから見たいってことなら、ネットで探せば出てくると思うけど。
191 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:27:56 ] >>186 そんなものない。 ファイルに書き出すにしても、OSのAPI呼び出したりアセンブラで書いたりと C言語じゃないことやってるんだから、Cのソースファイルとしては存在しない。
192 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:32:11 ] >>189 >>190 そうなのか、全然知らなかった。 インストールしないといけないのか。thx!
193 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:38:40 ] >>179 doubleの方がfloatより精度が高い。 だから計算に時間がかかるかといえばそうでもなくて、 CPUに乗ってる数値演算プロセッサが32bit精度だったり、 C言語のライブラリがdouble前提で作られたりしてて、 floatで計算すると、 float-double変換→計算→double-float変換 となってdoubleよりも遅くなることが多かった。 けど、最近はSSEなどの演算命令などが出てきたため、 floatの方が速い場合もあるらしい。
194 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:42:51 ] ごめん、ウソついた。 FPUは80bitだから、「CPUに…」の行は無視して。
195 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:48:02 ] 179ですが皆さんありがとうございました。 イメージできてきました。 intが8バイトや、256ビットやら、バイトとビットがよくわかってもいない中で わけがわからなくなっていましたが 精度の違いってこのbitの部分が違うということですよね? 足し算、掛け算やら計算を格納するところはdoubleにしてやるように気をつけます。 ありがとうございました
196 名前:デフォルトの名無しさん [2007/11/12(月) 00:34:47 ] ランダムに-1.0から1.0までのdouble値を生成するコードを考えてくれたまえ
197 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:40:02 ] (double)rand() / RAND_MAX * 2 - 1
198 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:43:52 ] char *ptr = "ghijkl"; が可能で char *ptr; scanf("%s",ptr); がダメなのはなんで?
199 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:46:55 ] >>198 char *ptr = "ghijkl"; は、コンパイラがどっかに用意した"ghijkl"って領域の 先頭アドレスをptrに代入してる。だからOK char *ptr; はptrってポインタ(アドレスを入れる箱)は用意したけど、まだ中身は不定。 文字列を入れる場所が確保されてないから、コピーできない。
200 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:47:28 ] そのポインタは確保された領域を指していないから
201 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:50:22 ] char *ptr; scanf("%s",ptr); を可能にするにはmallocやnewやらで領域作らないとダメなの? それだと char ptr[256]; scanf("%s",ptr); でやってしまっても問題ないなぁ… なんか領域が可変な1次元のcharでもあればいいのに
202 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:52:16 ] >>201 標準ではないが asprintf が便利
203 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:56:39 ] >>201 C言語スレだからnewは無いけどな。 char* ptr=(char*)malloc(256); みたいにしないといけない。使い終わったらfreeもしなきゃいけない。 可変配列なんて裏でメモリの確保・開放を勝手にやるってことだからな。 高級アセンブラたるCにそんな機能は無い。必要なら自分で作るんだよ。
204 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:05:46 ] C言語スレだから、C++は違うのですね。すんません。 理解できました
205 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:12:22 ] 配列と要素数と確保開放を一括で管理するオブジェクトでも作ればいいんじゃね?
206 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:24:49 ] おぶじぇくとがよくわかってないなぁ。 「関数がついた構造体」みたいな感じで認識してるけど オブジェクトに何か値をぶち込む。 ↓ 何かよくわからないけど、いろいろ処理する(コンストラクタやらデストラクタやらして) ↓ 何か処理したもんが出てくる って認識であってる?
207 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:26:50 ] >>206 スレ違い。
208 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:33:40 ] 構造体配列struct tfield data[10]で メンバをchar word[20] として そのメンバとaとかbと一致するかどうかをみたいんだけど どうすればいいですかね?
209 名前:抽象的な質問には抽象的な回答を mailto:sage [2007/11/12(月) 01:36:15 ] 比較すればいいと思います。
210 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:04:01 ] #include <stdio.h> #include <math.h> int main(void){ long double r,pi,t; r=2.859492; pi=3.141590; r=pow(r,3); t=4/3*pi*r; printf("%f",t); return 0; } >>> -0.0000 になってしまいます。
211 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:44:49 ] long double は %Lf
212 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:54:39 ] ありがとございます。
213 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 03:54:55 ] C言語系で就職に役に立つ資格ってありますかね?
214 名前:デフォルトの名無しさん [2007/11/12(月) 04:34:24 ] >>197 MT法でやってくりたまえ
215 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 09:20:48 ] >>213 基本情報処理でいいんじゃないの?
216 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 10:27:21 ] メモリエディタ製作しようとしているが こんな感じでおk? 目標プロセスのアドレス取得 ↓ ある数値、文字列を探すときはstrstrで検索
217 名前:抽象的な質問には抽象的な回答を mailto:sage [2007/11/12(月) 10:38:56 ] ダメ。数値を探すのにstrstr()は使えない。
218 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 12:43:52 ] 画像の指定した範囲を切り出して出力するプログラムはどうやりますか?
219 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 12:57:08 ] 出番だぞ抽象
220 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:07:34 ] pythonでやれ
221 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:40:24 ] 画像解読か。難しそうだな。 文字で書いてあればまだなんとかなるか。
222 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:43:42 ] まず、irfan viewをDLします ヒントはPPM がんばれよ!
223 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:56:06 ] >>218 何を切り出すの? 金型?
224 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 14:40:09 ] phpでも使っとけ。
225 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 15:38:25 ] WAVEファイルを読み込む ↓ テキストデータに変換 ↓ 0.5秒間ハミング窓を与える ← ↓ 0.25秒ずらす FFT、ピッチを求めてドッカに保存 → ↑ ↓ 終了 こんな感じで求めればドレミファソラシドって変化していくWAVEファイルのピッチを追えると思ってるんだが どう?
226 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:00:23 ] size_tとかFILEみたいになんか知ってるとそれなりに それなりのC言語の使い手に一見見える型とか構造体ってありますか?
227 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:04:06 ] FILEは違うだろ・・・
228 名前:デフォルトの名無しさん [2007/11/12(月) 18:04:54 ] void*
229 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:13:43 ] LPCWSTR
230 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:14:52 ] char const* const p;
231 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:16:46 ] strct hoge{ ・・・ ・・・ char ar[1]; //[0]じゃなくあえて[1]で。 };
232 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:18:50 ] int main(argc, argv) int argc; char **argv; { return 0; }
233 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:20:30 ] #define begin { #define end ;}
234 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:25:55 ] size_t ptrdiff_t intptr_t uintptr_t
235 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:49:39 ] うわぁ予想外にいっぱいあるんですね。 >>231 [0]じゃなくてあえて[1]で。ってどういうことなんですか すごく興味があります。
236 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:16:10 ] struct e{ int value1,value2,value3; }; void foo(e num[][size]){ e output1[size],output2[size]; double sum1, sum2, sum3; double difference1,difference2,difference3; for( i=0;i<size;i++){ for( j=0; j<size; j++){ sum1 = num[i][j].value1 + num[i][j+1].value1; sum2 = num[i][j].value2 + num[i][j+1].value2; sum3 = num[i][j].value3 + num[i][j+1].value3; difference1 = num[i][j*2].value1 - num[i][j*2+1].value1; difference2 = num[i][j*2].value2 - num[i][j*2+1].value2; difference3 = num[i][j*2].value3 - num[i][j*2+1].value3; output1[j].value1 = sum;output1[j].value2 = sum2;output1[j].value3 = sum3; output2[j].value1 = difference1;output2[j].value2 = difference2;output2[j].value3 = difference3 } // end for j } // end for i } このクソ汚いソースを直すのに、どなたか知恵をお貸しください。 2次元の構造体に3つの変数があって それの隣接する和と差を求めるものの1部なのですが。 変数が多くなってあまりに汚いのでどうにかできないものかと