들어가며...
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.
'Programming > C언어 초급' 카테고리의 다른 글
C언어 초급) 02.변수 : 07. 구조체와 사용자 정의 타입 (0) | 2020.06.01 |
---|---|
C언어 초급) 02.변수 : 06. 열거형(enum) (0) | 2020.05.29 |
C언어 초급) 02.변수 : 05. 문자형 (0) | 2020.05.29 |
C언어 초급) 02.변수 : 04. 실수형 (0) | 2020.05.27 |
C언어 초급) 02.변수 : 03. 정수형 (0) | 2020.05.25 |