본문 바로가기
C언어

C언어_점수대별로 학생수 표시 #수행1

by JiaLee0707 2019. 2. 5.

처음 시작하는 블로그.

블로그 첫 글은 2학기 실기수행평가 1~8번 중 1번 문제.

 

 


1. 학생들의 점수를 입력받고, 점수대별로 해당 학생수만큼 '*'가 표시되는 프로그램을 작성하시오.

조건 1. 음수값이 입력되면 입력을 종료한다.

조건 2. 점수는 0~100 사이의 값들만 들어온다고 가정한다.

 

더보기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int n=0, max=0, min=100;
	int score[5] = { 0 };

	char m[][10] = { "90점 이상", "80점 대", "70점 대", "60점 대", "60점 미만" };
	printf("점수 입력 : ");

 	while(1){
		scanf("%d", &n);
		if (n < 0) { break; }
		switch (n / 10) {
			case 10: case 9: score[0]++; break;
			case 8: score[1]++; break;
			case 7: score[2]++; break;
			case 6: score[3]++; break;
			default: score[4]++; break;
		}

		if (n > max) { max = n; }
		if (n < min) { min = n; }
	}

	for (int i = 0; i < sizeof(score) / sizeof(int); i++) {
		printf("%s : ", m[i]);
		for (int j = 0; j < score[i]; j++) {
        	printf("*");
		}
		printf("\n");
	}
    
	printf("최고점수 : %d\n", max);
    printf("최저점수 : %d\n", min);
    
}//58 74 85 95 81 89 91 60 55 69 -10

 

1) 헤더 작성(매크로 정의&include)

#define _CRT_SECURE_NO_WARNINGS    //매크로 정의(scanf 사용)

#include <stdio.h>                             //전처리기(출력함수 사용)

 

- #define _CRT_SECURE_NO_WARNINGS

scnaf를 사용하였는데 이 매크로 정의를 하지 않으면 이러한 에러가 나타난다.

 

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

그렇기 때문에 에러를 무시하고 scanf를 사용하겠다는 뜻으로 매크로 정의를 한다.
 
이때 이 매크로 정의는 모든 헤더 위에 작성을 해야 한다.

 

- #include <stdio.h>

include는 '포함하다'라는 의미로 '전처리기'라고 한다. 이 전처리기를 사용하여 <stdio.h>라는 헤더파일을 불러와 이 소스파일에 포함하겠다라는 뜻이다.

<stdio.h>는 헤더파일로 이 헤더파일 안에는 파일입출력/콘솔화면 입출력/파일구조체/문자입출력 등 다양한 입력 및 출력에 관련된 기능들이 들어있다.

이걸로 인해 우리가 사용하는 printf() 등의 출력함수를 사용할 수 있다.

 

2) 변수 선언 

main함수 작성 후

int n=0, max=0, min=100;    //n 입력받은 점수를 저장할 변수 

   //max, min 최고, 최저점수를 저장할 변수 

int score[5]={ 0 };               //점수대별 학생수를 셀 배열변수

char m[][10] = { "90점 이상", "80점 대", "70점 대", "60점 대", "60점 미만" };//출력을 위하여 변수로 지정

 

3) 입력 및 계산

printf("점수 입력 : ");    //출력

 

출력을 위해 printf() 작성 후

 

while(1){    //사용자가 원하는 만큼 점수를 입력받기 위해 반복

scanf("%d", &n);    //변수 n에 점수 입력

if (n < 0) { break; }    //만약 n이 0보다 작으면 break;

switch (n / 10) {        //n을 입력받고 n을 10으로 나눈 수가

case 10: case 9: score[0]++; break;    //10 또는 9이면 score[0]을 1 증가 //90점 이상

case 8: score[1]++; break;               //8이면 score[0]을 1 증가    //80점 대

case 7: score[2]++; break;               //7이면 score[0]을 1 증가    //70점 대

case 6: score[3]++; break;               //6이면 score[0]을 1 증가    //60점 대

default: score[4]++; break;              //그 이외의 수이면 score[0]을 1 증가    //60점 미만

 

}

if (n > max) { max = n; };    //만약 n이 max보다 크면 max에 n 대입

if (n < min) { min = n; }     //만약 n이 min보다 작으면 min에 n 대입

}

 

4) 출력

for (int i = 0; i < sizeof(score) / sizeof(int); i++) { //sizeof(score) : int형 4bytes * score 배열의 방 개수 5

//크기 20   // 20 / 4 == 5     //5번 반복

printf("%s : ", m[i]);    //문자로 지정해둔 배열함수를 통해 점수대 출력

for (int j = 0; j < score[i]; j++) {    //score[i] : 점수대별 학생수만큼 반복

printf("*");    //학생수만큼 '*' 출력

}

printf("\n");    //줄바꿈

}

printf("최고점수 : %d\n", max);    //최고점수 출력

printf("최저점수 : %d\n", min);    //최저점수 출력

 

이걸로 수행평가 1번 문제 끝~

댓글