Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 구조체(Structure)를 활용해 이름을 알파벳 순으로 정렬하는 프로그램

구조체(Structure)는 서로 다른 자료형의 변수들을 하나의 이름 아래 묶어 놓은 집합체입니다.

구조체의 특징

C 프로그래밍 언어에서 구조체가 가지는 주요 특징은 다음과 같습니다.

  • 대입 연산자(=)를 사용하면 서로 다른 자료형을 포함한 구조체의 모든 멤버 값을 같은 타입의 다른 구조체 변수에 한 번에 복사할 수 있습니다.
  • 복잡한 자료형을 처리할 때는 구조체 안에 또 다른 구조체를 정의하는 것이 유용하며, 이를 중첩 구조체(nested structure)라고 합니다.
  • 구조체 전체, 구조체의 개별 멤버, 그리고 구조체의 주소를 함수에 전달할 수 있습니다.
  • 구조체 포인터를 생성할 수도 있습니다.

구조체의 선언과 초기화

구조체 선언의 일반적인 형식은 다음과 같습니다.

struct tagname{
    datatype member1;
    datatype member2;
    datatype member n;
};

여기서 각 요소의 의미는 다음과 같습니다.

  • struct: 구조체를 정의할 때 사용하는 키워드입니다.
  • tagname: 구조체의 이름을 지정합니다.
  • member1, member2: 구조체를 구성하는 데이터 항목들입니다.

예시:

struct book{
    int pages;
    char author[30];
    float price;
};

프로그램 코드

다음은 구조체를 활용하여 이름을 알파벳 순서로 정렬하는 C 프로그램입니다.

#include<stdio.h>
#include<string.h>
struct tag{
    char name[10];
    int rno;
};
typedef struct tag node;
node s[5];
sort(int no){
    int i,j;
    node temp;
    for(i=0;i<no-1;i++)
    for(j=i+1;j<no;j++)
    if(strcmp(s[i].name,s[j].name)>0){
        temp=s[i];
        s[i]=s[j];
        s[j]=temp;
    }
}
void main(){
    int no,i;
    fflush(stdin);
    printf("Enter The Number Of Students:");
    scanf("%d",&no);
    for(i=0;i<no;i++){
        printf("Enter The Name:");
        fflush(stdin);
        gets(s[i].name);
        printf("Enter the Roll:");
        scanf("%d",&s[i].rno);
    }
    sort(no);
    for(i=0;i<no;i++){
        printf("%s\t",s[i].name);
        printf("%d\n",s[i].rno);
    }
}

코드 설명

이 프로그램은 name(이름)과 rno(롤 번호) 두 개의 멤버를 가진 tag 구조체를 정의합니다. typedef를 통해 이 구조체를 node라는 새로운 이름으로 사용할 수 있게 하며, 최대 5명의 학생 정보를 저장할 배열 s를 선언합니다.

sort 함수는 선택 정렬 방식으로 동작합니다. strcmp 함수를 이용해 두 이름을 사전순으로 비교한 뒤, 앞의 이름이 뒤의 이름보다 크면(즉, 알파벳 순서상 나중에 오면) 두 구조체 변수의 내용을 서로 교환(swap)합니다. 비교 대상이 문자열이므로 반드시 string.h 헤더 파일을 포함해야 합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter The Number of Students:5
Enter The Name:Priya
Enter the Roll:3
Enter The Name:Hari
Enter the Roll:5
Enter The Name:Pinky
Enter the Roll:7
Enter The Name:Lucky
Enter the Roll:1
Enter The Name:Krishna
Enter the Roll:2
Hari 5
Krishna 2
Lucky 1
Pinky 7
Priya 3

정리

입력된 순서와 무관하게 학생 이름이 Hari → Krishna → Lucky → Pinky → Priya 순으로 알파벳 순서에 맞게 정렬되어 출력되는 것을 확인할 수 있습니다. 롤 번호는 각 학생과 함께 그대로 유지됩니다. 이처럼 구조체를 사용하면 이름과 번호처럼 서로 다른 자료형의 관련 데이터를 하나의 단위로 묶어 함께 정렬하고 관리할 수 있습니다.