1read 100read
2013年01月プログラム29: C言語なら俺に聞け(入門編)Part 111 (1001) TOP カテ一覧 スレ一覧 2ch元 削除依頼
TypeScript part1 (326)
GCCについて part10 (234)
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part14 (715)
関数型言語Part5 (957)
Ruby 初心者スレッド Part 50 (947)
NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (406)

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


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

2 :
乙〜

3 :
1乙。
日本のC言語底辺教育の総本山だ。
大事に使ってね。仲良く使ってね。

4 :
>>1
前スレ
> 986 名前:デフォルトの名無しさん [sage]: 2012/12/09(日) 20:24:53.93
> >>977
> 文字列反転関数
> void strrev(char *d)
> {
> int i;
> int len = strlen(d);
> char tmp;
> for (i = len / 2 - 1; i >= 0; i--) {
> tmp = d[i];
> d[i] = d[len - i - 1];
> d[len - i - 1] = tmp;
> }
> }
> これは、"1234"を"4321"に変換する
>
> 987 名前:デフォルトの名無しさん [sage]: 2012/12/09(日) 22:06:01.62
> 副作用かっこわるい
副作用?何?と思ったが分かった。
char* strrev(char *d) {
int i, len = strlen(d); char tmp;
for (i = len / 2 - 1; i >= 0; i--) { tmp = d[i]; d[i] = d[len - i - 1]; d[len - i - 1] = tmp; }
return &d[0];
}
なら良いのだな。
ところで、XORを利用したswapもあるんだね。
ttp://www8.cs.umu.se/~isak/snippets/strrev.c

5 :
>>4
前スレ987が勘違いしてる。
関数型言語でいう副作用排除なら、別エリアに編集する方法もある。

6 :
初心者なんだろうけど、いろいろと気持ち悪いコードだな

7 :
うん

8 :
何を返そうと、入力を破壊的に変更したら副作用だべ

9 :
前スレ986,987共に、引数はchar*だけなので、入力書き換えじゃなくて、引数から参照した先の状態書き換え。
C初学者が間違いやすい所。

10 :
Cには値渡しかないから、ポインタを参照渡しの代用にしてるんじゃないの。
なんにしても関数の外にあるものを変更したらそれは副作用だけども。

11 :
strdup()してから反転して返しても副作用と言うんかい?

12 :
関数内でstrdup()したなら、それをどういじくってから返そうと副作用じゃないのでは。
ヒープからメモリが確保される事も副作用と考えるならダメだけど。

13 :
ダメだけどね

14 :
調子にのってました
ごめんなさい!

15 :
うむ、分かればよろしい

16 :
C言語なら俺に聞け(入門編)Part 109
http://toro.2ch.net/test/read.cgi/tech/1350461655/
966 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 12:11:48.06
純粋に関数としてみると、printfは書き込まれた文字数を返す関数。
画面に文字を表示するのはprintfの副作用。
968 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 12:29:40.99
>>966
すみません、その副作用とはなんでしょうか。

17 :
977 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 13:20:30.07
>>968
int x;
int foo(void)
{
x = 100;
return 200;
}
で、xの値が書き換わってしまうのはfooの副作用。
int bar(void)
{
printf("%d\n", 300);
return 400;
}
で、数字が表示されてしまうのはbarの副作用。

18 :
979 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 13:42:07.78
>>977
うーん、return で返す値以外は、関数にやらせることが"副作用"なんですかね。
引数void戻り値なしなら、関数の処理は全部、"副作用"?
981 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 14:08:18.34
>>979
>引数void戻り値なしなら、関数の処理は全部、"副作用"?
そのとおり
982 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 14:36:24.96
void func(int *a){
*a = *a + 1;
}
を副作用って言うのは、正直微妙な気がする。

19 :
微妙、じゃなくて
この計算機工学界隈での定義であり用語だろ

20 :
そうだけど、何か?

21 :
用語が実態と乖離してるのを微妙に感じるってことだろ

22 :
副作用ってのはその関数においてローカルでもstaticでもない変数に書き込みを加えることを指すわけで、
returnだの引数だのといった説明は的外れ。

23 :
間違えた。訂正。
副作用ってのはその関数が終了してもメモリ上に残るような変数に書き込みを加えることを指すわけで、

24 :
副作用の事は入門レベルじゃないが、Cは状態依存(Statefull)で、副作用を積極利用してる言語だからな。
計算モデルでの、宣言的プログラミングとは違うモデル(ハードがStatefullなんだからしょうが無い)。
入門レベルをクリアしたら、CTMCP(コンピュータプログラミングの概念・技法・モデル)とかで違いが判る。

25 :
R

26 :
R

27 :
R

28 :
R

29 :
R

30 :
R

31 :
R

32 :
いんぽ

33 :
R

34 :
R

35 :
C言語とR言語どっちが難易度高いですか?

36 :
R言語って知らないけど、とりあえずCはそれほど難しくないからRのほうじゃね

37 :
グローバルの時代にクーラー効いた部屋でC言語プログラミング
時代錯誤にも程があるカスがwwww

38 :
#include <math.h>
を書いて数学関数を使うプログラムを書いたのですがコンパイルでエラーになりました。
gccに-lmオプションをつけたらやっとコンパイルが通ったのですが、Cの教科書には-lmオプションのことなんか一言も書いて有りませんでした。
本当にありがとうございました。

39 :
Rー

40 :
Rー

41 :
>>38
コンパイルは通ってリンクでエラーになってたんだろ。

42 :
うん、こ

43 :
printf関数を使う時ってstdio.hをインクルードして使うじゃないですか
てことはstdio.hでprintf関数が定義&宣言されてると思ってたんですよ
けれど
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1331505108
のベストアンサーを見てみたら
>printf関数をコールするにはstdio.hと言うヘッダーファイルを#includeでインクルードします。
>そしてprintf関数が入ったライブラリファイルをコンパイルにリンクするように追加します。
って記述があったんです
これってprintf関数はstdio.hじゃぁなくてライブラリファイルで定義されてて
stdio.hでは宣言しかされてないってことなんですか?

44 :
R

45 :
* ゚・*:.。.:*・゜+ d(*´∀`)b そうです +.:*・゜゚・*:. *

46 :
おまえはきっとライブラリファイルがテキストファイルだと思ってんだろ

47 :
返信アリャシャス
すっきりしました

48 :
R

49 :
テキスト以外はバイナリだとおそわりました

50 :
R

51 :
tinko

52 :
Rいんぽ

53 :
いんきんたむし

54 :
>>43
まぁ、そんな感じでいい

55 :
Rくさい

56 :
皮でRを包む

57 :
Rがぁ?

58 :
Rのぉ?

59 :
金玉がソファーにはりついて気持ち良い

60 :
R

61 :
>>54
ありがとうございます…

62 :
床オナはRの事をこれっぽっちも考えてない

63 :
Rこりん

64 :
ぽこちん祭り

65 :
mallocしたメモリは関数の呼び出し元・呼び出し先のどちらでfreeするのがいいのでしょうか?
普通に考えれば呼び出し先で、freeすることはほとんど無いはずなのですが
GUIのWindowみたいにいつ終わるかわからないものは、呼び出し先でfreeするのがベストかと思います。

66 :
>>65
巣からでてくんな
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/

67 :
山ほどあるcで書かれたコード嫁

68 :
後片付けは自分でしなさいとこだわる人もいるだろうけど、
手紙なら読んだ人が処分するよね。
相手が読むのだけを待って、読み終えたら自分で片付けなくては
いけないなんて効率悪いと思う。
ただ、誰が片付けるかは明確にしておかないといけないけど。

69 :
>>37
>グローバルの時代に
聞くからに、とっても悲惨な時代だと、どーしても思うのですが

70 :
てs

71 :
てすと

72 :
#include <stdio.h>
int uruu(int year);
int main(void)
{
int a,b;
int lastdays=0;
int i;
scanf("%d %d ",a,b);
for(i=a;i<b;i++){
if(uruu(i)==1){
lastdays+=366;
}
else{
lastdays+=365;
}
printf("%d",lastdays);
}
int uruu(int year){
if(year%400==0){
return 1;
}
else if(year%100==0){
return 0;
}
else if(year%4==0){
return 1;
}
else{
return 0;
}
}

73 :
↑ごめんインデントが汚いけれど
何がいけないの?

74 :
>>73
何がやりたいのか書かれてないのがいけない

75 :
ごめん
年度二つ入力して閏年考慮した上で、その間の日数を求めたい。
これはそのひな形。
とりあえず、動かないんだ。

76 :
scanfに整数わたしてる

77 :
>>75
scanf &

78 :
ごめん、それも忘れたたけど
まだ動かない

79 :
どうなることを期待して、何が出るかくらい書け

80 :
インデントつけないのが悪いな。{ } が合ってない。

81 :
例えば
2000、2007といれると
2000=閏年=366
2001=平年=366+365
みたいになることを期待してるんだけど

82 :
その期待に対して、何が出るか聞いてんだよ

83 :
for(i=a; i<=b;i++)

84 :
if(year%400==0){
  ↓
if((year%400) == 0)
%と=どっちが優先か忘れたけど

85 :
その前に、main()の } が足りないみたいだけど、コンパイル通るのか

86 :
ごめん、出来た。
けど、結局何がいけなかったのか分からない。

87 :
さっきのと比較しろや

88 :
int ndays(int y,int m)
{
int days;
int month;
int data[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
days=month[m];
if(uruu(y)==1 && m==2)
{
days+=1;
}
return days;
}

この関数なのですが、何か問題がありますか?
プロトタイプ宣言もしてあるのですが、動作しません。

89 :
>>88
>days=month[m];
わからんけど、ここな気がする

90 :
days=data[m];
こうじゃね?

91 :
「動作しない」と「コンパイルできない」くらい区別してくれ

92 :
time_tに変換してdifftime()すればいいものを。
課題とか実験とかなら判るけど、馬鹿に限って手を抜くことをしないからなぁ。

93 :
入門編でしか暴れられない奴が言ってもなあ。

94 :
difftimeを知ってるならもう中級者

95 :
数字の末尾が2,4,6,8であるかどうかの確認ってどうするんでしたっけ?

96 :
わからない

97 :
お年玉葉書か。

98 :
>>95
bool isLastDigit2468(int value)
{
char foo[20];
char digit = foo[sprintf(foo, "%d", value) - 1];
return digit == '2' || digit == '4' || digit == '6' || digit == '8';
}

99 :
>>95
i%10&&!(i%2)

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【入門】Common Lisp その9【質問よろず】 (846)
C言語なら俺に聞け(入門編)Part 111 (1001)
Lisp Scheme Part35 (366)
C#で仕事ある? (816)
だめです! HSP厨は絶対に犯罪です。 (947)
懐かしきベーマガの面白かった投稿プログラムを語る (774)
--log9.info------------------
【SK】スカンジナビア航空【SAS】 (232)
【お気に入りスッチー(CA)について語る会】 (647)
【OS】 オーストリア航空 【VIE】 (758)
【JAL】平会員の集い【JMB】 (561)
【CZ】 中国南方航空 【広州 大連 長春 瀋陽】 (569)
【高松市】高松空港ってどうよ3【綾川町】 (820)
Suite & ANA Lounge & signet 5ラウンジ目 (810)
【依存症】全日空だと不安【性癖】 (201)
【ANZ/NZ】ニュージーランド航空【国営】 (829)
【OKA】沖縄那覇‐宮古ピストン修行 2便【MMY】 (702)
エアライン 一行小説スレ 第2変 (479)
TSS東光システムサービス4班 (511)
【1日30便】神戸空港発着枠【夜明け間近】★3 (674)
高麗航空 (526)
成田廃港・羽田一極論者を説得するスレ 1 (304)
地上駅に決定!。静岡空港新幹線駅。 (589)
--log55.com------------------
分譲マンション管理組合 10
まだマンション買っちゃだめ!あと2年で半額に 168
不動産投資を淡々と語る16
千葉=東京神奈川埼玉に住めない低所得75軒目
【賃管】賃貸不動産経営管理士 part32
【管業】管理業務主任者試験 第167棟目
【宅建士】宅地建物取引士686【勉強のやり方を教えてやろうか?】
【マン管】マンション管理士 222団地目