[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 13:42 / Filesize : 213 KB / Number-of Response : 830
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/04/29(火) 09:44:57 ]
言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 26
pc11.2ch.net/test/read.cgi/tech/1206196600/
過去スレ
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

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


477 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 02:57:27 ]
>>476
> 1) void mera(const char *merami)
> 2) void mera(const char* merazooma)
1) は C に多く、2) は C++ でみます。
どっちでも大差ないと思います。

478 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 02:59:49 ]
スペースがあるかないかだけじゃん。何で違うものだと思うの?

479 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 03:00:44 ]
>>477
おお、ありがとう。

480 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 03:20:48 ]
>>476
char *p も char* p も意味は同じ

スタイルについては、変数の宣言時にたとえば

char* p, * q;

などとするのが不自然という理由で

char *p, *q;

を推奨する人は多い


481 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 03:31:59 ]
追記

一方で char* p; を推奨する人は、変数名はあくまでpであるから
それがchar*であることを示すためにそうすると主張することが多い

ただし*はcharやint、あるいはstaticやconstのようにデータ型を修飾するものではなく
あくまで変数を修飾するものである(Cの変数宣言構文は [データ型] [変数名];
だから int const n, m; とは書けても char* p, q; とは書けない)ので、
構文的には変数名側に寄せることが正しい扱いであると言える

482 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 03:37:26 ]
×ただし*はcharやint、あるいは
○ただし*はcharやintのようなデータ型、あるいは

483 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 04:08:15 ]
もちろんスタイルの話だから、君はchar* pと書いてもいいし、char *pと書いてもいいし、さらにはchar * pと書いてもいいし、
また関数の仮引数リストにおいては与えられるものがおそらく配列である場合には、それを明示したいならchar str[]と書いてもいい

484 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 04:16:42 ]
たくさんのレスありがとう、勉強になりなす。

485 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 07:37:37 ]
>>476
×begiragon
○bagicross
なんで誰も指摘しないんだよー



486 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:10:17 ]
>>448
エスケープシーケンスを正しく読めばいいんじゃないかな
確か0x1bだったっけ? この次の文字は制御文字だから、それに応じた処理をすればいい。

カーソル位なら入力されたコードをじっくり眺めればすぐに分かると思うよ


487 名前:448 mailto:sage [2008/05/08(木) 19:42:21 ]
>>486
そうだったのかー!!
あれはエスケープシーケンスと制御文字が組み合わさってたん
ですね。だからあのプログラムで[Aとかが表示された訳だ。
どうもです。

488 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:43:21 ]
XPでコンソールのカーソルを移動させるにはどうすればいいの?


489 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:46:04 ]
スレ違い

490 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:46:11 ]
>>488
msdn.microsoft.com/ja-jp/library/cc429740.aspx

491 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:34:04 ]
mallocして帰ってきたポインタをfreeするとメモリを開放するらしいのですが、
freeにサイズを書かなくてなんでサイズがわかるんでしょうか。
#include <stdio.h>
void main()
{
char *c;
c = malloc( 10 );
if( c == NULL )return;
strcpy( c , "aiue" );
c--;//ひとつ前のポインタ(サイズは書いていないようだ)
c--;//ここにもサイズはない
c++;c++;//元に戻す
free( c );
c = NULL;
return;
}

492 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:38:08 ]
>>491
管理テーブルが別にあるから

493 名前:491 mailto:sage [2008/05/08(木) 21:52:55 ]
>>492
ポインタの前ではなくほかのところにあったんですね。
どうもありがとうございました。

494 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:04:26 ]
どうでもいいけど、ポインタを戻すのはよろしくないんじゃね?

495 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:13:52 ]
実際に確保されていることが確実な範囲(+1)を超えた演算の結果は保証されてなかった気がする



496 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:40:41 ]
>>492
ちなみに確保した前の番地に文字数があるのでは?と仮定してそれを確認するなら
int* ip = (int*)c;
long* lp = (long*)c;

こうしておいて
printf("%d : ", *(ip - 1));  // c 先頭から int 分戻った場所から数値として表示
printf("%ld : ", *(lp - 1));  // c 先頭から long 分戻った場所から数値として表示

こんな風に確認するというのもあるよ(どちらにしても結果は外してるけど)


497 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:50:03 ]
>>493

> ポインタの前ではなくほかのところにあったんですね。

それは処理系依存。
ポインタの前にある場合もあるだらう。


498 名前:デフォルトの名無しさん [2008/05/08(木) 23:11:55 ]
じゃああんま頻繁にmallocすると、逆に管理テーブルのぶんムダ使いになるんですかね??

499 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:13:38 ]
管理テーブルを保持することよりも、
空きメモリを探す処理とfreeの分、
CPU時間の無駄遣いになることを気にしたほうがいい気がする。

500 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:22:31 ]
ということはlinked listとかすごい効率悪いんだな・・・


ところでポインタのサイズ管理テーブルへのアクセスってどうやるの?

501 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:23:16 ]
実装によるとしか
mallocのソースでも眺めてみれ

502 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:25:09 ]
入門書クリアしたら次は何がいいかな?
アルゴリズム辞典とか眺めるの?

503 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:29:09 ]
linked list はスタック上にメモリをプールしておけばいいぜ。

504 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:29:32 ]
×スタック上
○スタック状

505 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 01:50:05 ]
>>502
良いソースを読むことだと思う
どの言語でも同じだと思うが



506 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 01:55:07 ]
何か作りたいものがあるから学んでいるのでは?
それを作るのにまだ足りないものがあるならそれを学べばOK
足りてるなら作ろう

507 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:06:55 ]
実際に自分の目的とするものを作ること
その過程で、どのようにすれば目的を達成できるのかを考える能力を身に着けること

言語仕様がわかってても要求を実現できない新人多すぎ
コーダーじゃねぇんだからさ

508 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:58:14 ]
0か1を要素にもつN次元のベクトルv(Nビットの情報ベクトルv)を入力した時
N個の要素はそれぞれ、確率pで0は1に、1は0に変わってしまい、また確率eで情報が消失する。
(消失した情報は2を代入すればよい)
上記の手続きを行い、画面にベクトルv'を出力(消失した要素はXを出力)
というプログラムを整数の配列と擬似乱数で作りたいんですが、↓では数字がおかしくなってしまいます。
環境はunixのgcc 4.0.2です、初心者ですがご指導よろしくお願いします。

なお、ここではN=5、e=0.05、p=0.1としています。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5 ;

int main(void)
{
int v[N], u[N] ;
int i ;
float e, p, x ;

for (i = 0; i <= N-1 ; i++ )
{
printf("v[%d]=",i) ; scanf("%d",&v[i]) ;
while (v[i] && v[i]!=1)
{ printf("v[%d]=",i) ; scanf("%d",&v[i]) ; }
}

509 名前:508続き mailto:sage [2008/05/09(金) 17:58:40 ]

p = 0.1 ; e =0.05 ;

for(i = 0 ; i <= N-1 ; i++)
{
srand(time(NULL));
x = (float)rand()/ 32768.0 ;
/* xは0以上1未満の乱数 */
if( x < p )
{ u[i] = (v[i]+1) % 2 ;}
/* xが0以上p未満の時、受信に誤りが生じる */
else if( x >= p && x < p+e )
{ u[i] = 2 ;}
/* xがp以上p+e未満の時、情報は消失(2を代入) */
}

printf("(") ;
for(i = 1 ; i <= 7 ; i++)
{
if (u[i] == 2)
printf("X ") ;
else
printf("%d ",u[i]) ;
}
printf(")\n") ;

return 0 ;
}

510 名前:509訂正。失礼しました mailto:sage [2008/05/09(金) 18:01:25 ]
p = 0.1 ; e =0.05 ;

for(i = 0 ; i <= N-1 ; i++)
{
srand(time(NULL));
x = (float)rand()/ 32768.0 ;
/* xは0以上1未満の乱数 */
if( x < p )
{ u[i] = (v[i]+1) % 2 ;}
/* xが0以上p未満の時、受信に誤りが生じる */
else if( x >= p && x < p+e )
{ u[i] = 2 ;}
/* xがp以上p+e未満の時、情報は消失(2を代入) */
}

printf("(") ;
for(i = 0 ; i <= N-1 ; i++)
{
if (u[i] == 2)
printf("X ") ;
else
printf("%d ",u[i]) ;
}
printf(")\n") ;

return 0 ;
}

511 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:31:39 ]
>>508
srand をループで毎回実行しない。最初の1回だけで良い。
32768.0 などという数字を直に書かず、(RAND_MAX+1.0) と書く方が良い。コンパイラによって rand() の最大値は異なる。
x<p でもなく x>=p && x<p+e でもない場合、u[i] の値は?

512 名前:508 mailto:sage [2008/05/09(金) 18:36:04 ]
>>511
その場合u[i]は変化しません。
擬似乱数間の扱いが違ってましたか、勉強になります

513 名前:508 mailto:sage [2008/05/09(金) 18:38:06 ]
あ、変化しないんだから
u[i] = v [i] ;
ですね。なんという初歩的なミス、ありがとうございました。

514 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:47:04 ]
久々に突っ込みどころ満載なコードを見た気がする

515 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:57:02 ]
>>502
pc11.2ch.net/test/read.cgi/tech/1209810861/
で手伝っていただけるとありがたいのですが、いかが?



516 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:39:27 ]
皆さんに伺いたいのですけど、

www.amazon.co.jp/Programming-Language-Version-Prentice-Software/dp/0131103628

C言語の決定版と言われるこの本、どうお考えでしょうか。

あと、これのC++版ありますが、ページ数が思いっきり増えてますよね。
こちらもできたら評価をお願いできればと思います。

517 名前:デフォルトの名無しさん [2008/05/09(金) 22:54:01 ]
本はいらないよ ネットのほうがいい それに基礎いくらやってもWindows(UNIX)アプリは作れない。
標準Cの数倍以上の分量はこなさないと無理。標準は共通部分だけの勉強だけ

518 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 23:06:49 ]
>>516
それ買っておきなさい。
ネットのは怪しいのが多い。
しかし洋書はたけえな。

519 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 23:09:36 ]
>>516
お前がどうしたいのかによる、まぁその本は教養というか理解が深まるとかそういうのだ

520 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 23:43:44 ]
>>516
スレチだけど、洋書は輸出費を考慮しても.comの方が安い場合があるぜ。
時間と多少の手間を気にしないんならこっちもチェックしておくといい。
ttp://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_1?ie=UTF8&s=books&qid=1210344092&sr=8-1

521 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:04:24 ]
C言語そのものはとてもシンプルだと言うこと
#include によってもたらされる先輩方の資産と情報に振り回されない
目的をもってプログラムに取り組む
・・・
例えて、辞書を丸暗記するのか、あるいは目的を持って辞書を引くのか・・というのに通じると。
ライブラリ群の知識や使い方に重点を置くより「こうしたい関数は無いか?」とする切り口の方がいいのではないかなと。
どちらにしても有る程度は知識得ないといけない訳だけど。

522 名前:デフォルトの名無しさん [2008/05/10(土) 00:05:42 ]
自分見やすい(辞書)サイトを保存しておいて、AND OR NEARなどで全文検索しようぜ

523 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:06:11 ]
>>516
それは初心者向けでも玄人向けでもない微妙な本なんであんまりすすめない
推薦図書スレ>ttp://pc11.2ch.net/test/read.cgi/tech/1209441159/l50
感想スレ>ttp://pc11.2ch.net/test/read.cgi/tech/1064681919/l50

524 名前:デフォルトの名無しさん [2008/05/10(土) 00:10:00 ]
たとえば、空き実メモリの容量を知りたければ、 メモリ 容量 などで検索する。

525 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:14:21 ]
シンプルに見えて実はぐちゃぐちゃ それがC



526 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:16:21 ]
Cをちゃんと理解したかったら、コンパイルした先のアセンブラと対比させるのが一番だと思う。
それが可能なのがCの最大の利点であり最大の欠点だから。

527 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:20:16 ]
まず独習かダイテルあたりのしっかりした入門書で基礎仕様の理解を押さえる
その上でひたすら「目的意識を持って」コードを書きつつCFAQを流し読めば十分

528 名前:516 mailto:sage [2008/05/10(土) 08:23:53 ]
レス色々ありがとう。

自分はプログラミングはちょっとやったことありますが、C言語に
ついてはさっぱりです。プログラミング言語Cがあれば何もいらない、
って話を聞いたんですけど、ちょっと古い本だしどうなんだろうなぁと。

だけど、薄い本なんで、これでC言語が概観できるというなら欲しいと
思ってます。

>>523
こういうスレがあったんですね。ありがとうございます。

529 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:02:19 ]
ただの趣味だからって、効率悪くてもなるべく自作するようにしてる俺エドモンド本田

530 名前:デフォルトの名無しさん [2008/05/10(土) 16:04:28 ]
複数行文字列(100行以上)を標準出力に書き出す際、
\ で複数行まとめて書くとインデントが使えず見辛い。
別の方法を考えたところ

1) printfで一行ずつ
 printf("黒い0服\n");
 printf("お茶を1杯\n");

2) fputsで一行ずつ
 fputs("赤い2んじん\n", stdout);
 fputs("橙色の3かん\n", stdout);

3) 配列に格納してwhile puts
 char *memo[] = {
  "黄色い4んごう",
  "五月みどり",
  ""
 };
 char **memop = memo;
 while(**memop)
 puts(*memop++);


(1) や (2) は解かりやすいが、(3) の方が見やすい。
ただ (3) のままだと宣言初期化時しか格納できない。
 ・分岐後に文字列を格納したい。
 ・strcpy は使用を控えたい。

悔しいのでスマートな書き方教えてくれ。

531 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:07:53 ]
 printf("黒い0服\n"
     "お茶を1杯\n");
でいいよ

532 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:08:31 ]
別のテキストファイルにして読み込む
マジおすすめ

533 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:09:19 ]
あぁでもprintfに直接文字列は推奨されないよ
%入ってるとまずいからだけど

534 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:12:28 ]
putsでいいだろ

535 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:26:36 ]
そこでfputsですよ



536 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:37:01 ]
ABC &
上記の様にバックグラウンドプロセスABC に、パラメータを与えて実行させるのは
どの様にすればいいのですか?

537 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:43:21 ]
それはシェルの役目

538 名前:デフォルトの名無しさん [2008/05/10(土) 16:45:35 ]
>>531
あぁ , 無しで繋げられるのだっけか。
でも , をつけてしまいやすいので使い方だけ覚えとく。
>>532,533
メモっとく。
>>534
 puts("青6し");
 puts("むらさき7ぶ");

 puts(
  "むらさき7ぶ\n"
  "灰ヤー"
 );
のような感じか。

もう少し考えてみるわ、サンクス。

539 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:50:35 ]
本題より例文が気になって仕方がない。むらさきしちぶ?

540 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:54:17 ]
抵抗のカラーコードの語呂合わせだろ。
俺は「青二才のろくでなし」って覚えているんだけど。

541 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:44:45 ]
失礼しms。

ttp://www.uploda.org/uporg1415339.c.html

上記のようなコードを書いたのですが、
bの領域を解放するときに
”Windows によって aaaaa.exe でブレークポイントが発生しました。ヒープが壊れていることが原因として考えられます。aaaaa.exe または読み込まれた DLL にバグがあります。”
のようなエラーが出てしまいます・・・。。。

確保していない領域にアクセスし、それをフリーしようとしたときにおこるエラーみたいなことがググったら書いてあったのですが、
double** b; が確保されている領域と、callocで追加確保された領域が連続でないということでしょうか?
またそのせいでこのエラーがおこっているのでしょうか?

ご教授願います。よろしくお願いします。。。

542 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:50:19 ]
>>541
> memmove(b, a, sizeof(a[0])*sizeof(a[0][0]));
これのせいで同じ領域を二回 free している

543 名前:541 mailto:sage [2008/05/10(土) 20:38:45 ]
>>542
memmoveだとだめなのでしょうか?

544 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:42:06 ]
>>543
何がやりたいかによる
a[y][x] に格納されている double の値をコピーしたいのであれば

for(y=0;y<N;y++) memmove(b[y], a[y], N*sizeof(a[0][0]));

545 名前:541 mailto:sage [2008/05/10(土) 20:45:19 ]
やりたいことはその通りなのですが、今の状態だとポインタをコピーしてる状態ということでしょうか?



546 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:47:01 ]
>>545
  V /  / _,, ァ=ニニ:}       _
   .V  /,.ィ"f= <r'ニ三{        |_    ┐   _l_ l
    'vf^<''"  弋z.ミ'テtフ       |_ Х □_ 匚 L | У
    〉!ト _ i{ ´ ̄r' =|'
   ./ェ゙‐ェi.    、__`_ヤ     ( その通りでございます )
   ./iュ.Hヽ.、   ゙,ニ/
  -^ ー'-.、,i._`ヽ,.仁リ
  ー - .、     /、

547 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:50:49 ]
>>542,544,546
なるほどです。つながりました。ありがとうございました><


548 名前:デフォルトの名無しさん [2008/05/11(日) 01:50:19 ]
初心者です。すみませんがアドバイスお願いします。

char (*pacX)[3];

とした場合、pacXは3要素のchar配列へのポインタになると思いますが、
このような変数「の配列」を以下のように動的に確保するとします。

int iNum = 2;
char (*pacX)[3] = new (char)[iNum][3];

この場合、ポインタ変数が2つ(iNum分)確保されるのでしょうか。それとも、それらが指す3要素のchar配列2つ分のメモリまで確保されるのでしょうか?


549 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 01:52:50 ]
typedef して考えてみよう。

typedef char CharArray3[3];
CharArray3* pacX = new CharArray3[iNum];

550 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 01:56:23 ]
newてC++やん

551 名前:デフォルトの名無しさん [2008/05/11(日) 02:13:33 ]
>newてC++やん
すみません、確かにそうですね。

>>549
なるほど。。。元の質問で言えば後者の「それらが指す3要素のchar配列2つ分のメモリまで確保される」ということなのですね?
イメージ的には 「char aacX[2][3]」と同じ分のメモリが確保されて、さらにいえば
delete [] pacX;
とすることで開放されるということよろしいでしょうか?


552 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 02:24:13 ]
>>551
そういうこと。

553 名前:デフォルトの名無しさん [2008/05/11(日) 02:28:42 ]
>>552
ありがとうございました。

554 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 04:05:19 ]
>>548
その記述ちょっと気色悪い。一歩間違うと関数へのポインターと見間違えちゃうし。

int (*func)(int k); // 関数へのポインター

int a1(int k) { printf("%d¥n", k * 5); return k; }

int a2(int k) { printf("%d¥n", k / 5); return k; }

int main()
{
 func = &a1;
 func(k);

 func = &a2;
 func(k);
}

みたいな・・・

普通に char *a[3];  でいいと思うけど。

555 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 04:06:45 ]
>>554
内容が理解できない人は黙っておいた方がいいよ。



556 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 06:00:32 ]
char *a[3] ポインタの配列
char (*a)[3] 配列のポインタ

557 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:22:40 ]
CGIにC使ってる人ってあまり見かけないんだけど、CでCGIってダメダメなの?

558 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:33:06 ]
実行速度的には悪くないけど、LLに比べるとテキスト処理が面倒なのと、非セキュアになりやすい(バッファオーバーフローとか)からじゃないかねぇ。

559 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:40:20 ]
単にcコンパイラ使わせてくれる鯖が少ないからじゃないの?

560 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:43:33 ]
>>559
どの言語が用意されているかというのは、Web制作板的な視点じゃないか
プログラム板的には、どの言語で実装するのが適切かという話題だと思ってたが。

561 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:47:22 ]
>あまり見かけないんだけど
とあったからそれに沿うように答えただけなのだが。
性能的には何ら問題ないと思う、とつけたほうがよかったかな?

562 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:06:01 ]
なぜCコンパイラ使わせてくれる鯖が少ないか、
というところまで考え出すと、
結局 >>558 に行き着くんじゃないかと思う。

563 名前:デフォルトの名無しさん [2008/05/11(日) 11:41:06 ]
数列の最大値を計算するアルゴリズム 数列:0、3、1、4、7、2、8

お願いします。

564 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:45:28 ]
>>563
わかりました
消えてください

565 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:48:20 ]
宿題丸投げは宿題スレへ



566 名前:デフォルトの名無しさん [2008/05/11(日) 12:00:34 ]
><

567 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:22:18 ]
>>563
max(0, max(3, max(1, max(4, max(7, max(2, max(8)))))));
><

568 名前:デフォルトの名無しさん [2008/05/11(日) 14:42:42 ]
適当に数字を入力して
その数字をまたある数で割って割り切れたらその値を出力して
割り切れなかったら余りだけをまた別の小さい値で割りきれるか
って繰り返して最終的には割り切れるプログラムを作りたいんですが・・・
例えば1020を500で割ると2余り20で2が出力され
余り20を10で割って2が出力されるみたいな
ヒントでもいいんでお願いしますm(_ _)m


569 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:23:44 ]
その日本語を1行ずつCに翻訳していけばいいと思うよ

570 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:24:56 ]
ってある数で割るって何で割るんだよ
1020を1020で割って余り0で終了、じゃだめなの

571 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:25:52 ]
意味が分からん

ある数って何だよ
入力した値か?

572 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:28:12 ]
>>558
速度的にはアレなんじゃね?
スクリプト系のmod_*みたいな仕組みってCでは一般的でないし。
2chは、やってるみたいだけど。

573 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:10:07 ]
>>568
ユークリッドの互除法?


574 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:12:50 ]
568です
説明が下手ですいません
レジのおつりを渡す要領で
適当な値を入力して500、100、10、1で各々割って何が何枚必要か求めたいんです


575 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:14:36 ]
どこが分からないのかわからない。
それをそのままコードに落とせばいいだけだろ



576 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:19:33 ]
つりの硬貨の枚数が最小になるようにとか、なにがしかの条件がついてるけど、それが説明できてないんだろ?

577 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:19:49 ]
こうだろ
#include<stdio.h>
int main() {
static const int coin[] = {500,100,50,10,5,1,0};
int price, i;
printf("金額は?");
scanf("%d", &price);
for(i = 0; coin[i]; i ++) {
printf("%d円玉が%d枚\n", coin[i], price / coin[i]);
price %= coin[i];
}
}






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef