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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/06/25(月) 06:14:52
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 14
http://pc11.2ch.net/test/read.cgi/tech/1181735298/


教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/
0153デフォルトの名無しさん2007/06/28(木) 00:23:51
1÷5
1は5で割り切れないので終了。余り 1
0154デフォルトの名無しさん2007/06/28(木) 00:24:31
strcpyとか
0155デフォルトの名無しさん2007/06/28(木) 00:27:32
>>151
strncat,strcpy,ctrncpy,sprintf,sscanf
ざっと思いつくのでこの程度。
あと、可変個引数使うときにある、printfのやつ。
あんま使ったこと無いから忘れたけど、vsprintfだっけ?
0156デフォルトの名無しさん2007/06/28(木) 00:28:03
>>152
どちらさまですか?
0157デフォルトの名無しさん2007/06/28(木) 00:28:28
>>150
おぬしは間違いなくstaticについて理解していない。
なぜstaticが付いているのかを考えるのじゃ
0158デフォルトの名無しさん2007/06/28(木) 01:02:20
質問です。
BASICのgotoみたいな命令はないのでしょうか?
0159デフォルトの名無しさん2007/06/28(木) 01:02:33
Cで書いてコンパイルしたファイルを人に送ってもその人は実行できないんですか?
というかできなかったのです。一瞬だけ実行されてすぐ消えてしまいます。
どうすればいいかわかりますか?
0160デフォルトの名無しさん2007/06/28(木) 01:05:29
>>158
gotoというそのまんまの命令がある
loop:
printf("test");
goto loop;
みたいに使う

>>159
コマンドプロンプト経由で使えばおk
0161デフォルトの名無しさん2007/06/28(木) 01:06:30
あ、ちなみにif文で条件を満たしていなかったらmainの一番上まで戻るというのがやりたいのですが・・・・
0162デフォルトの名無しさん2007/06/28(木) 01:10:52
>>160
そのファイル名のみを相手のコマンドプロントでコマンドさせるってことですか?
0163デフォルトの名無しさん2007/06/28(木) 01:12:28
構造体とポインタはどちらのほうが理解するのが難しい?
0164デフォルトの名無しさん2007/06/28(木) 01:13:18
>>161
int main(void){
start:
〜いろいろな処理〜
if(条件を満たしていない) goto start;


多分普通の人であれば
int main(void){
do{
〜いろいろな処理〜
}while(条件を満たしていない);
0165デフォルトの名無しさん2007/06/28(木) 01:13:31
おつむのレベルによる。
0166デフォルトの名無しさん2007/06/28(木) 01:14:04
>>162
渡したファイルはexe?
コマンドプロントで、exeのあるディレクトリに移動して実行すればオケ。
0167デフォルトの名無しさん2007/06/28(木) 01:15:06
>>163
一般的にはポインタが難しいと言われる。
0168デフォルトの名無しさん2007/06/28(木) 01:16:06
>>162
1.コマンドプロンプトを起動してもらう
2.コマンドプロンプトにexeファイルをドラッグアンドドロップしてもらう
3.Enterキーを押してもらう

これが一番手軽だと思う
0169デフォルトの名無しさん2007/06/28(木) 01:17:32
>>167
ポインタって何に便利なの?
0170デフォルトの名無しさん2007/06/28(木) 01:18:24
何に便利とか言い出すから一向に理解できないんだろ。
0171デフォルトの名無しさん2007/06/28(木) 01:19:15
>>166
>>168
ありがとうございました
0172デフォルトの名無しさん2007/06/28(木) 01:20:43
>>169
必要にならないと分かりにくいと思う
0173デフォルトの名無しさん2007/06/28(木) 01:24:36
>>169
Nバイトの構造体配列をソートして並び替えることを考える。
このとき、Nバイトのコピーが頻繁に発生することになる。
構造体に対するポインタの配列として保存していた場合、ポインタのソートで済むことになる。
例えばポインタが4バイト、構造体が100バイト超とかで配列が1000超とかだとすれば
どちらが効率的かはわかるよね?
0174デフォルトの名無しさん2007/06/28(木) 01:24:45
Cpad for Borland...ってやつで書いてるんですけどexeファイルがありません。
どうすればいいですか?
171と同一人物です
0175デフォルトの名無しさん2007/06/28(木) 01:29:33
>>170
お前がその便利さを知らない、説明できないだけだろ?えせプログラマは
こんなところで質問者をたぶらかしてないで、へちょいプログラマで満足してろよ?
0176デフォルトの名無しさん2007/06/28(木) 01:29:34
>>174
ファイルを保存している場所と同じ場所にexeファイルがあると思われ
0177デフォルトの名無しさん2007/06/28(木) 01:30:55
>>175
へちょくないあなたがへちょい>>170の代わりに答えてあげてください
0178デフォルトの名無しさん2007/06/28(木) 01:34:22
>>176
あるにはあるのですが、ドラッグアンドドロップはできませんし、
そのディレクトリに移動して 〜.exe と打っても実行されません
0179デフォルトの名無しさん2007/06/28(木) 01:40:02
>>178
コマンドプロンプトって何かわかってるか?
0180デフォルトの名無しさん2007/06/28(木) 01:42:45
なんか全体的に黒いやつですよね?
わかってるつもりです
0181デフォルトの名無しさん2007/06/28(木) 01:43:02
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88
0182デフォルトの名無しさん2007/06/28(木) 01:45:17
>>180
「notepad」って打ってメモ帳が起動するか?
ドラッグアンドドロップでフルパスが表示されて、エンター押して実行できると思ったんだけどなぁ
0183デフォルトの名無しさん2007/06/28(木) 01:48:14
>>182
メモ帳はでてきます。
でもファイルをドロップしようとすると○の中に×が入ってるようなのが出てきて
できません
0184デフォルトの名無しさん2007/06/28(木) 01:49:57
もしかしてvistaか?
0185デフォルトの名無しさん2007/06/28(木) 01:50:51
>>183 ちょっwwwwwww伏字エロいwwwwwwwww
ティ○ポの中にオ×コが入ってるようなので とか妄想しちゃうぞwwwww
0186デフォルトの名無しさん2007/06/28(木) 01:51:04
>>183
xpとかだとドラッグアンドドロップできないようになってるのかな?
じゃぁあきらめてフルパス(c:\cpad\test.exeみたいなやつ)を打って実行するべし
入力面倒だけど。
0187デフォルトの名無しさん2007/06/28(木) 01:54:18
>>186
Vistaですよ。
かなりめんどいってことですね〜〜…
ありがとうございました
0188デフォルトの名無しさん2007/06/28(木) 01:55:23
VistaはD&Dできないのか・・・ ひとつ勉強になった。
0189デフォルトの名無しさん2007/06/28(木) 01:56:12
セキュリティ云々でできなくなったそうだ
0190デフォルトの名無しさん2007/06/28(木) 01:57:04
なぁ〜〜に、こうすりゃええがな。XPを仮想PCにインストール。仮想PCでプログラミング
あっ武勇伝、武勇伝、武勇でんでんででんでんっ♪
0191デフォルトの名無しさん2007/06/28(木) 02:41:46
ポインタが無かったらprintfすら・・・
0192デフォルトの名無しさん2007/06/28(木) 02:43:50
ファイル操作も出来ないね
0193デフォルトの名無しさん2007/06/28(木) 03:03:13
そもそもポインタって何?実体は?それが理解できていないとダメ。
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
0194デフォルトの名無しさん2007/06/28(木) 07:10:08
2つの文字列を指すポインタ(例えばs1はABC、s2はABを指してる)で
下のソースコードだと2つの文字列が改行にいくまで繰り返すって言う意味ですかね?
while((*s1 != '\n') || (*s2 != '\n'))
{〜〜
s1++;
s2++}
0195デフォルトの名無しさん2007/06/28(木) 07:12:03
(;^ω^)恐ろしいコード
0196デフォルトの名無しさん2007/06/28(木) 07:18:58
すいません、ちょっと適当に書き込んだんで…。
ホワイルの中身の意味が知りたくて。
0197デフォルトの名無しさん2007/06/28(木) 07:21:18
>>194
そのロジックだと、s1、s2の改行文字の位置が揃っていないと誤動作しそうだが。
#つーか、>194自身が挙げたサンプルで死亡確定だな。
0198デフォルトの名無しさん2007/06/28(木) 07:57:55
>>194
s1にもs2にも改行コードないからプログラム起動して即吹っ飛ぶ。
s1がABC\n、s2がAB\nだったとしても一致しないのでやっぱり吹っ飛ぶ。
そのコードはs1とs2の改行コード位置が一致した場合にループ抜ける。
0199デフォルトの名無しさん2007/06/28(木) 08:00:03
〜〜の中にきっとbreakが含まれてるんだ
0200デフォルトの名無しさん2007/06/28(木) 08:45:23
C言語の精度って小数点以下いくつなんでしょうか??
0201デフォルトの名無しさん2007/06/28(木) 08:49:39
そういう精度の決まり方じゃない。
これの IEEE 方式。
ttp://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
0202デフォルトの名無しさん2007/06/28(木) 08:50:57
言葉が足りなかった。
IEEE 方式のマシンが多い、と。
別にエクセス 64 のマシンでも C は使える。

C かどうかで決まるものではなく、
CPU が何かによって決まるもの。
0203デフォルトの名無しさん2007/06/28(木) 10:07:58
うん、それで、小数点以下いくつなんでしょうか??
0204デフォルトの名無しさん2007/06/28(木) 11:11:40
>>203
>>201に書いてあるだろ
0205デフォルトの名無しさん2007/06/28(木) 11:14:24
>>203
だから小数点以下いくつという形の精度じゃないと。
「浮動」小数点ってのは、そういう事だ。
0206デフォルトの名無しさん2007/06/28(木) 12:07:34
有効桁数って、確か中学で習うよな…?
0207デフォルトの名無しさん2007/06/28(木) 14:02:25
10進数だとIEEEの64ビット浮動小数点は小数点以下15桁ぐらいかな。
但しそれに掛ける10のn乗という指数が付くわけだが。
0208デフォルトの名無しさん2007/06/28(木) 14:16:16
有効桁数15〜16桁あたりだな。
本当は2進数で考えないといけないんだけど。
02092072007/06/28(木) 14:21:03
#include <stdio.h>
#include <values.h>

int main(void)
{
printf("%d, %Lg, %Lg\n", sizeof(long double), LDBL_MAX, LDBL_MIN);
printf("%d, %g, %g\n", sizeof(double), DBL_MAX, DBL_MIN);
printf("%d, %g, %g\n", sizeof(float), FLT_MAX, FLT_MIN);

return 0;
}

gcc 4.1.1 (i386-redhat-linux) で上記のソースをコンパイルして
動かすと結果はこう出る。

12, 1.18973e+4932, 3.3621e-4932
8, 1.79769e+308, 2.22507e-308
4, 3.40282e+38, 1.17549e-38

e から後ろの部分が指数で「掛ける10のn乗」を表す。
3.3621e-4932 は 3.3621 掛ける10の -4932 乗だ。

但し上記の結果は環境依存で、同じ gcc でもコンパイルオプションに
よっては変わってしまう。だから全てについてこうであるという保証は
できない。(values.h も gcc 独自のヘッダかも知れない)。ただ大雑把に
言えることは float よりは double、また double よりは long double
の方が多くの範囲をカバーできるかも知れないというだけだ。
(コンパイラによっては long double はないかも知れないが)。
0210デフォルトの名無しさん2007/06/28(木) 17:00:08
ISO準拠の処理系ならlong doubleは必ずある。
209が使っている定数は<float.h>で提供されている。
0211デフォルトの名無しさん2007/06/28(木) 17:01:51
long double は必ずある。
しかし、double と同じサイズのこともある。
0212デフォルトの名無しさん2007/06/28(木) 17:10:52
putchar関数の意味がよくわかりません。
質問が抽象的すぎてごめんなさい
0213デフォルトの名無しさん2007/06/28(木) 17:12:06
標準出力に文字(char)を一文字出力(put)する
0214デフォルトの名無しさん2007/06/28(木) 17:42:10
…?
putchar('\n')
ってのはどういうことですか?
0215デフォルトの名無しさん2007/06/28(木) 17:48:00
標準出力はわかるか?
 通常は画面だと思っていい。
\n はわかるか?
 改行コードをあらわすエスケープシーケンスだ

つまり、画面上で改行する、ということ
0216デフォルトの名無しさん2007/06/28(木) 17:50:19
それは
printf("\n")
とは違うんですか?
0217デフォルトの名無しさん2007/06/28(木) 18:07:45
printf は文字列を扱う
たまたまprintfで1文字出力するなら、putchar と同じ様になるな。
でも、printf の第一引数の文字列は % とか入ると違ってくるけどな。
0218デフォルトの名無しさん2007/06/28(木) 18:08:09
"\n" は文字列
'\n' は文字
0219デフォルトの名無しさん2007/06/28(木) 18:31:55
でもこの場合では意味することは同じなんですよね?
というか、putcharでできることはprintfでもできるんですか?
0220デフォルトの名無しさん2007/06/28(木) 18:32:55
できるけど、効率は悪い。
0221デフォルトの名無しさん2007/06/28(木) 18:35:29
それは打つ文字数が多くなるとかいうレベルの話ですか?
プログラムの内容には関係ないですよね?
0222デフォルトの名無しさん2007/06/28(木) 18:36:12
あります。
0223デフォルトの名無しさん2007/06/28(木) 18:40:48
printf は文字列を解析して
% が出てきたらどうするかとかいう処理を行ってる。
ま、出力自体のコストに比べりゃ微々たる差だがね。
0224デフォルトの名無しさん2007/06/28(木) 18:41:45
適材適所だ
printfで全部まかなうのもいいし、使い分けるのもいい。
同じことができるなら、片方はまったく無駄だと思ってるなら
それはキミが初心者だから。
0225デフォルトの名無しさん2007/06/28(木) 18:42:18
最近のコンパイラは賢いから、>>216なんかはputchar('\n');に最適化されるけどな。
0226デフォルトの名無しさん2007/06/28(木) 18:43:47
そこまでするのか! っていう最適化が
意外とされてるんだなあ。
0227デフォルトの名無しさん2007/06/28(木) 18:48:02
gccは printf("%s\n", "hoge"); を puts にしてくれたりするよね。
0228デフォルトの名無しさん2007/06/28(木) 18:52:36
>>227
こういうのってどうやって知るんですか?
○は□に最適化されるとか
0229デフォルトの名無しさん2007/06/28(木) 18:55:28
逆アセンブルしてもいいし、
両方のパターンを書いてコンパイルして
バイナリ比較して等しくなるかどうか確認したのでも。
0230デフォルトの名無しさん2007/06/28(木) 18:57:45
すごい!
0231デフォルトの名無しさん2007/06/28(木) 19:08:41
普通に gcc -S
0232デフォルトの名無しさん2007/06/28(木) 19:31:12
特徴的なものは宣伝していたりマニュアルに書いてあったりもする。
0233デフォルトの名無しさん2007/06/28(木) 20:31:57
スーパーハカーは自分で逆アセして知る。
一般人は掲示板で知る。
0234デフォルトの名無しさん2007/06/28(木) 21:16:58
確かに。
普通のハッカーなら掲示板でヒントを読んで自分で試して知るだろうな。
0235ぴっころ2007/06/28(木) 21:32:59
突然お邪魔致します。ぴっころです。
2進数で表した時、2の倍数は最下位ビットが0になる事が分かりました。
では3の倍数は何かこのような決まりはあるのでしょうか?
0236デフォルトの名無しさん2007/06/28(木) 21:33:54
3進数で3の倍数は最下位ビットが0
0237ぴっころ2007/06/28(木) 21:36:37
言葉足らずで申し訳ありません。
2進法で表した時です。
0238デフォルトの名無しさん2007/06/28(木) 21:37:00
ぴっころって誰だよ。
0239デフォルトの名無しさん2007/06/28(木) 21:38:42
>>235
ヒント1 : 2の倍数とは偶数のこと
ヒント2 : 3の倍数を並べてみよう
0240デフォルトの名無しさん2007/06/28(木) 21:45:18
2 進法では別に 3 (11) の倍数に特徴はないなあ。
3 (11) で割ったら余りが 0 になるということくらいだな。
0241デフォルトの名無しさん2007/06/28(木) 21:45:44
>>235
数学の問題だなあ。

3で割ると余り0

なんてのはあまり意味ないか・・・。

10進数で表した時に各桁を足して3の倍数ならそれは3の倍数
(123は1+2+3=6なので3の倍数)なんてのもあるが、関係ないね。
0242デフォルトの名無しさん2007/06/28(木) 21:51:23
3の倍数を2進法で表したものは、正規表現/(0|1(00)*1)*/にマッチする。
0243ぴっころ2007/06/28(木) 21:51:33
>>238 ドラゴンボールのぴっころから取らせて頂きました。
>>239
   11
  110
 1101
 1100
 1111
10101
11000
11011
繰り返しもあるような無いような・・・。
ちょっと僕のキャパでは厳しいです・・・。
0244デフォルトの名無しさん2007/06/28(木) 21:53:59
>>243
18はどこへ消えた
0245デフォルトの名無しさん2007/06/28(木) 21:54:19
>>242
発想はいいがちょっと惜しいな。

1000000001の間に11を入れて1011000001も3の倍数だ。
0246デフォルトの名無しさん2007/06/28(木) 21:55:49
>>243
うそだ!
NHKのじゃじゃまる、ぴっころ、ぽろりのぴっころだろ?
0247デフォルトの名無しさん2007/06/28(木) 22:06:53
bccってのをXPで使ってたんですが、vistaに変えたんですが環境設定ソフトでPATHの設定が出来ませんってのが出るんですが・・・・
vista出使える環境設定ソフトかPATHの設定方法を教えてください。
0248ぴっころ2007/06/28(木) 22:08:04
   11
  110
 1101
 1100
 1111
10010
10101
11000
11011
11110
11→10→01→00
・・・。
ちょっときついです。
教えてもらえると助かります。
0249デフォルトの名無しさん2007/06/28(木) 22:09:42
1101のどこが3の倍数なんだよ。
0250デフォルトの名無しさん2007/06/28(木) 22:11:40
 1101
 1100

数が減ってるな
まぁ1001の書き間違いだろうからそれくらい勘弁してやれ
0251デフォルトの名無しさん2007/06/28(木) 22:12:59
>>247
マイコンピュータのプロパティの中にない?
XP/2003まではそこにあるんだけど。
0252デフォルトの名無しさん2007/06/28(木) 22:23:37
6bitでカルノー図書いてみたんだが一切簡単化できねーから周期性は無い臭い
■ このスレッドは過去ログ倉庫に格納されています