C :: 구조체 struct

J·2024년 5월 23일

C언어

목록 보기
18/18
post-thumbnail

자료형 :: int, double, char - 정보의 종류
구조체 :: 위 자료형을 혼합해서, 타입을 별도로 생성하는 것
            다양한 자료형의 여러 변수의 집합
            "붕어빵을 만들어내는 "틀"을 정의한다"

// 예제 :: 사람(이름, 전화번호, 나이, 혈액형...) 구조체 정의(생성)
// typedef => type definition (사용자 지정. 코드를 작성하는 입장에서 타입을 별도 정의하는 키워드)
typedef struct {

	// Person 멤버 :: 이름, 전화번호, 나이, 혈액형
	// 멤버 :: 구조체 안의 변수 하나하나
	char name[20];
	char tel[20];
	int age;
	char blood;

}Person;


int main() {

	// * 아래처럼 여러 개의 변수/배열을 한 묶음으로 만들고 싶을 때 -> 구조체 사용
	// user에 대해 필요한 내용
	/*char user_name[20];
	int user_age;
	char user_tel[20];
	char user_num[20];*/

	// admin에 대해 필요한 내용
	/*char admin_name[10];
	char admin_num[20];
	char admin_id[20];*/
	
	// me라는 이름으로 person 타입의 변수 선언
	// 구조체 상에서, 변수/배열 선언한 순서대로 값을 넣어줘야 함
	//			{name		,tel			,age ,blood}
	Person me = {"JeongHee", "010-1234-1234", 3, 'A'};
	
	// 구조체 멤버 접근 :: (구조체변수).(멤버명)
	printf("이름 :: %s\n", me.name);
	printf("전화번호 :: %s\n", me.tel);
	printf("나이 :: %d\n", me.age);
	printf("혈액형 :: %c\n", me.blood);

	
	// 구조체 = 타입(자료형)
	// int = 1; => 안되는 것 처럼
	// Person = {"JeongHee", "010-1234-1234", 3, 'A'};	=> 안됨.

}

ex.

// 구조체 선언 (Student) :: 학번, 이름, 학점(double[3]), 평균
typedef struct {
	char num[10];		// 학번 (문자열)
	char name[20];		// 이름 (문자열)
	double score[3];	// 학점 :: 3개의 값 저장O
	double average;		// 평균
}Student;

// Student 타입 변수의 정보를 미리 받으며 실행한다(매개변수)
double get_avr(Student s) {		// stu를 이쪽으로 보내면, stu의 모든 정보 접근O
	// 평균값 연산 수행
	double sum = 0;		// 평균을 구할 때 필요한 합계 저장 (score의 모든 값 더해야 함)
	for (int i = 0; i < 3; i++) {
		sum += s.score[i];	// 전달받은 구조체 변수의 학점을 모두 더해줌
	}
	return sum / 3;		// 평균 연산 결과값 내놓도록 함
}

int main() {
	// main 내용
	// 학생에 대한 구조체 변수 선언	-> 구조체 필요 
	Student stu;

	// 학생의 학번, 이름, 학점 3개를 순차적으로 입력받기
	scanf("%s", stu.num);
	scanf("%s", stu.name);
	for (int i = 0; i < 3; i++) {
		scanf("%lf", &stu.score[i]);	// score[0], score[1], score[2] 순차적 입력
	}

	// 학생에 대해, 학점 평균 연산하기 (get_avr 함수 사용)
	// 매개변수 타입에 맞게, stu를 값으로 전달
	// get_avr 결과값 :: 학점의 평균()
	stu.average = get_avr(stu);

	// 학생의 학번, 이름, 평균을 출력하기 (stu 변수에 있는 값을 꺼내씀)
	printf("학번 :: %s\n", stu.num);
	printf("이름 :: %s\n", stu.name);
	printf("평균 :: %.1f\n", stu.average);
}

arrary

// 구조체 선언 (Student) :: 학번, 이름, 학점(double[3]), 평균
typedef struct {
	char num[10];		// 학번 (문자열)
	char name[20];		// 이름 (문자열)
	double score[3];	// 학점 :: 3개의 값 저장O
	double average;		// 평균
}Student;

// Student 타입 변수의 정보를 미리 받으며 실행한다(매개변수)
double get_avr(Student s) {		// stu를 이쪽으로 보내면, stu의 모든 정보 접근O
	// 평균값 연산 수행
	double sum = 0;		// 평균을 구할 때 필요한 합계 저장 (score의 모든 값 더해야 함)
	for (int i = 0; i < 3; i++) {
		sum += s.score[i];	// 전달받은 구조체 변수의 학점을 모두 더해줌
	}
	return sum / 3;		// 평균 연산 결과값 내놓도록 함
}

int main() {
	//int a[5];
	//printf("%d", a[1]);		// a의 1번째 값을 갖고온다.

	// main 내용
	// 3명 학생에 대한 구조체 배열 선언	-> 구조체 필요 
	Student stu[3];

	// 3명 학생의 학번, 이름, 학점 3개를 순차적으로 입력받기
	for (int j = 0; j < 3; j++) {
		printf("%d번째 학생의 학번, 이름, 학점(3개)를 입력하세요.\n", j + 1);

		scanf("%s", stu[j].num);
		scanf("%s", stu[j].name);
		for (int i = 0; i < 3; i++) {
			scanf("%lf", &stu[j].score[i]);	// score[0], score[1], score[2] 순차적 입력
		}
	}

	// 학생에 대해, 학점 평균 연산하기 (get_avr 함수 사용)
	// 매개변수 타입에 맞게, stu를 값으로 전달
	// get_avr 결과값 :: 학점의 평균()
	for (int j = 0; j < 3; j++) {
		stu[j].average = get_avr(stu[j]);
	}

	// 학생의 학번, 이름, 평균을 출력하기 (stu 변수에 있는 값을 꺼내씀)
	for (int j = 0; j < 3; j++) {
		printf("학번 :: %s\n", stu[j].num);
		printf("이름 :: %s\n", stu[j].name);
		printf("평균 :: %.1f\n", stu[j].average);
	}
}

typedef struct {

	char num[10];
	char name[20];
	double point[3];
	double avg;

}student;

double get_avr(student s) {

	double sum = 0 ;
	
	for (int i = 0; i < 3; i++) {
		sum += s.point[i];

		printf("%lf\n", s.point[i]);
	
	}
	return sum/3;
}

int main() {

	student person;
	

	for (int i = 0; i < 3; i++) {
		scanf("%s %s %lf", person.num[i], person.name[i], &person.point[i]);
	}

	person.avg = get_avr(person);


	printf("Çйø :: %s\n", person.num);
	printf("À̸§ :: %s\n", person.name);
	printf("Æò±Õ :: %.1lf", person.avg);
}```
profile
나야

0개의 댓글