[C Question] 포인터 구조체와 포인터 배열
카테고리: c-question-lv1
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개
*/
댓글 남기기