반응형
문제 출처 : 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로 잘못 쓴걸 찾지를 못하겠다...
반응형