티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | //c 라이브러리 입니다. //입출력에관한 유용한 함수들이 있습니다. #include <stdio.h> //C에는 bool 타입이 없습니다 //C99 부터 추가된 bool 변수가있는 라이브러리입니다 //bool 변수를 선언해주기위해서 stdboo.h 라이브러리를 추가합니다. #include <stdbool.h> //학생들의 점수를 관리하는 프로그램을 짜보겠습니다. //이름 수학 영어 국어 점수를 입력받아서 저장한후 //평균을 구해서 내림차순으로 정렬이 되게하겠습니다. //등급을 A B C 로 나누고 D부터 탈락으로 하겠습니다. //총 학생의 수는 5명으로 하겠습니다 //학생을 저장할 배열의 크기 입니다 #define SIZE 5 //이름의 크기를 저장할 배열의 크기 입니다 #define NAME_SIZE 20 //학생들의 정보를 저장하고있을 구조체 입니다. //typedef로 이름을 변경해주겠습니다 //C의 구조체는 C++와 다르게 //구조체 내부에서 변수를 초기화하거나 함수를 선언/정의 할수없습니다. typedef struct _tagStudent { //이름을 저장할 배열 char strName[NAME_SIZE]; //수학점수 int iMath; //영어 점수 int iEnglish; //국어점수 int iKorean; //평균 float fAvg; //등급 char cGrade; //통과판정 변수 bool bPass; //통과출력 변수 const char* strPass; }STUDENT, *PSTUDENT; //학생 5명을 전역 변수로 선언하겠습니다. STUDENT g_tStudentArr[SIZE] = { 0 }; //배열의 현재 인덱스를 저장하는 변수 입니다. int g_iIndex = 0; //학생들의 정보를 추가하는 함수 입니다. void Insert(); //실행하면 학생들의 점수를 토대로 등급을 매겨줍니다 void Grade(); //실행하면 학생들의 등급을 보고 패스여부를 결정지어 줍니다 void Pass(); //내림자순으로 정렬할 정렬 함수 입니다. void Sort(); //학생들의 찾아내서 보여줍니다올 나타냅니다 void Search(int index); //학생들을 출력해줍니다 void List(); //메인함수 입니다. int main() { //Insert 함수를 실행합니다 for (int i = 0; i < SIZE; ++i) { printf("%d. ", i+1); Insert(); } //학생들을 출력합니다 List(); return 0; } // 메인함수의 종료 //구현부 입니다 void Insert() { //입력을 추가하기전 학생의 목록이 만땅이면 함수를 탈출합니다 if (g_iIndex >= SIZE) { printf("학생을 더이상 추가할수 없습니다.\n"); return; } //지역번수를 선언해줍니다 PSTUDENT pStudent = g_tStudentArr; int* const pIndex = &g_iIndex; const int iIndex = *pIndex; //이름을 입력 받습니다. printf("학생의 이름을 입력하세요. \n"); scanf("%s", &pStudent[iIndex].strName); //수학점수를 입력받습니다. printf("수학점수를 입력하세요. \n"); scanf("%d", &pStudent[iIndex].iMath); //영어점수를 입력받습니다. printf("영어점수를 입력하세요. \n"); scanf("%d", &pStudent[iIndex].iEnglish); //국어점수를 입력받습니다. printf("국어점수를 입력하세요. \n"); scanf("%d", &pStudent[iIndex].iKorean); //평균을 계산합니다 pStudent[iIndex].fAvg = (pStudent[iIndex].iMath + pStudent[iIndex].iEnglish + pStudent[iIndex].iKorean) / 3.f; //등급함수를 실행해서 학생들의 등급을 매깁니다 Grade(); //패스 여부를 판단해주는 함수입니다 Pass(); //모든 입력이 완료되면 인덱스를 1개 추가해줍니다 ++*pIndex; //정렬을 해주는 함수입니다. Sort(); } void Grade() { //지역번수를 선언해줍니다 PSTUDENT pStudent = g_tStudentArr; const int iIndex = g_iIndex; const float fAvg = pStudent[iIndex].fAvg; if (fAvg >= 90.f) pStudent[iIndex].cGrade = 'A'; else if (fAvg >= 80.f) pStudent[iIndex].cGrade = 'B'; else if (fAvg >= 70.f) pStudent[iIndex].cGrade = 'C'; else if (fAvg >= 60.f) pStudent[iIndex].cGrade = 'D'; else pStudent[iIndex].cGrade = 'F'; } void Pass() { //지역번수를 선언해줍니다 PSTUDENT pStudent = g_tStudentArr; const int iIndex = g_iIndex; const char cGrade = pStudent[iIndex].cGrade; if (cGrade == 'D' || cGrade == 'F') pStudent[iIndex].bPass = false; else pStudent[iIndex].bPass = true; const bool bPass = pStudent[iIndex].bPass; switch(bPass) { case true: pStudent[iIndex].strPass = "합격"; break; case false: pStudent[iIndex].strPass = "불합격"; break; } } void Sort() { //학생배열의 주소를 저장해 둡니다. PSTUDENT pStudent = g_tStudentArr; const int iSize = g_iIndex; //임시저장 변수 STUDENT tTemp = { 0 }; //정렬검사를 시작합니다 //제일 처음과 마지막에서 - 1 까지 검사합니다 for (int i = 0; i < iSize - 1; ++i) { for (int j = i + 1; j < iSize; ++j) { //앞에 학생의 평균이 뒤에 학생의 평균보다 작으면 서로 바꿉니다 //내림차순 정렬 if (pStudent[i].fAvg < pStudent[j].fAvg) { tTemp = pStudent[i]; pStudent[i] = pStudent[j]; pStudent[j] = tTemp; } } } } void Search(int index) { //학생배열의 주소를 저장해 둡니다. const PSTUDENT pStudent = g_tStudentArr; const int iIndex = index; printf("이름 : %s\t수학 : %d\t영어 : %d\t국어 : %d\t평균 : %.2f\t등급 : %c\t결과 : %s\n", pStudent[iIndex].strName, pStudent[iIndex].iMath, pStudent[iIndex].iEnglish, pStudent[iIndex].iKorean, pStudent[iIndex].fAvg, pStudent[iIndex].cGrade, pStudent[iIndex].strPass); } void List() { const int iSize = g_iIndex; printf("================ 학 생 기 록 부 ================\n"); for(int i = 0; i < iSize;++i) { Search(i); } printf("================================================\n"); } | cs |
프로그램 작성후 느낀점
문자열을 입력력받을때
사용자가 엉뚱한 값을 입력할때 예외처리에 대비하는
코드를 강화하는게 좋을것 같습니다.
'C > Console' 카테고리의 다른 글
유클리드 호제법 N개의 정수 최대공약수 구하기 (0) | 2018.11.12 |
---|---|
1부터 N까지의 곱을 구하는 수 (0) | 2018.11.12 |
10개의 원소를 입력받아 정렬한뒤 출력 (0) | 2018.11.10 |
소인수분해 프로그램 (0) | 2018.11.10 |
소수 찾는 검색기 (0) | 2018.11.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gettext
- scanf()
- SCSS @for
- 도매인 가격비교
- C++
- Generic()
- CSS 슬라이더
- HTML
- responsive slider
- #C
- scss slider
- Visual Studio 2017
- fyling fly
- stdarg.h
- wxWidgets
- 1000 자리 계산기
- flying bee
- .editorconfig
- JS
- 도메인 가격비교
- #비주얼스튜디오
- slider
- _Generic()
- CSS
- xgettext
- dropdown list
- C
- css slider
- 오류
- C11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함