티스토리 뷰
안녕하세요! 오늘 시간에도 지난 시간에 이어서 C언어 콘서트의 문제를 올려보도록 하겠습니다.(개인적인 공부목적입니다) 문제는 10장에 이은 11장 구조체에 관한 문제이고 9장과 10장에 대한 문제는 아래 링크를 달아놨으니 궁금하신 분들은 참고하시기를 바랍니다.
2018/11/21 - [IT 공부 및 일상] - C언어 콘서트 9장 포인터 Programming 문제
2018/11/22 - [IT 공부 및 일상] - C언어 콘서트 10장 문자와 문자열 Programming 문제
1번 문제
이메일을 이루는 정보들을 구조체로 표현한 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<stdio.h> typedef struct email { char title[20]; char receiver[20]; char sender[20]; char context[100]; int ymd; int rank; }EMAIL; int main(void) { EMAIL e1 = { "제목", "발신자", "수신자", "내용입니다.", 20181124, 0 }; printf("본 이메일의 개요\n제목: %s\n발신자: %s\n수신자: %s\n내용: %s\n날짜: %d\n순위: %d", e1.title, e1.receiver, e1.sender, e1.context, e1.ymd, e1.rank); return 0; } | cs |
2번 문제
음식을 이루는 정보들로 이름과 칼로리를 지정해서 이를 구조체로 만들고 여러 음식을 입력할 수 있게 구조체를 배열로 만들고 입력이 끝난 후에 음식들의 총 칼로리를 계산합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include<stdio.h> typedef struct food { char f_name[20]; int f_clorie; }FOOD; int cal_total_calories(FOOD *f); int main(void) { FOOD f_array[5]; for (int i = 0; i < sizeof(f_array) / sizeof(f_array[0]); i++) { printf("%d번째 음식의 이름을 입력하시오: ", i+1); fgets(f_array[i].f_name, sizeof(f_array[i].f_clorie), stdin); rewind(stdin); printf("%d번째 음식의 칼로리를 입력하시오: ", i + 1); scanf("%d", &f_array[i].f_clorie); rewind(stdin); } printf("입력한 음식들의 총 칼로리는 %d입니다.", cal_total_calories(f_array)); return 0; } int cal_total_calories(FOOD *f) { int sum = 0; for (int i = 0; i < 5; i++) sum += f[i].f_clorie; return sum; } | cs |
3번 문제
직원의 사번과 나이, 이름, 전화번호를 묶어서 구조체로 만들고 10명의 직원에 해당하는 데이터를 입력하고 나이 조건에 만족하는 직원들의 정보들을 출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include<stdio.h> #include<string.h> typedef struct employee { int emp_num; int emp_age; char emp_name[20]; char emp_tel[14]; }EMP; int main(void) { EMP emp[10]; for (int i = 0; i < sizeof(emp) / sizeof(emp[0]); i++) { printf("%d번째 사원의 사번을 입력하시오: ", i + 1); scanf("%d", &emp[i].emp_num); printf("%d번째 사원의 나이를 입력하시오: ", i + 1); scanf("%d", &emp[i].emp_age); rewind(stdin); printf("%d번째 사원의 이름을 입력하시오: ", i + 1); fgets(emp[i].emp_name, sizeof(emp[i].emp_name), stdin); emp[i].emp_name[strlen(emp[i].emp_name) - 1] = '\0'; printf("%d번째 사원의 전화번호를 입력하시오: ", i + 1); fgets(emp[i].emp_tel, sizeof(emp[i].emp_tel), stdin); emp[i].emp_tel[strlen(emp[i].emp_tel) - 1] = '\0'; } printf("조건을 만족한 직원 리스트\n"); for (int i = 0; i < 10; i++) { if (emp[i].emp_age >= 20 && emp[i].emp_age <= 30) printf("이름: %s 나이: %d 사번: %d 전화번호: %s\n", emp[i].emp_name, emp[i].emp_age, emp[i].emp_num, emp[i].emp_tel); } return 0; } | cs |
4번 문제
정수와 소수점 이하의 숫자로 이루어진 복소수 구조체를 만들어서 입력한 배열의 원소들을 합한 다음 int형으로 캐스팅하여 출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<stdio.h> typedef struct complex_num { float num1; float num2; }CMP_num; int main(void) { CMP_num cmp_num[2]; printf("첫번째 복소수를 입력하시오(a, b): "); scanf("%f %f", &cmp_num[0].num1, &cmp_num[0].num2); printf("두번째 복소수를 입력하시오(c, d): "); scanf("%f %f", &cmp_num[1].num1, &cmp_num[1].num2); printf("복소수의 합은 %d+%di입니다.", (int)(cmp_num[0].num1 + cmp_num[1].num1), (int)(cmp_num[0].num2 + cmp_num[1].num2)); return 0; } | cs |
5번 문제
입력받은 문자열을 strtok 함수를 통해서 단어로 나누고 이 단어를 구조체 배열의 크기가 마지막까지 배열의 원소에 포함된 문자형 배열과 비교하고 이를 통해 처음보는 단어인지를 구분할 수 있습니다. 그런 다음 printf에서 필드를 지정해서 일정한 간격으로 문자열이 출력될 수 있도록 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<stdio.h> #include<string.h> struct inf_word{ char word[20]; int freq; }; int main(void) { struct inf_word freq_word_array[10] = { "", 0 }; char str[100]; char *token; char seps[] = " \t\n,"; int count = 0; printf("텍스트를 입력하시오: "); fgets(str, sizeof(str), stdin); str[strlen(str) - 1] = '\0'; if (str[strlen(str) - 1] == '.') str[strlen(str) - 1] = '\0'; token = strtok(str, seps); while (token != NULL) { for (int i = 0; i < 10; i++) { if (strcmp(freq_word_array[i].word, token) == 0) { freq_word_array[i].freq++; break; } else { if (strcmp(freq_word_array[i].word, "") == 0) { strcat(freq_word_array[count].word, token); freq_word_array[count].freq = 1; count++; break; } } } token = strtok(NULL, seps); } printf("----------------------------------------\n"); printf("%-19s빈도\n", "단어"); printf("----------------------------------------\n"); for (int i = 0; i < count; i++) printf("%-19s%d\n", freq_word_array[i].word, freq_word_array[i].freq); return 0; } | cs |
6번 문제
책에 대한 정보들을 묶어서 구조체를 만들고 반복문과 조건문을 통해서 입력한 정수값에 따라서 다른 작업이 실행되도록 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include<stdio.h> #include<string.h> enum book_type{만화, 공상과학, 소설, 고전}; typedef struct book_inf { char title[20]; char author[20]; char position[20]; enum book_type type; }BOOK_INF; int search_book_title(BOOK_INF *receiver, int count) { char to_search_title[20]; int result = 0; printf("검색할 책 제목을 입력하시오: "); fgets(to_search_title, sizeof(to_search_title), stdin); to_search_title[strlen(to_search_title) - 1] = '\0'; for (int i = 0; i < count; i++) { if (strcmp(receiver[i].title, to_search_title) == 0) { result = 1; break; } } return result; } int main(void) { BOOK_INF book_inf_array[20]; int judge_int; int count = 0; do { printf("=====================\n"); printf("1. 추가\n"); printf("2. 출력\n"); printf("3. 검색\n"); printf("4. 종료\n"); printf("=====================\n"); printf("정수값을 입력하시오: "); scanf("%d", &judge_int); rewind(stdin); switch (judge_int) { case 1: if (count != 20) { printf("제목: "); fgets(book_inf_array[count].title, sizeof(book_inf_array[count].title), stdin); book_inf_array[count].title[strlen(book_inf_array[count].title) - 1] = '\0'; printf("저자: "); fgets(book_inf_array[count].author, sizeof(book_inf_array[count].author), stdin); book_inf_array[count].author[strlen(book_inf_array[count].author) - 1] = '\0'; printf("위치: "); fgets(book_inf_array[count].position, sizeof(book_inf_array[count].position), stdin); book_inf_array[count].position[strlen(book_inf_array[count].position) - 1] = '\0'; printf("장르(0: 만화, 1: 공상과학, 2: 소설, 3: 고전) "); scanf("%d", &book_inf_array[count].type); count++; } else printf("데이터베이스 용량초과!\n"); break; case 2: for (int i = 0; i < count; i++) { printf("제목: %s\n", book_inf_array[i].title); printf("저자: %s\n", book_inf_array[i].author); printf("위치: %s\n", book_inf_array[i].position); printf("장르(0: 만화, 1: 공상과학, 2: 소설, 3: 고전) %d\n", book_inf_array[i].type); } break; case 3: if (search_book_title(&book_inf_array, count) == 1) printf("찾으시는 책이 데이터베이스에 존재합니다.\n"); else printf("찾으시는 책이 데이터베이스에 존재하지 않습니다.\n"); break; case 4: return 1; default: printf("알맞는 값을 입력해주세요.\n"); break; } } while (1); return 0; } | cs |
7번 문제
가위와 바위, 보를 열거형 데이터 타입으로 지정하고 이를 이용해서 사용자가 입력한 문자열이 가위이면 0이 바위이면 1 보이면 2를 반환하도록 만들고 컴퓨터의 수는 rand() 함수를 이용해 발생시킨 난수를 3으로 나누어서 해결한다. 그리고 사용자의 수와 컴퓨터의 수를 서로 뺄셈을 하면 결과로 사용자가 이겼을 때 -2와 1이 나오고 졌을 때 -1과 2가 나온다는 점을 착안해서 조건문을 만들었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include<stdio.h> #include<string.h> #include<stdlib.h> typedef enum srp{ Scissor, Rock, Paper }SRP; int ToConvertEnum(char *str); int main(void) { char input_val[10]; SRP using_val; int result; printf("입력할 수 있는 값은 한글과 영문자입니다.\nex) 가위 rock Paper\n"); while (1) { printf("가위, 바위, 보 중에서 하나를 선택하시오(종료:q) : "); scanf("%s", input_val); if (input_val[0] == 'q') break; using_val = ToConvertEnum(input_val); if (using_val == 3) { printf("올바른 값을 입력해주세요.\n"); continue; } result = using_val - (rand() % 3); if (result == -2 || result == 1) printf("이겼습니다.(졌습니다)\n"); else if (result == -1 || result == 2) printf("졌습니다.(이겼습니다)\n"); else printf("비겼습니다.\n"); } return 0; } int ToConvertEnum(char *str) { char *val_range[] = { "가위", "scissor", "Scissor", "바위", "rock", "Rock", "보", "paper", "Paper" }; for (int i = 0; i < 9; i++) { if (strcmp(str, val_range[i]) == 0) { if (i >= 0 && i <= 2) return 0; else if (i >= 3 && i <= 5) return 1; else return 2; } } return 3; } | cs |
8번 문제
열거형으로 도형의 종류를 표현하고 공용체로 각 도형에 해당하는 데이터를 표현하였는데 공용체의 크기는 8바이트로 보면 int형 배열 2개와 double형 변수 1개로 이루어져있다. 사용자에게 종류를 입력받고 그 값에 따라 조건문을 실행합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<stdio.h> #include<corecrt_math_defines.h> #include<math.h> typedef enum type_thing{ triangle, square, circle }TYPE_THING; union data_thing { int triangle_data[2]; int square_data[2]; double circle_data; }; int main(void) { TYPE_THING choice; union data_thing user_data; printf("도형의 종류를 선택하시오(0,1,2): "); scanf("%d", &choice); switch (choice) { case triangle: printf("삼각형의 밑변과 높이를 각각 입력하시오: "); scanf("%d %d", &user_data.triangle_data[0], &user_data.triangle_data[1]); printf("결과는 %d입니다.", user_data.triangle_data[0] * user_data.triangle_data[1] / 2); break; case square: printf("사각형의 가로와 세로를 각각 입력하시오: "); scanf("%d %d", &user_data.square_data[0], &user_data.square_data[1]); printf("결과는 %d입니다.", user_data.square_data[0] * user_data.square_data[1]); break; case circle: printf("원의 반지름을 입력하시오: "); scanf("%lf", &user_data.circle_data); printf("결과는 %lf입니다.", sqrt(user_data.circle_data) * M_PI); break; default: break; } return 0; } | cs |
'IT 공부 및 일상' 카테고리의 다른 글
C언어 콘서트 13장 전처리 및 기타 기능 Programming 문제 (0) | 2018.12.11 |
---|---|
C언어 콘서트 12장 표준 입출력과 파일 입출력 Programming 문제 (0) | 2018.11.29 |
C언어 콘서트 10장 문자와 문자열 Programming 문제 (0) | 2018.11.22 |
C언어 콘서트 9장 포인터 Programming 문제 (0) | 2018.11.21 |
C#으로 간단한 계산기 만들어보기 (0) | 2018.10.20 |
- Total
- Today
- Yesterday
- HTML
- 윈도우10
- 아나콘다
- 이클립스
- 동미참
- 자바
- vmware
- 웹마스터도구
- 예비군
- RSS
- sitemap
- 함수
- 애널리틱스
- 태움
- 서치콘솔
- 구글 웹마스터도구
- 네이버
- 안드로이드
- 파이썬
- 사이트맵
- 구글
- 애플
- 학생예비군
- C언어 콘서트
- 크롬
- MAC
- 인공지능
- 가상머신
- C언어
- 애드센스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |