Professional Documents
Culture Documents
정보과학 - C언어
정보과학 - C언어
- 정보과학 -
변수
• 변수(variable)
프로그램이 실행되는 동안 필요할 때마다 값을 언제든지 변경할 수 있는 기억 장소(메모리)
• 작성 규칙(명명 규칙)
• 예약어는 불가(자료형, C문법 관련 명칭)
• 숫자로 시작 불가
• 변수 이름 사이에 공백 포함 불가
• 영어 대문자와 소문자는 엄격하게 구분
• 사용 방법
• 자료형 변수명[, 변수명···]; // 대괄호는 생략 가능
• 변수에 값을 저장하기 위해 대입 연산자(=)를 사용하여 좌변에는 변수 이름을, 우변에는 값을 표현한다.
• 변수명 = 값
예시) num=10; x=2.5; z= x*x+num*3+1; …
변수로 설정할 수 없는 단어 – 예약어
예약어 종류 예약어
자료형 char short int long float double
자료형(부호) signed unsigned
자료형(변수 상태 관련) const static
문법 관련 return
문법 관련(반복문) for while do break continue
문법 관련(조건문) if else switch case default goto
자료구조 관련 sizeof typedef enum union struct
컴파일러 관련 extern auto volatile register
C언어의 자료형
0 1 8 9 31
0 1 16 17 31
고정 소수점
출력 – printf(“ 문장 “, 변수);
서식 설명 사용 가능 자료형
%d 부호 있는 10진수 정수(4B)
?에 숫자가 들어가며 숫자의 자릿수 만큼
%0?d
0을 채운 정수를 출력한다. char int short long
?에 숫자가 들어가며 숫자의 자릿수 만큼
%?d
공백을 채운 정수를 출력한다.
%lld 부호 있는 10진수 정수(8B) long long int
%o 부호 없는 8진수 정수 unsigned int, unsigned long …
%x, %X 부호 없는 16진수 정수 unsigned int, unsigned long …
%f, %lf 10진수 방식의 실수(4B, 8B)
마침표 뒤 ?에 숫자가 들어가며 숫자의 크 float double
%.?f
기만큼 소수점 이하 자릿수를 출력한다.
%c 값에 대응하는 단일 문자 char …
%s 문자열 char* char[…]
입력 – scanf(“ 문장 “, &변수);
서식 설명 사용 가능 자료형
%d 부호 있는 10진수 정수(4B)
char int short long
%?d ?에 해당하는 자리수의 정수만 입력 받는다.
%lld 부호 있는 10진수 정수(8B) long long int
%o 부호 없는 8진수 정수 unsigned
%x, %X 부호 없는 16진수 정수 unsigned
%f 10진수 방식의 실수(4B) float
%lf 10진수 방식의 실수(8B) double
%c 값에 대응하는 문자 char …
char* char[…]
%s 문자열
문자열의 경우 변수의 이름 앞에 &를 붙이지 않는다.
추가 – 이스케이프 문자
서식 설명
\n 줄 바꿈(new line)
\b 한 칸 뒤로 이동(backspace)
산술 연산자 설명 관계 연산자 설명
+ 덧셈 == 값이 서로 같아야 참
- 뺄셈 != 값이 서로 같이 않아야 참
* 곱셈 < 오른쪽 값이 더 커야 참
% 나머지 > 왼쪽 값이 더 커야 참
대입 연산자
= >= 왼쪽 값이 더 크거나 같아야 참
우변의 값을 좌변의 변수에 저장
연산자 – 증감, 복합 대입 연산자
증감 연산자 설명 사용 예 같은 표현
복합 대입 연산자 설명 사용 예 같은 표현
+= 값을 더하여 대입 a += 3 a = a + 3
-= 값을 빼서 대입 a -= 3 a = a – 3
*= 값을 곱하여 대입 a *= 3 a = a * 3
/= 값으로 나누어 대입 a /= 3 a = a / 3
%= 값으로 나눈 나머지를 대입 a %= 3 a = a % 3
연산자 – 논리 연산자
구분 비트 연산자 설명 사용 예 결과
| 두 비트 중 하나라도 1이면 1 12 | 5 13
비트 논리 연산자
^ 두 비트 중 하나만 1일 때 1 12 ^ 5 9
왼쪽 값의 전체 비트를 오른쪽 값의
<< 1 << 5 32
수 만큼 왼쪽으로 이동
비트 이동 연산자
왼쪽 값의 전체 비트를 오른쪽 값의
>> 128 >> 4 8
수 만큼 오른쪽으로 이동
연산자 – 비트 연산자(예시)
10 & 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
& 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
결과값: 2
10 | 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
결과값: 15
연산자 – 비트 연산자(예시)
10 ^ 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
^ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
결과값: 13
~10
~ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
~ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
재변환하여 값을 유추한다.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
+ 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
2의 보수란? 1의 보수 + 1
기호 상수와 상수화 변수
#include <stdio.h>
int main(void) {
int a = 0; 실수 값을 정수에 저장
float b = 2.3;
printf(“%f, %d”, b, a);
a = b / 2; 정수를 실수로 변환 후 출력
printf(“%f”, (float)a);
return 0; • If a conversion specification is invalid, the behavior is undefined. If any argument is not the
correct type for the corresponding conversion specification, the behavior is undefined.
정수를 실수로 출력함
} • 변환 사양이 유효하지 않은 경우 동작이 정의되지 않습니다. 인수가 응답하는 변환 사양에 대해
올바른 유형이 아닌 경우 동작이 정의되지 않습니다.
#include <stdio.h>
정수/정수로 정수 값 출력
int main(void) {
int a = 10, b = 3;
printf(“%d / %d = %d\n”, a, b, a / b);
printf(“%d / %d = %f\n”, a, b, (float)a / b);
return 0;
정수를 실수로 변환함
}
주석 처리
• C언어에서 주석으로 처리하는 방법은 총 2가지를 제시한다.
• 단일 행 주석( // 내용 )
• 범위 주석(/* 내용 */)
주석 처리
#include <stdio.h>
// 주석에 대한 설명
int main(void) {
int a = 10, b = 3; // 여기는 주석 처리
printf(“어떻게 하는지 모르겠다”);
/* printf(“%d / %d = %f\n”, a, b, (float)a / b);
여기도 주석이라 실행 안됨 */
return 0;
}
삼항연산자
단순 선택 단순 선택 중첩 선택 다중 선택
거짓 거짓
조건식 조건식 조건식1
값
거짓
참 참 참 조건식2
거짓 참
실행 1 실행 1 실행 1 실행 1
실행 1 실행 2 실행 3
실행 2-1 실행 2-2
선택 실행 구조(조건문)
단순 선택 … • 조건식의 계산(판단) 결과가 참인 경우에 ‘실행 1’ 부분을 실행하고
조건식 {
참
실행 1;
거짓
실행 1 }
…
…
단순 선택 • 조건식의 계산(판단) 결과가 참인 경우에 ‘실행 1’ 부분을 실행하고
if(조건식)
{ • 거짓인 경우에는 ‘실행 2’ 부분을 실행한다.
거짓 실행 1;
조건식 }
else
참
{
실행 1 실행 1 실행2;
}
…
선택 실행 구조(조건문)
중첩 선택
…
if(조건식) • 조건 선택 구조 안에 다른 조건 선택 구조를 중첩해 넣으면 여러가
조건식1
거짓 {
실행 1;
지 상황에 따라 다르게 실행할 수 있는 복잡한 선택 구조를 만들어
} 낼 수 있다.
거짓
참 조건식2 else
{
if(조건식2)
참
실행 1 {
실행2-1;
실행 2-1 실행 2-2
}
else
{
실행2-2;
}
…
…
다중 선택 switch(정수값으로 평가되는 변수나 수식, 문자) • 값에 따라 분기하는 다중 선택 구조를 사용할 수 있다.
{
case 값1:
실행1;
값
break;
• 입력된 값이 ‘값1’인 경우 ‘실행1’을 수행하고 ‘값2’인 경우 ‘실행2’를
수행한다.
case 값2:
실행2;
break;
case 값3: • 입력된 값이 ‘값1’, ‘값2’, ‘값3’ 모두 아닐 경우 default의 ‘실행‘ 을 수행
실행3; 한다.
실행 1 실행 2 실행 3 break;
default: 실행;
}
…
선택 실행 구조(조건문(if, if~else)) – 예시
#include <stdio.h>
int main() {
int age, s, h, w;
if (s == 0) {
printf(“나이, 성별, 키, 몸무게를 입력하세요.\n”);
printf(“남성\n”);
scanf(“%d %d %d %d”, &age, &s, &h, &w);
} else {
printf(“여성\n”);
if (age < 19) {
}
printf(“미성년자입니다.\n”);
}
printf(“키는 %3dcm이며 몸무게는 %2dkg입니다.”,
h, w);
return 0;
}
선택 실행 구조(조건문(switch~case)) – 예시
#include <stdio.h>
int main() {
char c;
scanf(“%c”, &c);
switch( c ) {
case ‘W’:
printf(“앞으로!”);
break;
case ‘S’:
printf(“뒤로!”);
break;
case ‘Q’:
printf(“궁극기 사용!”);
break;
case ‘1’:
case ‘2’:
printf(“무기를 꺼냈습니다.”);
break;
default:
printf(“알 수 없는 키 입니다.”);
break;
}
return 0;
}
반복 실행 구조(반복문)
• 반복 실행 구조는 조건식의 계산 결과나 값에 따라 원하는 명령들을 반복적으로 실행하는 구조
• 단순 반복, 중첩 반복의 형태로 선택 실행 구조(조건문)와 함께 사용 가능
• C언어에서 중첩 실행 구조를 반복문이라고도 부르며 문법으로는 3가지 종류가 있다
• for, while, do~while
단순 반복1 단순 반복2
for 반복 중첩 반복
while() do~while()
거짓
조건식 실행 1 실행 1 조건식1
거짓 참
참
조건식
실행 1 조건식2
실행 1 조건식 참
참
실행 2
참 거짓 거짓 실행 2
실행 3 거짓
반복 실행 구조(반복문)
단순 반복1 …
while() while(조건식) • 조건식의 계산 결과가 참인 동안 ‘실행1’ 부분을 반복적으로 실행
{
• 조건식의 계산(평가) 결과가 거짓이 되는 경우에는 ‘실행1’ 부분의
실행1;
}
반복 실행을 중단
조건식 … • 반복 중단 후 다음 명령 부분으로 진행
거짓
참
실행 1
…
단순 반복2 do • 반복을 위한 조건 검사를 나중에 수행하는 형태
do~while()
{
실행1; • ‘실행1’은 적어도 한번은 실행된다.
} while(조건식)
…
실행 1
조건식
참 거짓
for 반복
반복 실행 구조(반복문)
실행 1
…
조건식 for(실행1; 조건식; 실행3) • 실행1: 처음에 1회만 실행
{
참 • 조건식: 반복 조건 검사
실행2;
실행 2
거짓
} • 실행2: 반복 실행 내용
…
실행 3 • 실행3: 반복 실행 후 처리
• 이후 ‘조건식 검사 → 실행2 → 실행3’을 반복적으로 실행
일부 반복
반복 중단
…
반복 블록 • continue가 실행되면 이후 실행을 중단
실행 1 {
실행1; • 실행 중단 후 반복 블록의 처음으로 이동
continue;
조건식 실행2;
참
break; • Break가 실행되면 반복을 중단
실행3
continue; } • 반복 중단 이후 ‘실행4’를 수행
거짓 실행4
…
break;
반복 실행 구조(반복문 – for) – 예시
#include <stdio.h>
int main() {
int a=2;
for(int i = 0; i<=9; i+=1) {
printf(“%dx%d=%d”, a, i, a*i);
}
return 0;
}
반복 실행 구조(반복문 – while) – 예시
#include <stdio.h>
int main() {
int a=1;
while (a < 5) {
printf(“%d\n”, a);
a += 1;
}
return 0;
}
반복 실행 구조(반복문 – do~while) – 예시
int main() {
int a=5;
do {
printf(“%d\n”, a);
a += 1;
} while (a < 5);
return 0;
}
배열(array)
• 같은 이름으로 참조 번호만 다르게 하여 데이터를 저장하고 관리하는 변수
• 사용 예시
자료형 이름[개수];
• 예시
int a[10]; // 정수값을 10개 저장하는 a라는 이름의 배열 선언
배열 개수 10
int a[10] =
배열(array)
int a[10]; // 정수값을 10개 저장하는 a라는 이름의 배열 선언
a[0] = 1;
a[1] = 2;
a[3] = ‘A’; // 문자 A는 정수로 저장됨.
a[5] = 1.234; // 배열 a의 자료형은 int(정수)여서 소수점 이하 자리는 제거됨.
배열 개수 10
int a[10] = 1 2 0 65 0 1 0 0 0 0
a[0] a[9]
배열(array)과 리스트 차이점
• C언어 배열과 파이썬 리스트(List)는 많은 구조적 차이점이 존재한다. 이에 따라 파이썬의 리스트에
서 작동하는 append, pop, insert등 함수를 사용할 수 없다.
#include <stdio.h>
• C언어의 배열은
• 요소 삭제 불가
• 요소 삽입 불가 int main() {
• 슬라이스( [ : ] ) 불가
int a[10];
a.append(); // 컴파일 에러!
a.insert(); // 컴파일 에러!
a = a[1:2]; // 컴파일 에러!
return 0;
}
배열 – 예시
#include <stdio.h>
int main() {
int a[10];
for(int i = 0; i < 10; i+=1) {
scanf(“%d”, &a[i]);
}
for(int i = 0; i < 10; i+=1) {
printf(“%d_”, a[i]);
}
return 0;
}
2차원 배열 – 예시
#include <stdio.h>
int main() {
int a[4][4] = {}, as[4][4]; = {};
for(int i = 1; i < 4; i+=1) {
for(int j = 1; j < 4; j+=1) {
scanf(“%d”, &a[i][j]);
}
}
for(int i = 1; i < 4; i+=1) {
for(int j = 1; j < 4; j+=1) {
as[i][j] = a[i][j] + as[i-1][j] + as[i][j-1] + as[i-1][j-1];
}
}
for(int i = 1; i < 4; i+=1) {
for(int j = 1; j < 4; j+=1) {
printf(“%d”, as[i][j]);
}
}
return 0;
}
함수(function)
• 어떤 상황에 필요한 작업들을 하나로 묶어 정의하고 이를 편리하게 불러 사용할 수 있는 작업 단위
• 모듈화 구조라고 볼 수 있음
…
자료형 함수이름(매개변수1, ...) • 함수: 여러 가지 필요한 작업들을 묶어 원하는 형태로 이름을 붙여 정의
{
작업1;
작업2;
작업3;
... • 함수의 실행 결과를 반환한다.
return (반환값);
} • 함수의 ‘반환 값’에 따라 ‘자료형’을 정한다.
…
… …
int f(int a) • 한 개의 정수 값을 받아 0 void f(int a) • 반환하는 값이 없을 경우
{ 보다 큰지 확인하고 0보다 {
작을 경우 –를 붙여(절대값) • 반환값의 자료형을 void로
if (a > 0) { printf(“%d이(가) 좋아요!”, a);
return a; 함수를 호출한 곳에 반환 return; // 생략 가능
설정하면 된다.
} else { 한다. }
return -a; …
}
}
…
함수(function)
• 어떤 상황에 필요한 작업들을 하나로 묶어 정의하고 이를 편리하게 불러 사용할 수 있는 작업 단위
• 모듈화 구조라고 볼 수 있음
int main() {
int a=3, b=4;
swap(&a, &b); // 함수 호출
printf("main: %d %d\n", *a, *b);
return 0;
}
지역변수, 전역변수
#include <stdio.h>
int a; // 전역 변수로 자동으로 0으로 초기화 된다.
void globalTest() {
a += 10; // 전역 변수를 활용
• 지역 변수: 중괄호 내부에 선언된 변수 printf(“global 테스트: %d\n”, a);
}
• 전역 변수: 파일 내부, 함수 외부에 선언된 변수
int main() {
int b = 3; // 지역 변수
printf("지역변수 테스트: %d\n", b);
globalTest();
{
int c = 7; // 지역 변수
printf("지역변수 테스트: %d\n", c);
}