728x90
1.
// 10장 프로그래밍 연습 1번
#include <stdio.h>
int main()
{
extern int x;
printf("정수형 변수 x = %d", x);
return 0;
}
int x = 10;
2.
// 10장 프로그래밍 연습 2번
#include <stdio.h>
// 전역 변수로 배열 stack을 선언해 사용
#define MAXSIZE 3
int stack[MAXSIZE];
// 변수 top을 전역 변수로 저장, 초기값 -1
int top = -1;
// isfull() : stack에 MAXSIZE 만큼 자료가 차 있는지 반환
int isfull()
{
return (top == (MAXSIZE - 1));
}
// push() : stack에 파라미터의 정수 값을 저장
void push(int x)
{
// stack이 포화상태인 경우
if (isfull()){
fprintf(stderr, "모두 찬 스택입니다.\n");
return;
}
else {
stack[++top] = x;
printf("스택 첨자 %d에 %d 저장합니다.\n", top, x);
}
}
int main(void)
{
push(3);
push(5);
push(9);
push(1);
return 0;
}
/*
스택 첨자 0에 3 저장합니다.
스택 첨자 1에 5 저장합니다.
스택 첨자 2에 9 저장합니다.
모두 찬 스택입니다.
*/
3.
// 10장 프로그래밍 연습 3번
#include <stdio.h>
// 전역 변수로 배열 stack을 선언해 사용
#define MAXSIZE 3
int stack[MAXSIZE];
// 변수 top을 전역 변수로 저장, 초기값 -1
int top = -1;
// isfull() : stack에 MAXSIZE 만큼 자료가 차 있는지 반환
int isfull()
{
return (top == (MAXSIZE - 1));
}
// push() : stack에 파라미터의 정수 값을 저장
void push(int x)
{
// stack이 포화상태인 경우
if (isfull()){
fprintf(stderr, "모두 찬 스택입니다.\n");
return;
}
else {
stack[++top] = x;
printf("스택 첨자 %d에 %d 저장합니다.\n", top, x);
}
}
// isempty() : 전역변수 top이 -1이면 스택이 빈 상태를 반환
int isempty()
{
return (top == -1);
}
// pop() : 스택이 비어있지 않으면 top에 있는 스택 자료를 반환
void pop()
{
if (isempty()){
fprintf(stderr, "빈 스택입니다.");
return;
}
else {
printf("스택 첨자 %d에서 %d를 제거합니다.", top, stack[top]);
top--;
return;
}
}
int main(void)
{
push(3);
push(5);
pop();
push(9);
push(1);
push(7);
return 0;
}
/*
스택 첨자 0에 3 저장합니다.
스택 첨자 1에 5 저장합니다.
스택 첨자 1에서 5를 제거합니다.스택 첨자 1에 9 저장합니다.
스택 첨자 2에 1 저장합니다.
모두 찬 스택입니다.
*/
4.
// 10장 프로그래밍 연습 4번
#include <stdio.h>
int sum_n(unsigned int n)
{
if (n < 1){
return 0;
}
// 재귀함수의 총 호출 횟수를 출력하도록 정적 지역변수 사용
static int count = 0;
count ++;
printf("%d번 호출 \n", count);
return (n + sum_n(n-1));
}
int main()
{
// 양의 정수 n은 표준입력으로
unsigned int n;
printf("양의 정수를 입력 >> ");
scanf("%d", &n);
printf("sum = %d", sum_n(n));
return 0;
}
/*
양의 정수를 입력 >> 3
1번 호출
2번 호출
3번 호출
sum = 6
*/
5.
// 10장 프로그래밍 연습 5번
#include <stdio.h>
#include <time.h> // time() 사용
#include <stdlib.h> // rand() 사용
// 가위바위보 판별
void dis_RSP(int n){
switch (n)
{
case 0:
printf("가위");
break;
case 1:
printf("바위");
break;
case 2:
printf("보");
break;
default:
printf("알수없음");
break;
}
}
// 승패 판별
void dis_WDL(int a, int b)
{
putchar('\n');
if (a == 0){
switch (b)
{
case 0:
printf("무승부 입니다.");
break;
case 1:
printf("컴퓨터의 승리입니다.");
break;
case 2:
printf("사용자의 승리입니다.");
break;
}
}
else if (a == 1){
switch (b)
{
case 0:
printf("사용자의 승리입니다.");
break;
case 1:
printf("무승부 입니다.");
break;
case 2:
printf("컴퓨터의 승리입니다.");
break;
}
}
else if (a == 2){
switch (b)
{
case 0:
printf("컴퓨터의 승리입니다.");
break;
case 1:
printf("사용자의 승리입니다.");
break;
case 2:
printf("무승부 입니다.");
break;
}
}
else {
fprintf(stderr, "잘못된 입력값.");
}
}
int main()
{
// computer value
srand((long) time(NULL)); // 시드 지정을 위함.
int com = rand()%3; // 0, 1, 2중 난수 생성
// user value
int user;
printf("가위(0) 바위(1) 보(2) 중에서 하나 입력 -> ");
scanf("%d", &user);
printf("당신은 ");
dis_RSP(user);
printf("이고, 시스템은 ");
dis_RSP(com);
printf("입니다.\n");
dis_WDL(user, com);
return 0;
}
/*
가위(0) 바위(1) 보(2) 중에서 하나 입력 -> 2
당신은 보이고, 시스템은 가위입니다.
컴퓨터의 승리입니다.
*/
6.
7.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Number; // 난수를 저장할 전역 변수
// 1~100까지의 하나의 난수를 발생
void setNumber()
{
srand(time(NULL)); // 매번 다른 시드값 생성
// 난수 생성해서 전역변수 Number에 저장
Number = rand() % 100 + 1; // 1~100 범위 난수
}
int main(void)
{
int answer; // 사용자 입력 저장
int max = 100, min = 1; // 천장값, 바닥값
setNumber();
printf("%d 에서 %d까지의 하나의 정수가 결정되었습니다.\n", min, max);
printf("이 정수를 맞추어 보세요? > ");
do
{
scanf("%d", &answer);
if (answer > Number){
max = answer;
printf("\n 맞추어야 할 정수가 입력한 정수 %d보다 작습니다.\n", answer);
printf("%d에서 %d사이의 정수를 다시 입력하세요. > ", min, max);
}
else if (answer < Number){
min = answer;
printf("\n 맞추어야 할 정수가 입력한 정수 %d보다 큽니다.\n", answer);
printf("%d에서 %d사이의 정수를 다시 입력하세요. > ", min, max);
}
else {
printf("\n 축하합니다! 정답은 %d입니다.\n", answer);
break;
}
} while (1);
return 0;
}
/*
1 에서 100까지의 하나의 정수가 결정되었습니다.
이 정수를 맞추어 보세요? > 50
맞추어야 할 정수가 입력한 정수 50보다 큽니다.
50에서 100사이의 정수를 다시 입력하세요. > 75
맞추어야 할 정수가 입력한 정수 75보다 작습니다.
50에서 75사이의 정수를 다시 입력하세요. > 63
맞추어야 할 정수가 입력한 정수 63보다 작습니다.
50에서 63사이의 정수를 다시 입력하세요. > 52
맞추어야 할 정수가 입력한 정수 52보다 작습니다.
50에서 52사이의 정수를 다시 입력하세요. > 51
축하합니다! 정답은 51입니다.
*/
8.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Number; // 난수를 저장할 전역 변수
// 1~100까지의 하나의 난수를 발생
void setNumber()
{
srand(time(NULL)); // 매번 다른 시드값 생성
// 난수 생성해서 전역변수 Number에 저장
Number = rand() % 100 + 1; // 1~100 범위 난수
}
int main(void)
{
int answer; // 사용자 입력 저장
int max = 100, min = 1; // 천장값, 바닥값
// count 변수 추가!
static int count = 0; // 정적 변수로 선언
setNumber();
printf("%d 에서 %d까지의 하나의 정수가 결정되었습니다.\n", min, max);
printf("이 정수를 맞추어 보세요? > ");
do
{
scanf("%d", &answer);
if (answer > Number){
max = answer;
printf("\n 맞추어야 할 정수가 입력한 정수 %d보다 작습니다.(시도횟수 : %d번)\n", answer, ++count);
}
else if (answer < Number){
min = answer;
printf("\n 맞추어야 할 정수가 입력한 정수 %d보다 큽니다.(시도횟수 : %d번)\n", answer, ++count);
}
else {
printf("\n 축하합니다! 정답은 %d입니다.\n", answer);
break;
}
if(count == 5){
printf("\n 최대 시도 횟수인 5회 동안 맞추지 못하였습니다. 종료됩니다.\n");
break;
}
printf("%d에서 %d사이의 정수를 다시 입력하세요. > ", min, max);
} while (1);
return 0;
}
/*
1 에서 100까지의 하나의 정수가 결정되었습니다.
이 정수를 맞추어 보세요? > 1
맞추어야 할 정수가 입력한 정수 1보다 큽니다.(시도횟수 : 1번)
1에서 100사이의 정수를 다시 입력하세요. > 2
맞추어야 할 정수가 입력한 정수 2보다 큽니다.(시도횟수 : 2번)
2에서 100사이의 정수를 다시 입력하세요. > 3
맞추어야 할 정수가 입력한 정수 3보다 큽니다.(시도횟수 : 3번)
3에서 100사이의 정수를 다시 입력하세요. > 4
맞추어야 할 정수가 입력한 정수 4보다 큽니다.(시도횟수 : 4번)
4에서 100사이의 정수를 다시 입력하세요. > 5
맞추어야 할 정수가 입력한 정수 5보다 큽니다.(시도횟수 : 5번)
최대 시도 횟수인 5회 동안 맞추지 못하였습니다. 종료됩니다.
*/
728x90
'C Programming' 카테고리의 다른 글
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 12. 문자와 문자열 (0) | 2022.07.08 |
---|---|
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 11. 포인터 기초 - 프로그래밍 연습 (0) | 2022.07.07 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 (0) | 2022.07.06 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 14. 함수와 포인터 활용 (0) | 2022.07.04 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 13. 구조체와 공용체 - 프로그래밍 연습 (0) | 2022.07.04 |