연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH6 (7,11,12)

라이피 (Lypi) 2018. 5. 12. 20:19
반응형

문제 출처 : YES C (정보공학연구소/생능출판사)


1~10번까지는 7번을 제외하면 너무 단순한 문제라 생략...


7. 문자기반배열 stuff에 문자열 "Welcome"을 할당하라. (단, 선언시가 아님)

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

int main(void)
{
	char stuff[10];

	strcpy_s(stuff,"Welcome");

	printf("%s", stuff);
}

//별건 아니고 이제는 strcpy가 아닌 strcpy_s를 써야한다는 정도


11. for루프를 이용하여 5개의 문자를 scanf를 사용해서 받아 문자기반배열 words에 저장하는 프로그램을 작성하라.

int main(void)
{
	char words[5];

	for (int i = 0; i < 5; i++) {
		printf("%d번째 문자를 입력하세요",i+1); scanf_s("%c", &words[i], sizeof(char));
		while (getchar() != '\n') {}
	}

	for (int i = 0; i < 5; i++) {
		printf("words[%d] = %c \n", i, words[i]);
	}
}

//버퍼는 항상 비워줘야한다.


12. 점수를 입력받고 (0~100점 사이) 이를 5점 간격의 그래프로 표시하라. 

(-1이 입력되면 점수 입력을 종료하고, 59점 이하는 같은 것으로 취급할 것.)

//실제 문제에서는 ctrl+z를 입력받을시 종료하도록 되어있는데 ctrl+z입력이 정의되어 있지 않은 동작이라는 설명을 보고 패스함.

#include <stdio.h>

int main(void)
{
	int score[30] = { 0, };
	int graph[9] = { 0, }; //0으로 초기화
	int i;

	printf("최대 30명의 점수를 입력받습니다.\n");
	printf("0~100점 사이로 입력하시고, 입력을 중단하고 싶으면 -1을 입력하세요. \n");

	for (i = 0; i < 30; i++) {
		printf("%d번째 점수를 입력하세요 :", i + 1);  scanf_s("%d", &score[i]);
		if (score[i] == -1) { break; }
		if (score[i] < 0 || score[i] > 100) {
			printf("점수 범위가 잘못되었습니다.\n");
			i--;
			continue;
		}
	}

	for (int j = 0; j < i; j++) {
		if ((score[j] / 5) < 11) {
			graph[0]++;
		}
		else if ((score[j]/5) == 20) {
			graph[8]++;
		}
		else {
			graph[(score[j] / 5) - 11]++;
		}
	}

	for (int j = 0; j < 9; j++) {
		if (j == 0) {
			printf(" 60점 ~  0점 : ");
		}
		else if (j == 8) {
			printf("100점 ~ 95점 : ");
		}
		else {
			printf("%3d점 ~ %2d점 : ", j * 5 + 60, j * 5 + 56);
		}

		for (int k = 0; k < graph[j]; k++) {
			printf("■");
		}
		printf("\n");
	}
}

//아무래도 반복문 제어 문자로 i와 j를 쓰는 것을 i와 다른 걸로 바꿔야 할까보다.... j를 i로 잘못 쓴걸 찾지를 못하겠다...

반응형