[C Question] 포인터 구조체와 포인터 배열

Date:     Updated:

카테고리:

태그:

1. 직원정보(구조체 배열)

struct employee
{
	char name[50];
	char addr_num[15];
	int  salary;
};

int main()
{
	/* 연습문제
	길이가 3인 배열로 선언하고
	세 명의 정보를 입력 받아서 배열에 저장한 다음, 배열에 저장된 데이터를
	순서대로 출력하는 예제를 작성한다.
    ( 모두 main에서 할 것 )
	*/
	struct employee emp[3] = { 0, };
	int i, len;
	len = sizeof(emp) / sizeof(struct employee);

	return 0;
}
정답

2. circle 구조체 정의. ( 새로운 구조체 변수 )

#include <stdio.h>

struct point
{
	int xpos;
	int ypos;
};

int main()
{
	/*
	point 구조체. 멤버2개

	main()
	- 길이가 3인 point형 배열 arr선언
	- 세 점의 좌표 입력 받기
	- 세 점의 좌표 출력
	*/
	struct point arr[3];
	int i, len;
	len = sizeof(arr) / sizeof(struct point);

	// 입력
	for (i = 0; i < len; i++)
	{

	}

	// 출력


	return 0;
}
정답

3. 구조체와 배열의 공통점과 차이점

#include <stdio.h>

struct info
{
	char id[50];
	char passwd[30];
	char name[50];
	int age;
};

int main()
{
	/*
	인터넷 카페 회원 1명의 아이디(smartC), 비밀번호(sm8448), 나이(20), 이름(신세대)
	정보를 변수로 선언함과 동시에 초기화 한 후 출력하고자 한다.
	회원의 정보를 구조체를 사용하지 않고 처리하는 프로그램과, -> ?
	구조체를 사용하는 프로그램,
	두 개를 작성한 후 구조체와 배열의 같은 점과 차이점을 비교 설명
	*/
	// 구조체 사용
	struct info member = { "smartC", "sm8448", "신세대", 20 };
	// 출력
	printf("아이디: %s \n비밀번호: %s\n이름: %s\n나이: %d\n\n", member.id, member.passwd, member.name, member.age);


	// 구조체 미사용 ->
	

	//출력
	

	/*
	공통점:


	차이점: 
	*/

	return 0;
}
정답
	// 구조체 미사용 ->
	char* memberArr[4] = { "smartA", "sm1234", "MZ", "15" };

	//출력
	printf("아이디: %s \n비밀번호: %s\n이름: %s\n나이: %s\n\n", memberArr[0], memberArr[1], memberArr[2], memberArr[3]);


	공통점
	배열을 사용하여 값을 저장하고 출력할 수 있다.

	차이점
	배열은 구조체와 다르게 같은 자료형들끼리만 저장할 수 있고,
	구조체는 서로 다른 자료형으로도 저장할 수 있다.

	printf할 때 [] .id 등 표현이 다름

	배열은 재사용에 어려움이 있지만,
	구조체는 배열을 사용하면서 그 배열을 어디서든지 다시 사용할 수 있게
	자료형으로 배열이나 변수들을 정의하여 다시 사용할 수 있다.

4. 틀린 곳 찾기

#include <stdio.h>

struct rectangle {
	int width = 2, height = 5, area; 		// 여기 왜 틀렸는지 설명
} 											// 여기 왜 틀렸는지 설명

int main() // 연습문제
{
	rectangle r1 = { 3,7 }, r2 = { 2,5 }; 	// 여기 왜 틀렸는지 설명
	int larger;  							// 여기 왜 틀렸는지 설명
	r1.area = r1.width * r1.height;
	r2.area = r2.width * r2.height;

	if ( r1 > r2 ) 							// 여기 왜 틀렸는지 설명
		larger = r1;
	else
		larger = r2;
	printf("더 큰 사각형의 면적은 %d입니다.", larger.area);

	return 0;
}

정답
#include <stdio.h>

struct rectangle {
	int width = 2, height = 5, area;
}


int main() // 연습문제
{
	// rectangle r1 = { 3,7 }, r2 = { 2,5 }; // 자료형자체가 틀렸음, struct 빼먹었기때문
	rectangle r1 = { 3,7 }, r2 = { 2,5 };
	int larger; 
	//	담아내려하는 자료형이 다름, r1이나 r2를 담아내야하는데 
	//	4바이트로 12바이트의 내용을 담아내려했기때문 !
	struct rectangle larger;
	r1.area = r1.width * r1.height;
	r2.area = r2.width * r2.height;

	if ( r1 > r2 )
		larger = r1;
	else
		larger = r2;
	printf("더 큰 사각형의 면적은 %d입니다.", larger.area);


	return 0;
}

5. 한 학기 평점(GPA)

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

struct student
{
	char object[10];	// 강좌명
	int grade;			// 학점
	char level[5];		// 등급

};

int main()
{
	/*
	다음과 같이 학생의 한 학기 5강좌의 성적으로부터 한 학기 평점 (GPA)을 계산하여 출력
	각 강좌마다 강좌명, 학점, 등급 정보를 구조체에 저장
	다섯 강좌의 정보는 구조체 배열을 선언하면서 초기화
	등급을 전달하면 등급에 해당하는 점수를 반환하는 score 함수를 정의하여 사용
	등급에 따른 점수는 아래 표와 같음 !
	평점은 2 * A0를 했을 때 -> 2 * 4.0 이런식으로
	2 * 4 + 3 * 3.5 + 2* 4 + ...
	하고 ( 학점 2+3+2+2+3 ) 으로 나누면 됨

	A0를 4.0으로 바꿔주는 함수가 score
	score함수 안에서 strcmp 사용
	*/

	return 0;
}
정답

6. 5명의 학번 구조체 연산

/*
	5명의 학번, 이름, 국어,영어, 수학 점수를 입력받아 정렬 전 데이터 출력 후에
	정렬 후 데이터 이렇게 2개의 데이터를 출력

	학번, 이름, 과목 점수, 총점, 평균, 학점 구조체 생성

	main함수에서 input_data, calc_data 호출하고 이후 printf_data와
	sort_data 함수 출력한 뒤 마지막으로 printf_data 함수 호출 ( 비교를 위해 )

	input_data 함수는 5명의 정보(학번, 이름, 점수)를 입력
	calc_data 함수는 5명의 과목 총점, 평균, 학점 계산
	(90이상 A, 80이상 B, 70이상 C, 외 F)

	sort_data 함수는 평균 점수로 정렬
	printf_data 함수는 5명의 정보 출력

	printf는 main 함수에 2개
	*/
정답

c-question-lv1 카테고리 내 다른 글 보러가기

댓글 남기기