본문 바로가기

C\C++

구조체 문제

개요

구조체를 이용하여 복소수를 다음과 같이 정의하고 복소수의 덧셈을 수행하는 함수를 작성하고 테스트하시오.

Code

#include<stdio.h>


typedef struct complex{
	double real;
	double imag;
}Com_s;

Com_s com_add(Com_s c1, Com_s c2);

int main(void)
{
	Com_s c1, c2, res;
	printf("Input 1st complex No.  : ");
	scanf_s("%lf %lf",&c1.real,&c1.imag);
	printf("Input 2nd complex No.  : ");
	scanf_s("%lf %lf", &c2.real, &c2.imag);
	res = com_add(c1,c2);
	printf("Result : %0.2lf %c %0.2lfi", res.real,(res.imag<0)?'-':'+',res.imag);

	return 0;
}

Com_s com_add(Com_s c1, Com_s c2)
{
	Com_s res;
	res.real = c1.real + c2.real;
	res.imag = c1.imag + c2.imag;
	return res;
}

Output


개요

각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다. 각각의 식사 코스에서 등장하는 음식들을 구조체의 배열로 표현하고 각 식사 코스의 전체 칼로리를 계산히는 프로그램을 작성하라.

 


Code

#include<stdio.h>

#define C_NO 3

typedef struct food {
	char name[100];
	int calories;
}f_s;

int sumCal(f_s couse[], int index);
void printCours(f_s couse[], int index);

int main(void)
{
	int iSumCal = 0;
	f_s fCours[C_NO] = { {"food1",350},{"food2",530 },{"food3",620} };
	printCours(fCours, C_NO);
	printf("총 %d 칼로리 입니다.", sumCal(fCours, C_NO));
	
	return 0;
}

int sumCal(f_s couse[], int index)
{
	int iSum = 0;
	for (int i = 0; i < index; i++) {
		iSum += couse[i].calories;
	}
	return iSum;
}

void printCours(f_s couse[], int index)
{
	for (int i= 0;i<index;i++)
	{
		printf("%s : %d cal\n", couse[i].name, couse[i].calories);
	}
}

Output


개요

전화번호부를 구성하기 위하여 이름, 집전화번호, 휴대폰 번호로 구성되는 구조체를 정의한 후에 이 구조체의 배열을 선언하여 전화번호부를 구성한다. 5명의 데이터를 사용자로부터 받아서 저장하여 보라, 사용자로부터 이름을 입력받아서 전화번호를 검색하는 프로그램을 작성하라.

Code

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

#define U_SIZEOF (unsigned)sizeof
#define PB_SIZE 5

typedef struct PhoneBook {
	char name[20];
	char homePhone[20];
	char cellPhone[20];
}pb_t;

void input_pb(pb_t arr_pb[]);
void search_pb(pb_t arr_pb[]);

int main(void)
{
	pb_t arrPB[PB_SIZE] = { 0 };
	input_pb(arrPB);
	search_pb(arrPB);
	return 0;
}

void input_pb(pb_t arr_pb[])
{
	for (int i = 0; i < PB_SIZE; i++) {
		printf("이름 : ");
		scanf_s("%s", &arr_pb[i].name, U_SIZEOF(arr_pb->name));
		printf("집전화 : ");
		scanf_s("%s", &arr_pb[i].homePhone, U_SIZEOF(arr_pb->homePhone));
		printf("휴대전화 : ");
		scanf_s("%s", &arr_pb[i].cellPhone, U_SIZEOF(arr_pb->cellPhone));
		puts("========================================================");
	}
}
void search_pb(pb_t arr_pb[])
{
	char inStr[20] = { 0 };
	puts("========================================================");
	printf("검색 이름을 입력하세요 : ");
	scanf_s("%s", inStr, U_SIZEOF(inStr));
	for (int i = 0; i < PB_SIZE; i++) {
		if (strcmp(arr_pb[i].name, inStr) == 0) {
			printf("이름 : %s\n집전화 : %s\n휴대전화 : %s\n", arr_pb[i].name, arr_pb[i].homePhone, arr_pb[i].cellPhone);
		}
	}

}

Output

 


개요

삼각형, 사각형, 원을 동시에 표현할 수 있는 공용체를 설계하라. 삼각형은 밑변과 높이, 사각형은 가로와 세로, 원은 반지름만을 저장하도록 하라.
현재의 공용체가 표현하고 있는 도형의 종류는 열거형 변수를 사용하여 나타낸다.
사용자로부터 도형의 종류와 도형의 데이터를 받아서 저장하여 보자

Code

#include<stdio.h>

typedef struct shape {
	int type;
	union {
		struct { int base, height; } tri; 
		struct { int width, height; } ract;
		struct { int radius; } circ;
	} data;
}sh_t;

typedef enum typeE{tri=1,ract=2,circ=3}t_e;

sh_t input_sh(void);
void output_sh(sh_t outShape);

int main(void)
{
	sh_t shape1 = { 0 };
	shape1 =input_sh();
	output_sh(shape1);

	return 0;
}

sh_t input_sh(void)
{
	sh_t inShape = { 0 };
	printf("도형의 종류를 입력하세요(삼각형(1), 사각형(2), 원(3)) : ");
	scanf_s("%d", &inShape.type);
	switch (inShape.type)
	{
	case tri:
		printf("밑변을 입력하세요 :");
		scanf_s("%d", &inShape.data.tri.base);
		printf("높이를 입력하세요 :");
		scanf_s("%d", &inShape.data.tri.height);
		break;
	case ract:
		printf("너비를 입력하세요 :");
		scanf_s("%d", &inShape.data.ract.width);
		printf("높이를 입력하세요 :");
		scanf_s("%d", &inShape.data.ract.height);
		break;
	case circ:
		printf("반지름을 입력하세요 :");
		scanf_s("%d", &inShape.data.circ.radius);
		break;
	default:
		break;
	}
	return inShape;
}

void output_sh(sh_t outShape)
{
	switch (outShape.type)
	{
	case tri:
		printf("도형은 삼각형입니다.\n");
		printf("밑변은 %d , 높이는 %d 입니다.\n", outShape.data.tri.base, outShape.data.tri.height);
		break;
	case ract:
		printf("도형은 사각형입니다.\n");
		printf("너비은 %d , 높이는 %d 입니다.\n", outShape.data.ract.width, outShape.data.ract.height);
	case circ:
		printf("도형은 원형입니다.\n");
		printf("반지름은 %d 입니다.\n", outShape.data.circ.radius);
	default:
		break;
	}
}

Output


개요

데이터 베이스의 기능을 하는 간단한 프로그램을 작성하여 보자.
이 프로그램은 mp3와 같은 음악 파일을 관리한다. 사용자는 음악 파일을 추가, 삭제, 출력할 수 있으며 제목을 가지고 특정 곡을 탐색할 수 있다. 사용자 인터페이스는 다음과 같다

목표

===========
1. 추가
2. 출력
3. 검색
4. 종료
===========
메뉴를 선택하시오: 1
제목: My Boy Lollipop
가수: Millie Small
저장된 위치: c:\mp3\oldpop
분류(가요, 팝, 클래식, 영화음악) : 팝

Code

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

#define U_SIZEOF (unsigned)sizeof
#define STRMAX1 20
#define STRMAX2 100

typedef struct songList
{
	char songName[STRMAX1];
	char singer[STRMAX1];
	char folder[STRMAX2];
	char category[STRMAX1];
}sl_t;

enum songCategory{kpop,pop,classic,ost}st_e;

int menuPrint(void);
int songAdd(sl_t sData[], int index);
void songPrint(sl_t sData[], int size);
void songSearch(sl_t sData[], int size);

int main(void)
{
	int iSel,sizeSL=0;
	sl_t slPtr[] = { 0 };
	do {
		iSel = menuPrint();
		switch (iSel)
		{
		case 1:
			sizeSL = songAdd(slPtr,sizeSL);
		break;
		case 2:
			songPrint(slPtr,sizeSL);
			break;
		case 3:
			songSearch(slPtr,sizeSL);
			break;
		default:
			break;
		}
	} while (iSel != 4);

	return 0;
}

int menuPrint(void)
{
	int selMenu;
	puts("==============");
	puts("1. 추가");
	puts("2. 출력");
	puts("3. 검색");
	puts("4. 종료");
	puts("==============");
	printf("메뉴를 선택하시오 : ");
	scanf_s("%d", &selMenu);
	return selMenu;
}

int songAdd(sl_t sData[],int index)
{
	printf("제목 : ");
	scanf_s("%s", &sData[index].songName,U_SIZEOF(sData[index].songName));
	printf("가수 : ");
	scanf_s("%s", &sData[index].singer,U_SIZEOF(sData[index].singer));
	printf("저장된 위치 : ");
	scanf_s("%s", &sData[index].folder,U_SIZEOF(sData[index].folder));
	printf("분류(가요,팝,클래식,영화음악) : ");
	scanf_s("%s", &sData[index].category,U_SIZEOF(sData[index].category));
	return ++index;
}

void songPrint(sl_t sData[],int size)
{
	for(int cnt=0;cnt<size;cnt++){
		printf("제목 : %s\n", sData[cnt].songName);
		printf("가수 : %s\n", sData[cnt].singer);
		printf("저장된 위치 : %s\n", sData[cnt].folder);
		printf("분류(가요, 팝, 클래식, 영화음악) : %s\n", sData[cnt].category);
	}
}

void songSearch(sl_t sData[],int size)
{
	char songName[STRMAX1] = { 0 };
	printf("제목을 입력하세요 : ");
	scanf_s("%s", songName, U_SIZEOF(songName));
	for(int cnt=0;cnt<size;cnt++){
		if (strcmp(songName, sData[cnt].songName) == 0) {
			printf("제목 : %s\n", sData[cnt].songName);
			printf("가수 : %s\n", sData[cnt].singer);
			printf("저장된 위치 : %s\n", sData[cnt].folder);
			printf("분류(가요, 팝, 클래식, 영화음악) : %s\n", sData[cnt].category);
			break;
		}
	}
}

Output


 

'C\C++' 카테고리의 다른 글

포인터 문제  (0) 2022.03.02
배열 문제  (0) 2022.03.02
최대 최소 구하기(bubble sort)  (0) 2022.02.28
String 관련 예제  (0) 2022.02.27
구조체 실습과제 01  (0) 2022.02.23