ν‹°μŠ€ν† λ¦¬ λ·°

[ 문제 1-2 ] (100점) Nλͺ… ν•™μƒμ˜ 이름과 1μ°¨, 2μ°¨ μ‹œν—˜ 점수λ₯Ό μž…λ ₯ λ°›μ•„ μΈμ¦μ‹œν—˜ μ „
체 ν‰κ· μ μˆ˜μ™€ ν‰κ· μ μˆ˜ μ΄ν•˜μΈ ν•™μƒμ˜ 수λ₯Ό 좜λ ₯ ν•œ ν›„, 평균 점수 μ΄ν•˜μΈ ν•™μƒμ˜ 이름과 점수λ₯Ό
μž…λ ₯된 μˆœμ„œλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ•„λž˜μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•˜μ‹œμ˜€. 단, N≤100이고, 각 학생
의 μ‹œν—˜ 평균 μ μˆ˜λŠ” 1μ°¨ μ‹œν—˜ 점수의 40%와 2μ°¨ μ‹œν—˜ 점수의 60%의 ν•©μœΌλ‘œ 계산
ν•œλ‹€.
- insertData ν•¨μˆ˜
β—¦ ν•¨μˆ˜μ›ν˜• : void insertData(struct student_info *s, int N)
β—¦ Nλͺ… ν•™μƒμ˜ 이름과 학생 λ‹Ή 두 번의 μ‹œν—˜ 점수λ₯Ό μž…λ ₯ λ°›κ³ , ν•™μƒμ˜ μ‹œν—˜ 평균
점수λ₯Ό κ³„μ‚°ν•˜μ—¬ ꡬ쑰체 배열에 μ €μž₯ν•œλ‹€.
β—¦ ν•™μƒμ˜ 이름은 곡백을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ΅œλŒ€ 10개 μ˜μ–΄ λ¬Έμžμ΄λ‹€.
- getAllavg ν•¨μˆ˜
β—¦ ν•¨μˆ˜μ›ν˜• : double getAllavg(struct student_info s[], int N)
β—¦ 전체 ν•™μƒμ˜ μ‹œν—˜ 평균 μ μˆ˜μ™€ 평균 μ΄ν•˜μ˜ 점수λ₯Ό 받은 ν•™μƒμ˜ 수λ₯Ό κ³„μ‚°ν•˜μ—¬ 좜λ ₯
ν•˜κ³ , μ‹œν—˜ 전체 평균 점수λ₯Ό λ°˜ν™˜ν•œλ‹€. 평균 μ μˆ˜λŠ” μ†Œμˆ˜μ  μ΄ν•˜ λ‘˜μ§Έμžλ¦¬κΉŒμ§€ 좜λ ₯
ν•œλ‹€.
- printResult ν•¨μˆ˜
β—¦ ν•¨μˆ˜μ›ν˜• : void printResult(struct student_info *s, int N, double avg)
β—¦ μ‹œν—˜ 전체 평균 μ΄ν•˜μ˜ 점수λ₯Ό 받은 ν•™μƒλ“€μ˜ 이름과 학생 각자의 평균 점수λ₯Ό 좜λ ₯
ν•œλ‹€. 좜λ ₯ μˆœμ„œλŠ” μž…λ ₯된 μˆœμ„œμ΄λ©°, 평균 μ μˆ˜λŠ” μ†Œμˆ˜μ  μ΄ν•˜ λ‘˜μ§Έμžλ¦¬κΉŒμ§€ 좜λ ₯ν•œλ‹€.
- insertData와 printResult ν•¨μˆ˜μ—μ„œλŠ” ꡬ쑰체 λ°°μ—΄ μ°Έμ‘° μ‹œ λ°°μ—΄ ν‘œκΈ° [ ]의 μ‚¬μš©μ„ κΈˆμ§€ν•˜κ³ ,
배열을 반볡문으둜 ν›‘μ–΄λ³Ό μ‹œ, μ£Όμ†Œλ₯Ό μ΄μš©ν•˜μ—¬ 포인터λ₯Ό μ΄λ™μ‹œν‚€λ©°, λ°˜λ³΅λ¬Έμ„ κ΅¬ν˜„ ν•œλ‹€.
β–Ά ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜ ν•¨μˆ˜ μ›ν˜•μ„ μˆ˜μ •ν•œ 경우 (100% 감점)
β–Ά main ν•¨μˆ˜μ—μ„œ 좜λ ₯을 ν•œ 경우 (30% 감점)
β–Ά main ν•¨μˆ˜μ—μ„œ 전체 평균을 κ³„μ‚°ν•œ 경우 (30% 감점)
β–Ά insertData, printResult ν•¨μˆ˜μ—μ„œ λ°°μ—΄ ν‘œκΈ° [ ]λ₯Ό μ‚¬μš©ν•œ 경우 (각 15% 감점)
β–Ά insertData, printResult ν•¨μˆ˜μ—μ„œ 배열을 반볡문으둜 ν›‘μ–΄λ³Ό μ‹œ, μ£Όμ†Œλ₯Ό μ΄μš©ν•˜μ—¬ 포인터λ₯Ό 이
λ™μ‹œν‚€λ©°, 반볡문 κ΅¬ν˜„ (μœ„λ°˜ μ‹œ 각 15% 감점)
β–Ά μ „μ—­λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ 경우 (100% 감점)

 

μž…λ ₯ μ˜ˆμ‹œ 1
6
Kim 80 46
Choi 76 98
Park 64 89
Chung 87 100
Lee 40 28
Kang 65 77

 

좜λ ₯ μ˜ˆμ‹œ 1
71.27 2 ↦ μ‹œν—˜ ν‰κ· μ μˆ˜μ™€ 평균 μ΄ν•˜μΈ 학생 수
Kim 59.60 ↦ 전체 평균 μ΄ν•˜μ˜ 점수λ₯Ό 받은 ν•™μƒλ“€μ˜
Lee 32.80 이름과 학생 각자의 평균 점수


↦ 1μ°¨ μ‹œν—˜ 40% + 2μ°¨ μ‹œν—˜ 60%인 경우, 각 ν•™μƒμ˜ 평균
μ μˆ˜λŠ” μˆœμ„œλŒ€λ‘œ, 59.60, 89.20, 79.00, 94.80, 32.80, 72.20 이닀.

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct student_info {
	char name[11];
	double s1, s2;
	double avg;
};

void insertData(struct student_info* s, int N);
double getAllavg(struct student_info s[], int N);
void printResult(struct student_info* s, int N, double avg);

int main() {
	struct student_info st[100];
	struct student_info *s = &st;
	double avg = 0;

	int n;
	scanf("%d", &n);

	insertData(s, n);
	avg = getAllavg(s, n);
	printResult(s, n, avg);

	return 0;
}

void insertData(struct student_info* s, int N) {
	for (int i = 0; i < N;i++) {
		scanf("%s %lf %lf", &(s+i)->name, &(s+i)->s1, &(s+i)->s2);
	}
	
	for (int i = 0; i < N; i++) {
		(s+i)->avg = ((s + i)->s1 *0.4 + (s + i)->s2 *0.6);
	}

}
double getAllavg(struct student_info s[], int N){
	double t = 0;
	int cnt = 0;
	for (int i = 0; i < N; i++) {
		t = t+ (s + i)->avg;
	}
	t = t / N;

	for (int i = 0; i < N; i++) {
		if ((s + i)->avg <= t) {
			cnt++;
		}
	}

	printf("%.2f %d\n", t, cnt);
	return t;
}
void printResult(struct student_info* s, int N, double avg) {
	for (int i = 0; i < N; i++) {
		if ((s + i)->avg <= avg) {
			printf("%s %.2f\n", (s + i)->name, (s + i)->avg);
		}
	}
}

 

**ꡬ쑰체-포인터λ₯Ό λ°°μ—΄ν‘œκΈ° [] λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  포인터λ₯Ό μ΄μš©ν•΄ ν•¨μˆ˜λ₯Ό μ§œλŠ” 것이 μ€‘μš”

(s+i)->name μ΄λŸ°μ‹μœΌλ‘œ ν•˜λ©΄ 됨.

 

ꡬ쑰체 λ³€μˆ˜ ν•˜λ‚˜ 더 μ„ μ–Έ ν•„μš”μ—†μ΄ κ·Έλƒ₯ ν•¨μˆ˜ μ•ˆμ—μ„œ double avg; ν•˜κ³  κ·Έ μ•ˆμ— ꡬ쑰체 μ—°μ‚° μ €μž₯ν•  수 있음

λ°˜μ‘ν˜•