問題6:関数

この問題を解くためには…
 → 基本編第6日目参照

prob6-1.(難易度★)

以下のプログラムは、キーボードから2つの整数の値を入力し、その和を求めるものである。このとき、このプログラムを以下のように改造しなさい。

prob6-1:main.c
#include <stdio.h>
 
//	関数のプロトタイプ宣言
int add(int,int);

void main(){
	int a,b;
	int result;
	printf("a=");
	scanf("%d",&a);		//	1つ目の数、aを入力
	printf("b=");
	scanf("%d",&b);		//	2つ目の数、bを入力
	result = add(a,b);	//	3つ目の数、cを入力
	printf("%d + %d = %d¥n",a,b,result);	//	計算結果を出力
}

//	二つの整数の和を求める関数
int add(int n1,int n2){
	return n1 + n2;
}
実行結果の例
a=5   ← キーボードから整数値を入力
b=2   ← キーボードから整数値を入力
5 + 2 = 7

同様に、二つの数の差を求める関数、sub()を追加し、最後に、その結果も表示するようにしなさい。

期待される実行結果の例
a=5   ← キーボードから整数値を入力
b=2   ← キーボードから整数値を入力
5 + 2 = 7
5 - 2 = 3

prob6-2.(難易度★)

以下のプログラムは、キーボードから2つの整数値を入力し、その積を求め表示するものです。

prob6-2:main.c
#include <stdio.h>
 
//	関数のプロトタイプ宣言
int mul(int,int);

void main(){
	int a,b;
	int result;
	printf("a=");
	scanf("%d",&a);		//	1つ目の数、aを入力
	printf("b=");
	scanf("%d",&b);		//	2つ目の数、bを入力
	result = mul(a,b);	//	3つ目の数、cを入力
	printf("%d * %d = %d¥n",a,b,result);	//	計算結果を出力
}

//	二つの整数の和を求める関数
int mul(int n1,int n2){
	return n1 * n2;
}

これを実行すると、以下のようになります。

実行結果
a=5   ← キーボードから整数値を入力
b=2   ← キーボードから整数値を入力
5 * 2 = 10

このプログラムを以下のように改造しなさい。
 ① 三つ目の整数型変数cを用意し、a,b,に続き、"c="と画面に表示して、キーボードから値を代入させる。
 ② 関数mul()を、3つの整数の積を求める関数に書き換える。

期待される実行結果の例
a=5   ← キーボードから整数値を入力
b=2   ← キーボードから整数値を入力
c=3   ← キーボードから整数値を入力
5 * 2 * 3= 30

prob6-3.(難易度★)

以下のプログラムは、三角形の底辺と高さを求めるプログラムを書きかけているものである。

prob6-3:main.c
#include <stdio.h>
 
void main(){
	double teihen,takasa;	//	底辺と高さを入れる変数
	double menseki;		//	三角形の面積
	printf("底辺=");
	scanf("%lf",&teihen);		//	1つ目の数、aを入力
	printf("高さ=");
	scanf("%lf",&takasa);		//	2つ目の数、bを入力
}

このプログラムに、以下の関数を追加し、実行結果の例のように出力されるよう、プログラムに処理を追加しなさい。

期待される実行結果の例
底辺=7.0   ← キーボードから実数値を入力
高さ=5.0   ← キーボードから実数値を入力
三角形の面積17.5000000

追加する関数

関数名triangle
処理内容与えられた三角形の底辺と高さを元に、面積を計算して返す。
引数底辺と高さ(ともにdouble)
戻り値三角形の面積

prob6-4.(難易度★)

以下のプログラムは、キーボードから整数の値を入力し、0なら「0です」、偶数なら「偶数です」、奇数なら「奇数です」と表示するプログラムです。

prob6-4:main.c
#include <stdio.h>
 
void main(){
	int a;
	printf("整数値を入力してください:");
	scanf("%d",&a);
	if(a == 0){
		printf("0です¥n");
	}else if(a%2 == 0){
		printf("偶数です¥n");
	}else{
		printf("奇数です¥n");
	}
}

このプログラムの7行目から13行目を別関数にし、呼び出して使うようにプログラムを変更しなさい。ただし、関数の概要は以下のようにするものとします。

追加する関数

関数名numJudge
処理内容与えられた整数値が、0か、偶数か、奇数かを調べて、その結果を画面に表示する。
引数1つの整数値
戻り値なし

prob6-5.(難易度★)

以下のプログラムで、以下のプログラムは、キーボードから2つの整数の値を入力し、そのうち大きい値を表示するものです。2つの整数値の最大値を求める部分である、10から14行目を関数化して、プログラムを書き換えなさい。

prob6-5:main.c
#include <stdio.h>
 
void main(){
	int a,b;
	int result;
	printf("1つ目の値を入力してください:");
	scanf("%d",&a);		//	1つ目の数、aを入力
	printf("2つ目の値を入力してください:");
	scanf("%d",&b);		//	2つ目の数、bを入力
	if(a > b){
		result = a;	//	aのほうが大きければ、aをresultに代入
	}else{
		result = b;	//	bのほうが大きければ、bをresultに代入
	}
	printf("%dと、%dのうち、大きい値は%dです。¥n",a,b,result);
}
実行結果の例
1つ目の値を入力してください:5   ← キーボードから整数値を入力
2つ目の値を入力してください:6   ← キーボードから整数値を入力

5と、6のうち、大きい値は6です。

ただし、関数の概要はいかのようにすること。

関数名max
処理内容与えられた2つの整数値のうち、大きいほうの値を返す。
引数2つの整数値
戻り値引数のうち、大きいほうの値

prob6-6.(難易度★)

以下のプログラムは、キーボードから整数値を入力させ、その数だけ★マークを表示するというプログラムである。このプログラムの7行目から14行目を、関数化し、プログラムを書き換えなさい。

prob6-6:main.c
#include <stdio.h>
 
void main(){
	int n,i;
	printf("表示する回数を入力してください:");
	scanf("%d",&n);
	if(n > 0){
		for(i = 0; i < n; i++){
			printf("★");
		}
		printf("¥n");
	}else{
		printf("0より大きい値を入力してください。¥n");
	}
}
実行結果の例①(正の整数が入力された場合)
表示する回数を入力してください:5   ← キーボードから正の整数値を入力
★★★★★   ← 入力した数だけ、★が表示される。
実行結果の例②(0以下の整数が入力された場合)
表示する回数を入力してください:-1   ← 0以下の数値を入力
0より大きい値を入力してください。

ただし、関数の概要はいかのようにすること。

関数名stars
処理内容引数であたられた整数の数だけ、★マークを表示する。
引数1つの整数値
戻り値なし

prob6-7.(難易度★★)

キーボードから、円の半径を入力させ、その値を元に、その円の円周の長さと、円の面積を求めるプログラムを作りなさい。このとき、円周率は、3.14とし、円周、円の面積は、それぞれ以下の関数の中で計算するものとする。

関数名circumference
処理内容引数であたられた半径の円周の長さを求める。
引数円の半径(double)
戻り値円の円周の長さ(double)

関数名area
処理内容引数であたられた半径の円の面積を求める。
引数円の半径(double)
戻り値円の面積(double)

prob6-8.(難易度★★)

実行例にならい、キーボードから整数を入力させ、その数の絶対値を表示するプログラムを作りなさい。なお、絶対値とは、その数値から、符号を取り除いた値である。7の絶対値は7であり、-7の絶対値は7である。絶対値を求める部分は、関数を独自に作って計算させること。

実行結果の例①(正の整数が入力された場合)
数値を入力してください:5   ← 0以上の整数を入力
5   ← 0以上の整数の場合は、そのままの値が表示される。
実行結果の例②(負の整数が入力された場合)
数値を入力してください:-4   ← 負の整数を入力
4   ← 負の整数の場合は、正の値にして表示される。

ただし、関数の概要は以下のようにすること。

関数名get_absolute
処理内容与えられた整数値の絶対値を返す。
引数整数値
戻り値引数の整数の絶対値

prob6-9.(難易度★★)

実行例にならい、キーボードから2つの整数を入力させ、関数を用いてそれぞれの数をたて、よこの■の数として、四角形を表示させるプログラムを作りなさい。

実行結果の例

たて:3   ← 正の整数を入力
よこ:5   ← 正の整数を入力
■■■■■
■■■■■
■■■■■   ← 縦3個、横5個の■マークを表示

ただし、関数の概要は以下のようにすること。

関数名square
処理内容縦、横に指定された数の■マークを表示する。ただし、どちらかの値が0以下の場合は、何も表示しない。
引数整数の値×2(縦、横の値)
戻り値なし

prob6-10.(難易度★★★)

キーボードから2つの整数値を入力し、その2つの数の最大公約数と最小公倍数を求め、その結果を表示するプログラムを作りなさい。このうち、最大公約数と最小公倍数は、関数を用いて求めること。

実行結果の例
1つ目の値を入力してください:30   ← 整数を入力
2つ目の値を入力してください:12   ← 整数を入力

2つの数の最小公倍数は、60です。
2つの数の最大公約数は、6です。

ただし、関数の概要は以下のようにすること。

関数名gcd
処理内容2つの整数の値の最大公約数を求める。
引数整数の値×2(縦、横の値)
戻り値なし

関数名lcm
処理内容2つの整数の値の最小公倍数を求める。
引数整数の値×2
戻り値引数の2つの整数の最小公倍数