소프트웨어학과 2018106041 정민석

학생들의 정보를 관리하기 위한 프로그램을 만드려고 한다. 학생마다 이름(name), 학번(ID), 학기(semester), 수강과목(class_name)을 멤버로 가지는 STUDENT 구조체를 정의한다. 이 때, 학생 목록과 정보는 다음과 같다.

초기표.PNG

Problem #1

STUDENT 구조체 배열을 선언하고, 위에서 제시된 학생 정보를 이용해 초기화한 다음 (위의 순서 그대로 초기화 할 것), 전체 학생 목록을 학기별로 오름차순으로 출력하는 print_student_list 함수를 구현한 후 이를 이용하여, 실행 결과를 출력하세요. 이 때, 번호(순서대로),이름, 학번, 학기, 수강과목이 차례로 출력되게 한다.

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

struct STUDENT{
    char name[20];
    char id[20];
    int semester;
    char class_name[20];
} ;

void print_student_list(struct STUDENT *ptr,int size){
    printf("번호    이름       학번         학기       수강과목\\n");
    for(int i=0;i<size;i++) {
        printf("%d번 : %-10s %-15s %-10d %-10s\\n",i+1,ptr[i].name,ptr[i].id,ptr[i].semester,ptr[i].class_name);
    }
};

int main() {
    struct STUDENT students[]={
            {"Minsu","2021001",2,"class1"},
            {"Ayoung", "2021015", 2, "class2"},
            {"Jihoon", "2018016", 8, "class5"},
            {"Minsu", "2020013", 4, "class5" },
            {"Sojung", "2021033", 2, "class3"},
            {"Eunmi", "2019010", 3, "class4"},
            {"Eunmi", "2018022", 5, "class1"},
            {"Heejoon", "2018001", 7, "class4"}
    };

    //1,2,3번 모두 학기별로 오름차순 정렬된 STUDENT 배열이 필요하기 때문에 먼저 정렬을 함
    struct STUDENT *ptr1=students;
    int size=sizeof(students)/sizeof(struct STUDENT);
    int idx=0;
    struct STUDENT sortedStudents[size];
    int maxSemester=-1; //가장 학기가 큰 경우를 구하기 위한 최소값 선언
    for(int i=0;i<size;i++){
        if(maxSemester<ptr1[i].semester) maxSemester=ptr1[i].semester;
    }

    for(int semester=1;semester<=maxSemester;semester++) {
        for (int i = 0; i < size; i++) {
            if (semester == ptr1[i].semester) sortedStudents[idx++] = ptr1[i];
        }
    }

		struct STUDENT *ptr2=sortedStudents; // 정렬된 학생 포인터

//  #Problem 1
		printf("\\nProblem 1\\n");
    print_student_list(ptr2,size);
return 0;
}

작성과정

라이브러리 include

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

STUDENT 구조체 선언

struct STUDENT{
    char name[20];
    char id[20];
    int semester;
    char class_name[20];
} ;

print_student_list 함수

  1. STUDENT 구조체 포인터, 학생수 size를 파라미터로 받음