정보처리기사

[정보처리기사] C 언어 정리

hminor 2023. 7. 10. 16:13

문제를 풀면서 헷갈리거나 모르는 용어 정리

C 언어

  • C언어 처리 순서
    • 전처리기
    • 컴파일러
    • 어셈블러
    • 링커
  • 정수 간 나누기(정수)
    • ex) 2/3 => 0
    • ex) 2*(1/2) => 0
  • 연산자 우선순위
    • (++, --) > (+, -, *, /)
  • 콤마연산자
    • 무조건 오른쪽에 있는걸 출력
    • ex) a = (10, 20) => 20
    • ex) a = (10, (20, 30), 40) => 40
  • 소수점 표현
    • ex) a = 6.15
    • printf("%3.1f", a) => 6.2
      • 소수점까지 공간을 차지한다.
    • ex) a = 66.66
    • printf("%3.1f", a) => 66.7
      • 3자리까지 표현하더라도 정수는 다 표현하고 .1f 로 인해 소수점 1번째 자리까지는 표현해야하기에
  • 진법변환, 비트연산
    • ex) 0x11 => 16진수 11 이기에 10진수로 변환하면 17이 된다
  • 연산자 우선순위
    1. 증감 연산자 (++,--)
    2. 사칙연산 (*, /, +, -)
    3. 좌,우 시프트 연산자
    4. 비교(논리) 연산자 (<, <=, >, >=)
    5. 비트(AND, XOR)
    6. 논리(AND, OR)
  • 비트 반전(~)
    • ex) x = 5, y = -5
      • print("%d, %d", ~x, ~y) => -6, 4
      • 해당 값에서 +1 연산을 한 다음 반전시켜주기
  • %03d
    • ex) d로 전달할 값이 5의 경우
      • 출력은 005가 된다.
      • 0을 포함해서 총 3자리 숫자가 되도록 해야하기 때문
    • 만약 %3d 라고 할 경우엔
      • 5으로
      • 공백공백5 로 출력을 하게 된다.
  • switch
    • case문으로 만약 break가 없다고 했을 때는
      • case 1, case 2 와 같이 조건에 맞지 않는것이 밑에 있어도
      • 조건에 만족하는 첫 case 밑의 조건부터 default까지 다 수행하게 된다.
  • 문자열을 배열에 넣을 경우
    • ex) char str[] = 'abcde'
      • 약속으로 문자열 + \0 이 들어가게 된다
      • 그래서 [a,b,c,d,e,\0]
    • 그리고 sizeof 메서드를 사용하게 된다면 해당 요소의 타입을 확인 후 타입에 해당하는 값을 곱해줘야 한다.
      • ex) char ch[5] char str[] = "abcde" int num[] = {1,2,3,4,5}
      • print("%d, ", sizeof(ch))
      • print("%d, ", sizeof(str))
      • print("%d", sizeof(num)/sizeof(int))
        • 위의 경우에 sizeof(ch)를 하게 되면 ch는 char 타입이기에 1byte가 되고 배열의 크기는 5가 되기 때문에 1*5 해서 5가 된다
        • sizeof(str)의 경우엔 문자열을 배열에 넣을 때는 문자열 + null 이 들어가기에 배열의 크기가 6이 되고 char은 1byte이기에 1*6을 해서 6이 된다
        • sizeof(num)/sizeof(int)를 하게 되면 num은 배열의 크기가 5가 되고 type이 int이기에 int는 4byte가 되어서 4*5로 20 이 되고 sizeof(int)는 4가 되기에 5를 출력하게 된다.
  • 배열의 공간 할당
    • ex) int num[5] = {1, 2, 3} 의 경우
    • [1, 2, 3, , ]으로 남은 칸은 빈칸으로 들어가는 것이 아니라 **int 로 타입이 명시되어 있을 때** [1, 2, 3, 0, 0]으로 빈 배열의 경우엔 0을 추가해주게 되어있다.
  • &, * 다시 정리
    • &: ~의 주소값
    • *: ~의 값
  • %s 는 주소값을 받게 되는데 해당 주소값부터 null 문자 전까지 출력
  • scanf("%d", k)
    • scanf의 경우엔 뒤에 온 k는 주소값을 받는다고 한다
    • 그래서 k의 주소값에 해당하는 값에 입력받은 값을 할당 시켜준다.