본문 바로가기
프로그래밍/C

사용자 정의 자료형 - 예제 모음

by 길냥이 2025. 6. 17.

목차

  1. 구조체로 만드는 책
  2. 구조체 비교
  3. 이메일 메세지

 

1. 구조체로 만드는 책

한번 구조체로 책을 만들어 봅시다.

 

책에 대한 정보는 제목, 저자, 출판연도, 평점 등으로 구성됩니다.

구조체 book를 선언하고, printf로 출력해보세요.

 

입출력

{총, 균, 쇠, Jared Diamond, 1997, 9.80}

물론 다른 책을 사용해도 됩니다.

 

정답은 다음과 같아요.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

//구조체 변수 정의
struct book
{
	char name[100];
	char author[100];
	int date;
	float stats;
};

int main(void)
{
	//구조체 변수 선언과 동시에 초기화
	struct book b1 =
	{
		"총, 균, 쇠",
		"Jared Diamond",
		1997,
		9.8
	};
	 
	//구조체의 각 멤버 출력
	printf("{%s, %s, %d, %.2f}", b1.name, b1.author, b1.date, b1.stats);

	return 0;
}

2. 구조체 비교

위 문제에서 정의한 구조체가 하나 있어요.

구조체를 하나 더 만들고, 이 구조체 2개를 받아서 책의 저자를 비요하는 함수 author_e를 만들고 해봅시다.

구조체는 보낼 때 구조체 전부가 복사되는걸 기억하세요.

 

함수원형은 다음과 같아요.

void author_e(struct book, struct book);

 

문자열을 비교할 때는 string.h 라이브러리의 strcmp를 사용합시다.

 

입출력

{총, 균, 쇠, Jared Diamond, 1997, 9.80}
{문명의 붕괴, Jared Diamond, 2004, 9.50}
두 책의 저자는 같습니다.

 

정답은 다음과 같아요.

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

// 구조체 변수 정의: 책 정보를 저장하는 구조체
struct book
{
	char name[100];    // 책 제목
	char author[100];  // 저자 이름
	int date;          // 출판 연도
	float stats;       // 평점 또는 점수
};

// 두 책의 저자명을 비교하는 함수 선언
void author_e(struct book, struct book);

int main(void)
{
	// 구조체 변수 선언과 동시에 초기화
	struct book b1 =
	{
		"총, 균, 쇠",        // 제목
		"Jared Diamond",    // 저자
		1997,               // 출판 연도
		9.8                 // 평점
	};

	struct book b2 =
	{
		"문명의 붕괴",       // 제목
		"Jared Diamond",    // 저자
		2004,               // 출판 연도
		9.5                 // 평점
	};

	// 각각의 책 정보를 출력
	printf("{%s, %s, %d, %.2f}\n", b1.name, b1.author, b1.date, b1.stats);
	printf("{%s, %s, %d, %.2f}\n", b2.name, b2.author, b2.date, b2.stats);

	// 두 책의 저자가 같은지 비교하는 함수 호출
	author_e(b1, b2);

	return 0;
}

// 두 책의 저자를 비교하는 함수
void author_e(struct book b1, struct book b2)
{
	// strcmp 함수는 두 문자열이 같으면 0을 반환
	if (strcmp(b1.author, b2.author) == 0)
	{
		printf("두 책의 저자는 같습니다.\n");  // 같을 경우 출력
	}
	else
	{
		printf("두 책의 저자는 다릅니다.\n");  // 다를 경우 출력
	}
}

 

3. 이메일 메세지

이번에도 구조체를 사용해 이메일을 표현해 봅시다.

이메일은 제목(tilte), 수신자와 발신자(sender, receiver), 내용(content), 날짜(date)로 구성되어 있습니다.

나머지는 전부 char 배열로 받고, 날짜만 int형으로 받아봅시다.

 

다만 이번에는 strcpy를 사용해 봅시다.

 

입출력

제목: 회의 공지
보낸사람: manager@example.com
받은사람: player@example.com
내용: 내일 오전 10시에 회의 예정입니다.
날짜: 2025/04/20

물론 내용은 달라져도 상관없어요.

 

정답은 다음과 같습니다.

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

// 이메일 정보를 담는 구조체 정의
struct email
{
	char title[100];     // 이메일 제목
	char sender[50];     // 보내는 사람 이메일 주소
	char receiver[50];   // 받는 사람 이메일 주소
	char content[500];   // 이메일 본문 내용
	int date;            // 날짜 정보 (형식: YYYYMMDD)
};

int main(void)
{
	struct email e1;  // 구조체 변수 e1 선언

	// 구조체의 각 멤버에 값 대입
	strcpy(e1.title, "회의 공지");                           // 제목 설정
	strcpy(e1.sender, "manager@example.com");               // 보낸 사람 설정
	strcpy(e1.receiver, "player@example.com");              // 받은 사람 설정
	strcpy(e1.content, "내일 오전 10시에 회의 예정입니다."); // 내용 설정
	e1.date = 20250420;                                     // 날짜 설정 (정수로 저장)

	// 날짜 분리: 연도, 월, 일
	int year = e1.date / 10000;           // 앞의 4자리 → 연도 추출 (예: 2025)
	int mon = (e1.date / 100) % 100;      // 중간 2자리 → 월 추출 (예: 04)
	int day = e1.date % 100;              // 마지막 2자리 → 일 추출 (예: 20)

	// 구조체 정보 출력
	printf("제목: %s\n", e1.title);                          // 제목 출력
	printf("보낸사람: %s\n", e1.sender);                     // 보낸 사람 출력
	printf("받은사람: %s\n", e1.receiver);                   // 받은 사람 출력
	printf("내용: %s\n", e1.content);                        // 내용 출력
	printf("날짜: %04d/%02d/%02d\n", year, mon, day);        // 날짜 출력 (형식: YYYY/MM/DD)

	return 0;
}

 

4. 복소수 계산

구조체를 이용해서 복소수 2개를 정의하고, 이 복소수를 합산해 봅시다.

함수를 이용해서 덧셈을 수행하세요.

struct N 함수명(struct N1, struct N2..);를 이용하면 구조체를 함수의 반환형과 매개변수로 사용할 수 있습니다.

 

입출력

1.00 + 3.00i
4.00 + 7.00i
5.00 + 10.00i

 

정답은 다음과 같아요.

#include <stdio.h>

// 복소수를 표현할 구조체 정의
struct complex
{
    double real;  // 실수부
    double imag;  // 허수부
};

// 두 개의 복소수를 더하는 함수의 선언
struct complex sum(struct complex com1, struct complex com2);

int main(void)
{
    // 복소수 com1 = 1.00 + 3.00i
    struct complex com1 = { 1.00, 3.00 };

    // 복소수 com2 = 4.00 + 7.00i
    struct complex com2 = { 4.00, 7.00 };

    // com1과 com2를 더한 결과를 ret에 저장
    struct complex ret = sum(com1, com2);

    // 각각의 복소수를 출력 (실수부 + 허수부 i 형태)
    printf("%.2f + %.2fi\n", com1.real, com1.imag);  // 1.00 + 3.00i
    printf("%.2f + %.2fi\n", com2.real, com2.imag);  // 4.00 + 7.00i
    printf("%.2f + %.2fi\n", ret.real, ret.imag);    // 5.00 + 10.00i

    return 0;
}

// 두 복소수를 더해서 결과를 반환하는 함수 정의
struct complex sum(struct complex com1, struct complex com2)
{
    struct complex temp;

    // 실수부끼리 더함
    temp.real = com1.real + com2.real;

    // 허수부끼리 더함
    temp.imag = com1.imag + com2.imag;

    // 더한 결과를 반환
    return temp;
}

'프로그래밍 > C' 카테고리의 다른 글

파일 입출력 - 예제 모음  (0) 2025.06.30
포인터 - 예제 모음  (0) 2025.06.17
변수의 영역과 데이터 공유 - 예제 모음  (0) 2025.06.17
동적 할당 메모리  (0) 2025.06.14
전처리 지시자  (0) 2025.06.14