본문 바로가기

Programming/C언어 초급

C언어 초급) 02.변수 : Challenge

들어가며...

C언어의 변수부분까지 살펴보았습니다. 이번 글에서는 지금까지 배운 내용 정리 및 확인 차원에서 간단한 구구단 예제를 구현 해 보겠습니다. 본 글의 코드를 살펴보셔도 되고 되도록이면 아래 구구단 예제의 목표를 살펴보시고 직접 구현해보시는 것을 추천 드립니다.

이어서 본인의 코드와 이 글에 포함된 코드를 비교하시면 좋을 듯 합니다.

 

✳︎ 참고하세요

프로그램 개발은 창작물입니다. 따라서 똑같은 내용을 구현하여도 사람마다 모두 다를 수 밖에 없습니다. 좋은 코드는 있어도 정답인 코드는 없다고 생각합니다. 너무 다른 사람의 코드 스타일을 따라만 하시려하지 말고 장점을 모아 본인의 코드 스타일을 만드세요.

 

  • Table of Contents
    • 구현 목표
    • 구현코드 예

구현 목표

  • 임의의 구구단 문제를 출력하고 사용자로 부터 답을 입력받아 오답 여부를 출력하는 프로그램
  • 임의의 구구단 생성 함수는 "02 변수 : 07. 구조체와 사용자 정의 타입" 의 예제를 사용합니다. 
  • 문제 출력 및 정답 입력의 과정을 n회 반복하도록 구현합니다.
  • "02 변수 : 02. 입출력" 의 예제처럼 도움말 기능을 넣어 메뉴 선택을 할 수 있도록 합니다. (선택)

위의 문제를 해결하려면 지금까지 배운 것 외에도 조건문(if, switch) 및 반복문(while, for) 에 대한 이해도 필요합니다만 이는 앞선 글에서 예제로 구현한 내용을 참조하시기 바랍니다. (자세한 내용은 앞으로 차차 살펴보도록 하겠습니다.)

구현코드 예

아래는 위의 내용에 대한 구현 예입니다. 본인이 구현한 내용과 다를 수 있지만 본인이 구현한 내용과 비교하시면서 좀 더 낫다고 판단되는 부분은 보완하시면 되겠습니다.

 

● 예제코드

//
//  main.c
//  multiplication_table
//
//  Created by leo on 2020/06/05.
//  Copyright © 2020 leo. All rights reserved.
//
//=========================================================================//
// MODULES USED
//=========================================================================//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

//=========================================================================//
// TYPEDEF AND STRUCTURE
//=========================================================================//
#define MAX_QUESTION_NUM    (10)

typedef struct _MULTIPLICATION_TABLE {
    int factor1;
    int factor2;
    int product;
} MULTIPLICATION_TABLE;

//=========================================================================//
// LOCAL FUNCTION PROTOTYPE
//=========================================================================//
void help(void);
int multiplicationTable(int count);
MULTIPLICATION_TABLE getMultiplicationTable(void);

/**
 Main function
 */
int main(int argc, const char * argv[]) {
    int input = 0;
    // 도움말 출력
    help();
    
    while(1) {
        // select the menu
        scanf("%d", &input);
        
        // terminate program
        if(input == 0) {
            printf("Bye Bye!!\n");
            break;
        }
        else if(input == 1) {
            printf("Start the multipication table\n");
            printf("------------------------------------------------\n");
            int nCorrect = multiplicationTable(MAX_QUESTION_NUM);
            printf("------------------------------------------------\n");
            printf("Finished!! Correct answer is %d/%d\n", nCorrect, MAX_QUESTION_NUM);
            help();
        }
        else {
            printf("Unknown menu : select a menu again!!\n");
            help();
        }
    }
    
    return 0;
}

/////////////////////////////////////////////////////////////////////////////

//=========================================================================//
// LOCAL FUNTION
//=========================================================================//

/**
    도움말
 */
void help(void) {
    printf("================================\n");
    printf(" 1. Start\n");
    printf(" 0. Exit\n");
    printf("================================\n");
    printf(" : ");
}

int multiplicationTable(int count) {
    int i = 0;
    int answer = 0;
    int nCorrect = 0;
    MULTIPLICATION_TABLE table;
    
    // check the input parameters
    if(count <= 0) {
        printf("[ERROR]Invalid input parameter!!! count=%d\n", count);
        return nCorrect;
    }
    
    for(i = 0 ; i < count ; i++) {
        // initialize
        memset((void *)&table, 0x00, sizeof(MULTIPLICATION_TABLE));
        
        // get the multiplication table information
        table = getMultiplicationTable();
        // display the question
        printf("%02d) %2d x %d = ", (i + 1), table.factor1, table.factor2);
        scanf("%d", &answer);
        
        // correct
        if(answer == table.product) {
            printf("Good Job!!\n");
            nCorrect++;
        }
        else {
            printf("Wrong Answer!! Correct Answer => %2d x %d = %d\n", table.factor1, table.factor2, table.product);
        }
    }
    
    return nCorrect;
}

/**
 임의의 구구단 정보를 생성하는 함수
 */

MULTIPLICATION_TABLE getMultiplicationTable(void) {
    MULTIPLICATION_TABLE multi_table;
    
    // 초기화
    memset((void *)&multi_table, 0x00, sizeof(MULTIPLICATION_TABLE));
    // 난수 초기화
    srand((unsigned int)time(NULL));
    // 0 ~ 7까지의 난수 값 생성 후 2를 더함 (2 ~ 9 범위의 임의의 값이 생성되게 됨)
    multi_table.factor1 = (rand() % 8) + 2;
    multi_table.factor2 = (rand() % 8) + 2;
    // 결과값 저장
    multi_table.product = multi_table.factor1 * multi_table.factor2;
    
    return multi_table;
}

 

● 결과확인

 

마무리...

프로그램 공부는 본인이 직접 고민하고 구현해야만 결국 내 것이 되게 됩니다. 되도록 많이 고민하고 많은 것을 구현 해 보시면 좋을 듯 합니다.

 


U2ful은 입니다. @U2ful Corp.