第3回演習:解答例


(1)キーボードから長方形の二辺の長さ(整数)を入力すると,面積を計算し画面に出力するプログラムを作成せよ.




#include<stdio.h>

void main(){
	int a,b,S;

	printf("長方形の面積を計算します¥n");
	printf("2辺の長さを入力してください¥n");
	printf("a:");
	scanf("%d",&a);
	printf("b:");
	scanf("%d",&b);

	S = a * b ;

	printf("長方形の面積S:%d¥n",S);
}


(2) (1)を利用して,面積を計算し画面に出力するプログラムを関数を用いて作成せよ.

ただし,引数2つ,戻り値ありとする.



#include<stdio.h>

int menseki(int a, int b){
	int S;
	
	S = a * b;

	return S;
}

void main(){
	int a,b,S;

	printf("長方形の面積を計算します¥n");
	printf("2辺の長さを入力してください¥n");
	printf("a:");
	scanf("%d",&a);
	printf("b:");
	scanf("%d",&b);

	S = menseki(a,b);

	printf("長方形の面積S:%d¥n",S);
}


(3) (2)を利用して,二辺の長さを実数にしたときのプログラムを作成せよ.



#include<stdio.h>

float menseki(float a, float b){

	printf("a*b:%f¥n",a*b);
	return a*b;
}

void main(){
	float a,b,S;

	S = 0.0;

	printf("長方形の面積を計算します¥n");
	printf("2辺の長さを入力してください¥n");
	printf("a:");
	scanf("%f",&a);
	printf("b:");
	scanf("%f",&b);

	printf("長方形の面積S:%f¥n", menseki(a,b));
}

(4) (2)を利用して,戻り値なしで計算結果を表示するプログラムを作成せよ.


#include<stdio.h>

void menseki(float a, float b){
	

	printf("長方形の面積S:%f¥n",a*b);
	
}

void main(){
	float a,b;

	printf("長方形の面積を計算します¥n");
	printf("2辺の長さを入力してください¥n");
	printf("a:");
	scanf("%f",&a);
	printf("b:");
	scanf("%f",&b);

	menseki(a,b);

	
}


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


#include<stdio.h>
 
int kaijou(int a)
{
    int x, i;
 
    x = 1;
 
    for(i=1;i<=a;i++){
	x *= i;
    }
 
    return x;
}
 
void main()
{
    int n, answer;
 
    printf("自然数n=");
    scanf("%d", &n);
 
    answer = kaijou(n);
 
    printf("n!は%dです。¥n",answer);
}

別解


#include<stdio.h>

int kaizyou(int a,int b){

	if(a != 0){
		b = b*a;
		return kaizyou(a-1,b);
	}else{
		b = b * 1;
		return b;
	}
}

void main(){
	int a,b;

	b = 1;
	printf("階乗の計算します¥n");
	printf("数を入力してください¥n");
	printf("a:");
	scanf("%d",&a);

	printf("階乗値a!:%d¥n",kaizyou(a,b));
}


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


#include<stdio.h>
 
int kaijou(int a)
{
    int x, i;
 
    x = 1;
 
    for(i=1;i<=a;i++){
	x *= i;
    }
 
    return x;
}
 
void main()
{
    int n, r, answer;
 
    printf("自然数n=");
    scanf("%d", &n);
    printf("自然数r=");
    scanf("%d", &r);
 
    if(n>=r){
    	answer = kaijou(n)/kaijou(n-r)/kaijou(r);
    	printf("n枚のカードからr枚選ぶ組合せの数は%dです。¥n",answer);
    } else{
		printf("入力エラーです。¥n");
    }
}