一週間で身につくC言語の基本

おさえておきたいプログラミングの基本

【基本問題6】 ファイル分割


問題7:ファイル分割

この問題を解くためには…

基本編第7日目参照


prob7-1.(難易度★)

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

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

int main(int argc,char** argv){
    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);
    return 0;
}
//  整数の割り算を行う関数
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);

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

//	乱数の初期化
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);

int main(int argc,char** argv){
    init();
	setName(0,"山田太郎");
	setName(1,"太田花子");
	setName(2,"徳川家康");
	showName(1);
	showName(2);
	showName(0);
    return 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();

int main(int argc,char** argv){
    init(100);
	showNum();
	add(10);	//	10加算
	showNum();
	sub(100);	//	100減算
	showNum();
    return 0;
}

//	初期値の設定
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();

int main(int argc,char** argv){
    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();		//	判定
		}
	}
    return 0;
}

//	初期化
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

一週間で学べるコースの一覧
Udemy
...
2024/10/01

Udemyでも学びましょう!

一週間でわかるC言語・C++言語がオンライン講座になりました!動画音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。

Read →
Impress一週間シリーズ
1週間でC言語の基礎が学べる本
2024/10/01

書籍化された一週間シリーズ

本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!

Read →
Impress一週間シリーズ
...
2024/10/01

書籍化された一週間シリーズ

一週間シリーズは書籍化されています。こちらもどうぞ!

Read →
プログラマーなら欲しいグッズ
プログラミンググッズ

プログラミンググッズ

快適なプログラミング環境を構築したい人々にぜひとも揃えてほしいグッズです。

Read →
制作・管理
シフトシステム株式会社

シフトシステム株式会社

このサイトはシフトシステム株式会社によって制作・管理がなされています。

Read →