blog/content/post/2008/05/01/2008-05-01-00000901.md

11 KiB
Raw Blame History

title author date url wordtwit_post_info categories
『新版C言語プログラミングレッスン 入門編』第8章・関数 kazu634 2008-05-01 /2008/05/01/_967/
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";}}
C
Programming

関数の定義

 Cの関数は

0個以上の引数を持ち、0個か1個の戻り値を持ち、まとまった仕事を行うプラグラムの一部分」

http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10?ie=UTF8&s=books&qid=1209639049&sr=1-10:title

3割引の計算をする関数

#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";

xの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();
}