問題7:ファイル分割

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

prob7-1.(難易度★)

以下のプログラムは、さまざまな計算を行うプログラムです。このプログラムの関数を、以下に指定したファイルに分割しなさい。

prob7-1.:main.c
#include <stdio.h>
 
//	整数の割り算を行う関数
int div(int,int);
//	整数の割り算の余りを計算する関数
int mod(int,int);

void main(){
	int n1,n2;
	int r1,r2;
	printf("n1=");
	scanf("%d",&n1);
	printf("n2=");
	scanf("%d",&n2);
	r1 = div(n1,n2);	//	入力した2つの整数値の商を求める
	r2 = mod(n1,n2);	//	入力した2つの整数値の割り算の余りを求める
	printf("%d / %d = %d 余り %d¥n",n1,n2,r1,r2);
}

int div(int a,int b){
	return a / b;
}

int mod(int a,int b){
	return a % b;
}
ファイルと関数・グローバル変数の対応一覧
ヘッダーファイルソースファイル関数グローバル変数
calculation.hcalculation.cdiv(),mod()なし

prob7-2.(難易度★)

以下のプログラムは、指定された範囲の乱数を発生させるプログラムです。このプログラムの関数を、以下に指定したファイルに分割しなさい。

prob7-2.:main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//	乱数の初期化
void init_rand();
//	指定した範囲の乱数を発生
int getRand(int,int);

void main(){
	int i,num;
	init_rand();
	for(i = 0; i < 100; i++){
		num = getRand(-10,10);	//	-10から10までの乱数発生
		printf("乱数:%d¥n",num);
	}
}

//	乱数の初期化
void init_rand()
{
	srand((unsigned) time(NULL));
}
//	指定した範囲の乱数を発生
int getRand(int start,int end)
{
	return rand() % (end - start + 1) + start;
}

ファイルと関数・グローバル変数の対応一覧
ヘッダーファイルソースファイル関数グローバル変数
randLib.hrandLib.cinit_rand(),getRand()なし

prob7-3.(難易度★)

以下のプログラムは、複数の生徒の名前を登録するプログラムです。このプログラムの関数およびグローバル変数を、以下に指定したファイルに分割しなさい。

prob7-3.:main.c
#include <stdio.h>
#include <string.h>

//	生徒の名前(10名まで登録可能)
char names[10][256];

//	データの初期化
void init();
//	生徒の名前の設定
void setName(int,char*);
//	生徒の名前の表示
void showName(int);

void main(){
	init();
	setName(0,"山田太郎");
	setName(1,"太田花子");
	setName(2,"徳川家康");
	showName(1);
	showName(2);
	showName(0);
}

//	データの初期化
void init()
{
	// 名前のクリア
	int i;
	for(i = 0; i < 10; i++){
		strcpy(names[i],"");	//	文字列をクリア
	}
}
//	生徒の名前の設定
void setName(int num,char* name)
{
	//	名前を登録
	if(num >= 0 && num < 10){
		strcpy(names[num],name);
	}
}
//	生徒の名前の表示
void showName(int num)
{
	printf("%d:%s¥n",num,names[num]);
}

ファイルと関数・グローバル変数の対応一覧
ヘッダーファイルソースファイル関数グローバル変数
nameDB.hnameDB.cinit(),setName(),showName()names

prob7-4.(難易度★★)

以下のプログラムは、さまざまな計算を行うプログラムです。このプログラムの関数を、以下に指定したファイルに分割しなさい。グローバル変数ansの実体は、calculation.cに持たせ、外部でも利用できるようにしなさい。

prob7-4.:main.c
#include <stdio.h>
//	値
int ans;

//	初期値の設定
void init(int);
//	加算
void add(int);
//	減算
void sub(int);
//	値の表示
void showNum();

void main(){
	init(100);
	showNum();
	add(10);	//	10加算
	showNum();
	sub(100);	//	100減算
	showNum();
}

//	初期値の設定
void init(int num)
{
	ans = num;	//	値の初期化
}
//	加算
void add(int num)
{
	ans += num;	//	現在の値に足し算
}
//	減算
void sub(int num)
{
	ans -= num;	//	現在の値から引き算
}
//	値の表示
void showNum()
{
	printf("現在の値:%d¥n",ans);
}


ファイルと関数・グローバル変数の対応一覧
ヘッダーファイルソースファイル関数グローバル変数
calculation.hcalculation.cinit(),add(),sub()ans
showResult.hshowResult.cshowNum()なし

prob7-5.(難易度★★)

以下のプログラムは、じゃんけんゲームです。このプログラムの関数を、以下に指定したファイルに分割しなさい。なお、グローバル変数は、表の指定したファイルの中で定義すること。

prob7-5.:main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//	コンピュータの手
int player = 0;
//	プレイヤーの手
int computer = 0;
char results[3][16]  = {"グー","チョキ","パー"};
//	乱数の初期化
void init();
//	プレイヤーの手値設定
void setPlayer(int);
//	コンピュータの手設定
void setComputer();
//	判定
void Judge();

void main(){
	int num;
	init();
	printf("じゃんけんゲーム¥n");
	printf("0:グー、1:チョキ、2:パー¥n");
	while(1){
		printf("あなたの手は?(0-2):");
		scanf("%d",&num);
		if(num < 0 || num > 2){
			printf("終了します¥n");
			break;
		}else{
			setPlayer(num);	//	自分の手設定
			setComputer();	//	コンピュータの手設定
			Judge();		//	判定
		}
	}
}

//	初期化
void init()
{
	srand((unsigned) time(NULL));
}
//	指定した範囲の乱数を発生
void setPlayer(int num)
{
	player = num;
}
//	指定した範囲の乱数を発生
void setComputer()
{
	computer = rand() % 3;
}

void Judge(){
	printf("プレイヤー:%s¥n",results[player]);
	printf("コンピューター:%s¥n",results[computer]);
	if((player == 0 && computer == 1)
	 || (player == 1 && computer == 2) 
	 || (player == 2 && player == 0)){
		printf("プレイヤーの勝ち¥n");
	}else if((player == 1 && computer == 0) 
	|| (player == 2 && computer == 1) 
	|| (player == 0 && computer == 2)){
		printf("コンピュータの勝ち¥n");
	}else{
		printf("あいこです。¥n");
	}
}
ファイルと関数・グローバル変数の対応一覧
ヘッダーファイルソースファイル関数グローバル変数
logic.hlogic.cinit(),setPlayer(),setComputer()player,computer
showResult.hshowResult.cJudge()results