728x90
본 내용은 POSTECH '청년 AI · Big Data 아카데미 온라인 기초과정'을 수강하며 정리한 내용입니다.
Ⅱ 프로그램 구조
<C 프로그램 구조>
- C언어 역사
- 1969 : 유닉스를 개발한 AT&T 벨 연구소의 켄 톰슨이 B언어 개발
- 1972 : 켄 톰슨과 같이 일하던 데니스 리치는 유닉스의 호환성 높이기 위해 재개발 → C언어 (B언어를 계승한다는 의미)
- 1983 : 미국표준협회(ANSI)에서 ANSI C라는 표준안 발표
- C++, Java, Python 등 많은 프로그래밍 언어의 기초 문법 포함
- 모듈화 : 문제를 처리하는데 반복되는 것을 묶음
- 모듈 : 큰 문제를 기능별 작은 단위로 나눈 것, 독립적으로 수행할 수 있는 프로그램 단위
- C언어 구조
- C 프로그램은 여러 개의 함수로 구성
- 함수(function) = 모듈 : 독립적으로 수행할 수 있는 프로그램 단위
- 실행 순서 : 위에서 아래, 왼쪽에서 오른쪽
- 제일 처음에 나오는 함수 : main함수
- C 프로그램은 main() 함수에서 시작해서 main() 함수로 끝남
/* The traditional first program in honor of Dennis Ritchie who invented C at Bell Labs in 1972 */
# include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}
- #include : 전처리 지시자, 컴파일러 전에 처리
- stdio.h : 표준 입출력 관련 함수가 모인 헤더 파일, 입력은 scanf(), 출력은 printf()
- #include <stdio.h> : 기계어 번역 전에 stdio.h라는 헤더 파일을 소스코드에 포함
- int : return 데이터의 타입
- main(void) : 함수이름(파라미터 타입)
- ; : 문장의 끝 표시
<변수와 상수>
- 주석(comment)
- 프로그램 소스코드만으로 사람이 이해하는 것에 어려움이 있음 → 이해를 돕기 위해 주석 사용
- C : /* */
- C++ : // (줄단위)
- 예약어(Keyword)
- 약속된 의미의 단어, 예약어는 약속된 의미로만 사용
- 사용자가 임의로 재정의해서 사용할수 없음
- break, int, if, char, float, return, void 등
- 식별자(identifier)
- 사용자가 만든 이름 (변수명, 함수명 등)
- 영문 대소문자 구별
- 영문 대소문자, 밑줄(_), 숫자 혼합하여 만듦
- 숫자가 맨 처음에 올 수 없음
- 상수(constant)
- 프로그램 내에서 항상 고정된 값
- 숫자 상수 : 정수, 실수
- 문자 상수 : 문자, 문자열
- 변수(variable)
- 수학에서 변수 : 변할 수 있는 수
- C언어에서 변수 : 데이터를 메모리에 저장하는 공간
- 데이터를 처리하기 위해서는 데이터 타입을 이용해 변수를 선언
- 데이터 타입 변수명 : char cvar = 'A';
- 연산자(operator)
- 수행되는 연산을 표현하는 기호
- 산술 연산자, 관계 연산자, 논리 연산자 등
- 표현식(expression)
- 상수, 변수, 연산자, 함수 호출 등으로 구성된 의미 있는 식
- 상수, 변수, 연산자, 함수 호출은 그 자체를 표현식이라 볼 수 있음
- 표현식은 항상 평가값을 가짐
- a+b, 3.14, printf("Hello")
- 문장(statement)
- 하나의 처리 단위(문장)는 반드시 세미콜론(;)으로 끝내야함
- 컴파일러에게 처리 단위를 알려주는 역할
- 복합문 : 여러 문장을 묶어서 하나의 문장처럼 처리, 중괄호{} 이용
- 대입문(assignment statement)
- 대입 연산자(=)는 오른쪽 표현식의 평가값을 왼쪽 변수에 저장
- a = 10
<데이터 타입>
- 데이터 타입(data type) = 자료형
- 데이터 저장 시 데이터를 종류에 따라 분류하여 적절한 크기의 공간에 저장하기 위해 필요
- 변수에 저장되는 값의 종류
- 기본 자료형 : int, char, folat 등
- 유도 자료형 : 배열, 구조체, 공용체
- 변수 선언
- 변수 : 프로그램에서 자료 값을 임시로 기억할 수 있는 저장 공간
- 컴퓨터 메모리인 RAM(Random Access Memory)에 저장
- 변수명은 자료 값을 저장하는 저장 장소의 이름
- 같은 데이터 타입 변수 여러 개 선언 시 콤마(,) 사용 : int a, b, c;
- C 기본 데이터 타입
정수형 | 문자형(1byte) | char | singed char | unsigned char |
정수형(2-4byte) | (singed) short (int) | (singed) int | (singed) long (int) | |
(unsinged) short (int) | unsinged (int) | unsinged long (int) | ||
2byte | 4byte | 4byte | ||
부동소수형(4-8byte) | float | double | long double | |
4byte | 8byte | 8byte |
- 정수 : 양수, 0, 음수
- singed : 음수 기호가 있는 정수
- unsinged : 모두 양수로만 표현하는 정수
- 데이터 타입 크기는 컴파일러마다 다를 수 있음
- 정수형
- 큰 의미에서 문자형 포함
- 좁은 의미에서 문자형을 제외한 순수하게 정수를 저장하는 자료형
- singed int의 범위 : 크기가 32비트(4바이트)이면 음수부터 양수까지 표현 가능하므로 -2^31 ~ (2^31)-1까지 표현
- unsinged int의 범위 : 0과 양수만 표현
- 문자형(char)은 왜 정수형일까? : ASCII 코드로 저장되는 문자는 정수 값으로 연산 가능
char c1 = 'a'; c1 = c1+1 printf("%c", c1) // 'b' printf("%d", c1) // 98 (b의 아스키 코드) |
- 부동소수형
- float
- 저장공간 크기 : 32비트(4바이트)
- 표현 범위 : 대략 10^-38 ~ 10^38
- 소수점 이하 6자리까지 표현
- double
- 저장공간 크기 : 64비트(8바이트)
- 표현 범위 : 대략 10^-308 ~ 10^308
- 소수점 이하 15자리까지 표현
- float보다 표현 범위가 크고 정밀도도 정확
- long double
- double보다 더 큰 저장공간을 할당하려는 의도에서 만들어졌으나 컴파일러마다 다름
- sizeof 연산자
- 저장공간의 크기를 알 수 있는 연산자
- 결과값은 크기의 바이트 값
- sizeof (변수), sizeof 변수, sizeof 자료형키워드
- printf("%d", sizeof(char)); //1
<전처리와 입출력 함수>
- 전처리기(preprocessor)
- 컴파일러가 프로그래밍 언어를 기계로 바꾸기 전에 처리해야 할 명령을 먼저 수행하는 것
- 다양한 라이브러리를 작업 중인 소스파일에서 사용할 수 있도록 헤더 파일을 포함(#include <stdio.h>)
- #define 문자열1 문자열2 : 컴파일 전에 소스파일의 문자열1을 문자열2로 치환
- printf 함수
- 여러 개의 다양한 데이터 타입을 형식화시켜 출력하는 함수
- 문자열 출력
printf("Hello World!\n");
- 변수값 출력
int a, b;
float c;
printf("%d %f %d\n", a, c, b);
printf("The number %d is my favorite number.\n", num);
- 형식 지정자
- %d : 정수(10진수)
- %f : 소수점이 있는 실수
- %c : 문자
- %s : 문자열
- %lf : double
- scanf 함수
- 여러 개의 다양한 데이터 타입을 한 번에 입력받을 수 있는 함수
/* 키보드로부터 입력된 데이터를 지정된 형식으로 변환하여 변수에 저장 */
int a;
scanf("%d", &a);
/* 임의의 개수로 입력받을 수 있음 */
int age;
float weight;
scanf("%d %f", &age, &weight);
- & : 주소 연산자, a라는 변수의 방을 찾아가서 지금 입력된 값을 a 방에 넣어줘!
- 예제 : 마일(mile)을 킬로미터(kilometer)로 변환
#include <stdio.h>
int main(void)
{
double miles, kilometer;
/* 1. 마일(miles) 데이터 입력 */
printf("Enter the distance in miles> ");
scanf("%lf", &miles);
/* 2. 마일을 킬로미터로 변환 */
kilometer = 1.609 * miles ;
/* 3. 킬로미터 데이터 출력 */
printf("That equals %f kilometers.\n", kilometer);
return 0;
}
728x90
'PROGRAMMING > C' 카테고리의 다른 글
[POSTECH MOOC] 컴퓨터공학 입문Ⅱ - 2 (0) | 2021.04.06 |
---|---|
[POSTECH MOOC] 컴퓨터공학 입문Ⅱ - 1 (0) | 2021.04.06 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 4 (0) | 2021.04.05 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 3 (0) | 2021.04.05 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 1 (0) | 2021.04.05 |
댓글