C언어 문제풀이
C언어 콘서트 6장 연습문제(Programming)
aaaahy ・ 2020. 7. 9. 19:35
URL 복사 이웃추가
본문 기타 기능
신고하기
1번,
#include <stdio.h>int main() {for (int i = 60; i >= 0; i--)printf("%d ", i);printf("\n발사\n");return 0;}
60초부터 0초까지 숫자를 출력하고 0초가 되면 "발사"를 출력한다. for문을 이용하여 i를 감소시켜 60부터 0까지 출력하였다.
2번,
#include <stdio.h>int main() {int n;printf("몇 번이나 반복할까요?: ");scanf("%d", &n);for (int i = 0; i < n; i++)printf("안녕하세요?\n");return 0;}
반복 횟수를 입력 받아 그 수만큼 "안녕하세요?"를 출력한다. for문을 이용하여 n번의 횟수만큼 반복할 수 있도록 하였다.
3번,
#include <stdio.h>int main() {for (char c = 'A'; c <= 'Z'; c++)printf("%d: %c\n", c, c);return 0;}
아스키 코드 표를 출력한다. 문자 'A'부터 'Z'까지 for문을 이용하여 문자형 변수 c 값을 증가시켜 출력하였다.
4번,
#include <stdio.h>int main() {int n;int sum = 0;while (1) {printf("정수를 입력하시오: ");scanf("%d", &n); sum += n;if (n == 0) {printf("합계=%d", sum);break;}}return 0;}
정수를 입력 받아 계속 더하는 프로그램이다. 사용자가 0을 입력하면 입력된 모든 정수의 합계를 출력한다. while문을 이용하여 반복하여 숫자를 입력할 수 있고 if문과 break를 활용하여 입력한 숫자가 0이면 합계를 출력하고 반복문을 빠져나온다.
5번,
#include <stdio.h>int main() {for (int i = 0; i < 7; i++) {for (int j = 1; j <= i + 1; j++) {printf("%d", j);}for (int k = 6; k > i; k--)printf("*");printf("\n");}return 0;}
책에 있는 실행화면을 그대로 출력한다. 중첩 반복문을 이용하여야 한다. 변수 i가 있는 반복문은 7줄을 작성하기 위한 것이고 변수 j가 있는 반복문은 숫자를 1부터 차례대로 출력한다. 그리고 변수 k가 있는 반복문은 문자 '*'를 6개부터 1개씩 줄여가면서 출력한다.
6번,
#include <stdio.h>int main() {for (int i = 1; i <= 100; i++) {if (i % 3 == 0)printf("%d ", i);}return 0;}
1부터 100까지의 자연수 중에서 3의 배수를 출력한다. 3으로 나누었을 때 나머지가 0이면 3의 배수임을 활용하여 for문 안에 if문으로 작성하였다.
7번,
#include <stdio.h>int main() {for (int i = 1; i <= 100; i++) {if ((i % 3 == 0) && (i % 5 == 0))printf("%d ", i);}return 0;}
1부터 100까지의 자연수 중에서 3의 배수이면서 5의 배수인 값을 출력한다. 위의 6번 문제와 약간 유사하지만 5의 배수인 조건이 더 추가되어서 if문 조건에서 &&(AND)연산자를 이용하였다.
8번,
#include <stdio.h>int main() {int x, y;int sum = 0;printf("시작정수: ");scanf("%d", &x);printf("종료정수: ");scanf("%d", &y);for (int i = x; i <= y; i++) sum += i;printf("Sum of %d to %d = %d\n", x, y, sum);return 0;}
정수 x, y를 입력 받아 x에서 y까지의 합을 구하여 출력한다.
9번,
#include <stdio.h>int main() {int n;printf("정수를 입력하시오: ");scanf("%d", &n);for (int i = 1; i <= n; i++) {if (n % i == 0)printf("%d ", i);}return 0;}
정수 하나를 입력 받아 그 정수의 모든 약수를 출력한다. for문을 이용하여 입력한 정수만큼의 수대로 반복하여 나누었을 때 나머지가 0인 수들(약수)을 출력한다.
10번,
#include <stdio.h>int main() {printf("========================\n");printf("화씨온도\t섭씨온도\n");printf("========================\n");for (int hc = 0; hc <= 100; hc += 10) {int sc = (hc - 32) * 5 / 9;printf("%d\t\t%d\n", hc, sc);}return 0;}
화씨온도 0도부터 100까지의 구간에 대하여 10도 간격으로 섭씨온도로 환산하는 표를 출력한다. 화씨온도를 섭씨온도로 변환하는 식을 이용하여 값을 구하여 출력만 하면되는 간단한 문제이다.
11번,
#include <stdio.h>int main() {int n;printf("정수를 입력하시오: ");scanf("%d", &n);for (int i = 0; i < n; i++) {for (int j = 1; j <= i + 1; j++)printf("%3d", j);printf("\n");}return 0;}
중첩 반복문을 이용하여 책에 있는 실행화면대로 출력한다. 정수를 3칸에 출력하려면 "%3d"를 이용하라고 되어있다. 앞의 5번문제에 이미 포함된 코드이다. 오히려 5번이 더 어려운것 같다.
12번,
#include <stdio.h>int main() { int n;for (int i = 0; i < 10; i++) {printf("데이터를 입력하시오: ");scanf("%d", &n);for (int j = 0; j < n; j++)printf("*");printf("\n");}return 0;}
1부터 50사이의 숫자 10개를 입력 받아 숫자만큼의 별표를 출력한다. 10번 반복하여 숫자를 입력 받고 그 숫자만큼 수 대로 "*"를 출력한다.
13번,
#include <stdio.h>int main() {for (int a = 1; a <= 100; a++) {for (int b = 1; b <= 100; b++) {for (int c = 1; c <= 100; c++) {if (a*a + b * b == c * c)printf("%d %d %d\n", a, b, c);}}}return 0;}
직각삼각형에서 직각을 낀 두 변의 길이를 a, b 라고 하고, 빗변의 길이를 c라고 한다. 각 변의 길이가 100보다 작은 삼각형 중에 피타고라스 정리가 성립하는 직각 삼각형을 구하여 각 변의 길이를 출력한다. 피타고라스 정리인
위의 식을 이용하여 if문 조건에 포함 시킨다. 어렵지 않은 문제이다.
14번,
#include <stdio.h>int main() {int n;int sum = 0;printf("n의 값을 입력하시오: ");scanf("%d", &n);for (int i = 1; i <= n; i++)sum += i * i;printf("계산값은 %d입니다.\n", sum);return 0;}
의 값을 계산하여 출력한다. 합을 구하는 코드와 매우 유사하고 합을 저장하는 변수 sum에 제곱한 값을 더하면 된다.
15번,
#include <stdio.h>int main() {char c;int count = 0;while (1) {printf("문자를 입력하시오: (종료 . )");scanf("%c", &c); // c = getchar();rewind(stdin); // getchar();if (c == 'a')count++;else if (c == '.')break;}printf("a의 개수=%d (종료 . )\n", count);return 0;}
반복적으로 문자를 받아서 'a'가 나오면 카운터를 하나씩 증가시키고 '.'이 입력되면 반복을 종료하고 입력한 'a'의 개수를 출력한다. 문자를 입력 받을 때는 scanf("%c", &v) 함수를 이용하라고 되어있다. 이 함수를 이용했을 때 추가로 rewind(stdin) 함수를 이용하여야 한다. 그렇지 않으면 버퍼에 남겨져 있는 문자들을 또 다시 출력한다. rewind 함수는 원래파일을 통해 읽어왔을 때 읽는 위치를 처음으로 보내는 기능을 한다.
16번,
#include <stdio.h>int main() {int n;double a = 1000.0;while (a > 1000*10/100) {printf("연료 충전은 +, 소모는 -로 입력해주세요: ");scanf("%d", &n);a += n;printf("현재 남아있는 양은 %lf입니다.\n", a);}printf("\n(경고) 연료가 10%이하입니다.\n");return 0;}
자동차의 연료 탱크 프로그램이다. 초기값이 1000리터이고 변수 a이다. 사용자가 주행을 하면 연료가 줄어들어 사용한 연료를 입력 받아 연료 탱크에 남아 있는 연료가 10%미만이면 경고를 출력한다. 반복문 while문을 이용하여 10%미만일 경우는 반복문 루프를 빠져나와 경고문을 출력한다. 그러기 때문에 초기값 1000의 10%를 계산하는 식을 while문 조건에 입력하였다. 그리고 사용한 연료를 입력 받아 초기값에 더하여준다. 마이너스일경우 빼주는 것과 같다. 그 후 남아있는 양을 출력한다.
17번,
#include <stdio.h>int main() {int n;int flag = 0;printf("정수를 입력하시오: ");scanf("%d", &n);for (int i = 2; i < n; i++) {if (n % i == 0) {flag = 1;}}if (flag)printf("%d은 소수가 아닙니다.\n",n);elseprintf("%d은 소수입니다.\n", n);return 0;}
정수를 입력 받아 소수인지 아닌지 출력한다. 핸들값 flag 변수를 이용한다. 1과 자기자신을 제외한 약수를 가진다면 핸들값을 1로 설정하고 이 수는 소수가 아니다. 핸들값이 0이면 소수로 판단한다.
18번,
문제 오류 (?)
19번,
#include <stdio.h>int main() {int n;printf("몇번째 항까지 구할까요? ");scanf("%d", &n);int a = 0, b = 0, c = 1;printf("0, ");for (int i = 0; i < n; i++) {printf("%d, ", c);a = b;b = c;c = a + b;}return 0;}
피보나치 수열을 계산하여 출력한다. 0과 1부터 시작하며 앞의 두수를 더하여 뒷 수를 만든다.
댓글3 이 글에 댓글 단 블로거 열고 닫기
인쇄