練習問題19
基本知識
問 1-1
プログラムの実行中に自由に作ることができる配列をなんと呼ぶか。
問 1-2
長期的に使用される、サイズの大きなメモリ領域のことをなんと呼ぶか。
プログラム読取
次のプログラムには大きな問題点がある。
それはどのような問題なのか簡潔に説明せよ。
それはどのような問題なのか簡潔に説明せよ。
問 2-1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int* data;
data = (int*)malloc(sizeof(int) * 10);
return 0;
}
プログラム書取
問 3-1
練習問題16の、
「3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。
ただし、データは構造体で記憶することとし、
また、データの入力と表示はそれぞれ専用の関数を作って行うこととする。」
という問題を元に、何人分でも入力できるように改造しなさい。
なお、年齢に-1が入力されれば入力終了とする。
※配列番号がint型なのでint型の最大値まで扱えれば良い。
「3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。
ただし、データは構造体で記憶することとし、
また、データの入力と表示はそれぞれ専用の関数を作って行うこととする。」
という問題を元に、何人分でも入力できるように改造しなさい。
なお、年齢に-1が入力されれば入力終了とする。
※配列番号がint型なのでint型の最大値まで扱えれば良い。
記述式
問 4-1
通常の配列を使えばデータの格納はできるのに、
あえて動的配列を使うのはなぜか簡潔に説明せよ。
あえて動的配列を使うのはなぜか簡潔に説明せよ。
基本知識(解答例)
解 1-1
動的配列
解 1-2
ヒープ
プログラム読取(解答例)
解 2-1
動的配列を解放していないため(free関数を呼び出し忘れているため)、
メモリ領域がムダに残る可能性がある。
メモリ領域がムダに残る可能性がある。
プログラム書取(解答例)
解 3-1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[256];
int age;
int sex;
} People;
void InputPeople(People* data);
void ShowPeople(People data);
int main(void)
{
int i, count, datasize;
People* data;
datasize = 10;
data = (People*)malloc(sizeof(People) * datasize);
count = 0;
while (1) {
InputPeople(&data[count]);
if (data[count].age == -1)
break;
count++;
if (count >= datasize) {
datasize += 10;
data = (People*)realloc(data, sizeof(People) * datasize);
}
}
for (i = 0; i < count; i++) {
ShowPeople(data[i]);
}
free(data);
return 0;
}
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");
}
※InputPeopleとShowPeople関数は変更していませんが、
InputPeople関数を変更すれば入力しやすくできます。
※realloc関数の呼び出しを減らすために10ずつ増やしています。
もしより大量のデータが想定される場合には、倍々で増やしたほうが効率が良くなります。
※free関数を呼び出していない場合は大幅減点です。
記述式(解答例)
解 4-1
要素数をプログラム実行中に自由に決められるため、
メモリを効率よく扱えるから。
メモリを効率よく扱えるから。
本サイトについて
苦しんで覚えるC言語(苦C)はC言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。




