MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

練習問題20

基本知識

問 1-1
宣言のみを記述するファイルをなんと呼ぶか。


問 1-2
実際のプログラムが記述されたファイルをなんと呼ぶか。

プログラム書取

問 2-1

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

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

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-1
すべての関数を1つのソースファイルに記述しても動作するのに、
わざわざ分割する理由を簡潔に述べよ。

基本知識(解答例)

解 1-1
ヘッダーファイル


解 1-2
ソースファイル

プログラム書取(解答例)

解 2-1 People.h
/* 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


解 2-1 People.c
/* People.c */

#include "People.h"

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");
}

※分割にはさまざまな流儀があります。
ここではヘッダーファイル内で#includeする手法としましたが、
すべての#includeをソースファイルで行う場合もあります。
記述式(解答例)

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



本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く