C言語のことは漏れらに聞け!!<40>
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGC 言語じゃないなら訊くな。
問題をちゃんと切り分けて、C の話かそうでないか洗ってから質問してくれ。
つーか訊く前に Web で検索しろ。
コンパイラ探してるなら >>2 を見れ。
GUI とか、C 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投は別スレがあるから他に逝ってくれ。
宿題は別スレがあるから他に逝ってくれ。
書籍については別スレがあるから他に逝ってくれ。
・前スレ <39>
http://pc3.2ch.net/test/read.cgi/tech/1036409391/
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/
0233デフォルトの名無しさん
NGNGコンパイラにも拠るが、出力されるアセンブラコードが違うことはあるよ。
どっちも結果的な動作は同じなのでバグは発生しないはずだが。
基本的に a /= 2 と書いたほうが速いまたは変わらないはず、
なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。
0234デフォルトの名無しさん
NGNGは
c=a/=2;
にはできなったとおもいます。
0235デフォルトの名無しさん
NGNGプ(w
0236デフォルトの名無しさん
NGNG日本語喋れやザルが
0237デフォルトの名無しさん
NGNG0238225
NGNGだよね!やべーよ!このソース!
#include <stdio.h>
int main(void)
{
unsigned long a,k,k_max=0,y,y_max=0;
unsigned long data[99];
for(y=1;y<=100;y++){
a=y;
k=0;
while(a>1){
if(a%2==0){
a=a/2;
k++;
}
else{
a=a*3+1;
k++;
}
}
data[y-1]=k;
}
0239225
NGNGa=y;
k=0;
while(a>1){
if(a<=100){
k+=data[a-1];
break;
}
if(a%2==0)
{
a=a/2;
k++;
}
else
{
a=a*3+1;
k++;
}
}
if(k>k_max)
{
k_max=k;
y_max=y;
}
}
printf("対象値が%dのとき計算回数の最大値は%dです。\n",y_max,k_max);
return(0);
}
0240225
NGNG繰り返した回数をkとして1〜1000000までのkの最大値とそのときのyをだすプログラムで
『1〜100までの結果を配列に蓄え、以降の計算に利用する』ってやつ
a=a/2をa/=2に変えると、おかしな結果になる!
なんで!!!すごくない!?
0241デフォルトの名無しさん
NGNGこいつは ++i と書かずに i = i + 1 とか書いてるのか?
0242デフォルトの名無しさん
NGNGならないが
0243225
NGNGオレはなるぞおおお
なんでだああああ
0244デフォルトの名無しさん
NGNGほんとに a = a / 2 を a /= 2 に変えただけ?
a = a * 3 + 1 を a *= 3 + 1 にしちゃったりしてないよね?
0245デフォルトの名無しさん
NGNGint *foo() { static int bar, *p=&bar; return p++; }
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0249デフォルトの名無しさん
NGNG全く変わりませんが
0250デフォルトの名無しさん
NGNG次はもっと面白いのにしてね>>248
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGchar *foo (void) {
static char s[] = "hohohohoho";
return s;
}
0255デフォルトの名無しさん
NGNGとりあえず、入門書を一冊読んで、理解してから質問してください。
0256253
NGNG0257デフォルトの名無しさん
NGNGwhile (s = strchr(s, a))
memmove(s, s+1, strlen(s));
}
0258デフォルトの名無しさん
NGNGchar *s = str, *d = str, *l;
while ( (l = strchr(s, 'a')) != NULL ) {
*l = '\0';
while ( *s ) *d++ = *s++;
s++;
}
return d;
}
0259225
NGNGこれがa=a/2のとき
対象値が837799のとき計算回数の最大値は524です。
-- Press any key to exit (Input "c" to continue) --
これがa/=2の時
対象値が992425のとき計算回数の最大値は992600です。
-- Press any key to exit (Input "c" to continue) --
ちなみにマジレスだから!みんな変わんないって事はオレだけ!?
だれか変わった人いねーーがーー
0260デフォルトの名無しさん
NGNGchar *t = s;
while (*s) {
while (*t == a) t++;
*s++ = *t++;
}
}
0261デフォルトの名無しさん
NGNG#include <stdio.h>
int main(void){
unsigned long a, k, k_max=0, y, y_max=0, data[100];
for (y=1; y<=100; y++)
for (a = y, data[y] = 0; a > 1; data[y]++)
if (a % 2 == 0) a /= 2;
else a = a * 3 + 1;
for (y = 101; y < 1000000; y++) {
for (a = y, k = 0; a > 100; k++)
if (a % 2 == 0) a /= 2;
else a = a * 3 + 1;
k += data[a];
if (k > k_max) { k_max = k; y_max = y;}
}
printf("対象値が%dのとき計算回数の最大値は%dです。\n",y_max,k_max);
return 0;
}
0262デフォルトの名無しさん
NGNG>>252
>>260
えらー
0263デフォルトの名無しさん
NGNGchar *t = s;
do {
while (*t == a) t++;
} while (*s++ = *t++);
}
0264253
NGNG0265デフォルトの名無しさん
NGNGもしや板違い?
0266匿名希望
NGNGint scan_uint(void){
int tmp;
do{
printf("非負の整数を入力して下さい:"); scanf("%d",&tmp);
}while(tmp<0);
return (tmp);
}
int rev_int(int){
int tmp=0;
if(num>0){
do{
tmp=tmp*10+num%10;
num/=10;
}while(num>0);
}
return (tmp);
}
int main(void) {
int nx=scan_unit();
printf("反転した値は%dです\n",rev_int(nx);
return (0);
}
上記のプログラムは「読み込んだ非負の整数値を逆順に表示」するプログラムなのですが、13行目の式の意味が分かりません。どうか御教授ください。
0267デフォルトの名無しさん
NGNGtmp*10 + numの一桁目。
tmp=123, num=456だったら
tmpは1236になる。
0268デフォルトの名無しさん
NGNGCompilerはなんですか.Overflowとかが起こってんのかなあ.
0269デフォルトの名無しさん
NGNG>>248
0270デフォルトの名無しさん
NGNGなるほど.
0271266
NGNGありがとうございました。
0272那由多 ◆F4E74ZBQPA
NGNG123→321とするプログラムですよね。
(1)tmp=0,num=123
tmp=0*10+123%10=3
<num/10=12>
(2)tmp=3,num=12
tmp=3*10+12%10=32
<num/10=1>
(3)tmp=32,num=1
tmp=32*10+1%10=321
ってことでいいのかな。
0273デフォルトの名無しさん
NGNGよく見たら,data配列のsizeの宣言がおかしいような.data[99]の値はちゃんと保存されてるのか?
0274デフォルトの名無しさん
NGNGアハハハ、やっちゃったね。
0275デフォルトの名無しさん
NGNGいくら払えばいいんですか?
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG0278225
NGNGどういう事?
sizeの宣言ってdata[99]の99のこと?
でも1から100までだから、配列のサイズは99でしょ?
てか実際変えてるのはa=a/2のとこだけだから、
そこは関係ないと思う。
最もプログラムの本質に関わることだったらあれだけど・・・
0279デフォルトの名無しさん
NGNG何を言っているのか要領を得ないが、data[99] と宣言したら、使えるのは
data[0] 〜 data[98] だぞ。
0280デフォルトの名無しさん
NGNGサイズは10。
0281デフォルトの名無しさん
NGNG何言っているのか要領を得ないが、わかるようにはっきり言ったらどうだ?
0282デフォルトの名無しさん
NGNG十分はっきりしてるじゃねーか
0283172
NGNG手元の本を読んでもチンプン・カンプンなんで…
ページでもいいからお願いします。(あつかましくてすみません)
勉強し始めて一週間とちょいぐらいのレベルです。
0284デフォルトの名無しさん
NGNG何言っているのか要領を得ないが、何がわからないのかはっきり言ったらどうだ?
0285デフォルトの名無しさん
NGNGまず、static の何がわからないか、extern の何がわからないか書いてくれ。
0286デフォルトの名無しさん
NGNGつまらん
ログ流すな
0287デフォルトの名無しさん
NGNGint *p = data-1;
0288デフォルトの名無しさん
NGNG十分はっきりしてるじゃねーか
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG十分はっきりしてるじゃねーか
0291172
NGNG何がわからないのか…う〜ん
いままで(といっても一週間程度だけど) static とか使わないでソース書いてきたんで、
どうしてそんなものを宣言する必要があるのか? とか
だったら最初から外部関数でいいんじゃないの? とか
考えちゃうわけでして…
こんなんじゃだめですか?(抽象的でごめんなさいマジで…)
0292デフォルトの名無しさん
NGNG後に引けない>>279みたいなやつ。
0294デフォルトの名無しさん
NGNG>>279のどこが間違ってるの?
0295デフォルトの名無しさん
NGNGコピペだから気にするな
0296デフォルトの名無しさん
NGNGお願いだから相手にしないでよ。
0297デフォルトの名無しさん
NGNGじゃ、何も知らないという前提でいいな。
まず extern だけど、これは関数や変数の実体を定義していないが、直ちに
使いたいという場合に用いる。
例えば、プログラムの規模が大きくなってくると整理の為にソースを分割して
コンパイルするけど、その際に file_a.c で実装されている関数 func1() を
file_b.c から呼び出したい時に 「extern int func1(int value);」 とか書く。
ただし変数でなく関数の場合、extern は通常つける必要が無く、単に
「int func1(int value);」 と書くだけでよい。
つまり、ファイルを複数に分割するつもりがないなら、覚える必要は無い。
static だけど、これはグローバル (関数外) で書くのとローカル (関数内) で
書くのとでは意味が違う。
グローバル (関数外) で書く static は、他のファイルのソースから extern
できないようにする。
static に指定するとそれは外側から見えなくなるので、file_a.c と file_b.c
で共に同名の変数や関数が定義されてても、ぶつかる事がない。
ローカル (関数内) で書く static は、これは変数にしか付けられないわけだが、
普通に宣言した変数と違って前回に呼び出された時の値をそのまま保存するよう
になる。
これは、例えば前回に関数が呼ばれた時間を覚えておいて、そこからの経過時間
を返したい場合などに使える。
・・・難しいかな?
0298デフォルトの名無しさん
NGNGstatic → 外部モジュールで参照不可
extern → 外部モジュールで参照可
0299デフォルトの名無しさん
NGNGstatic 変数とグローバル変数の大きな違いは、static 変数は関数の外側から
見えない事。
だから、別の場所で間違って値を変更してしまう危険を防ぐ事ができる。
さらに、その変数が他の関数では直接使われない事がすぐわかり、ソースを
読むのが簡単になる。
グローバル変数だらけのソースは一般に嫌われる。
(何がどこで使われてるかわかったものじゃないから)
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG> extern → 外部モジュールで参照可
それは微妙に違くないか?
0303デフォルトの名無しさん
NGNG0304172
NGNGありがとうございます!
extern は大体(思い込みかもしれないけど)わかりました。
要するにソースの規模が大きくなるならextern にしとけってことで(いいのかな?)
static はかなり疑問符をつけながら読んでますw
大まかな認識として値を保持し続けるってことでいいのかな?
ほんとありがとうございます。勉強しはじめなんで一気に飲み込むのは僕には無理があるようで、これから徐々に消化していきたいと思います。
でも、おかげさまでアバウトな面での認識はできました。
0305デフォルトの名無しさん
NGNGextern についてはちょっと違う。
extern は、関数を使いたいファイル側で使うの。
[file_a.c]
#include <stdio.h>
extern int square(int i);
int main(void)
{
printf("%d\n", square(2));
return 0;
}
[file_b.c]
int square(int i)
{
return i * i;
}
こんな感じ。
0306デフォルトの名無しさん
NGNGそれが妥当な説明だね。簡単に言うなら。
0307デフォルトの名無しさん
NGNG1から100までなのに配列のサイズが99っておかしくねぇ?
おまえの理論は、1〜N個のデータはN-1個の配列に格納できるっつーことだぞ。
つまり、N=2とすると、1個の配列に格納できるって話になっちまうぞ。
もう一度よく考えれ。
0308デフォルトの名無しさん
NGNGstaticは関数の宣言に使用した場合と変数の宣言に使用した場合で
意味が異なる。
static func() と使った場合はそのファイル内ローカルの関数になる。
また関数内で static int a;と変数を宣言した場合はauto変数でなく
静的に(スタック上でなくメモリ上に)確保される。
つまり関数外でstaticなしで宣言したことと同じになる。
extern func();と
func():は同じことだ。
どうだい、これでますますよくわかっただろう(w
0309デフォルトの名無しさん
NGNGリンケージは?
0310デフォルトの名無しさん
NGNG罠張るなよ。
グローバルの static 変数はどうなるんだ。
あと大抵の入門者は auto なんてキーワード知らんから持ち出すな。
0311デフォルトの名無しさん
NGNG何故それを 273 に向かって言う?
つーか、多分 「1 〜 100」 はループカウンタを言っていると思われ。
実際には N - 1 でアクセスしてる。
・・・それでも後ろに 1 つはみ出るけどナー。
0312172
NGNGもちっと勉強してから、でなおしてきますぜぃ!
あ、でも使用用途が判らなかったから悩んでたんでそこらへんは解決しました!
あとは勉強して自然と身につけるのみですよね
0313デフォルトの名無しさん
NGNGどうでもいいが、新たに質問したら、名前はそこの番号に変えた方がいいぞ。
0314デフォルトの名無しさん
NGNGそれは書いた後で気がついた
0315デフォルトの名無しさん
NGNGただでさえ流れるの早いんだから。
0316デフォルトの名無しさん
NGNG309 や 310 や 311 みたいな突っ込みもいかんのか?
0317225
NGNG0318デフォルトの名無しさん
NGNG1から10まで9個か?
0319デフォルトの名無しさん
NGNGだから配列のインデックスは98が最高なんだから99にアクセスしたらまずいだろって。
もうこの話引っ張るのやめてくれよ。
0320225
NGNG探さないでください。
0321デフォルトの名無しさん
NGNG開発環境:Windows
コンパイラ:VC++かCygwin
0322デフォルトの名無しさん
NGNGC 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
0323デフォルトの名無しさん
NGNG開発環境依存ですか。ありがとうございます。
0324デフォルトの名無しさん
NGNG大抵は標準入出力を使ってやりとりすれば出来ると思うけど。
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG厨がわいてた方がいいと言うのか?
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNGス ス
レ
レ
ス レ ..┌→─→─→─→─→─┐ ス
│ ↓ レ
↑ │
│ ↓
↑ │
レ .└─←─[. 0.001 秒 ]─←┘ レ ス
ス レ レ
ス
ス
という事でよろしいか?
0329デフォルトの名無しさん
NGNG0330328
NGNG∧||∧
( ⌒ ヽ トゥトゥトゥマシェーリー
∪ 。ノ トゥトゥトゥマシェーリー
∪∪
0331デフォルトの名無しさん
NGNG||
∧||∧
( ⌒ ヽ>>328
∪ ノ
∩∪∩
(・∀・| | クヨクヨスンナ
| |
⊂⊂____ノ
彡
________
■ このスレッドは過去ログ倉庫に格納されています