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

C言語なら俺に聞け! Part 112

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/08(月) 01:32:01
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0266デフォルトの名無しさん2005/08/12(金) 19:03:10
MIKO GNYOユーザーの俺が来ましたよ
0267デフォルトの名無しさん2005/08/12(金) 19:13:31
>>265
読んでないんじゃなくて読めないんだと思う
イベントとかいったら、たまにLinux使ってる人と話すことがあるけど
そのときになんか聞いたりすると、マニュアル見て英語だったら一瞬で閉じて
googleで日本語サイト限定にして検索する
めっちゃ古いのとか、gnuのじゃなかったりしてもお構い無しにそれを読んでた
0268デフォルトの名無しさん2005/08/12(金) 19:20:53
ここで英語のマニュアル引用しても、読める奴がいないしな。
0269デフォルトの名無しさん2005/08/12(金) 21:25:35
2chは日本人用の掲示板ですから
英語にかぶれた非国民は出て行け!
0270デフォルトの名無しさん2005/08/12(金) 21:32:05
プ
0271デフォルトの名無しさん2005/08/12(金) 21:52:38
正直、K&Rの「5.12 複雑な宣言」が理解できなかった。

char (*(*x[3])())[5];

ってなんだよ?こんな変態じみた宣言を普通に使ってるのか、おまえら?
俺は、宣言の意味さえ分からん・・・
0272デフォルトの名無しさん2005/08/12(金) 21:55:37
必要だからそう宣言するだけ
意味が分かればそれが分かると思う

意味が分からないということは
それが必要でないって事
必要でなければ知る必要もないでしょ
0273デフォルトの名無しさん2005/08/12(金) 21:55:57
そういうのはtypedefで分解してやるとわかりやすいかも
0274デフォルトの名無しさん2005/08/12(金) 21:58:57
char を返す関数ポインタの配列の配列へのポインタ?

なんか戻り地の書き方が変なような。
0275デフォルトの名無しさん2005/08/12(金) 21:59:36
お前ら真面で分からないのか・・・
0276デフォルトの名無しさん2005/08/12(金) 22:00:23
ただの配列じゃん
何が分からないのか分からん
0277デフォルトの名無しさん2005/08/12(金) 22:00:42
関数ポインタの配列と理解した
0278デフォルトの名無しさん2005/08/12(金) 22:04:09
複雑すぎる宣言は使いみちはあまりない。
>>273 みたいなのは、、二段のディスパッチテーブルに分解したほうが使いかってがいい。
0279デフォルトの名無しさん2005/08/12(金) 22:04:28
>>271
http://kmaebashi.com/programmer/pointer.html
x is array[3] of pointer to function() returning pointer to array[5] of char.
つまりxはcharの配列[5]へのポインタを返す関数へのポインタの配列[3]。
0280デフォルトの名無しさん2005/08/12(金) 22:06:27
いや見ただけで分かるだろ
0281デフォルトの名無しさん2005/08/12(金) 22:09:25
こう言うの、一瞬見ただけで分からないと、Cプログラマーを名乗ってはいけないのか?
0282デフォルトの名無しさん2005/08/12(金) 22:10:29
むしろ解るやつはPerler
02832742005/08/12(金) 22:11:18
「配列へのポインタを返す」ってとこが分からんかった。
つか今でもピント来ないな。

char (*)[]

配列へのポインタだろ。これを返す関数は。どういうプロトタイプになるんだ?

char (*)f()[]

char (*f)()[]

うーん。
0284デフォルトの名無しさん2005/08/12(金) 22:11:24
いけなくは無いと思うけど
charとキャストとポインタが分かってたら分かるだろ
それらを理解してたつもりで上を読んで理解できなかったのなら
理解できてなかった証拠でしょ
0285デフォルトの名無しさん2005/08/12(金) 22:14:41
>>271を読み解くのは問題ないけど、
typedef どう使うのかわからん。
0286デフォルトの名無しさん2005/08/12(金) 22:22:04
>>283
char (*)[]を返す関数はchar ((*)[])()。全体を括弧でくくって右に関数の括弧を付ける。
0287デフォルトの名無しさん2005/08/12(金) 22:22:19
>>285
俺ならこうやる(型名が糞とか抜きね)

typedef char FIXEDSTRING5[5];
typedef FIXEDSTRING5 *LPFIXEDSTRING5;

以下略
0288デフォルトの名無しさん2005/08/12(金) 22:23:54
>>285
つまり自分で書くソースにあんな宣言が必要になったら>>287みたいにtypedefを使うということ。
既存のものを読み解くのに使えるわけではない。
0289デフォルトの名無しさん2005/08/12(金) 22:35:31
>>285
typedef char (*Type_X)[5];//char型配列[5]のポインタ
typedef Type_X (*Type_FuncX)();//Type_Xを返す関数のポインタ

//検証用 これでコンパイラ通れば正解。
char (*(*x[3])())[5];
Type_FuncX lp = NULL;
x[0] = lp;

0290デフォルトの名無しさん2005/08/13(土) 06:32:25
なんで、
char*[5] (*f[3])();
じゃないの?演算子の優先順位の問題?
0291デフォルトの名無しさん2005/08/13(土) 06:36:24
ああそうか。悪い、スルーしてン。
0292デフォルトの名無しさん2005/08/13(土) 13:53:41
関数ポインタが入った段階で typedef しちゃうへたれだけど、とりあえず
ttp://www.kouno.jp/home/c_faq/c1.html#21

char (*(*x[3])())[5]; を typedef 分解するとこんな感じだろうか。

typedef char A[5]; /* A = (*(*x[3])()) -> A *(*x[3])(); */
typedef A *B; /* B = (*x[3])() -> B (*x[3])(); */
typedef B C(); /* C = (*x[3]) -> C *x[3]; */
typedef C *D; /* D = x[3] -> D x[3]; */
D x[3];

あるいは
typedef A x[3]; /* typedef char (*(*A)())[5]; */
typedef B *A; /* typedef char (*B())[5]; */
typedef C B(); /* typedef char (*C)[5]; */
typedef D *C;
typedef char D[5];

>286
それだと、char 型を返す関数の配列へのポインタにならない?
char (*f())[5] じゃないか?関数ポインタの型だと char (*(*)())[5] かな。
0293デフォルトの名無しさん2005/08/13(土) 22:11:48
コマンドラインからもらったargv[]がファイルなのかディレクトリなのか
判断するにはどうすればいいですか?
02942932005/08/13(土) 22:12:31
すいませんWinXPです。
0295デフォルトの名無しさん2005/08/13(土) 22:27:14
>>294
>>1
0296デフォルトの名無しさん2005/08/13(土) 22:42:50
>>293
argv[]は単なる文字列へのポインタ。
その文字列が、ファイル名かディレクトリ名か、
あるいは、その他の意味を持つ文字列かは、
コマンドラインで実行した本人以外は誰もわからん。

その文字列と同じ名前のファイルやディレクトリが
存在するか確認する方法はOS依存。

まあ、拡張子が付いていたらファイル、それ以外はディレクトリ、
ファイル名、ディレクトリ名に使用できない文字があったらエラーとか、
ファイルをオープンしにいって、成功したらファイル、それ以外はディレクトリとか、
そんな安易な実装でいいんだったら、純粋なCでも可能だけど。
0297デフォルトの名無しさん2005/08/13(土) 23:04:40
>>296
そんな安易な実装について聞いているんだろ
OS依存といってもPOSIX準拠な方法があるんだから
もうstatでいいじゃん。面倒くさい。
0298デフォルトの名無しさん2005/08/13(土) 23:10:16
やれやれだぜ
02992932005/08/13(土) 23:42:56
>>297
statをmsdnで調べて出来ました!
ありがとうございました。

>>296
決して安易という訳ではないんですが、
こういうシステム依存の部分て調べ辛くて…
文法とかアルゴリズムは良く見つかるんですけどね。

>>295
言いたいことはよく分かるのですが、
正直、1のリンクからは見つけられませんでした。
0300デフォルトの名無しさん2005/08/13(土) 23:55:13
>>295みたいなのはマジであほというか、ナンセンス
>>296みたいなのは長々と書いてるだけで何の情報も無い
長文結構だが、その中にこっそり情報混ぜてやれよ

こういう>>293みたいなやつにはヒントをあげるだけでいいんだよ。
問題はそのヒントのセンス。
0301デフォルトの名無しさん2005/08/14(日) 00:13:28
ナンセンスとかヒントとか使う奴増えたなー
0302デフォルトの名無しさん2005/08/14(日) 03:45:39
ヒントが増えたことは認めるがナンセンスは認めない
0303デフォルトの名無しさん2005/08/14(日) 04:25:25
>296はダメダメだな。例えばa.txtなるディレクトリがあるやもしれん。
0304デフォルトの名無しさん2005/08/14(日) 05:51:39
ううむ、夏の補講で残されてる数人だけが
俺だって勉強してると言わんばかりに
とくいげに無駄話ばかり続ける状態。
0305デフォルトの名無しさん2005/08/14(日) 12:03:39
ファイルの内容を%x使わないで16進数に表示させたいのですが、どうやったらいいんでしょうか?
0306デフォルトの名無しさん2005/08/14(日) 12:06:27
宿題は宿題スレへ
0307デフォルトの名無しさん2005/08/14(日) 12:06:43
>>305
%x使うのが一番楽。
0308デフォルトの名無しさん2005/08/14(日) 12:11:28
宿題スレにいきます
0309デフォルトの名無しさん2005/08/14(日) 12:12:16
猫でもわかるC言語プログラミングという本を見ながら
勉強しようとしたんですが、わからない事があります。
Microsoft Visual C++ .NET にて

/*hello.c*/
#include <stdio.h>
int main()
{
printf(
"Hello ""World\n");
return 0;
}

というのをビルドしたんですが
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。

と、エラーが二つでます。 どうしたらいいのでしょうか?
設定があるのですか? それともソースを変えなきゃ行けないのでしょうか? 
0310デフォルトの名無しさん2005/08/14(日) 12:15:28
まず>>1をよく読む
0311デフォルトの名無しさん2005/08/14(日) 13:50:55
わかってないと思うけど、>>309のしつもんは環境依存なんですよ
Windowsプログラミングのスレで聞いてくださいね
0312デフォルトの名無しさん2005/08/14(日) 14:05:22
>>305
16で割った余りを調べて10-15をa-fに変換して配列に入れる
商が0になるまで続ける
配列を%sで出力
0313デフォルトの名無しさん2005/08/14(日) 14:09:22
その本の作者のサイトがここにある
ttp://www.kumei.ne.jp/c_lang/
そしてここを見て設定しなおせ
ttp://www.kumei.ne.jp/c_lang/net/index.html
0314デフォルトの名無しさん2005/08/14(日) 14:10:05
>>313は
>>309な
03153052005/08/14(日) 16:00:43
>>312
ありがとうございます。

ファイルからデータ読み込む方法はfgetcを使用してるんですが、
漢字が上手く取り込めません。16進数表示部が文字化けしてしまいます。
0316デフォルトの名無しさん2005/08/14(日) 16:07:41
>>315
宿題スレでコードで解答もらってんじゃん
0317デフォルトの名無しさん2005/08/14(日) 16:11:55
>>315
文字化け…?
fgetcの戻り値はただの整数だから化けることはないと思うけど。
言い忘れたけど配列の最後には必ずNULLを入れること。
0318デフォルトの名無しさん2005/08/14(日) 19:09:32
rand関数によって出てくる数列ってOSに依存するんですか?
0319デフォルトの名無しさん2005/08/14(日) 19:18:27
>>318
ライブラリに依存する
0320デフォルトの名無しさん2005/08/14(日) 19:18:42
>OS
じゃなくてコンパイラ付属のライブラリ
(あれ?winな環境だとAPIとかでOSなのか?)
0321デフォルトの名無しさん2005/08/14(日) 19:34:12
>>320
ないない。
UNIX系なら仮想ファイルで乱数取得が可能かも知れんけど
0322デフォルトの名無しさん2005/08/14(日) 20:36:23
「「自分と同じシグネチャを持つ関数へのポインタ」を返す関数」へのポインタ型って定義できるんでしょうか?

typedef func_t (*func_t)(obj_t *obj);
func_t func1(obj_t *obj);
func_t func2(obj_t *obj);
func_t func3(obj_t *obj);

のように。(実際にはこうは書けない)

typedef void *(*func_t)(obj_t *obj);
void *func1(obj_t *obj);
...

こんな感じに書いて、あとは必要に応じてキャストすれば済むには済むんですが、気になったもので……。
0323デフォルトの名無しさん2005/08/14(日) 21:03:59
>>322
できませんC++でtemplate使いなさい
0324デフォルトの名無しさん2005/08/14(日) 22:53:04
交換・選択・挿入のソートプログラムを作って、試しに50000個の乱数をソートさせてみたのですが、
挿入ソートが他の2つよりも3倍以上早かったんですがそんなものなんでしょうか?
3つともO(n^2)とどこかでみたのですが
03253242005/08/14(日) 22:53:35
すいません。よく考えたらスレ違いですね
0326デフォルトの名無しさん2005/08/14(日) 22:55:27
ある程度並んでいる状態での挿入ソートは
実は効率よく終わるように考慮されているロジックであれば一番速かったりする
0327デフォルトの名無しさん2005/08/14(日) 22:59:20
>>326
こんな感じなのですが、これが基本形ですよね?
void bubble(int *d,int n)
{
  int i,j;
  for(i=0;i<n-1;i++){
    for(j=n-1;j>i;j--)
      if(d[j]<d[j-1]) swap(d[j],d[j-1]);
  }
}

void insert(int *d,int n)
{
  int i,j;
  for(i=1;i<n;i++){
    int temp=d[i];
    for(j=i;j>0 && d[j-1]>temp;j--)
      d[j]=d[j-1];
    d[j]=temp;
  }
}
0328デフォルトの名無しさん2005/08/14(日) 23:36:37
なんでスレ違いに得意げに無意味なレスだけ増やすやつらが沸いて出るんだ?
0329デフォルトの名無しさん2005/08/14(日) 23:41:02
>>324
Oは問題の大きさに対して計算量がどう増加するかを表わすもので、
計算量そのものを表わすものじゃないし。
0330デフォルトの名無しさん2005/08/14(日) 23:42:58
>324
たとえば昇順にソートしたいとき、降順にソート済みの入力でためしとけ
0331デフォルトの名無しさん2005/08/15(月) 04:17:31
つーか、順次生成したデータをソートするケースなら挿入ソートが速いのは自明だ罠。
0332デフォルトの名無しさん2005/08/15(月) 09:18:14
Cってもう時代遅れでC++・C#の方が良いって聞いたんですが本当ですか?
0333デフォルトの名無しさん2005/08/15(月) 09:43:50
>>332
ウソです。
0334デフォルトの名無しさん2005/08/15(月) 09:56:35
>333
そうですか
レス乙です
ヤッパリ老舗のCが良いんですか?
0335デフォルトの名無しさん2005/08/15(月) 10:00:07
Cωが一番良いです。
0336デフォルトの名無しさん2005/08/15(月) 10:03:39
ネタレス止めてくれぃ
0337デフォルトの名無しさん2005/08/15(月) 10:06:28
スミマセン
ググったらマジで有りましたオメガですか・・・
0338デフォルトの名無しさん2005/08/15(月) 10:08:44
もう、しょうがないなぁ、337は
0339デフォルトの名無しさん2005/08/15(月) 10:14:30
でCが安定してて良いんですか?
0340デフォルトの名無しさん2005/08/15(月) 10:24:52
安定させるのはプログラマ次第です。
0341デフォルトの名無しさん2005/08/15(月) 10:25:00
プログラマの技量による
頼むからJavaに移ってくれ…という香具師もいる
0342デフォルトの名無しさん2005/08/15(月) 10:33:25
Cが時代後れということはないのだが、PC 関係のプログラムを
なんでもかんでもCで作る時代は MS-DOS の時代に終った。
0343デフォルトの名無しさん2005/08/15(月) 10:41:16
MS-DOS の時代の後半はメモリの上限が 640KB だった。EMSメモリを
付けてバンク切り替えで記憶容量は増やすことが出来たがそれでも数M
だった。CPUクロックも 16MHz, 33MHz, 66MHz など、MHz 単位で
3桁に満たなかった。そのような状態だったので当時あらゆる開発に
C言語を使うことは現実的な選択だったのだ。C言語であれば容量が小さく
高速なプログラムがアセンブラで組むよりはるかに楽に作れたからだ。
0344デフォルトの名無しさん2005/08/15(月) 10:54:48
ミナサマ、レスありがとうございます
初心者はC++・C#よりCから始めた方が良いのでしょうか
0345デフォルトの名無しさん2005/08/15(月) 11:45:50
ふつーC++。つーかそれ以前にスレ違い。
なんでも質問すれとか初心者歓迎C/C++スレとかあるだろ。
0346デフォルトの名無しさん2005/08/15(月) 11:53:28
失礼
でも答えてくれて、あんがと
0347デフォルトの名無しさん2005/08/15(月) 12:13:44
なんかこぉバァァァーみたいな
0348デフォルトの名無しさん2005/08/15(月) 14:45:42
>>343
DOSでCが使われるようになったってのも、90年代に入ってからで、
それ以前はアセンブラが多かったとおもう。
0349デフォルトの名無しさん2005/08/15(月) 14:53:41
>>348
TURBO PASCAL がかなり使われてた。その後はLattice C。
MSCが使われだしたのはWindows3.x以降、コンパイラがDPMIなしじゃまともに動かなかった。
0350デフォルトの名無しさん2005/08/15(月) 15:00:49
でも、一太郎V3やLotus123、Mifesみたいなメジャーどころは皆MSCだったような覚えが。
VZがasmだったのは確かだけど。
0351デフォルトの名無しさん2005/08/15(月) 18:00:57
日本じゃTurboPascalはブームになる前にしぼんだような。
すぐにTurboCをはじめ低価格Cコンパイラで、Cブームに。
0352デフォルトの名無しさん2005/08/15(月) 18:44:40
>>351
TURBO PASCALが一番使われてたのはCP/MからMS-DOS2.11あたりの時代。
フロッピーディスクベースでエディタ+高速コンパイルが売りだった。
まだN88DISK-BASICと張り合ってた。
MS-DOS3,1まではMicrosoftもDOSの外部コマンドの作成などにLattice-Cを使ってた。
MS-Cが登場し、TurboCなどの低価格Cブームが来るのはこの後。
0353デフォルトの名無しさん2005/08/15(月) 19:06:57
うるせえよじじいども
0354デフォルトの名無しさん2005/08/15(月) 19:23:36
>>353
盂蘭盆会で地獄の釜が開いてるんだ、今日は大目に見てくれ。
0355デフォルトの名無しさん2005/08/15(月) 19:50:43
じじいだろうと、厨はウザイ、スレ違いだ。
Cの初心者、宿題系に、軒並みバカがはりついてるみたいだからそこに帰れ。
0356デフォルトの名無しさん2005/08/15(月) 21:00:56
#include <stdio.h>
int main(void)
{
float fbuff,ftmp;
int i;
for (i = 5;i <= 8;i++){
ftmp = 0;
switch(i){
case 5:
ftmp = 10 * i;
break;
case 6:
ftmp = 1 * i;
break;
case 7:
ftmp = 0.1 * i;
break;
case 8:
ftmp = 0.01 * i;
break;
}
if (i == 0){
fbuff = 0;
}
fbuff = fbuff + ftmp;
printf("ftmp = %f\n",ftmp);
printf("fbuff = %f ftmp = %f\n",fbuff,ftmp);
}
return 0;
}
実行結果が下記になる理由を教えて下さい。どうして「0.000003」多くなるのでしょうか?
fbuff = 56.780003 ftmp = 0.080000
0357デフォルトの名無しさん2005/08/15(月) 21:09:23
ふ、ふろーと
0358デフォルトの名無しさん2005/08/15(月) 21:20:44
>>356
一般的にfloatの精度は23ビット、即ち高々7桁しかない。
従って、有効なのはは56.78000までが関の山。
%fの代わりに%gを使うことで、誤差を余り見ないで済むかもしれない。
尤も、素直にdoubleを使っとけと言う話になるが。
03593562005/08/15(月) 21:22:01
>>358
ありがとうございました。
0360デフォルトの名無しさん2005/08/16(火) 10:54:11
お邪魔します。

ファイル内のバイナリの数字の羅列に対して、CSV処理するコマンドを作りたいです。
コマンドの引数として、別のファイルの定数一覧からCSVの区切り文字数を受け取って
処理させるものを作りたいと思っていますが、どう作っていけばいいのか分かりません。

どんな感じで作る物なのか、ヒントかもしくは
参考にしやすいサンプルソースを見れるサイトがあったら教えていただきたいです。
0361デフォルトの名無しさん2005/08/16(火) 12:12:25
>>360
>ファイル内のバイナリの数字の羅列に対して、CSV処理するコマンドを作りたいです。
具体例をあげて何がしたいのか説明して。
0362デフォルトの名無しさん2005/08/16(火) 12:16:53
エラトステネスのふるいのプログラムがわからないので質問させて下さい。

#include <stdio.h>

#defineN 1000 /* Nまでの素数を求める*/
#defineTRUE 1 /* 真:素数である */
#defineFALSE 0 /* 偽:素数でない */
charis_prime[ N+1 ]; /* 結果を格納する配列*/

int main( void )
{
int i, j;

/* 配列を初期化 */
for( i = 1; i <= N; i++ )
{
is_prime[ i ] = TRUE; /* 最初はすべて「素数」とする */
}
is_prime[ 1 ] = FALSE;

/* エラトステネスのふるい */
for( i = 2; i*i <= N; i++ )
if ( is_prime[ i ] )
for( j = i*2; j <= N; j += i )
is_prime[ j ] = FALSE; /* この倍数は「素数」でない */
/* 結果の出力 */
printf( "%dまでの素数は、\n", N );
for( i = 1; i <= N; i++ )
if ( is_prime[ i ] )
printf( "%d ", i );
return 0;
}
0363デフォルトの名無しさん2005/08/16(火) 12:19:48
>>360
>>1読め。ここは「C言語」自身に関して、だから
プログラムの組み方、等は激しくスレ違い。
0364デフォルトの名無しさん2005/08/16(火) 12:22:16
このソースのエラトステネスのふるいのfor文if文がわかりません。
最初のfor文のi*iの意味、次のif文に論理演算子がないこと、次のfor文のi*2の意味
がわかりません。

そこがわからないので結果の出力のfor文とif文もわからないです。

ネットでも調べたり本でも調べたんですけど、他のソースは別の書き方をしていて
そのやり方なら理解できるのですが、このソースはちょっとわからないのでよろしくお願いします。
0365デフォルトの名無しさん2005/08/16(火) 12:42:25
>>362

>最初の for の i*i の意味
ある数の約数の片方は必ず平方根以下であるから。
逆に考えると、約数( = i )の2乗が合成数以下。

>次の if 文に論理演算子がない
C の条件判断は、0 以外で真。
つまり、#define された TRUE が入ってれば真になる。
そもそも C には本当の意味での bool 型がないから整数で代用してる。

>その次の for の i*2 の意味
さらにその次の行のコメントのとおり、
素数の *2 *3 *4 …を約数でないとするため、
i*2 i*3 i*4…の数列を作るための for 文。

こんな感じでどうよ?
0366デフォルトの名無しさん2005/08/16(火) 13:14:29
>最初の for の i*i の意味
ある数の約数の片方は必ず平方根以下であるから。
逆に考えると、約数( = i )の2乗が合成数以下。

これはわかりました。

>、#define された TRUE が入ってれば真になる。
そもそも C には本当の意味での bool 型がないから整数で代用してる。
if文のis_prime[i]が整数で代用してるってことですか?ここら辺がちょっとわからないんですけど。
s_prime[i]は確かに整数・・・ああ、なんとなくわかってきた気がします。
s_prime[i]の要素の整数とif文の条件判断で使う1,0の整数と整数は二つありますね。
1,0の整数のことですね。ただif ( is_prime[ i ] ) の括弧の中がis_prime[ i ] !=0とかとなっていないのがわからないです。
何かの省略なんでしょうか?

>素数の *2 *3 *4 …を約数でないとするため、
i*2 i*3 i*4…の数列を作るための for 文。
i*2の2がわからないです。jがカウントアップしていきますよね。
そのときに2が変数でカウントアップしていかないと常に2の倍数になってしまうと思うのですが、

すぐ答えていただきありがとうございます。できればもうちょっとだけ上記のヒントを下さい。

■ このスレッドは過去ログ倉庫に格納されています