2-1. 여러 점수 입력 후 최고점과 합격자 수 구하기
문제설명
학생 수 N을 입력받고 점수를 입력받아, 최고점과 **합격자 수(60점 이상)**를 함께 출력하는 프로그램을 작성하시오.
목표
- 반복 입력 처리
- 여러 조건을 동시에 다루기
- 함수 분리로 역할 나누기
요구사항
- input_scores_and_process(int n, int *max_score, int *pass_count) 형태로 구현하거나, 반환 구조를 적절히 설계하시오.
- 최고점과 합격자 수를 모두 계산하시오.
- 입력 점수는 0~100 범위라고 가정하시오.
출력예시
학생 수 입력: 4
1번 학생 점수: 75
2번 학생 점수: 88
3번 학생 점수: 59
4번 학생 점수: 91
최고점: 91
합격자 수: 3
코드예시
#include <stdio.h>
void process_scores(int n, int *max_score, int *pass_count);
int main(void)
{
int n;
int max_score = 0;
int pass_count = 0;
printf("학생 수 입력: ");
scanf("%d", &n);
process_scores(n, &max_score, &pass_count);
printf("최고점: %d\n", max_score);
printf("합격자 수: %d\n", pass_count);
return 0;
}
void process_scores(int n, int *max_score, int *pass_count)
{
int i, score;
for (i = 1; i <= n; i++)
{
printf("%d번 학생 점수: ", i);
scanf("%d", &score);
if (i == 1 || score > *max_score)
{
*max_score = score;
}
if (score >= 60)
{
(*pass_count)++;
}
}
}
2-2. ATM 메뉴 반복 처리 프로그램
문제설명
간단한 ATM 프로그램을 작성하시오. 사용자는 메뉴를 반복해서 선택할 수 있으며, 입금, 출금, 잔액 조회를 할 수 있다.
목표
- 반복문 안에서 제어문 처리
- 함수로 기능 나누기
- 상태값(잔액) 갱신
요구사항
- 메뉴는 다음과 같다.
- 1: 입금
- 2: 출금
- 3: 잔액조회
- 0: 종료
- deposit, withdraw, print_balance 함수를 정의하시오.
- 잔액보다 큰 금액 출금 시 "잔액 부족"을 출력하시오.
- 종료 전까지 계속 반복하시오.
출력예시
1.입금 2.출금 3.잔액조회 0.종료
선택: 3
현재 잔액: 10000원
1.입금 2.출금 3.잔액조회 0.종료
선택: 2
출금액: 12000
잔액 부족
코드예시
#include <stdio.h>
void deposit(int *balance, int amount);
void withdraw(int *balance, int amount);
void print_balance(int balance);
int main(void)
{
int menu;
int amount;
int balance = 10000;
while (1)
{
printf("\n1.입금 2.출금 3.잔액조회 0.종료\n");
printf("선택: ");
scanf("%d", &menu);
if (menu == 0)
{
break;
}
if (menu == 1)
{
printf("입금액: ");
scanf("%d", &amount);
deposit(&balance, amount);
}
else if (menu == 2)
{
printf("출금액: ");
scanf("%d", &amount);
withdraw(&balance, amount);
}
else if (menu == 3)
{
print_balance(balance);
}
else
{
printf("잘못된 메뉴입니다.\n");
}
}
return 0;
}
void deposit(int *balance, int amount)
{
*balance += amount;
printf("%d원이 입금되었습니다.\n", amount);
}
void withdraw(int *balance, int amount)
{
if (*balance >= amount)
{
*balance -= amount;
printf("%d원이 출금되었습니다.\n", amount);
}
else
{
printf("잔액 부족\n");
}
}
void print_balance(int balance)
{
printf("현재 잔액: %d원\n", balance);
}
2-3. 숫자 맞히기 게임 (기회 제한)
문제설명
정답 숫자를 하나 정해두고, 사용자가 제한된 횟수 안에 숫자를 맞히는 프로그램을 작성하시오.
목표
- 반복 + 조건 분기 + 함수 호출 결합
- 상태 변화에 따라 다른 메시지 출력
요구사항
- 정답은 코드 안에서 미리 정하시오. 예: answer = 37
- 사용자는 최대 5번 입력할 수 있다.
- 입력값이 정답보다 작으면 "더 큰 수입니다."
- 입력값이 정답보다 크면 "더 작은 수입니다."
- 맞히면 즉시 종료하시오.
- 판정은 check_number(int input, int answer) 함수로 처리하시오.
출력예시
1번째 입력: 20
더 큰 수입니다.
2번째 입력: 50
더 작은 수입니다.
3번째 입력: 37
정답입니다!
예시코드
더보기
더보기
#include <stdio.h>
int check_number(int input, int answer);
int main(void)
{
int answer = 37;
int input;
int i;
int result;
for (i = 1; i <= 5; i++)
{
printf("%d번째 입력: ", i);
scanf("%d", &input);
result = check_number(input, answer);
if (result == 0)
{
printf("정답입니다!\n");
break;
}
else if (result < 0)
{
printf("더 큰 수입니다.\n");
}
else
{
printf("더 작은 수입니다.\n");
}
}
if (i == 6)
{
printf("실패! 정답은 %d입니다.\n", answer);
}
return 0;
}
int check_number(int input, int answer)
{
if (input == answer)
{
return 0;
}
else if (input < answer)
{
return -1;
}
else
{
return 1;
}
}
'[1] 프로그래밍1 및 실습(C언어) > 6주차. 재귀함수, 배열' 카테고리의 다른 글
| [6주차][배열] 2단계 연습문제 (0) | 2026.04.09 |
|---|---|
| [6주차][배열] 1단계 연습문제 (0) | 2026.04.09 |
| [6주차][조건,분기,함수] 3단계 연습문제 (0) | 2026.04.06 |
| [6주차][조건,분기,함수] 1단계 연습문제 (0) | 2026.04.06 |
| [6주차][재귀함수] 연습문제 (0) | 2026.04.06 |