Skip to content

Latest commit

 

History

History
294 lines (228 loc) · 10.7 KB

learned.md

File metadata and controls

294 lines (228 loc) · 10.7 KB

Things I've learned!

이제 목차를 써야할 수준에 다다랐다...
🏷️&출력 🏷️선 문자 🏷️유니코드 🏷️소수점 🏷️출력 자릿수 🏷️배열 🏷️포인터 🏷️문자열 입력함수
🏷️NULL 🏷️단항 연산자 🏷️값의 덧셈 🏷️형 변환 🏷️비트 시프트 연산자 🏷️논리 연산자 🏷️3항 연산
🏷️goto레이블 🏷️컴퓨터 용량 단위


1. 문자 % 출력: %%

2. +한자

윈도우에서 선 문자 입력 가능

3. 유니코드 형식: \u

4. [코드업 1015번] 소수점 출력

scanf에 %.3f와 같은 식으로 적으면 안됨.. printf에만!!!

5. [코드업 1019번] 연월일 출력

printf에 %02d와같이 적으면, 2칸을 사용해 출력하며 채워지지 않은 칸은 0으로 대체함을 뜻함

printf("%04d.%02d.%02d\n", y, m, d);

6. [코드업 1021번] 배열 메모리 포인터

📍주소 연산자 &를 사용하지 않아도 됨📍

문자 배열을 선언하는 과정에서 메모리에서 연속적으로 할당된 공간을 차지하게 되고
배열 이름 자체가 요소를 가리키는 포인터로 동작함
// 단어 하나 입력받아 출력
//
#include<stdio.h>

int main() {
  char word[51]="";
  scanf("%s", word);
  printf("%s", word);
}

7. 포인터

💡 다른 변수 또는 데이터 구조의 메모리 주소를 저장하는 변수 💡
  • 포인터 변수 선언 방법: 변수 타입 뒤에 * 기호 사용

  • 사용 예시

    int num = 10;
    int *ptr = &num;
    printf("%d\n", *ptr); // 포인터를 통해 변수의 값 읽기
    *ptr = 20; // 포인터를 통해 변수의 값 수정
    printf("%d\n", num); // 변경된 값 출력
    • 포인터를 통해 변수를 수정할 때 &num = 20;이라고 쓰면 안됨
      & 연산자는 변수의 주소를 나타내는 것일뿐, 변수를 가리키지 않음
    • *ptr = 20;ptr이 가리키는 변수 num의 값을 수정함

8. 문자열 입력 함수

scanf()

  • scanf("%s", <문자열변수명>)
  • 공백 미포함 문자열 입력 받음
  • 공백 단위로 문자열을 입력 받음

gets()

  • gets(<문자열변수명>, <문자열크기>)
    • 두 번째 매개변수인 문자열 크기는 생략 가능
  • 공백 포함 문자열 입력 받음
  • 줄바꿈 발생 시 문자열 끝에 \0이 붙여짐

fgets()

  • fgets(<문자열변수명>, <문자열크기>, stdin)

      🐤 첫 번째 매개변수: 문자열에 대한 포인터를 받음
      🐤 두 번째 매개변수: 문자열의 최대 크기를 받음
      🐤 세 번째 매개변수: 문자열을 입력 받을 stream을 받음
    
스트림

스트림이란?

  C언어에서 데이터를 입/출력하기 위한 일련의 문자열로,
프로그램과 입출력 장치 사이에서 입출력 데이터를 중계하는 역할을 함.
🐤 데이터 입출력하기 🐤
→ 스트림에 일련의 바이트 문자 기록
→ 스트림으로부터 데이터를 읽거나 특정 장치에 출력

C언어 표준 입출력 스트림

스트림 설명 장치
stdin 표준 입력 키보드
stdout 표준 출력 화면
stderr 표준 에러 화면
stdprn 표준 프린터 프린터
stdaux 표준 보조 직렬 포트

스트림의 종류

  • 텍스트 스트림: 텍스트 문자만을 처리 ex) 표준 입출력 스트림
  • 바이너리 스트림: 자료를 바이트 단위로 처리하여 모든 종류의 데이터를 처리 ex) 파일 사용 입출력

출처

  • 공백 포함 문자열 입력 받음
  • stdin: 키보드에서 입력을 받겠다는 뜻임
  • "\n"도 문자열의 일부로 인식하기 때문에 줄바꿈 문자를 '\0'으로 바꿔주어야 함 (작은 따옴표!!)

9. NULL

  • 문자 저장 방식
    • character 같은 경우 메모리 한 칸(?)에 하나로 저장됨
    • String의 경우, 문자가 하나씩 저장되고 마지막에 널 값인 \0이 저장됨
  • C언어는 문장을 저장하기 위해 연속된 공간(배열)에 연속으로 하나씩 저장하는 방법을 사용
  • 단어나 문장을 scanf()로 입력받게 되면, 📍마지막에 NULL 문자가 자동으로 입력되는 것📍
문자열의 마지막에 NULL 문자라는 특별한 의미를 가지는 문자를 삽입하여 문장임을 나타냄

10. [코드업 1040번] 단항 연산자 (-)

단항 연산자인 - (negative)를 변수 앞에 붙이면 부호가 반대로 바뀌어 계산된다

11. 문자로, 값으로, 덧셈을 할 수 있다!!😮


입력 문자의 다음 문자가 출력되는 코드

// 문자 하나 입력받고 다음 문자 출력하기
//
#include<stdio.h>

int main() {
  char first;

  scanf("%c", &first);
  printf("%c\n", first+1); // +1을 해줌으로써 그다음값을 의미함

  return 0;
}

12. [코드업 1042번] 형 변환type casting

C언어에서

  • 정수/정수 연산 결과 → 정수 몫
  • 실수/정수, 정수/실수, (float)정수/정수, 정수/(float)정수 연산 결과 → 실수 값

형 변환 종류

  • 묵시적 (데이터) 형 변환: 정수/실수 계산 결과가 자동으로 실수형으로 바뀜
  • 명시적 (데이터) 형 변환: (float)<변환대상>의 형식으로 어떤 값이나 결과의 데이터형을 강제로 바꿈

13. [코드업 1047번] 비트 시프트 연산자

  • 비트를 이동시킴
비트 연산자 진리표
비트 연산자 종류 설명 연산 이름
~
called tilde
비트를 1이면 0으로, 0이면 1로 반전시킴 비트 NOT 연산
& 대응되는 비트가 모두 1이면 1을 반환함 비트 AND 연산
| 대응되는 비트 중에서 하나라도 1이면 1을 반환함 비트 OR 연산
^ 대응되는 비트가 서로 다르면 1을 반환함 비트 XOR 연산

얘네를 왜 쓰는 걸까?

  • 2의 보수를 표현하거나
  • 그래픽 처리ex) 두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분 처리 가능를 하는데에 이용됨
  • ip 주소 & 연산 시, 두 컴퓨터가 같은 네트워크에 있는지 아닌지 판단하기도 함

source

비트 연산자 종류 의미 형식 내용
>> 오른쪽으로 이동 5>>2 5의 이진표현을 오른쪽으로 2칸 움직임
<< 왼쪽으로 이동 5<<2 5의 이진표현을 왼쪽으로 2칸 움직임
  • 여기에서 움직인다라는 것은 아래와같음
8(=23) 4(=22) 2(=21) 1(=20)
5 0 1 0 1
5>>2 0 0 0 1 0 1
5<<2 1 0 1 0

source

source

  • 2의 거듭제곱 배 출력  source

14. 논리 연산자

논리 연산자 종류 의미 내용
!
(not)
주어진 값의 반대 false의 0이 주어졌다면
!0은 true인 1 의미
&&
(and)
둘 다 만족하는 경우 둘 다 true여야 1 리턴
||
(or)
하나의 경우만 만족하는 경우 둘 다 false여야 0 리턴

15. 3항 연산

3항 연산 형식

<조건식> ? <참일 때의 값> : <거짓일 때의 값>

어떻게 이런 형식을 생각해냈을까...

  • 조건식 계산 결과가 true: 왼쪽의 값 또는 식으로 바뀜
  • 조건식 계산 결과가 false: 오른쪽의 값 또는 식으로 바뀜
코드업 1064번

// 삼항연산 - 정수 3개 입력받아 가장 작은 수 출력하기!!

#include<stdio.h>

int main(void) {
  int a, b, c;
  scanf("%d %d %d", &a, &b, &c);
  printf("%d\n", (a<b?a:b)<c?(a<b?a:b):c);

  return 0;
}

16. goto 레이블

  • 간단한 반복 실행을 수행함

goto 명령어 형식

<레이블 이름>:
    레이블 내용
  
/*반복하고 싶은 시점에*/ goto <레이블 이름>;
0이 입력될 때까지 무한 출력되는 코드

// 반복실행구조 - 0 입력될 때까지 무한 출력하기 1
//
#include<stdio.h>

int main(void) {
  int num;
replay:
  scanf("%d", &num);

  if (num!=0) {
    printf("%d\n", num);
    goto replay;
  }

  return 0;
}

17. 컴퓨터 용량 단위

이름 바이트 이진 변환 이름 바이트 이진변환
1 KB 1024 B 210 1 TB 1024 GB 240
1 MB 1024 KB 220 1 PB 1024 TB 250
1 GB 1024 MB 230 1 EB 1024 PB 260