학습(Study) & 목표(Objective)
아무도 읽지 않아 슬픈 일기 강좌가 되어가고 있습니다. 이번 시간에는 if 문을 사용한 예제 문제를 풀어보려고 합니다.
if와 else는 C언어와 C++ 언어에서 가장 많이 사용하는 조건문으로, 여러 종속 조건 중에 실행을 안 하거나 하나 이상의 조건문을 실행할 수 있어요.
if 문은 condition 조건을 만족할 때, 중괄호로 묶인 statement1 구문 실행을 시작합니다.
if (condition) {
statement1;
...
}
if - else 문은 condition 조건을 만족하면 statement1이 포함된 중괄호 부분을 수행하고, 조건에 만족하지 못하면 중괄호로 묶인 else 구문 statement2를 수행합니다.
if (condition) {
statement1;
...
}
else {
statement2;
...
}
if - else if - else 구조에는 위의 조건이 모두 거짓일 때만 아래의 구문이 실행되는 구조입니다. 하나의 조건이 만족한다면, 만족하는 중괄호 구문을 수행하고, 프로그램은 마지막 종속 조건(else)문의 끝으로 이동해서 다음 프로그램 구문을 수행합니다. 조건이 모두 만족하지 못하면, 마지막 else 구문의 중괄호 안 내용이 실행됩니다.
if (first condition) {
...
}
else if(second condition) {
...
}
.
.
.
else if( (n-1)'th condition) {
...
}
else {
...
}
과제(Task)
주어진 양의 정수 n이 입력되면, 숫자를 영어로 표기한다.
9가 넘는 수를 주면 9보다 크다는 문구를 표기한다.
입력 형식(Input Format)
첫 번째 줄은 하나의 정수 n을 입력한다.
제약 조건(Constraints)
출력 형식(Output Format)
- 숫자를 영어 이름으로 표기한다(1이면 one, 2이면 two, 등)
- Greater then 9를 표기한다.
입력 예제(Sample Input)
5
출력 예제(Sample Output)
five
주어진 코드
#include <assert.h> #include <limits.h> #include <math.h> #include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char* readline(); int main() { char* n_endptr; char* n_str = readline(); int n = strtol(n_str, &n_endptr, 10); if (n_endptr == n_str || *n_endptr != '\0') { exit(EXIT_FAILURE); } // Write Your Code Here return 0; } char* readline() { size_t alloc_length = 1024; size_t data_length = 0; char* data = malloc(alloc_length); while (true) { char* cursor = data + data_length; char* line = fgets(cursor, alloc_length - data_length, stdin); if (!line) { break; } data_length += strlen(cursor); if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') { break; } size_t new_length = alloc_length << 1; data = realloc(data, new_length); if (!data) { break; } alloc_length = new_length; } if (data[data_length - 1] == '\n') { data[data_length - 1] = '\0'; } data = realloc(data, data_length); return data; } |
char* readline() { //변수 초기화 size_t alloc_length = 1024; // 버퍼의 크기 size_t data_length = 0; // 데이터의 크기 // data에 메모리 할당 char* data = malloc(alloc_length); while (true) { // data의 시작 지점 + 읽은 데이터의 크기 char* cursor = data + data_length; // 표준입력(키보드)에서 현재 cursor 위치에서 남은 데이터를 읽는다. // 값은 allock_length 만큼씩 읽어들인다. char* line = fgets(cursor, alloc_length - data_length, stdin); // line이 NULL이면 모든 데이터를 읽은 것이므로 빠져나간다. if (!line) { break; } // 읽은 데이터만큼 값을 더해 다음 루프를 준비한다. data_length += strlen(cursor); // 버퍼의 마지막 위치이거나 모두 읽었으면 빠져나간다. // 여기서 date_length는 현재까지 읽은 위치, alloc_length는 할당된 크기이므로, // date_length가 더 작다면, 더 이상 읽을 내용이 없다는 의미. if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') { break; } // 버퍼의 크기를 늘려 다시 메모리를 할당한다. size_t new_length = alloc_length << 1; data = realloc(data, new_length); // 데이터 할당에 실패하면 오류로 빠져나간다. if (!data) { break; } alloc_length = new_length; } // 마지막 개행 문자를 없앤다. if (data[data_length - 1] == '\n') { data[data_length - 1] = '\0'; } // data의 컨텐츠 크기에 맞게 메모리를 다시 할당하고 반환한다. data = realloc(data, data_length); return data; } |
int main() { char* n_endptr; char* n_str = readline(); int n = strtol(n_str, &n_endptr, 10); if (n_endptr == n_str || *n_endptr != '\0') { exit(EXIT_FAILURE); } // Write Your Code Here if(n == 1) printf("one"); else if(n == 2) printf("two"); else if(n == 3) printf("three"); else if(n == 4) printf("four"); else if(n == 5) printf("five"); else if(n == 6) printf("six"); else if(n == 7) printf("seven"); else if(n == 8) printf("eight"); else if(n == 9) printf("nine"); else printf("Greater than 9"); return 0; } |
#include <stdio.h> static const char *strings[] = {"one","two","three","four","five", "six","seven","eight","nine"}; int main() { int n = 0; if (scanf("%d",&n) < 1) return 1; if (n >= 1 && n <= 9) printf("%s",strings[n-1]); else printf("Greater than 9"); return 0; } |
'C Programming > 연습 문제' 카테고리의 다른 글
[C언어 연습문제]강좌 7. For Loop in C(C언어 for문) (0) | 2019.02.27 |
---|---|
[C언어 연습문제]강좌 6. Playing With Characters(문자 입력), scanf()로 공백 입력받기 (0) | 2019.02.19 |
[C언어 연습문제]강좌 4. Pointers in C(포인터로 2개의 변수를 반환하는 함수 구현) (0) | 2019.02.16 |
[C언어 연습문제]강좌 3. Functions in C(최대 값을 구해보자 ) (0) | 2019.02.16 |
[C언어 연습문제]강좌 2. Sum and Difference of Two Numbers(printf()와 scanf()) (0) | 2019.02.14 |