반응형
문제 출처 : YES C (정보공학연구소/생능출판사)
4. 두 정수를 입력받아 곱셈을 하는 프로그램을 작성하라. 이때 정수 이외의 데이터가 들어오면 에러처리를 하라.
#include <stdio.h> void main() { int num1 = 0, num2 = 0; do { printf("첫번째 정수를 입력하세요 : "); scanf_s("%d", &num1); while (getchar() != '\n') {} printf("두번째 정수를 입력하세요 : "); scanf_s("%d", &num2); while (getchar() != '\n') {} if (!(num1 && num2)) { printf("잘못입력하셨습니다. 다시 입력해주세요. \n"); } } while (!(num1 && num2)); /* scnaf_s는 형식문자열이 %d이면 첫번째 입력값부터 숫자까지만 입력을 받는다. 즉 첫번째 입력값이 문자면 초기화된 값이 유지된다. 그걸 이용해서 예외처리를 한 것인데 이렇게 하면 입력된 값이 0이면 오류로 처리된다는 문제점이 있다. */ printf("%d와 %d의 곱은 %d입니다.", num1, num2, num1*num2); }
5. 정수를 입력받아 그 수가 소수인지를 판별하는 프로그램을 반복문을 이용해서 작성하라.
#include <stdio.h> int main() { int input = 0; printf("소수인지 판별할 값을 입력하세요."); scanf_s("%d", &input); for (int i = 2; i <= input; i++) { if (input % i == 0) { if (input == i) { printf("%d는 소수입니다.", input); return 0; } else { break; } } } printf("%d는 소수가 아닙니다. \n",input); }
6. 공란(blank), 탭(tab), 개행문자(new line)으로 단어를 구분하는 경우, 아래와 같은 영문 문자열을 인수로 받아 알파벳 모음으로 시작하는 단어의 개수를 카운트하는 프로그램을 작성하라.
#include <stdio.h> int main() { char str[210] = "The URL contains the name of the protocol required to access the resource, a domain name that identifies a specific computer on the Internet, and a hierarchical descriptipon of a file location on the computer."; int count = 0; for (int i = 0; str[i] != '\0'; i++) { if (str[i] == ' ') { if (str[i + 1] == 'a' || str[i + 1] == 'e' || str[i + 1] == 'i' || str[i + 1] == 'o' || str[i + 1] == 'u' || str[i + 1] == 'A' || str[i + 1] == 'E' || str[i + 1] == 'I' || str[i + 1] == 'O' || str[i + 1] == 'U') { count++; } } } printf("count = %d \n", count); }
7. 입력받은 수가 10이면 1~10, 20이면 11~20, 30이면 21~30까지의 합을 출력하는 프로그램을 switch-case문을 이용해서 작성하라.
(실습문제랑 동일한 문제, 동일한 풀이임)
#include <stdio.h> int main() { int input, sum = 0; do { printf("10,20,30 중 하나를 입력하세요. : "); scanf_s("%d", &input); if (input % 10 != 0) { printf("잘못 입력하셨습니다. 다시 입력해주세요. \n"); } while (getchar() != '\n'); } while (input % 10 != 0); switch (input) { case 10: for (int i = 1; i <= input; i++) { sum += i; } printf("1부터 10까지의 합은 %d 입니다.", sum); break; case 20: for (int i = 11; i <= input; i++) { sum += i; } printf("11부터 20까지의 합은 %d 입니다.", sum); break; case 30: for (int i = 21; i <= input; i++) { sum += i; } printf("21부터 30까지의 합은 %d 입니다.", sum); break; } return 0; }
8. 100부터 1까지의 수를 출력하는 프로그램을 작성하라. 이 때, 수들 사이는 탭으로 띄우고, 한 줄에 10개씩만 표시하라.
int main() { int line = 0; for (int i = 100; i > 0; i--) { printf("%3d\t", i); line++; if (line == 10) { line = 0; printf("\n"); } } }
9. 100부터 1까지의 수 중에서 짝수만을 출력하는 프로그램을 작성하라.
#include <stdio.h> int main() { int line = 0; for (int i = 100; i > 0; i--) { if (i % 2 == 0) { printf("%3d\t", i); line++; } if (line == 5) { line = 0; printf("\n"); } } }
10. 1^2 + 2^2 + ... + i^2이 2000을 초과하는 가장 작은 i와 그때의 합을 구하는 프로그램을 while문을 이용하여 작성하라.
#include <stdio.h> int main() { int sum = 0, i = 1, line = 0; while (sum < 2000) { sum += i * i; printf("%d", i*i); if (sum > 2000) { printf(" = %d \n\n", sum); break; } printf(" + "); if (line == 5) { line = 0; printf("\n"); } line++; i++; } printf("i^2들의 합이 2000을 초과하는 가장 작은 i값은 %d이고, 합은 %d입니다. \n", i, sum); }
11. 다음과 같은 실행결과를 출력하는 프로그램을 작성하라.
#include <stdio.h> int main() { for (int a = 1, i = 26; i >= 14; a++, i--) { for (int j = a; j <= i; j++) { printf("%c ", j + 64); } printf("\n"); } for (int a = 13, i = 14; i <= 26; a--, i++) { for (int j = a; j <= i; j++) { printf("%c ", j + 64); } printf("\n"); } }
반응형