우선 전
'정보처리기사/정처기 코딩 꿀팁' 카테고리의 글 목록
코딩하는 백수입니다
complainrevolutionist.tistory.com
여기를 참고해서 코딩 공부를 할 예정입니다!
학부 때 Python 조금 해보고
지금은 SSAFY에서 자바반인데... 정처기 문제는 너무 어려워서
C부터 조금씩 더 공부해볼 예정입니다!!
시험 같이 준비해요~!
참고로 누구 보여주려고 하는 게 아니고
제가 공부하려고 정리하는 거라 너무 기본적인 것들은 다 뺐습니다.
1. 출력
#include<stdio.h>
int main() {
printf("안녕");
printf("안녕");
printf("안녕");
return 0;
}
안녕안녕안녕으로 출력된다.
그러면
안녕
안녕
안녕
으로 출력하고 싶으면
줄 바꿈 기호("\n")을 넣으면 된다.
#include<stdio.h>
int main() {
printf("안녕\n");
printf("안녕\n");
printf("안녕\n");
return 0;
}
2. 증감연산자
#include<stdio.h>
int main() {
int a = 10;
int b = 15;
int c = a++ + --b;
int d = ++a + b--;
printf("%d\n",a); // 10
printf("%d\n", b); // 15
printf("%d\n", c); // c
printf("%d", d); // d
return 0;
}
c = 10 + 14
d = 11 + 15
전치연산자는 바로 계산된다
후치연산자는 그 다음 라인부터 계산된다
3. 비트 연산자
& 는 둘 다 true일 때만 true
^ 는 두 개가 다를 때 true
| 는 둘 중 true여도 true
>>는 비트를 이동시키는 연산자
ex) 8<< 2
8에서 2의 제곱만큼 나눠준다
ex) 8>>2
8에서 2의 제곱만큼 나눠준다.
4. 조건문
기본 if-else 조건문은 생략
switch-case문
#include<stdio.h>
int main() {
int num = 3;
switch (num) {
case 1:
printf("안녕1");
break;
case 2:
printf("안녕2");
break;
case 3:
printf("안녕3");
// break; 이거 있으면 여기서 끝!
default :
printf("안녕안녕");
break;
}
return 0;
}
3이니까 case 3 출력
break;
5. 반복문
for, while, do-while문이 있다.
나머지는 다 아니까 do-while만 보자
#include<stdio.h>
int main() {
int i = 0;
do {
printf("%d", i);
i++;
} while (i <= 5);
return 0;
}
조건 중괄호 { } 블럭을 한번 실행하고, 조건을 검사하여 반복을 결정한다.
6. 배열
#include<stdio.h>
int main() {
char a[6] = "KOREA";
printf("%s", a);
return 0;
}
이렇게도 된다고? 신기하다!
ㄴ 이유 : a라는 배열의 이름은 배열의 주소를 가리키기 때문이다
2차원 배열은 자바랑 크게 다르지 않아서 생략하겠다.
7. 함수

7-1. 파라미터
int sum (int x, int y){
int result = 0;
result = x + y;
return result;
}
return이 필수!!
void sum (int x){
int a = x;
printf("%d", %a);
}
7-2. 변수
(1) 지역 변수
main() 함수, 조건문, 반복문의 중괄호 내부와 함수의 매개 변수로 사용되는 변수
#include<stdio.h>
int hello(void);
int main() {
int k = 20;
printf("%d\n",hello());
printf("%d", k);
return 0;
}
int hello(void) {
int k = 100;
return k;
}
hello()에서 k는 100이라서 100출력!
main 안에서 k니까 20출력!
(2) 정적 변수
#include<stdio.h>
void hello(void);
int main() {
int k = 20;
hello();
hello();
hello();
return 0;
}
void hello(void) {
static k = 1;
int t = 0;
k++;
t++;
printf("%d %d\n", k, t);
}
hello() -> 2 1
hello() -> 3 1
hello() -> 4 1
→ static k라서 정적 변수!
7-3. 재귀 함수
함수 내에서 자기 자신을 호출하는 함수
#include<stdio.h>
int fact(int);
int main() {
int a=4;
printf("%d",fact(a));
return 0;
}
int fact(int n) {
if (n <= 1)
return 1;
else
return n * fact(n-1);
}
fact(4)
4 * fact(3)
4 * ( 3*fact(2))
4 * ( 3 * (2 * fact(1)))
4 * ( 3 * (2 * 1) = 24
8. 포인터 ★
포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부른다.
1) 주소 연산자(&)
주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다.
2) 참조 연산자(*)
참조 연산자는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환한다.
dereference라고 하여 역참조연산자라고도 한다.
#include <stdio.h>
int main() {
int a=3;
int b=&a;
int *c=&a;
printf("%d\n",a); //그냥 변수 a를 출력
printf("%d\n",b); //b에 저장된 a의 주소의 값을 출력
printf("%d\n",c); //포인터 변수 c에 저장된 a의 주소 출력
printf("%d\n",*c); //포인터 변수 c에 저장된 a의 주소의 값 출력
return 0;
}
printf("%d",a); //출력 결과 : 3
printf("%d",b); //출력 결과 : 1000K
printf("%d",c); //출력 결과 : 1000K
printf("%d",*c); //출력 결과 : 3
3) 다차원 포인터
#include <stdio.h>
int main() {
int a=3;
int* b=&a; //1차원 포인터 : 변수의 주소값 저장
int** c=&b; //2차원 보인터 : 1차원 포인터의 주소값 저장
printf("%d\n",b); //8행과 9행 동일
printf("%d\n",*c); // 결과값 : a의 주소
printf("%d\n",*b); //11행과 12행 동일
printf("%d\n",**c); //결과값 : 3
return 0;
}
포인터 변수 b는 a의 주소를 가리키기 때문에
b는 a의 주소이고
*b는 a의 값이다
포인터 변수 c는 b의 주소를 가리키기 때문에
c는 b의 주소이고
*c는 b의 값인데 b의 값이 a의 주소이므로 *c는 a의 주소이다.
*c가 a의 주소이므로 **c는 a의 주소의 값(즉, a의 값)이다
#include <stdio.h>
int main(){
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1);
}
*arr[1]은 arr[1]의 값 arr[1]이 b의 주소를 가리키므로
b의 주소의 값(b의 값) = 24
*arr은 a의 주소이고
**은 a의 주소의 값(a의 값) =12
24+12+1=37
9. 심화 ★

#include <stdio.h>
int main() {
int a = 10, b = 20, c = 30;
int* p[3] = {&a,&b,&c};
printf("%d\n", *p[0]); //10
printf("%d\n", *p[1]); //20
printf("%d\n", *p[2]); //30
printf("%d\n", **(p+0)); //10
printf("%d\n", **(p+1)); //20
printf("%d\n", **(p+2)); //30
return 0;
}
#include <stdio.h>
int main() {
char array[4] = "ABC";
printf("%s\n", array); //ABC 출력
printf("%s\n", array+1); //BC 출력
printf("%s\n", array+2); //C 출력
return 0;
}
#include <stdio.h>
int main() {
char array[4] = "ABC"; //배열 방식
printf("%s\n", array); // ABC
printf("%s\n", array+1); // BC
printf("%s\n", array+2); // C
char* p = "ABC"; //포인터방식
printf("%s\n", p);
printf("%s\n", p + 1);
printf("%s\n", p + 2);
return 0;
}