Language/C

[포스코 AI·Big Data 아카데미 사전학습] 컴퓨터 공학 입문 1-8_②배열과 구조체

inji_ 2023. 6. 10. 13:42

1-8 배열과 구조체

  ②  배열과 구조체

 

    •  사용자 정의 자료형 배열(arrays)이란?

      - 기본적인 자료형 (int, float, char 등)으로는 자료의 선언과 저장에 한계가 있음.

      - 사용자가 직접 자료형을 만들어 문제를 해결하고자 함.

 

    •  구조체 정의  

      - 동일한 자료형의 데이터를 여러 개 저장할 수 있는 배열과 다르게

        서로 다른 자료형을 가진 데이터를 함께 저장할 수 있게 한다. 

      - 다양한 자료형의 연관된  data 묶어서 사용할 수 있도록 사용자 정의형을 

        만드는 것을 구조체라고 한다.

Struct stu
{
  int ID;
  float eng,math;
  char grade;
  };

    •  구조체 변수 선언  

      -  구조체 정의 후, 구조체 자료형을 사용하여 변수 선언함.

      -  typedef를 사용하여 구조체 자료형을 struct stu --> stu 로 바꿀 수 있음.

struct stu
{
  int ID;
  float eng,math;
  char grade;
  };
  
  struct stu s1;
  
  typedef struct stu stu;
  stu s2;

    •  구조체 예시

      - "." 연산자를 사용하여 구조체 멤버에 접근한다.

      - 평균과 학점 구하기 예시

#include<stdio.h>
#define MAX 3

struct stu
{
	int ID;
	float kor, eng, math;
	float avrg;
	char grade;
};

int main(void)
{       /*구조체 선언*/
	struct stu s[MAX];
	
	float korsum=0, engsum=0, mathsum=0;

        /*점수 입력*/
	printf("학번, 점수(국어, 영어, 수학)를 입력하세요.\n");
	for(int i=0; i<MAX;i++)
	{ scanf("%d %f %f %f", &s[i].ID, &s[i].kor, &s[i].eng, &s[i].math); //scanf에서는 \n 넣으면 안됨 
	}
	
	/*입력된 점수 확인*/
	printf("ID 및 점수 확인\n");

	for (int i=0;i<MAX;i++)
	{ printf("%d %5.2f %5.2f %5.2f\n", s[i].ID, s[i].kor, s[i].eng,s[i].math);
	}	
	
	/*평균값 및 점수 구하기*/
	for(int i=0; i<MAX;i++)
	{s[i].avrg=(s[i].kor+s[i].eng+s[i].math)/3;
	
	korsum+=s[i].kor;
	engsum+=s[i].eng;
	mathsum+=s[i].math;
	
	
	if(s[i].avrg>=90)
	s[i].grade ='A';

	else if(s[i].avrg>=80)
	s[i].grade ='B';
	
	else if(s[i].avrg>=70)
	s[i].grade ='C';
	
	else if(s[i].avrg>=60)
	s[i].grade ='D';
	
	else
	s[i].grade ='F';
	}
	
	/*학번, 평균점수, 학점 확인*/
	printf("\n성적\n");
	for(int i=0; i<MAX; i++)
	{printf("학번: %d 평균 점수: %5.2f 학점: %c\n", s[i].ID,s[i].avrg,s[i].grade);
	}

        /*이 수업의 평균*/
	printf("\n전체 평균\n");
	printf("%5.2f %5.2f %5.2f\n",korsum/MAX,engsum/MAX,mathsum/MAX);
	printf("\n한 학기 동안 수고하셨습니다. 즐거운 방학 보내시길 바라겠습니다.\n");
}