c




c프로그램 노트
프로그래밍 언어
C언어
1. 1972년에 개발된 언어
2. 장점
- 크기도 작고 속도가 빠름
3. 단점
- 최근에 나온 언어에 비해 어려움

주석
- 프로그램에 대한 설명 등을 삽입하기 위해 사용
- 프로그램 동작에는 영향 X
- // : 한 줄 주석
- /* */ : 여러 줄 주석

문장
- 프로그램을 구성하는 기본 단위
- 각 문장은 세미클론(;)으로 끝남

들여쓰기
- 가독성을 위해

printf 함수
- 문자열을 출력하기 위해 사용
- 출력 내용을 " " 로 묶어서 printf 함수의 ( ) 안에 써줌
- 다음 줄로 이동하려면 \n 사용

변수
- 어떤 값을 저장하기 위해 사용
- 종류로는 정수, 실수, 문자가 있음

변수의 선언 - 문자형 변수는 char형, 정수형 변수는 int형, 실수형 변수는 float형으로 선언
- 변수의 이름은 영문자와 숫자, 밑줄 기호만을 사용

[두번째 c 프로그램]


scanf 함수
- 사용자가 입력한 값을 변수에 저장할 때 사용


scanf 함수의 형식 문자열

변수와 데이터형
데이터형 변수명; 식으로 작성

변수의 선언


sizeof 연산자
- 변수나 데이터형에 할당된 바이트 크기를 알려줌

넣을 수 있는 수의 크기는 제한되어 있음 -21억~21억
// -2147483648 ~ 2147483647
signed, unsigned
- unsigned
- 0 ~ 4294967295 까지 저장
- %ud
- signed
- -2147483648 ~ 2147483647
- %d
연산자
[산술 연산자]
기본적인 사칙연산 기능 제공
- + 덧셈
- - 뺄셈
- * 곱셈
- / 나눗셈
- % 나머지

[증감 연산자]
- ++ : 변수의 값을 1만큼 증가
- -- : 변수의 값을 1만큼 감소
- ++나 --가 앞에 있는 경우를 먼저 계산
- printf에선 증감이 앞에 있을 땐 프린트는 나중에 증감이 뒤에 있으면 프린트 먼저

[관계 연산자]
두 값을 비교할 때 사용
참이면 1, 거짓이면 0

[논리 연산자]
참과 거짓에 대한 논리 연산 기능 제공
AND(&&), OR(||), NOT(!)

AND
- 0이 있으면 0

OR
- 1이 있으면 1

NOT
- 0이 아닌 값은 모두 참

[비트 연산자]
숫자에 대한 비트 단위 연산 기능 제공
AND: &
OR: |
XOR: ^
NOT: ~
Left Shift: <<
Right Shift: >>

AND
- 0이 있으면 0
OR
- 1이 있으면 1
XOR
- 같으면 0 다르면 1
<<: 각 비트를 왼쪽으로 이동
>>: 각 비트를 오른쪽으로 이동
[복합 대입 연산자]
예: a = a+b; -> a += b;

[조건 연산자]
유일한 삼항 연산자

사용법: (조건식) ? 문장1 : 문장2

[형 변환 연산자]
값의 데이터형이 바뀌는 것

명시적인 형 변환
예:
a = (int)(12.5+10.7); 12.5+10.7을 먼저 계산 후 형 변환
b = (int)12.5 + (int)10.7; 12.5와 10.7을 먼저 형 변환하고 계산
if문
if
- 중괄호 { } 로 묶어놓은 블록이 실행여부가 결정되는 조건문
if-else 문
- if문의 조건식의 결과에 따라 조건식이 true이면 if문의 블록이 실행되고 조건식이 false이면 else문이 실행되는 조건문
if - else if - else문
- 여러개의 if 문을 합쳐놓음
- 여러개의 조건문을 위에서부터 읽어나가 가장먼저 true가 되는 블록만 실행하고 if문을 빠져나가게되며 모든 실행조건이 맞지않는경우 else문을 실행


[이미지 설명]
- carl과 rick이라는 변수 생성
- 국어 점수를 carl에 입력
- carl이 90이상일 때 A학점, 70이상일 때 B학점, 둘 다 아닐 시 C학점이 출력
- 수학 점수를 rick에 입력
- rick이 90이상일 때 A학점, 70이상일 때 B학점, 둘 다 아닐 시 C학점이 출력
for문
for
- 반복횟수를 명확히 알고 있을 때 주로 사용하는 반복문
순서
- 초기화 식 실행
- 조건식을 평가해 true면 실행문 실행, false면 for문 종료
- 실행되었다면 블록 내부의 실행문을 모두 실행시키고 증감식을 실행시킨 뒤 다시 ②조건식을 평가
break
- 조건까지만 출력
continue
- 돌아가서 다시 실행

- i라는 변수 생성
- i는 0부터 시작해서 5보다 작을 때까지 계속 출력하고 반복할 때 i의 값은 1씩 증가하라는 뜻
- 이러면 0부터 4까지 출력됨
while 문
while
- 조건식이 true일 경우 계속 반복하는 반복문
순서
- 조건식을 평가하고 평가 결과가 true이면 실행문을 실행
- 실행문이 모두 실행되면 다시 조건식으로 되돌아가서 다시 검사
- 만약 조건식이 true라면 1,2번 순서를 다시 반복하고 아니면 while문을 종료

- i값을 보고 i가 10보다 작거나 같을 때까지 출력
- i의 값은 1씩 증가
- 이러면 1부터 10까지 출력

do while
- false여도 한 번은 출력하고 그 이후로는 출력하지 않음
for 문과 같이 break, continue로 탈출 가능

- do를 먼저 쓰고 그 안에 있는 걸 실행
- i는 1씩 증가하고 i의 값이 10보다 작을 때까지 출력
- 이러면 0부터 9까지 출력

무한루프

- 조건식이 항상 참인 반복문
switch 조건문
SWITCH 조건문
- 먼저 변수의 값을 평가
- 값이 case 문을 찾아서 해당 case문 다음에 나열된 문장들을 수행
- break를 만날 때까지 문장들을 수행하고 탈출


- i값이 1이면 haha를 출력하고 끝내라는 뜻
- 만약 i값이 2면 hoho가 출력되고 1이나 2가 아닌 다른 숫자일 경우 hihi가 출력됨

switch 사칙연산


- num1과 num2라는 변수를 생성하고 symbol이라는 변수 생성
-scanf로 num1, num2, symbol의 값을 입력
-symbol이 +일 경우 case '+'를 실행
-symbol이 -일 경우 case '-'를 실행
-symbol이 *일 경우 case '*'를 실행
나눗셈을 하려면
case '/':
printf("%d / %d = %f\n", num1, num2, (float)num1/(float)num2;
break;
추가

[switch와 if문과 차이점]
- 수식의 값이 특정값인지 여러 번 비교하는 경우에는 switch 문이 더 효과적
- 값의 범위를 비교하는 경우에는 if를 사용하는 것이 더 효과적
분기문
- 프로그램의 실행 순서를 변경하기 위해 사용
- break, continue, goto, return이 있음
goto
- 프로그램의 특정 레이블 위치로 이동
- goto문으로 갑자기 아무데로나 이동하게 되면 프로그램이 이해하기 어려워지므로 꼭 필요한 경우가 아니면 goto문은 사용하지 않는 것이 바람직

- carl과 rick라는 lavel을 생성
- goto carl; 이라고 lavel 위에 작성하고 carl 밑에 goto end;를 작성하면 rick까지 출력되지 않고 carl만 출력됨
- 만약 end를 쓰지 않을 경우 rick까지 같이 출력
- 만약 goto rick; 이라고 작성할 경우 carl은 출력되지 않고 rick이 출력됨
함수
[함수]
- 특정 작업을 수행하는 코드 묶음
- 입력을 받아 처리한 후 결과를 반환
- 프로그램에서 자주 사용되는 코드를 따로 만들어 둔 다음 이를 필요할 때마다 불러서 사용하는 방법을 제공

[함수의 장점]
- 코드가 중복되지 않고 간결해짐
- 코드의 재사용성 증가
- 코드의 수정이 용이

[main 함수]
- c프로그램이 시작할 때 가장 먼저 호출이 되는 함수
- main이 없으면 코드가 있어도 실행되지 않음

[표준 함수]
- c언어에서 기본적으로 제공하는 함수
- 대표적으로 printf, scanf가 있음

[사용자 정의 함수]
- 프로그래머가 직접 작성하는 함수
- 함수 작성 후 필요할 때마다 사용

[함수명]
- 변수의 이름을 만드는 규칙과 동일
- 이름이 같은 함수를 여러 번 정의하는 것은 불가
[함수의 매개변수]
- 함수의 입력되는 값을 나타내는 변수
- 없을 수도 있고 여러 개일 수도 있음

[함수의 반환값]
- 함수가 출력하는 값
- 반환값은 하나이거나 없어야 함

[함수의 리턴형]
- 함수의 반환값의 데이터형
- 함수 맨 앞에 씀
- 함수의 반한값이 없으면 void라고도 씀

[함수의 헤더]
- 함수의 제일 첫번째 줄

[함수의 바디]
- 괄호 안에 있는 부분


- 두 수를 더하는 함수
- 함수명은 add라 짓고 정수형 변수 a, b 생성
- a와 b를 더한 값을 저장하는 정수형 변수 c 생성
- c는 정수형 변수이므로 add 앞에 int


[함수의 호출]
- 작성한 함수를 사용하기 위해
- 함수의 이름을 쓰고 ()안에 함수의 매개변수에 해당하는 실제 값을 써 줌

[인자]
- 함수의 매개변수에 해당하는 실제 값

[함수 호출 시 주의 사항]
- 호출할 때 넘겨주는 인자의 개수는 함수 정의에 있는 매개변수의 개수와 같아야 함
- 잘못된 이름으로 함수를 호출하면 안됨
지역 변수, 전역 변수, 정적 변수
- { }를 사용해서 변수의 유효범위 지정 가능
- 유효 범위를 벗어난 변수는 소멸하고 사용 불가
- 변수를 선언할 때에는 반드시 초기화

[지역 변수]
- 유효 범위가 지정된 변수
- 유효 범위 내에서만 사용 가능
- 범위를 벗어나면 소멸
- 초기화를 하지 않으면 쓰레기값을 가질 수 없음

[전역 변수]
- 유효 범위가 지정되지 않은 변수
- 선언된 지점부터 파일 전체에서 사용 가능
- 프로그램이 종료될 때까지 소멸되지 않고 그 값을 유지
- 초기화하지 않으면 0으로 자동 초기화

[변수의 유효 범위에 관한 규칙]
- 영역의 범위가 달라지면 같은 이름의 변수를 여러 번 선언할 수 있음
- 가장 가까운 영역에서 선언된 변수 이름이 우선적으로 사용
- 같은 이름의 변수가 같은 유효 범위 내에서 사용하는 것은 불가능
- 전역 변수는 변수를 지을 때 앞에 g로 표시하는 경우가 있음

[정적 변수]
- 변수 선언에 static을 붙이는 변수
- 지역 변수와 전역 변수의 특성을 동시에 보유
- 유효 범위가 있고 프로그램이 종료될 때까지 값을 유지
매크로 상수
- #define을 사용하여 하나에 기호에 다른 이름을 부여하는 방법
- 프로그램 전체에서 사용된 기호 이름이 다른 이름으로 단순 치환됨

배열
배열
- 같은 데이터형의 변수 여러 개를 동시에 생성하고 사용하게 하는 방법을 제공


배열의 선언
- arr이라는 이름의 배열을 생성
- 배열의 크기는 5 -> int 형 변수 5개를 생성
- 5개의 변수 이름은 a[0], a[1], a[2], a[3], a[4]
- 배열의 크기는 반드시 0보다 큰 정수형 상수로 지정해야 함
- 배열의 크기는 한번 정해지면 바꿀 수 없음
- 배열의 크기는 매크로 상수로 지정할 수 있음

- 더 간단하게 매크로와 반복문을 합칠 수 있음