MMGameslogo  MMGames
TwitterSharebutton  FacebookSharebutton   
learn through sufferingC Language
learn through sufferingC Language

Practice Problem 19

Fundamentals

Question 1-1
What do you call an array that can be freely created during program execution?


Question 1-2
What is the term for a large memory area used for long-term storage?

Program reading
There's a major problem with the following program.
Please briefly explain what the problem is.

Question 2-1
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int* data;

    data = (int*)malloc(sizeof(int) * 10);

    return 0;
}

Program Manual

Question 3-1
Practice Problem 16の、
Create a program that takes as input the name, age, and gender of three people and displays them.
ただし、データはstructで記憶することとし、
Data input and display will be handled by dedicated functions.」
Modify it to accept any number of servings.
"The input will end when -1 is entered for age."
"Since the array index is an integer, it should be able to handle up to the maximum value of an integer."

descriptive

Question 4-1
normalのarrayを使えばデータの格納はできるのに、
あえてDynamic arrayを使うのはなぜか簡潔にDescriptionせよ。

Fundamentals (Answer Key)

Solution 1-1
Dynamic array


Solution 1-2
heap

Program Reading (Solution Example)

Solution 2-1
Dynamic arrayを解放していないため(freefunctionを呼び出し忘れているため)、
メモリ領域がムダに残る可能性がある。

Program Documentation (Example Solution)

Solution 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("year齢:");
    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("year齢:%d\n", data.age);

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

    printf("性別:%s\n", sex);
    printf("\n");
}

"Please note that the InputPeople and ShowPeople functions have not been modified."
Modifying the InputPeople function could make it easier to input data.
To reduce calls to the realloc function, increasing by 10 each time.
If a significantly larger volume of data is anticipated, doubling the capacity would be more efficient.
"Note: Significant points will be deducted if the free function is not called."
descriptive (answer)

Solution 4-1
要素数をプログラムrun中に自由に決められるため、
メモリを効率よく扱えるから。



About This Site

Learning C language through suffering (Kushi C) is
This is the definitive introduction to the C language.
It systematically explains the basic functions of the C language.
The quality is equal to or higher than commercially available books.

Part 0: Program Overview
  1. What is a program?
Chapter 3: Displaying on the Screen
  1. String Display
  2. newline character
  3. Practice Problem 3
Chapter 4: Displaying and Calculating Numbers
  1. Display of numbers
  2. Basic calculations
  3. Numeric types
  4. Practice Problem 4
Chapter 6: Input from the Keyboard
  1. input function
  2. The fear of input
  3. Practice Problem 6
Chapter 9: Repeating a Fixed Number of Times
  1. Iterative sentence
  2. How Loops Work
  3. Practice Problem 9
Chapter 10: Repeating Without Knowing the Number of Times
  1. Unspecified loop
  2. Input validation
  3. Practice Problem 10
Chapter 13: Handling Multiple Variables at Once
  1. Handling multiple variables collectively.
  2. Arrays
  3. Practice Problem 13
Chapter 19: Dynamic Arrays
  1. Create arrays freely.
  2. Practice Problem 19