関数

問1 関数の定義(値を返す)

01.cを修正して、1からプログラム引数として入力された値までの2乗和を求めるプログラムを作成しましょう。 なお、main関数は一切修正してはいけません。

例えば、

./a.out 5

と実行すると、の計算をするため、

55

と出力されます。

問2 プロトタイプ宣言

02.cを修正して、プログラム引数として入力された2数の最大公約数を求めるプログラムを作成しましょう。 プログラムの中にはすでに最大公約数を求める関数は定義されています。

問3 関数の定義(仮引数が配列)

03.cを修正して、与えられた配列に格納されている値の平均を求めるプログラムを作成しましょう。

問4 関数の定義(参照渡しと値を返さない関数)

04.cでは事前に配列が定義され、値が入っています。 プログラム引数として2つの値が入力されたとき、それらをインデックスとしてみたときに対応する配列の要素を入れ替えた上で配列を表示するプログラムを作成しましょう。 ただし、swap関数の定義を変更してはいけません。

例えば、

./a.out 1 2

と実行すると

1 3 2 4 5 6 7 8 9 10

と表示されます。

問5 再帰1(階乗)

05.cを修正し、プログラム引数として入力された値をとすると、n!!を求めるプログラムを作成しましょう。

Note

ヒント:

n!!=n・(n-2)・(n-4)・…・4・2(n:偶数)

n!!=n・(n-2)・(n-4)・…・3・1(n:奇数)

問6 再帰2(相互)

06.cを修正し、入力された値が奇数か偶数かを判定するプログラムを書きましょう。 ただし、mainの中身を変更してはいけません。

例えば、

./a.out 7

と実行すると

odd

と表示され、偶数を引数として与えるとevenと表示されます。

問7 返り値がポインタの関数

07.cを修正し、文字列capitalからプログラム引数で指定された文字が最初に出て来る位置以降を表示するプログラムを作成しましょう。 ただし、関数searchにおいて、指定された文字が出てこない場合はNULLを返すようにしてください。

例えば、

./a.out S

と実行すると

Sakkathattiyawitsanukamprasit

と表示されます。

問8 ライブラリ関数(string.h)

問7では、指定した文字が最初に出たところを探しましたが、最後に出て来たところを探したいとします。 C言語では、さまざまなライブラリ関数が標準で提供されており、これを用いることで実現します。

そこで、08.cを修正して、strrchr関数を用いてこの機能を実現するプログラムを作成しましょう。

例えば、

./a.out a

と実行すると

asit

と表示されます。

Note

ヒント: strrchr関数を調べるにはWeb上や書籍でリソースを探しても良いですが、シェル上で"man strrchr"と入力しても情報が得られます。

問9 ライブラリ関数 (stdlib.h)

09.cを修正して、プログラム引数に入力された値の絶対値の和を求めるプログラムを作成しましょう。 なお、abs関数を用いてください。

例えば、

./a.out 1 2 3 -4

と実行すると

10

と表示されます。

Note

ヒント:abs関数はstdlib.hで定義されている。また、いつも使っていたatoiやatofといった関数も実はこのヘッダファイルで定義されています。

問10 ライブラリ関数 (math.h)

10.cを修正して、プログラムを作成しましょう。 プログラム引数の1番目、2番目の値を点Pのそれぞれx座標、y座標とします。 プログラム引数の3番目をx,y平面上での回転角(度)であるとします。

このとき、原点を中心とし、反時計回りに点Pを回転させて得られる点を表示するプログラムを作成しましょう。 なお、使用するsin関数、cos関数はmath.hで定義されています。

例えば、

./a.out 1 2 90

と実行すると

(-2.00,1.00)

と表示されます。

Note

注意:コンパイル時に、 gcc 10.c -lm としましょう。 そうしないと、エラーが出る場合があります。 なぜ -lm が必要なのかは調べてみると良いでしょう