일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 푸리에 급수
- 그람-슈미트 과정#gram-schmidt process
- 상태천이행렬#적분인자법#미정계수법#케일리-헤밀톤 정리
- 멱급수법
- 푸리에 정리
- 선형시스템연산자#라이프니츠 법칙#fundamental theorem of algebra#erf
- 오일러-코시 미방#계수내림법
- 내적#duality#쌍대성#dot product
- 계수내림법#reduction of order#wronskian#론스키안#아벨항등식#abel's identity
- weighted least-squares
- 선형변환#contraction#expansions#shears#projections#reflection
- 여인자
- 최소자승#least-square#목적함수#양한정#정점조건#최소조건
- 내적 공간#적분
- 베르누이 미분방정식
- reflection matrix
- 가중 최소제곱법
- 변수분리#동차 미분방정식#완전 미분방정식
- 추정문제#normal equation#직교방정식#정사영#정사영행렬#정사영 변환
- 여인수 행렬
- 정규직교행렬
- 미분방정식 #선형 미분방정식 #상미분 방정식
- linespectra#feurierseries#푸리에 급수
- 비제차#제차해#일반해#적분인자#적분인자법#homogeneous sol#nonhomogeneous sol#integrating factor
- 2계미방#모드#mod#특성방정식#characteristic eq#제차해
- 부분 분수분해
- 선형 상수계수 미분방정식#lccode#sinusoidal input
- 선형독립#기저벡터#선형확장#span#basis
- 직교행렬#정규직교행렬#orthonormal#reflection matrix#dcm
- dirichlet
Archives
OnlyOne
구조체(Derived Type) 본문
본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.
구조체(Derived Type)
Intro
공통된 구조를 가지는 여러 묶음의 정보를 더 간편히 선언하고 불러오는 방법이 있을까?
구조체의 선언
struct 구조체이름
{
자료형 멤버이름;
};
구조체의 변수 선언
struct Complex //Complex라는 이름의 구조체 선언
{
double real;
double imag;
};
int main()
{
struct Complex num1; //구조체 변수 선언
struct Complex num2 = {0}; //선언 및 모든 멤버 0으로 초기화
struct Complex num3 = {1.0, 2.0}; //선언 및 임의의 값으로 멤버 초기화
}
구조체 멤버 접근
struct Complex {
double real;
double imag;
}
;
int main() {
struct Complex num1;
num1.imag = 1.0;
num1.real = 2.0; // 멤버 이름으로 접근
}
typedef
데이터 타임을 원하는 다른 이름으로 바꿀 때 사용한다.
typedef int int32_t;
예제
typedef struct _complex // 이름 앞에 _를 붙인다.
{
double real;
double imag;
} Complex;
int main()
{
Complex num1; //선언 단계에서 struct 키워드 필요 없어졌다.
num1.imag = 1.0;
num1.real = 2.0;
}
열거형(enum)
c안에서 에러를 확인하고 에러별로 동작으로 다르게 하고 싶다. 만약 에러의 종류가 다양해지면 모든 에러를 변수로 만드는 것은 매우 번거롭다.
우리는 1씩 증가하는 숫자를 자동으로 만들고, 각 숫자의 의미를 추상화하여 에러를 표현할 것이다.
enum Error
{
ERROR_NONE = 0, //초기값
DIVIDE_ZERO,
FAIL_REAL_FILE,
…
};
typedef enum _Error
{
ERROR_NONE = 0,
DIVIDE_ZERO,
FAIL_REAL_FILE
} Error;
int main()
{
Error error;
error = DIVIDE_ZERO;
printf("Error code: %d\n", error); //Error code: 1
}
enum은 값의 의미 추상화 역할을 한다.
열거형과 switch
#include <stdio.h>
typedef enum _Error
{
ERROR_NONE = 0,
DIVIDE_ZERO,
FAIL_READ_FILE
} Error;
int main()
{
Error error;
error = DIVIDE_ZERO;
switch(error)
{
case DIVIDE_ZERO:
fprintf(stderr, "Error: The value is divided by 0.\n");
break;
case FAIL_READ_FILE:
fprintf(stderr, "Error: Fail to read file\n");
break;
default:
break;
}
}
열거형은 프로그램 가독성 향상을 위해 종종 switch문과 함께 쓰이곤 한다.
열거형 연산
enum은 정수형으로 형변환할 수 있다. 정수형 타입을 enum 타입으로 형변환할 수 있다.
#include <stdio.h>
typedef enum _Mode
{
DEFAULT = 0b00,
MODE1 = 0b01,
MODE2 = 0b10,
} Mode;
int main()
{
int mode = MODE1 | MODE2; //3
printf("Mode: %d\n", mode);
return 0;
}
'Control Engineering > C Programming' 카테고리의 다른 글
Practice[Integral] (0) | 2024.09.04 |
---|---|
Practice[Root Formula] (0) | 2024.09.04 |
Operator(비트연산자와 삼항연산자) (0) | 2024.08.10 |
오버플로우(Overflow)와 언더플로우(Underflow) (0) | 2024.08.10 |
C언어란 (1) | 2024.08.10 |