고양이와 코딩
함수 포인터 연습문제 본문
728x90
* 특정한 타입의 변수의 '값'을 바꾸려면, 특정한 타입을 가리키는 포인터로 인자를 취해야 한다 ! *
* ex) 특정한 타입이 int* 일 때, int* 타입을 가리키는 포인터의 타입은 int** *
문제 1. 사용자로부터 5명의 학생의 수학, 국어, 영어 점수를 입력 받아서 평균이 가장 높은 사람부터 평균이 가장 낮은 사람까지 정렬되어 출력하도록 하세요. 특히, 평균을 기준으로 평균 이상인 사람 옆에는 '합격', 아닌 사람은 '불합격'을 출력하게 해보세요.
#include <stdio.h>
#define NUM_STUDENTS 5
#define NUM_SUBJECTS 3
/*
학생들의 점수, 각 학생의 평균점수, 각 학생의 합/불 여부를 저장하는 배열 선언
*/
int scores[NUM_STUDENTS][NUM_SUBJECTS];
float averages[NUM_STUDENTS];
const char* status[NUM_STUDENTS];
const char* subjects[] = {"수학", "국어", "영어"};
// 점수 입력 함수
void input_scores() {
for (int i = 0; i < NUM_STUDENTS; i++){
printf("학생 %d의 점수를 입력하세요.\n", i + 1);
for (int j = 0; j < NUM_SUBJECTS; j++) {
printf("%s:", subjects[j]);
scanf("%d", &scores[i][j]);
}
}
}
// 평균 계산 함수
void calculate_averages() {
for (int i = 0; i < NUM_STUDENTS; i++){
float sum = 0;
for (int j = 0; j < NUM_SUBJECTS; j++){
sum += scores[i][j];
}
averages[i] = sum / NUM_SUBJECTS;
}
}
// 합격/불합격 판정 함수
void determine_status() {
for (int i = 0; i < NUM_STUDENTS; i++){
if (averages[i] >= 60.0) {
status[i] = "합격";
} else {
status[i] = "불합격";
}
}
}
// 정렬 함수
void sort_students() {
for (int i = 0; i < NUM_STUDENTS - 1; i++) {
for (int j = i + 1; j < NUM_STUDENTS; j++){
if (averages[i] < averages[j]) {
// 평균 점수 교환
float temp_avg = averages[i];
averages[i] = averages[j];
averages[j] = temp_avg;
// 점수 교환
for (int k = 0; k < NUM_SUBJECTS; k++){
int temp_score = scores[i][k];
scores[i][k] = scores[j][k];
scores[j][k] = temp_score;
}
// 상태 교환
const char *temp_status = status[i];
status[i] = status[j];
status[j] = temp_status;
}
}
}
}
// 결과 출력 함수
void print_results() {
printf("\n정렬된 결과:\n");
for (int i = 0; i < NUM_STUDENTS; ++i) {
printf("학생 %d - 수학: %d, 국어: %d, 영어: %d, 평균: %.2f, %s\n",
i + 1, scores[i][0], scores[i][1], scores[i][2], averages[i], status[i]);
}
}
int main() {
void (*functions[5])() = {input_scores, calculate_averages, determine_status, sort_students, print_results};
for (int i = 0; i < 5; ++i) {
functions[i]();
}
return 0;
}
'C' 카테고리의 다른 글
[LeetCode] Palindrom number (0) | 2024.11.10 |
---|---|
[LeetCode] Two Sum (0) | 2024.11.10 |
포인터 진짜 짜증남 (0) | 2024.06.15 |
function (1) | 2024.06.09 |
포인터 (0) | 2024.05.10 |