2019. 9. 4. 21:05 작성
혼자 풀어본 쉽게 풀어쓴 C언어 Express 7장 Programming
정확하지 않을 가능성 높음!!!!!!!
1.1부터 100 사이의 모든 3의 배수의 합을 계산하여 출력하는 프로그램을 다음의 3가지 반복 구조를 사용하여 작성하라.
<1부터 100 사이의 모든 3의 배수의 합은 1683입니다.>
(a) while 루프
(b) for 루프
(c) do... while 루프
**do... while문
do{
실행문
}while (조건문);
*3의 배수의 합은 i%3 == 0 의 조건으로 검사할 수 있다.
2. 반복 루프는 파일의 끝을 만날 때까지 자료를 처리하는 데 많이 사용된다. 표준 입력에서는 사용자가 Ctrl+Z를 입력하면 파일의 끝으로 간주한다. scanf()가 Ctrl+Z를 만나면 EOF를 반환한다. 사용자가 Ctrl+Z를 누르기 전까지, 입력한 정수의 합을 계산하여 출력하는 프로그램을 작성하여 테스트하라.
* while(scanf("%d", &number) != EOF) { ... }
나오긴 하는데 Ctrl + Z를 세번 입력해야 마지막줄이 출력된다,,,
문제가 무엇일까요
3. 반복루프를 사용하여 다음과 같은 패턴을 출력하는 프로그램을 작성하라.
*
**
***
****
*****
******
*******
*중첩반복구조를 사용한다.
4. 중첩 반복문을 사용하여서 다음과 같이 출력하는 프로그램을 작성하여 보자.
정수를 입력하시오 : 5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
5. 가끔은 일정한 시간동안 아무 일도 하지 않으면서 시간을 지연시킬 목적으로 반복문을 사용하기도 한다. 사용자에게서 하나의 수를 입력받아서 변수에 저장한다. 반복문을 사용하여 이 변수의 값을 1씩 감소시키면서 이 변수의 값이 0이 될 때까지 반복한다. 반복이 끝나면 벨소리를 낸다.
카운터의 초기값을 입력하시오: 10
10 9 8 7 6 5 4 3 2 1 (경고벨소리)
6. 앞장에서 간단한 정수 계산기를 만들어본 적이 있다. 이 계산기 프로그램에 메뉴를 추가하도록 한다. 다음과 같은 메뉴를 화면에 출력하고 사용자가 메뉴 중에서 하나를 선택할 때까지 반복을 계속한다. do...while반복문을 사용하여 사용자가 적절한 선택을 했는지를 검사하도록 하라. 만약 사용자가 A, S, M, D, Q가 아닌 다른 문자를 입력하면 "연산을 선택하시오:" 메시지를 계속해서 출력한다. 하나의 메뉴가 선택되면 해당되는 연산을 실행하고 다시 메뉴를 선택할 수 있도록 하라. 반복을 종료하는 메뉴인 Q는 break문을 이용하여 구현하도록 하라.
#include <stdio.h>
int main(void) {
printf("****************\n");
printf("A ----Add \n");
printf("S ----Subtract \n");
printf("M ---- Multiply \n");
printf("D ----Divide \n");
printf("Q ----Quit \n");
printf("****************\n");
char x;
int i, j;
do {
printf("연산을 선택하시오:");
scanf("%c", &x);
printf("두수를 공백으로 분리하여 입력하시오: ");
if (x == 'Q') {
break;
}
int result = 0;
scanf("%d %d", &i, &j);
if (x == 'A') {
result = i + j;
printf("연산의 결과는 %d입니다. ", result);
continue;
}
else if (x == 'S') {
result = i - j;
printf("연산의 결과는 %d입니다. ", result);
continue;
}
else if (x == 'M') {
result = i * j;
printf("연산의 결과는 %d입니다. ", result);
continue;
}
else if (x == 'D') {
result = i / j;
printf("연산의 결과는 %d입니다. ", result);
continue;
}
} while (1);
printf("\n");
return 0;
}
좀 길으니 소스코드에!!
넣었으나 오류가 꽤나 많았다.
연산의 결과는 ... 이 문장이 두번씩 반복되고 연산을 선택하시오와 두수를... 문장이 한문장으로 나오는 등,,,
수정한 소스코드 :
#include <stdio.h>
int main(void) {
printf("****************\n");
printf("A ----Add \n");
printf("S ----Subtract \n");
printf("M ---- Multiply \n");
printf("D ----Divide \n");
printf("Q ----Quit \n");
printf("****************\n");
char x;
int i, j;
printf("연산을 선택하시오:");
while(1) {
int result = 0;
scanf_s("%c", &x);
if (x == 'Q') {
break;
}
else if (x != 'A' && x != 'S' &&
x != 'M' && x != 'D') continue;
printf("두수를 공백으로 분리하여 입력하시오: ");
scanf_s("%d %d", &i, &j);
if (x == 'A') {
result = i + j;
printf("연산의 결과는 %d입니다. \n", result);
printf("\n연산을 선택하시오:");
}
else if (x == 'S') {
result = i - j;
printf("연산의 결과는 %d입니다. \n", result);
printf("\n연산을 선택하시오:");
}
else if (x == 'M') {
result = i * j;
printf("연산의 결과는 %d입니다. \n", result);
printf("\n연산을 선택하시오:");
}
else if (x == 'D') {
result = i / j;
printf("연산의 결과는 %d입니다. \n ", result);
printf("\n연산을 선택하시오:");
}
}
printf("\n");
return 0;
}
잘 나오는 것을 확인할 수 있다.
7. 2와 100 사이에 있는 모든 소수(prime number)를 찾는 프로그램을 작성하라. 정수가 소수가 되려면 1과 자기자신만을 약수로 가져야 한다.
#include <stdio.h>
int main(void) {
int i, j;
for (i = 2; i <= 100; i++) {
int sum = 0;
for (j = 2; j <= i; j++) {
if (i % j == 0)
sum += 1;
}
if (sum == 1) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
8. 컴퓨터는 막대 그래프를 그리는 데도 사용된다. 사용자로부터 1부터 50사이의 숫자를 입력받아서 숫자만큼의 별표를 출력하는 프로그램을 작성하라. 막대는 세로로 그려지게 된다.
#include <stdio.h>
int main(void) {
while (1) {
printf("막대의 높이(종료: -1): ");
int x, i;
scanf("%d", &x);
if (x == -1) break;
for (i = 0; i < x; i++) {
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
9. (1+2+3+...+n)가 10000을 넘지 않으면사 가장 큰 값과 그 때의 n의 값을 구하라.
#include <stdio.h>
int main(void) {
int i = 1;
int sum = 0;
while (1) {
sum += i;
if (sum >= 10000) break;
i++;
}
printf("1부터 %d까지의 합이 %d입니다. ", i-1, sum-i);
printf("\n");
return 0;
}
** 마지막 출력시 i-1, sum-i를 출력할 것!
10. 실수의 거듭 제곱값을 계산하는 프로그램을 작성하여 보자. 사용자로부터 하나의 실수 r와 거듭제곱 횟수를 나타내는 정수 n을 입력받아서 r^n을 구하여 화면에 출력한다.
#include <stdio.h>
int main(void) {
printf("실수의 값을 입력하시오: ");
double i;
scanf("%lf", &i);
printf("거듭제곱횟수를 입력하시오: ");
int n;
scanf("%d", &n);
double result = 1;
for (int x = 0; x < n; x++) {
result *= i;
}
printf("결과값은 %lf", result);
printf("\n");
return 0;
}
11. 밑의 식의 값을 계산하여 출력하여 보자.
#include <stdio.h>
int main(void) {
printf("n의 값을 입력하시오: ");
int i;
scanf("%d", &i);
int x = 1;
int result = 0;
for (int j = 1; j <= i; j++) {
x = j * j;
result += x;
x = 1;
}
printf("계산값은 %d입니다.", result);
printf("\n");
return 0;
}
12. 피보나치 수열은 다음과 같이 정의되는 수열이다.
f0 = 0
f1 = 1
f(i+1) = fi+f(i-1) for i=1, 2, ...
피보나치 수열에서는 앞의 2개의 원소를 합하여 뒤의 원소를 만든다. 피보나치 수열은 컴퓨터에서도 탐색 문제 등에 사용되기도 한다. 피보나치 수열을 생성하여 출력하는 프로그램을 작성하여 보자.
#include <stdio.h>
int main(void) {
printf("몇 번째 항까지 구할까요? ");
int i;
scanf("%d", &i);
int a = 0, b = 1, c;
printf("0 1 ");
for (int j = 0; j < i - 1; j++) {
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
printf("\n");
return 0;
}
13. 서로 다른 n개에서 r개를 택하여 일렬로 나열하는 방법의 수를 순열(permutation)이라 하고 nPr로 표시한다. 순열은 다음과 같은 식을 이용하여 구할 수 있다. 순열을 구하는 프로그램을 작성하라. n과 r은 사용자가 입력할 수 있도록 하라.
nPr = n(n-1)(n-2)...(n-r+1)
#include <stdio.h>
int main(void) {
printf("n의 값: ");
int n;
scanf("%d", &n);
printf("r의 값: ");
int r;
scanf("%d", &r);
int result = 1;
int x = n;
for (int i = 1; i <= r+2; i++) {
result *= x;
x = x - 1;
}
printf("순열의 값은 %d입니다. ", result);
printf("\n");
return 0;
}
14. 사용자가 입력한 특정한 정수의 자리수를 반대로 출력하는 프로그램을 작성하라. 예를 들어서 사용자가 정수 1206을 입력하였다면 6021이 출력되어야 한다. 만약 음수를 입력하면 오류메시지를 출력하라. do...while문을 사용하여 보라
#include <stdio.h>
int main(void) {
printf("정수를입력하시오: ");
int n;
scanf("%d", &n);
int x, y, k = 1;
while (1) {
y = n / k;
x = y % 10;
printf("%d", x);
n = n - k * x;
k *= 10;
if (n == 0) break;
}
printf("\n");
return 0;
}
(C프로그래밍 7장 Programming 원글 : https://blog.naver.com/hhahee/221638888167)
'C언어' 카테고리의 다른 글
C프로그래밍 9장 Programming (0) | 2022.12.22 |
---|---|
C프로그래밍 8장 Programming (0) | 2022.12.22 |
C프로그래밍 6장 Programming (0) | 2022.12.22 |
C프로그래밍 5장 Programming (0) | 2022.12.22 |
C프로그래밍 4장 Programming (0) | 2022.12.22 |
댓글