[논리적 사유연습]구조체

2013. 6. 3. 10:53프로그래밍/C/C++

구조체 선언 :

struct 구조체이름{

자료형 1;

자료형 2;

자료형 3;

}변수1, 변수2, ..., 변수N;    //세미콜론이 찍혀있는 것을 유의할것

 

함수내에서의 구조체선언 : struct 구조체이름 변수명

 

구조체의 초기화 :

구조체변수 = {자료형1 변수, 자료형2 변수, 자료형3 변수};

 

구조체의 대입 :

struct 구조체이름 변수1;

struct 구조체이름 변수2;

 

변수1 = {자료형1 변수, 자료형2 변수, 자료형3 변수};

이 선언되어 있을 때

변수2 = 변수1;

이라고 해주는 것으로 구조체 변수를 모두 대입가능

 

 


//SIZE10 구조체 배열에 순차적인 id와 랜덤score값을 대입한 뒤 score를 기준으로 구조체 값을 정렬 하는 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10

//구조체 선언
struct Student {
 int id;
 double score;
};

//함수 원형 선언
void Print(struct Student data[], int size);
void Sort(struct Student data[], int size);

int main()
{
 struct Student data[SIZE];
 int i;

 //랜덤씨드값 생성 및 구조체에 값 대입
 srand((unsigned)time(0));
 for(i=0 ; i<SIZE ; i++)
 {
  data[i].id = i;
  data[i].score = (double)rand()/RAND_MAX*100;
 }

 Print(data, SIZE);
 Sort(data, SIZE);
 Print(data, SIZE);

 return 0;
}

//구조체의 값을 출력
void Print(struct Student data[], int size)
{
 int i;

 for(i=0 ; i<size ; i++)
 {
  printf("id : %d score : %5.2lf\n" ,data[i].id, data[i].score);
 }
 printf("\n");
}

//구조체의 score를 기준으로 정렬
void Sort(struct Student data[], int size)
{
 int i, k;
 struct Student t;

 for(i=1 ; i<size ; i++)
 {
  t = data[i];
  for(k=i-1 ; k>=0 ; k--)
  {
   if(t.score < data[k].score)
   {
    data[k+1] = data[k];
   }
   else
    break;
  }
  data[k+1] = t;
 }
}