第3回演習の解答例


(1)実数a,bを入力すると,a^bを計算し画面に出力するプログラムを作成せよ.
ヒント:べき乗を計算するには,pow 関数を使用する.


#include<stdio.h>
#include<math.h>
void main()
{
	double a,b;
	double s;
	printf("a="); scanf("%lf",&a);
	printf("b="); scanf("%lf",&b);

	s=pow(a,b);

	printf("値は%lfです.¥n",s);
}

(2)長方形の二辺の長さを渡すと,面積を戻す関数を作成しよう.
ヒント:引数は2つ,戻り値は1つ.長さ,面積は整数型,実数型どちらでも良い.


#include<stdio.h>
int menseki(int a,int b)
{
	int s;
	s=a*b;

	return s;
}
void main()
{
	int a,b;
	printf("a=¥n"); scanf("%d",&a);	   /*a,bは長方形の各一辺*/
	printf("b=¥n"); scanf("%d",&b);	
	
	printf("面積は%dです.¥n",menseki(a,b));
}

(3)円の半径を渡すと,面積を戻す関数を作成しよう.面積は実数であることに注意.



#include<stdio.h>
float menseki(float r)
{
	float s;
	s=r*r*3.14;

	return s;
}
void main()
{
	float r;
	printf("r=¥n"); scanf("%f",&r);

	printf("面積は%fです.¥n",menseki(r));
}	

(4)自然数 n の階乗 n! を求めるプログラムを,関数を用いて作成せよ.但し,0! = 1 である.(注:C言語では「!」は否定を表す演算子)
ヒント:まず作成する関数の引数の「型」と「個数」,戻り値の「有無」,「型」を検討しよう.



#include<stdio.h>
int kaijyo(int n)
{
	int i;
	int s=1;
	for(i=1;i<=n;i++){
		s=s*i;
	}
	return s;
}
void main()
{
	int n;
	printf("n="); scanf("%d",&n);
	if(n==0){
		printf("0!は1です.¥n");
	}else{
		printf("%d!は%dです.¥n",n,kaijyo(n));
	}
}	

(5)上の関数を利用して,キーボードから自然数 n, r を入力すると,n 枚のカードから r 枚選ぶ組み合わせの数を求めるプログラムを作成せよ.
ヒント:(1)まず, n >= r である必要がある.(2) nCr = n! / (n-r)! r!


#include<stdio.h>
int comb(int n)
{
	int i;
	int s=1;
	for(i=1;i<=n;i++){
		s=s*i;
	}
	return s;
}
void main()
{
	int n,r;
	printf("n="); scanf("%d",&n);
	printf("r="); scanf("%d",&r);
	if(n<r){
		printf("入力エラー¥n");
	}else if(n==r){
		printf("値は1です.¥n");
	}else{
		printf("値は%dです.¥n",comb(n)/comb(n-r)/comb(r));
	}
}