(정리용)
구조체는 java 언어의 클라스랑 비슷한 것 같다.
"제대로 배우는 c언어 프로그래밍" 책의 구조체 단원 문제 중 " 학생 성적 처리 " 부분이 있어서 이 부분을 코드로 짜봤다.
이 코드를 짜보면서 구조체 영역에서 "구조체 포인터 배열" 부분을 연습하려고 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct st {
char hakbun[12]; //구조체 학번
char name[10]; //이름
int kor, eng, math, tot;//국어,영어,수학,합계
double avg; //평균
}ST;
void printinfo1(void);
void printinfo2(void);
void printinfo3(ST s[],int n);
int main(void)
{
ST temp;
int i;
int num; //성적 처리할 학생 수
ST students[100]; //구조체 ST형 배열 선언
printinfo1();
printf("성적 처리할 학생들이 몇명입니까== ");
scanf("%d", &num);
for (i = 0; i < num; i++)
{
printf("%d번째 학생의 학번을 입력하고 Enter를 누르세요= ",(i+1)); //학번 입력
scanf("%s", students[i].hakbun);
printf("%d번째 학생의 이름을 입력하고 Enter를 누르세요= ", (i + 1));//이름 입력
scanf("%s", students[i].name);
printf("국어 점수를 입력하고 Enter를 누르세요= ");//국어 점수 입력
scanf("%d", &students[i].kor);
printf("영어 점수를 입력하고 Enter를 누르세요= ");//영어 점수 입력
scanf("%d", &students[i].eng);
printf("수학 점수를 입력하고 Enter를 누르세요= ");//수학 점수 입력
scanf("%d", &students[i].math);
}
printinfo2();
for (i = 0; i < num; i++)
{
students[i].tot = (students[i].kor + students[i].eng + students[i].math); //tot 멤버 정의
}
//선택 정렬 (총점이 높은 순)
for (int n = 0; n < num - 1; n++)
{
for (int j = n + 1; j < num; j++)
{
if (students[n].tot < students[j].tot)
{
temp = students[n];
students[n] = students[j];
students[j] = temp;
}
}
}
//평균 높은 순으로 출력
printinfo3(students,num);
return 0;
}
void printinfo1(void)
{
printf("----------------------------------------------------------------------------------------------------------\n");
printf(" 성적 처리 프로그램입니다. \n");
printf("----------------------------------------------------------------------------------------------------------\n");
}
void printinfo2(void)
{
printf(" 성적 처리<등수순> \n");
printf("----------------------------------------------------------------------------------------------------------------\n");
printf("학번 이름 국어 영어 수학 총점 평균\n");
printf("----------------------------------------------------------------------------------------------------------------\n");
}
void printinfo3(ST s[],int n)
{
for (int i = 0; i < n; i++)
{
printf("%s %s %d %d %d %d %4.2f\n", s[i].hakbun, s[i].name, s[i].kor, s[i].eng, s[i].math, s[i].tot, s[i].tot / 3.0);
}
}
최대한 main() 함수에는 간단히 구조를 파악할 수 있도록 새로운 함수를 썼다.
'c' 카테고리의 다른 글
[c언어/열혈 c프로그래밍] p.83 문제 04-2 <데이터 표현의 이해> (0) | 2023.08.03 |
---|---|
[c언어/열혈 c프로그래밍] p.82 문제 04-1 <진법의 이해> (0) | 2023.08.03 |
[자료구조]LinearSearch.c 와 BinarySearch.c 의 코드와 시간복잡도 (0) | 2023.03.23 |
[c/c++] 문자열 정의 : 1)포인터 2)배열 (0) | 2023.03.04 |
[git 파일 올리기 에러] See the 'Note about fast-forwards' in 'git push --help' for details. (깃 에러/ 깃 커밋 에러) (0) | 2023.03.01 |