1read 100read
2013年04月プログラム10: C言語なら俺に聞け(入門編)Part 113 (618) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【JS,PHP,Python】スクリプト,バトルロワイヤル30【Perl,Ruby】 (1001)
Perlについての質問箱 58箱目 (423)
C/C++の宿題片付けます 164代目 (272)
VBAなんでも質問スレ (223)
Visual Studio 2012 Part6 (487)
Eclipse統合M34【Java/C++/Ruby/Python/Scala】 (309)

C言語なら俺に聞け(入門編)Part 113


1 :2013/03/09 〜 最終レス :2013/04/07
C言語の入門者向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 112
http://toro.2ch.net/test/read.cgi/tech/1358278884/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 163代目
http://toro.2ch.net/test/read.cgi/tech/1361082416/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2 :
NULLってなんですか?

3 :
>>2
NULLです。

4 :
#define NULL 0
ポインタとかメモリアドレスを聞かれてる時にはnullptrつかうとええよ

5 :
>>5
ga

6 :
>>4
さあC++スレにお帰り

7 :
NULLってのはポインタ使わない限り使わないよね
ポインタって基本的に使わない配列があるし

8 :


9 :
           ___   ━┓
         / ―  \  ┏┛
        /  (●)  \ヽ ・
       /   (⌒  (●) /
       /      ̄ヽ__) /
.    /´     ___/
    |        \
    |        |

10 :
>>7
0 と書いて全然OKだから、私は NULL でさえ使わない。

11 :
0がぬるぽになるとか悪魔の仕様だよね
何で最初にキーワード導入しなかったんだろうと思ったが
当初ぬるぽのビット表現が0にならない環境とか無考慮で0を入れるようにしてて
その時代との互換性とかなんだろうか

12 :
リテラルの0と
数値の0と
アドレスの0と
ポインタのNULL
違いが分かる人は好きにすればいいんじゃない?
わからない人はきちんと使い分けましょう

13 :
>>8>>9
配列の場合
a[i]=NULL;→エラー
ポインタの場合
int *a=NULL;→不エラー

14 :
リテラルの0だけ仲間はずれ感があるけど気のせいか

15 :
C/C++の仕様を洗練した低レベルでネイティブな言語てないの?

16 :
どういうところを洗練すればいいと思うの?

17 :
ぬるぽになるのはリテラルの0に限らないぞ
計算して0になれば複数のリテラルからなる式でも構わない

18 :
>>15 D言語

19 :
D言語は魔改造を繰り返した結果、
C++より遥かに邪悪な黒魔術が使えるようになってしまった

20 :
C#によく似た文法のCトランスレーターなら名前忘れたが有ったような

21 :
CとC++を同一に考える時点でアホ

22 :
アドレスの0とポインタのNULLは普通のパソコンなら同じ意味じゃないの

23 :
うん

24 :
Cなら普通のパソコンでビット表現が0にならない事はほとんどないと思われるが、
C++ならg++だとメンバ変数ポインタのNULLはのビット表現は0じゃなく-1

25 :
むしろどういう環境だと変わってくるの?
CPUによるものなのかOSによるものなのか。
普通のパソコンでの当たり前が当たり前じゃない例を知らないから
想像しようとしてもよく分からないんだよね・・・

26 :
0番地が普通に使える環境だったらダメそう。なさそうだけど。

27 :
DOS時代は普通に使えてた気がする

28 :
Null Pointer Assignmentのメッセージを出すために使われてたね。

29 :
array[]= {15,78,98,15,98,85,17,35,42,15};
int main(void)
{
 int *p_array=array;
 int sum= 0;
 while(p_array<array+10)
  {
 sum += *p_array++ ;  
 printf("sum %d\n",sum);
  }

printf("average %d\n",sum/10);
return 0;
}
sum += *p_array++ ここが疑問です。
実際にはsumへの加算が終わってから、ポインタが移動しているようなのですが、
演算の優先順位( ++ > * > =)に従うとポインタが先に移動してから加算される気がしますが、そうなってはいません。
なぜこうなるのでしょうか。

30 :
ぬるぽが正しくつかわれているのを久々に見た

31 :
>>29
演算子の優先順位は ++ → * → += であるのは間違いない。
ここで *(p_array++) であるが、値は、副作用++が適用されるの前の値となる。
したがって ++ が先に適用されるにしても、加算に供される値は、++ 実行前のものとなる
キーワード「後置インクリメント」

32 :
>>29
++と*は同じ優先度で、右から左の結合でしょ?
つまり、* ( p_array++ )  

33 :
インクリメントを分離しろ

34 :
演算の優先順位と、インクリメントが行われるタイミングは別の問題

35 :
インクリメント使わずにa=a+1方式使えばいいだけの話じゃ……

36 :
・ポインタ演算は避けられるなら避けるべき。
・forが自然に使えるなら使うべき。
・型指定のintはunsigned intのようなケース以外は省略すべきでない。
いずれにしても、アナクロなコードだ。
それと、sumの出力はループの外ジャマイカ。

37 :
【PC遠隔操作】 「僕はC#を扱う技術がなかった。職場の社長も証言」 片山容疑者、容疑否認のメモ公開 取り調べ可視化を主張★3
http://uni.2ch.net/test/read.cgi/newsplus/1362890199/

38 :
みなさま、有難うございます
>>31>>32>>34
インクリメント演算子についてしらべたところ、
「値を1増加させるという意味は同じものの、増加させるタイミングが異なる。
後置のものは値を使った後に増加させ、前置のものは値を増加させてから使う。」
だからちゃんと1番目の数値がsumに代入されていたんですね。ちなみに>>29で前置インクリメントにしてみたら暴走しました。
逆にデクリメントするのだったら前置にしないと変な値になるんですね。
int *data = array + 10;
int sum = 0;
do {sum += * --data;
}while (data >array);
>>33
sum += * p_array++ ;は、
sum += * p_array;
p_array++;
と同じになりますね
>>35>>36
for(i=0;i<10;i=i+1) {
 sum = sum + array[i];}
普通は配列の合計値はこうして出した方が素直ですよね。(sumの出力は代入の確認で、配列のint宣言はコピーし忘れてました。)
自分は昔のCPU用のプログラムをいじってみようと思っています。
ポインタ演算は使うと速くてサイズも小さくなるそうなので、使ってみようと思います。

39 :
>ポインタ演算は使うと速くてサイズも小さくなる
残念ながら、これ自体が過去のもの。
却って素直にforと配列アクセスで書いた方がコンパイラが最適化してくれる可能性もある。

40 :
そうなんですか。ちょっとでも速く出来ればなと思ったんですけど。
やたら構造体が多くて、下手にポインタを使うと型が一致しなくなりそうなので、リスクの割りに効果がないならやめときます。

41 :
くだらない最適化より先にやる事がある

42 :
というより、最適化は最後の手段。

43 :
最適化のコツ:
 初心者は最適化などに色気を出さないこと。
 ベテランも最適化のことは忘れること。

44 :
最適化のコツ
・ポインタより配列を使う
・コンパイラの最適化オプションを吟味する
・GPGPUを検討する

45 :
最適化の骨
・三日後の自分が簡単に理解できるコードを心がける

46 :
最適化の落ち
・馬鹿の考え休むに似たり

47 :
初心者は、「最適化」と「あるべき姿のコード」の区別がつかない。
読み易いなコードを書けと言うと、シンプルなコードではなく、冗長なコードを書く傾向がある。
これは「非最適化」とされ、要するに初期悪化なので注意。

48 :
お前好みのコードになってるかそうじゃないかだけだろカスwwwww

49 :
#include <stdio.h>
int main(void) {
int a=1,b=2; /* 「a=1」、「b=2」とする。  */
if ( a = b ) puts ("YES"); /* 1=2ならYESと表示する。   */
return 0; /* 終了する。         */
}

50 :
if (a == b) だろ、ボンクラ

51 :
Cを勉強中1週間目の超ド素人です。
数値を文字列に変換し、下記のようにくっ付けるなんて関数はありますか?

"123" + "456" + "789"

123456789
こんなふうにできますか?よろしくおねがいします。

52 :
sprintf
strcat

53 :
リテラルなら並べときゃくっつくが、
まあそういうハナシじゃないよな。

54 :
例だと文字列から数値に変換したいようにも見えるが

55 :
文字列として連結した結果をさらに整数型に変換しろって問題?

56 :
すみません言葉足らずでした
整数A,B,Cを、文字列に変換し、ABCという文字列にしてから、ABCという整数に変換したいです

57 :
strtol()でも使えばええやん

58 :
>>56
整数100,200,300,....を <= 入力整数の個数は?
文字列の"100200300...."にして <= 出力
更にこれを整数100200300....にする <= 出力
こんな関数あるかと?

59 :
int abc;
char s[256];
sprintf(s, "%d%d%d", a, b, c);
abc = atoi(s);

60 :
>>59
いつものようにさりげなく嘘書くな
>int abc;
なんだよこれ

61 :
>>60
それは>>56の整数ABCを宣言したものです。何か間違いでもありますか?

62 :
C言語でDXライブラリ無しでゲーム作るとしたらどの程度のゲーム作ることできる?
普通に2Dとかのアクションゲームやらシューティングやら作れる?

63 :
>>62
SDL
OpenGL

64 :
 OpenGL+C言語+SDLで3Dに挑戦!

65 :
DXライブラリなしならDirectXを直接叩けばいいのでは

66 :
>>60
嘘つきはお前だ、同業者さん。

67 :
しかしながらDirectXは、Windowsプログラミングをある程度こなせるようになる必要があるし
さらに数多くの引数や初期化で頭がパンクして、画面に描画するのですらめんどくさいしで
ゲーム作ろうと思うと線形代数が必要になってと、ものすごく覚えることがあるし
確実に艱難辛苦が待ち受けているからな、そういう意味では2Dのゲームを作るのならDXライブラリで十分だと思う

68 :
2DならGDIとMCIしてれば十分

69 :
とりあえず「DXライブラリ」利用者は
「C言語」やら「2Dのゲーム」などのように
全角英数字を使う事への抵抗が皆無なのは分かった

70 :
>>51
× int abc;
○ int abc, a, b, c;

71 :
それだけでa,b,cは未初期のまま使われてて意味ない
/* a,b,cは以上宣言されて初期化もされている */
というコメントが入れられてたら納得できたか

72 :
>>56
文字列にする必要はあるの?
abc = ((a * 1000) + b) * 1000 + c; じゃだめ?
イマイチ何がしたいか分からない

73 :
a、b、cが3桁固定とは限らないだろ

74 :
なら調べればいい

75 :
そのうちlong int超えるケタになって
まーた動かないとか言いだすぞ

76 :
桁数調べて*10再帰

77 :
>>75
連結するからすぐにそうなるだろな
入力の整数の最大値はint指定で入力整数の個数から、桁数を計算するぐらいしないと駄目かも

78 :
スイーツ(笑)
{
while(ナタデココ)
main();
}

}

79 :
doubleの使えなさは以上
精度糞スギ

80 :
まじプロフェッショナルは多売長整数使うからヨロシク

81 :
doubleが使えないならBigDecimalを使えばいいじゃない

82 :
15桁以上の精度が必要ってどんな領域よ。
本来、多倍長整数使うべきところでで浮動小数点使ってるだけじゃないのか?

83 :
(1+√(5))^n = a[n]+b[n]√(5) としたときの整数a[n],b[n]の一般項は
a[n] = (1/2)((1+√(5))^n+(1-√(5))^n)
b[n] = (1/(2√(5)))((1+√(5))^n-(1-√(5))^n)
この値を整数演算だけでO(log n)で算出する方法があれば教えて下さい。

84 :
>>82
物理

85 :
>>84
でも、多倍長実数は使わずに妥協するんでしょ。結局必要ないじゃん。

86 :
GMP使えば計算できるんじゃないかな?
ただ難解な物理をやりたいならマセマティカ買った方がいいんでない?

87 :
>>83
a(1)=1 b(1)=1
a(2)=6 b(2)=2
a(3)=56 b(3)=24
a(4)=6016 b(4)=2688
a(5)=72318976 b(5)=32342016
符号付32bit整数だと n=6 でオーバフロー
こんだけでいいならテーブルで持てばいいけど
多倍長演算するなら桁数が n^2 オーダーで増えるから
O(log n) ってのは無理じゃね?

88 :
n^2 オーダーじゃなくて n*2 オーダーだった

89 :
O(n) で増える桁数をセットするためにはどうしても O(n) オーダーの時間がかかると思う
どう転んでも無理ぽ

90 :
>>86
いや、出来る出来ないじゃなくて性能的な問題。
規模と精度で折り合いつけると倍精度で妥協する事になるでしょ。

91 :
桁数のオーダー O(2^n) じゃね?

92 :
>>73
むしろ固定じゃないものを連結するってどういう状況なんだ

93 :
めんどくさい奴らだな
typedef char d[10000] で1万桁だ

94 :
で?

95 :
InitCommonControlsEx イニットコモンコントロールR

96 :
>>83
実はフィボナッチ数列(の亜種)じゃね?

97 :
a[n]=a[n-1]*a[n-1]+5*b[n-1]*b[n-1];
b[n]=2*a[n-1]*b[n-1];

98 :
ランダム・アクセスでの読み込みについて聞きたいです
まず、バイリファイルを作成し、それを読み込もうと思ったのですが、どうしてもできません
どこが間違ってるか教えてください。

99 :
>>98
あなたの姿勢に問題があります。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Win32API質問箱 Build114 (232)
出されたお題をコーディングして罵られるスレ (251)
Androidプログラミング質問スレ Part31 (421)
スレ立てるまでもない質問はここで 126匹目 (367)
文字コード総合スレ part8 (213)
Androidプログラミング質問スレ Part31 (421)
--log9.info------------------
〓自殺未遂した人に質問です!!〓Part2 (299)
恋人に裏切られた死にたい 2別れ目 (267)
とある自己愛性人格障害者のラストスレッド (577)
■自己愛性パーソナリティ障害者 被害者スレ @34■ (326)
カウンセリング・心理療法の失敗例Part11 (669)
テグレトールについて語るべさ4 (548)
毒親から離れられた人が前向きに幸せを追求するスレ (283)
秋田県 心療内科、精神科3 (466)
メンヘラーにも出来る仕事!Part11 (903)
統合失調症の妄想について色々書いてみるスレ (335)
石川の精神科・心療内科Part4 (947)
□■メンヘル板の自治を考えるスレ part58■□ (837)
【声が】失声症スレ【出ない】 (473)
【臨時】スレ立て代行スレッド (748)
【成人ADD】生活工夫4【怠け者から脱出】 (657)
発達障害の病院情報交換所 (218)
--log55.com------------------
【NPO法人ママハタ】SNS依存、自撮りママ大量発生2
札幌市の老人ホーム(ブラックはどこ)パート3 ★2
サ高住の問題点!
宮崎にある社会福祉法人報謝会について語ろう!
山梨の介護施設ってどうよ
介護職員の利用者に対するいじめ、嫌がらせ、差別等
【寝たきりで発病】 誤嚥性肺炎 【人災?】
佐賀県の介護施設