0415 구조체

민우이·2022년 4월 15일
0

#include
#include
using namespace std;
//여기에다가 구조체를 정의
struct score
{
int kor;
int eng;
int math;

};
struct student
{
string name; // 클래스도 쓸 수 있고
int age; //기본 자료형도 쓸 수 있고
string homeTown;
int pride;
int monthlyScore[12]; //배열도 넣을 수 있고
struct score myScore;// 앞에서 정의한 구조체도 넣을 수 있다.
}seoyeon,jaehyuk; //중괄호의 끝과 세미콜론 사이에다 student의 변수를 미리 선언해 줄 수도 있다.
// name; age; korScore; rank;가 하위 변수
int main() // 이놈이 지금 우리가 쓰고 있는 유일한 함수
{

/*
* 프로그래밍 기초 (메모리, cpu, 디스크)
getch()

구조체
1. 절차적
2. 구조적
3. 객체 지향적

추상화

c언어에서 코드를 추상화 하는 데 사용되는 삼총사 : 배열 구조체 함수
추상화??? 실제 세계(현상)를 간락화/기호화/보편화 해서 표현한 것
코드에서 추상화가 필요한 이유 : 결국 코드는 사람이 짜는 것이기 때문에
다른 사람이 코드를 해석하기 편리해야 하고
다른사람이 인수인계 받아서 유지보수하기 편리해야 하고
다른 사람들과 함께 공동으로 코드를 만들기 편리해야 하고
배열 : 속성이 동일한 여러 개의 데이터를 같은 이름과 순서를 지정한 연속된 번호로 서로 연관되어 있음을 표시함으로써 추상화함
구조체 : 데이터(자료형)을 실제로 쓰이는 데이터끼리 묶이서 추상화
함수 : 프로세스 (코드)를 특정 기능 단위로 묶어서 추상화
최악의 추상화 -> 추상화 단계를 상승시키는 과정

구조체란?

  • 변수를 모아 놓은 집합체

  • 특정 변수들이 무언가의 하위 개념으로 묶일 수 있을 때

  • studentName[10], studentAge[10], studentScore[10] ...

  • '학생'의 'XXX'

  • 이름, 나이, 국어점수 , 석차 등등을 '학생'이라는 구조체로 묶어서 사용

    구조체를 정의하는 위치 : 구조체가 사용되는 함수의 앞에 정의한다.
    (해당 함수의 바깥쪽 앞 (위))

    1. 구조체 정의의 방법
      struct 구조체 변수명
      {
      구조체 안에 들어갈 하위 변수들
      (위의 예시에 따르면 이름, 나이, 국어점수 , 석차같은 애들이 하위 변수이다. )
      };
      구조체는 일종의 우리가 새롭게 만든 데어터형

      구조체 안에 들어갈 수 있는 하위 변수는 무엇이 있을까?
      당연히 int/bool/float 같은 기본 자료형들은 모두 사용 가능
      string <- 클래스도 쓸 수 있다.

    2. 구조체의 선언과 초기화
      기본적으로 구조체 변수의 개념은 배열 변수의 개념과 동일
      int a[3] = (50,60,70);
      구조체 변수도 다음과 같이 선언과 같이 동시에 가능하다

      player.hp = player.hp - monster[n].dmg;
      <- 주석 없이 코드를 배우지 않은 사람에게도 어느 정도의 가독성이 확보된다.

    */

    student minseop; //구조체 변수의 선언
    minseop.name = "신민섭"; //minseop.name = "신민섭"이다
    minseop.age = 34;
    minseop.homeTown = "인천";
    minseop.pride = 100;

    cout << minseop.name << endl;
    //초간단 실습 : student 구조체를 사용해서 자기 자신의 정보를 입력하고 확인해보자.
    student minwoo;
    minwoo.age = 26;
    minwoo.homeTown = "seoul";
    minwoo.pride = 100;
    minwoo.name = "이민우";
    minwoo.myScore.eng = 99;
    minwoo.monthlyScore[0] = 89;
    minwoo.monthlyScore[1] = 95;
    score myScore = { 50, 80, 90 };// 배열을 초기화 하듯 구조체 변수도 초기화 할 수 있다.
    // monster a = {"고블린", 70, 55, 12f, true, 100};
    cout << myScore.kor << myScore.eng << myScore.math << endl;

    cout << minwoo.age << endl;

    / 과제 : 미궁탈출 게임의 업데이트
    사용할 수 있는 모든 요소에 구조체를 활용해서 소스 코드를 개선해 보세요.
    tile : 지형 정보를 넣고 (숲, 늪, 평지)
    player : 피로도를 넣고
    플레이어가 어느 지형에 있는지, 플레이어의 피로도가 얼마인지 (숲 -1, 늪 -3, 평지 0)
    표시되도록 수정해 봅시다.
    /
    //string a, b, c; //최악의 추상화
    // string a[3]; // 위에 것보다는 좀 낫다
    // string name1, name2, name3; // 아님 아런 식으로든지
    // string studentName[3]; // 위의 것보다 의도가 명료하게 드러나기 때문에 좋은 추상화

    1. 두 정수를 입력받은 후 두 정수의 사칙연산 + 나머지(%) 결과를 출력하기

    2. 최소값과 최대값을 입력받은 후 두 수 사이의 랜덤한 숫자 1개 출력하기

    3. 1~3사이의 숫자를 입력받은 후 입력받은 숫자에 따라 다른 인삿말이 나오도록 하기
    (출력 예시 : 숫자를 입력하시오(1~3) : 3
        좋은 하루입니다.)

    4. 1부터 100까지의 숫자를 차례대로 출력하기
    출력되는 숫자의 옆에 홀수이면 홀수, 짝수이면 짝수라고 표시하기
    출력되는 숫자의 옆에 3의 배수이면 3의 배수라고, 5의 배수는 5의 배수라고 표시하기
    (출력 예시
        1 홀수
        2 짝수
        3 홀수 3의 배수
        4 짝수
        5 홀수 5의 배수
        6 짝수
        .
        .
        .
        100 짝수 5의 배수)
    ​
    5. 1~100 사이의 임의의 숫자를 맞추는 게임
    오답을 입력하면 컴퓨터가 정답이 오답보다 큰지 작은지 알려주고
    다섯 번 안에 못맞추면 게임 오버
    ​
    6. 숫자 대신 알파벳 중 하나를 입력받고 컴퓨터가 생각하는 알파벳과 같은 값을 찾는
    게임 만들기.기본 규칙은 5번과 비슷
    (틀렸을 때 입력한 문자보다 앞에 있는지, 뒤에 있는지 알려주고 5번까지 기회를 준다)
    ​
    7. 몬스터라는 구조체를 만들고 5개를 선언하시오. 5개의 이름은 cin으로 입력받게 하고
    몬스터의 공격력, 방어력은 랜덤으로 설정되도록 하시오.
    그 후 1~5 사이의 숫자를 입력하면 번호에 해당하는 몬스터의 이름, 공격력, 방어력을
    출력하시오.

}

0개의 댓글