苦しんで覚えるC言語

練習問題20



第1項:基本知識

1-1
主に宣言を記述するファイルをなんと呼ぶか。
1-2
実際のプログラムが記述されたファイルをなんと呼ぶか。
解答例

目次に戻る

第2項:プログラム書取

2-1


void InputPeople(People *data)
{
    printf("名前:");
    scanf("%s",data->name);
    printf("年齢:");
    scanf("%d",&data->age);
    printf("性別(1-男性、2-女性):");
    scanf("%d",&data->sex);
    printf("\n");
}

void ShowPeople(People data)
{
    char sex[16];

    printf("名前:%s\n",data.name);
    printf("年齢:%d\n",data.age);

    if (data.sex == 1) {
        strcpy(sex,"男性");
    } else {
        strcpy(sex,"女性");
    }

    printf("性別:%s\n",sex);
    printf("\n");
}
このプログラムをヘッダーファイルとソースファイルにまとめなさい。
解答例

目次に戻る

第3項:記述式

3-1
全ての関数を1つのソースファイルに記述しても動作するのに、
わざわざ分割する理由を簡潔に述べよ。
解答例
目次に戻る

第4項:基本知識(解答例)

1-1
ヘッダーファイル
1-2
ソースファイル
問題

目次に戻る

第5項:プログラム書取(解答例)

2-1
/* People.h */
#ifndef __PEOPLE_H__
#define __PEOPLE_H__

#include <stdio.h>
#include <string.h>

typedef struct {
    char name[256];
    int age;
    int sex;
} People;

/* 個人データを入力する */
extern void InputPeople(People *data);

/* 個人データを表示する */
extern void ShowPeople(People data);

#endif

/* People.c */

#include "People.h"

void InputPeople(People *data)
{
/* 中身は同じなので省略 */
}

void ShowPeople(People data)
{
/* 中身は同じなので省略 */
}
※分割には様々な流儀があります。
 全ての#includeをソースファイルで行う場合もありますが、
 筆者はヘッダーファイル内の方が手間が省けると考えています。
 関数のプロトタイプ宣言にはexternを付けない場合もあります。
 チーム内で開発する場合そのチームのルールに従いますが、
 (そのルールが自分に合わなかったり時代遅れだったとしても、
 形式の統一を図ることが最優先です。)
 個人開発の場合は己の流儀を決めて使い続けると良いでしょう。
問題

目次に戻る

第6項:記述式(解答例)

3-1
分割することでプログラムの見通しが良くなり、
再利用や多人数開発が容易になるから。
問題

目次に戻る