안녕하세요 엘체프 GG 입니다.

오늘은 구조체입니다.


-구조체의 값을 구해보죠

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
struct Point
{
    int x;        // x좌표
    int y;        // y좌표
};
 
int main(void)
{
    int i;
    struct Point pt[3= { { 1020 }, { 3040 }, { 5060 } };
    struct Point *ptr = pt;
    for (i = 0; i<3; i++)
    {
        printf("%d번째 구조체 값: (%d, %d)\n", i + 1, ptr[i].x, ptr[i].y);
    }
 
    printf("첫번째 구조체 값: (%d, %d)\n\n",
        pt->x, pt->y); // (10,20) (정상) 
    printf("두번째 구조체 값: (%d, %d)\n\n",
        (*ptr++).x, (*ptr++).y); // (30,20) (비정상 출력) -> (30, 40) (원래의 값)
 
    system("PAUSE");
    return 0;
}
cs



구조체문제풀어보기

문) 아래의 형식과 같이 구성된 회원정보를 Member라는 이름의 구조체를 작성하고 데이터를 입력하여 출력 화면과 같이 인쇄될 수 있도록 프로그래밍합니다.


참고) 데이터 입력시 문자열은 아래와 같이 작성할 수 있다.

sprintf(member.email, "abcd@naver.com");

출력 결과 화면)

회원정보 아이디 : green_c
회원정보 이름 : 홍길동
회원정보 모바일 : 010-1234-5678
회원정보 연락처 : 02-111-2222
회원정보 가입일 : 2018-02-01


---------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
// #include <string.h> // strcpy 사용시
 
typedef struct {
    char id[21];            //아이디
    char pw[21];            //비밀번호
    char name[51];            //이름
    char gender;            //성별
    char email[51];            //이메일
    char mobile[14];        //휴대폰번호
    char phone[14];            //유선전화번호
    char zip1[8];            //우편번호1
    char address1[201];        //주소1
    char zip2[8];            //우편번호2
    char address2[201];        //주소2
    char birthday[11];        //생년월일
    char joindate[11];        //가입일
} Member;
 
void main() {
 
    Member member; //구조체 호출
 
    sprintf(member.id, "class");
    sprintf(member.pw, "123456879");
    sprintf(member.name, "남근곤");
    member.gender = 'm';
    sprintf(member.email, "abcd@naver.com");
    sprintf(member.mobile, "010-1234-5678");
    sprintf(member.phone, "02-111-2222");
    sprintf(member.zip1, "123-456");
    sprintf(member.address1, "서울 마포구");
    sprintf(member.zip2, "456-789");
    sprintf(member.address2, "서울 종로구");
    sprintf(member.birthday, "2000-01-01");
    sprintf(member.joindate, "2018-02-01");
 
 
    printf("회원정보 아이디 : %s\n", member.id);
    printf("회원정보 이름 : %s\n", member.name);
    printf("회원정보 모바일 : %s\n", member.mobile);
    printf("회원정보 연락처 : %s\n", member.phone);
    printf("회원정보 가입일 : %s\n", member.joindate);
 
    system("PAUSE");
}
cs


-제품구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_NAME 50
 
struct Item {
    char name[MAX_NAME];
    int price;
    int num;
};
 
int main(int argc, char *argv[])
{
    int i;
    int count, sum = 0, total;
    struct Item *item = NULL;
 
    printf("항목의 갯수를 입력하세요.");
    scanf("%d"&count);
 
    item = (struct Item *)malloc(count * sizeof(item));
 
    for (i = 0; i<count; i++) {
 
        printf("\n품명: ");
 
        scanf("%s"&item[i].name);
 
        printf("\n단가: ");
        scanf("%d"&item[i].price);
 
        printf("\n수량: ");
        scanf("%d"&item[i].num);
 
    } // for end
 
    printf("\n-------------------------------------\n");
    printf("품명\t단가\t수량\n");
    printf("-------------------------------------\n");
 
    for (i = 0; i<count; i++) {
        printf("%s\t", item[i].name);
        printf("%d\t", item[i].price);
        printf("%d\n", item[i].num);
 
        sum += (item[i].price * item[i].num);
    }
 
    free(item);
 
    total = (int)(sum * 1.1);
    printf("\n-------------------------------------\n");
    printf("합계:%d\n", sum);
    printf("총액: %d  (부가세 10%%포함)\n", total);
 
    system("PAUSE");
    return 0;
}
cs






-성적구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
 
#define MAX_NAME 20
#define SUBJECTS 3
 
struct Grade
{
    char name[MAX_NAME];        // 이름
    int score[SUBJECTS];        // 점수
    int total;            // 총점
    double average;            // 평균
};
 
int main(void)
{
    int students, i, j;
    struct Grade *grade;
    char *subject[SUBJECTS] = { "국어""영어""수학" };
    /////////////////////////////////////////////////////////
    // 학생 수 입력 및 메모리 할당
    printf("성적처리 할 학생 수를 입력하세요: ");
    scanf("%d"&students);
    grade = (struct Grade *)malloc(students*sizeof(struct Grade));
    /////////////////////////////////////////////////////////
    // 성적 입력
    for (i = 0; i<students; i++)
    {
        printf("**************** %d번째 학생 ****************\n", i + 1);
        printf("이름: ");
        scanf("%s", grade[i].name);
        for (j = 0; j<SUBJECTS; j++)
        {
            printf("%s: ", subject[j]);
            scanf("%d"&grade[i].score[j]);
        }
    }
    /////////////////////////////////////////////////////////
    // 성적 계산
    for (i = 0; i<students; i++)
    {
        grade[i].total = 0;
        for (j = 0; j<SUBJECTS; j++)
        {
            grade[i].total += grade[i].score[j];
        }
        grade[i].average = (double)grade[i].total / SUBJECTS;
    }
 
    /////////////////////////////////////////////////////////
    // 성적 출력
    printf("--------------------------------------------------\n");
    printf("이름\t| 국어\t| 영어\t| 수학\t| 총점\t| 평균\n");
    printf("--------------------------------------------------\n");
    for (i = 0; i<students; i++)
    {
        printf("%s\t| ", grade[i].name);
        for (j = 0; j<SUBJECTS; j++)
        {
            printf("%d\t| ", grade[i].score[j]);
        }
        printf("%d\t| ", grade[i].total);
        printf("%0.2f\n", grade[i].average);
    }
    printf("--------------------------------------------------\n");
    free(grade);        // 메모리 반납
    system("PAUSE");
    return 0;
}
 
cs


'스터디 > C,C++' 카테고리의 다른 글

C 문자열 거꾸로 출력하기  (8) 2018.02.12
C 문자열 자르기 문제  (7) 2018.02.12
배열포인터활용 성적구하기  (7) 2018.01.31
중첩반복문 별찍기  (7) 2018.01.26
C실행툴 DEV-C++ 설치  (5) 2018.01.22

+ Recent posts