--- title: 『新版C言語プログラミングレッスン 入門編』第8章・関数 author: kazu634 date: 2008-05-01 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3961;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - C - Programming ---
Cの関数は
0個以上の引数を持ち、0個か1個の戻り値を持ち、まとまった仕事を行うプラグラムの一部分」
#include <stdio.h> float calc(float x); int main(void); /* この部分が関数だよ */ float calc(float x) { return(x * 0.7); } int main(void) { float y; y = calc(10000.0); printf ("値段 %.0f 円の時", 10000.0); printf ("%.0f 円支払います。\n", y); return(); }
ちなみに Perl だと、こんな感じかな?
use strict; use warnings; my $sum = 10000; $sum = &calc($sum); print $sum, "\n"; sub calc{ my $i; my @nums = @_; $i = $nums[] * 0.7; return $i; }
Cだと変数の方の宣言をする必要があって、結構がちがちにやる必要があります。それに対して、Perlだと引数の個数を指定する必要がなかったりと自由度高め。自分は配列の1番目(添え字0)に決めうちで計算をさせています。Perlの自由度は高いなー。
アスタリスクをn個表示させます。
#include <stdio.h> void prt_graph(int x); int main(void); void prt_graph(int x) { int i; for (i = ;i < x;i++) { printf ("*"); } printf ("\n"); } int main(void) { prt_graph(10); return(); }
Perlだと、こんな感じになる。簡単だ。
use strict; use warnings; print "*" x 10; print "\n";
#include <stdio.h> int get_power(int x, int n); int main(void); int get_power(int x, int n) { /* 変数の定義 */ /* i はカウンタ */ /* res は計算と戻り値のため */ int i; int res = 1; for (i = ;i <= n - 1;i++) { res = res * x; } return(res); } int main(void) { int temp; temp = get_power(7, 4); printf ("%d", temp); printf ("\n"); return(); }
Perlだとこうなる。ただし、厳密な引数のチェックはしていない。
use strict; use warnings; print &get_power(10,3); print "\n"; sub get_power{ my $res = 1; my ($x, $n) = @_; for (my $i = ; $i <= $n - 1; $i++) { $res = $res * $x; } return $res; }
nの2乗個の*を表示させる(nを10→0→10と変化させる)。
#include <stdio.h> /* プロトタイプ宣言 */ void prt_graph(int n); int main(void); /* 関数 prt_graph */ void prt_graph(int n) { int i; int cnt; cnt = n * n; for (i = ;i < cnt;i++) { printf ("*"); } printf ("\n"); } /* メイン */ int main(void) { int i; for (i = 10; < i;i = i -1) { prt_graph(i); } for (i = ;i < 11; i++) { prt_graph(i); } return(); }