728x90
반응형
구조체 (struct) : 사용자 정의 자료형
1) 필요성
학생 : 이름, 학번, 점수
char name[30]; //홍길동
int sno; //202001
int score; //100
하나의 자료형 묶어 주고 싶다.
==> 구조체
2) 선언
struct 구조체명
{
멤버1; //기본 자료형 이용
멤버2;
멤버3;
}; //세미콜론 붙임
typedef하는 형식
ex) typedef 자료형 new자료형;
typedef struct struct
{
char name[30 ];
char major[30];
int sno;
int score;
}STUDENT;
-> STUDENT std1;
| 이름 | 전공 | 학년 | 점수 |
3) 구조체 변수 선언
struct 구조체명 변수명;
ex) struct student std1; //int num;
3-1) 구조체 변수 초기화
STUDENT std1={"kim", "security", 202010, 99}; //순서대로 초기화함
struct student std1;
4) 구조체 변수 데이터 저장
std1.멤버
gets_s(input, 30); //yu gyeong
strcpy(std1.name, "홍길동"); //char str[50] = "홍길동";
strcpy(std1.major, "융합 보안");
std1.sno = 202001;
std1.score = 100;
문자열만 strcpy
5)구조체 변수 데이터 입력
scanf("%s", std1.name);
gets_s(std1.name, 30);
scanf("%d", &std1.sno);
scanf("%s %s d %d ", std1.name, std1.major, &std1.sno, &std1.score);
//문자열은 &을 안붙임
6) 구조체 출력
printf("%s %d %d %s %f", std1.name, std1.sno, std1.age, std1.major, std1.grade);
7) 구조체가 다른 구조체의 멤버로 존재하는 경우
struct Point
{
int x;
int y;
};
struct Rectangle
{
struct Point leftTop;
struct Point rightBottom;
};
struct Rectangle rec;
rec.leftTop.x = 10;
rec.leftTop.y = 20;
rec.rightBottom = 50;
rec.rightBottome = 100;
----------------------------------------------------------------ㄱ
printf("좌상단 좌표를 입력하세요");
scanf("%d %d",&rec.leftTop.x, &rec.leftTop.y);
printf("우하단 좌표를 입력하세요");
scanf("%d %d", &rec.rightBottom.x, &rec.rightBottom.y);
+ int w = rec.rightBottom.x - rec.leftTop.x;
int h = rec.rightBottom.y - rec.leftTop.y;
int area =w*h;
// (rec.rightBottom.x - rec.leftTop.x) * (rec.rightBottom.y - rec.leftTop.y);
int peri = (w+h) * 2
printf("사각형의 면적은 %d이고 둘레는 %d입니다.\n", area, peri);
8) 구조체 배열 ★★★★★
struct UnivStudent
{
char name[30];
int sno;
int age;
char major[30];
double grade;
};
//구조체 사용하여 메일 내용 출력하기
#include <stdio.h>
struct email
{
char title[30];
char receiver[30];
char sender[30];
char content[100];
char date[30];
int seq;
};
int main(void)
{
//구조체 변수선언
struct email eml;
printf("이메일 내용을 입력하시오(제목 , 수신자, 송신자 , 내용 , 날짜 , 우선순위(정수)) \n");
scanf("%s %s %s %s %s %d", &eml.title, &eml.receiver, &eml.sender, &eml.content, &eml.date, &eml.seq);
printf("받는 사람 : %s\n", eml.receiver);
printf("보내는 사람 : %s\n", eml.sender);
printf("제목 : %s\n", eml.title);
printf("내용 : %s\n", eml.content);
printf("날짜 : %s\n", eml.date);
printf("우선순위 : %d\n", eml.seq);
return 0;
}
//성적 출력하기
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
struct student {
int number;
char name[10];
double grade;
};
int main(void)
{
struct student s;
printf("학번을 입력하시오: ");
scanf("%d", &s.number);
printf("이름을 입력하시오: ");
scanf("%s", &s.name);
printf("학점을 입력하시오(실수): ");
scanf("%lf", &s.grade);
printf("학번: %d\n", s.number);
printf("이름: %s\n", s.name);
printf("학점: %f\n", s.grade);
return 0;
}
//사원 입력 후 조건 걸고 사원 리스트 출력하기
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 5
typedef struct employ
{
int sabun;
char name[10];
char phone[15];
int age;
int money;
}EMPL;
int main(void)
{
EMPL s[SIZE];
for (int i = 0; i < SIZE;i++)
{
printf("사원번호 이름 전화번호 나이 급여를 입력하시오.\n");
scanf("%d %s %s %d %d", &s[i].sabun, s[i].name, s[i].phone, &s[i].age, &s[i].money);
//문자열은 &적지 않아도 됨
}
printf("20살 이상 30살 이하의 사원 리스트\n");
for (int i = 0; i < SIZE; i++)
{
if (s[i].age >= 20 && s[i].age <= 30)
{
printf("%d %s %s %d %d\n", s[i].sabun, s[i].name, s[i].phone, s[i].age, s[i].money);
}
}
return 0;
}
//전화번호부 만들기
#include <stdio.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
typedef struct who
{
char nam[10];
char cp[15];
char hp[15];
}WHO;
int main(void)
{
char find[10];
WHO s[3];
for (int i = 0; i < 3; i++)
{
printf("이름 집전화 핸드폰번호를 입력하세요 : \n");
scanf(" %s %s %s", s[i].nam, s[i].cp, s[i].hp);
}
printf("\n\n검색할 이름을 입력하시오 ");
scanf(" %s", &find);
for (int i = 0; i < 3; i++)
{
if (strcmp(find, s[i].nam) == 0)
{
printf("\n집전화번호 : %s\n", s[i].cp);
printf("핸드폰번호 : %s", s[i].hp);
}
}
return 0;
}
728x90
반응형