본문 바로가기

C

14주차 수업내용

C언어의 필수 4가지

32개(44개)의 keyword

  • for, if, int 등
  • C99에서는 37개
  • C11에서는 44개

40여 개의 연산자

  • +, -, *, / 등

10개의 구두점(토큰을 구분하는 용도)

  • [] {} () ; : # * = , ...

printf()같은 표준 라이브러리 함수

 

 

예약어(reserved word, keyword)

컴파일러에 의해 미리 의미가 정해져 있는 32~44개의 단어

항상 소문자로만 사용(C99 이전)

기능별 분류 예약어
제어문(반복) for, while, do
제어문(선택) if, else, switch, case, default
제어문(점프) break, continue, goto, return
자료형 char, int, short, long, float, double, signed, unsigned, struct, union, typedef, enum, void
기억 클래스 auto, static, extern, register
기타 const, sizeof, volatile

 

 

연산자의 우선순위(precedence)와 결합성(associativity)

결합성(associativity)

  • 우선순위가 같은 연산자의 결합 방향
우선순위 결합성 연산자
1 ( ), [ ], ., ->, ++(후치), --(후치)
2 (자료형), sizeof, *(참조), &, ++(전치), --(전치), +(부호), -(부호),~, !
3 *(곱셈), /, %
4 +, -
5 <<, >>
6 <, <=, >, >=
7 ==, !=
8 &
9 ^
10 |
11 &&
12 ||
13 ? :
14 =, +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
15 ,(콤마)

 

 

토큰(token) 과 구두점

토큰

  • C 프로그램을 구성하는 기본 단위
  • 예약어(reserved word, keyword) : int, if 등 44개
  • 연산자(operator) : +, / 등 40여 개
  • 구두점(punctuator) : [], () 등 50여개(40여 개는 연산자로 사용)
  • 식별자(identifier) : 변수, 함수, 배열, 구조체 등의 이름
  • 리터럴(literal) or 상수(constant) : 10, 3.5
  • 문자열(string) : "hello"

구두점

  • 토큰을 구분하기 위해 사용하는 기호
  • [], (), {}, *, 콤마(,), ;, =, :,..., “”

 

 

자주 사용하는 구두점(punctuator)

구두점 명칭 용도
[ ] bracket, 대괄호 배열크기 지정 char ch[10];
{ } brace, 중괄호 블록(제어문, 함수)
배열 초기화
구조체 틀
if(x>y) { }
int num[3]={1, 2, 3}
struct SCORE { };
( ) parenthesis, 소괄호 제어문의 조건식
함수의 매개변수 목록
if(x>y) printf("AAA");
* asterisk, 별표 포인터 변수 선언 char *name;
, comma, 쉼표 변수, 함수 선언
함수의 매개변수 나열
배열 초기화
int x,y;
sum(x,y);
int num[3]={1, 2, 3}
; semicolon, 세미콜론 문장의 끝
for문의 조건식 구분
int num;
for(i=0;i<10;i++)
= equal sign 변수, 배열 초기화 int num[3]={1, 2, 3}
: colon, 콜론 goto문에서 분기하는 레이블
case문의 레이블 다음
AAA:
case 0 :
... ellipsis, 생략부호 함수원형에서 매개변수 생략 int printf( const char *format [, argument]... );
# sharp, 샵 전처리기 #include
#define

 

 

함수

C 프로그램은 함수(function)의 집합

특정한 작업을 하도록 만들어진 독립적인 단위 모듈

큰 프로그램 하나를 여러 개의 함수로 분할하여 구현하는 구조적 프로그래밍(structured programming) 방식의 기본

 

매개변수(parameter), 전달인자(인수, argument) : 함수에 입력시키는 것

반환값, 리턴값(return value) : 함수가 돌려주는 결과 값

 

 

C 프로그램의 기본 틀

콘솔 기반 C 프로그램은 main() 함수로 시작

main()함수는 콘솔 기반 C 프로그램의 시작점(entry point)

하나의 프로그램에 반드시 하나 존재

리턴값이 없는 함수나 매개변수가 없는 함수는 그 위치에 비어 있다는 뜻의 "void"를 씀

int main(void)
{
    코드 작성

    return 0;
}
리턴형 함수이름(매개변수 리스트)
{     // 함수의 시작
    코드 작성

    0을 리턴함.    문장 끝에는 “ ;”을 씀
} // 함수의 끝

 

 

기본 자료형의 종류 : 문자형

문자 하나를 저장하기 위한 형

1바이트의 메모리가 할당

자료형 크기 (바이트) 부호 입출력형식 표현 범위
char 1 O %c -128 ∼ +127
unsigned char 1 X %c 0 ∼ 255

 

 

기본 자료형의 종류 : 정수형

약 -21억(정확하게는 -2 31 : -2,147,483,648)에서 21억(정확하게는 2 31-1: 2,147,483,647)까지 또는 0에서 약 42억(정확하게는 2 32 -1 : 4,294,967,295)까지의 소수점이 없는 정수를 저장하기 위한 형

자료형 크기 부호 입출력형식 표현 범위
short 2 O %d -32768 ∼ 32767
unsigned short 2 X %u 0 ∼ 65535
int 4 O %d -2147483648 ∼ 2147483647
unsigned int 4 X %u 0 ∼ 4294967295
long 4 O %ld -2147483648 ∼ 2147483647
unsigned long 4 X %lu 0 ∼ 4294967295

 

 

기본 자료형의 종류 : 실수형

실수형(부동형, floating type)의 크기와 종류

자료형 크기 입출력 형식 표현 범위 정밀도 (precision)
float 4 %f 1.175494351x10^-38
∼ 3.402823466x10^38
6자리
double 8 %lf 2.2250738585072014x10^-308
∼ 1.7976931348623158x10^308
15자리
long double 8 이상 %lf - -

 

 

식별자/리터럴/자료형/변수

식별자와 명명 규칙

  • 변수, 함수 등에 부여하는 이름
    • 식별자는 영문자(A∼Z, a∼z), 숫자(0∼9), 밑줄(_)만 가능
    • 한글이나 밑줄(_)을 제외한 특수 문자, int, char 등 컴파일러에 의해 미리 의미가 정해져 있는 단어인 예약어(keyword)는 불가능
    • 첫 글자는 반드시 영문자 또는 밑줄로 시작

리터럴(literal)

  • 값 자체
    • 문자는 양쪽에 작은 따옴표(예를 들어 'a')
    • 문자열은 양쪽에 큰 따옴표(예를 들어 "soft", "한")
    • 숫자는 그냥 씀

자료형(data type)

  • 자료형은 처리, 저장하고자 하는 자료의 형태를 나타낸다.
  • 기본 자료형에는 문자형, 정수형, 실수형, 열거형이 있다.
    • 문자형(char, 1바이트), 정수형(int, 4바이트), 실수형(double, 8바이트)

변수

  • 변수는 프로그램이 실행되는 동안 가변적인 자료를 저장하기 위한 기억장소의 이름으로 모든 변수는 사용하기 전에 반드시 선언을 해야 한다.
    • int x;
    • x = 10;

 

자동 형 변환

10/4, 10.0/4, 10/4.0, 10.0/4.0

 

자료형이 서로 다른 혼합 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어짐

  • 이것을 자동 형 변환(implicit arithmetic conversions)이라 함


  • char(1바이트)형과 int(4바이트)형이 혼합 연산을 하게 되면 char형이 int형으로 변경되어 연산이 되고 결과도 int형으로 나옴
  • int형(4바이트)과 double형(8바이트)의 혼합 연산에서는 int형이 double형으로 변경되어 연산이 되고 결과도 double형으로 나옴
  • char → unsigned char → int → unsigned int → long → unsigned long → float → double

 

변수와 배열, 구조체

변수

  • 단독주택
  • int x; //4byte짜리 단독주택 1가구

배열

  • 같은 평수로 구성된 아파트
  • int x[5]; //4byte짜리 5가구
  • 동일한 형(type)의 데이타들을 하나의 단위로 취급

구조체(변수/배열/구조체들의 모임)

  • 다른 형(type)의 데이타들을 하나의 단위로 취급
struct Man{
	char n;
	int age;
	double weight;
};

 

struct Man형 구조체를 선언하고 변수를 만들어서 멤버에 접근

#include <stdio.h>
struct Man{ //구조체 선언
	int age; //멤버
	double weight; //멤버
};
int main(void)
{
	struct Man han; //struct Man 구조체형 변수 han선언
	han.age=20; //구조체 변수의 멤버 age에 접근(점사용)
	printf("%d\n",han.age);
	
    return 0;
}

 

구조체 변수의 초기화와 멤버 값 대입

#include <stdio.h>
struct score { //struct score형, score형이 아님!
	char hakbun[10];
	char name[10];
	int kor, eng, tot;
	double ave;
};
int main(void)
{
	struct score h = { "2020001","han",80,89 }; //초기화
	h.tot = h.kor + h.eng;
	h.ave = h.tot / 2.0;
	printf("%s %s %d %d %d %f\n", h.hakbun, h.name,
	h.kor, h.eng, h.tot, h.ave);
	
    return 0;
}

 

구조체 변수들의 대입 연산

#include <stdio.h>
struct score {
	char hakbun[10];
	char name[10];
	int kor, eng, tot;
	double ave;
};
int main(void)
{
	struct score j, h = { "202345678","han",80,89 };
	h.tot = h.kor + h.eng;
	j = h;
	printf("%s %s %d %d %d\n", h.hakbun, h.name, h.kor, h.eng, h.tot);
	printf("%s %s %d %d %d\n", j.hakbun, j.name, j.kor, j.eng, j.tot);
	
    return 0;
}

h를 j에 대입하면 h의 모든 멤버가 j에 복사된다. 

 

구조체를 활용한 성적처리 프로그램

'C' 카테고리의 다른 글

13주차 수업내용  (0) 2024.05.28
12주차 수업내용  (0) 2024.05.21
11주차 수업내용  (0) 2024.05.14
10주차 수업내용  (0) 2024.05.07
9주차 수업내용  (0) 2024.04.30