이제 목차를 써야할 수준에 다다랐다...
🏷️&출력 🏷️선 문자 🏷️유니코드 🏷️소수점 🏷️출력 자릿수 🏷️배열 🏷️포인터 🏷️문자열 입력함수
🏷️NULL 🏷️단항 연산자 🏷️값의 덧셈 🏷️형 변환 🏷️비트 시프트 연산자 🏷️논리 연산자 🏷️3항 연산
🏷️goto레이블 🏷️컴퓨터 용량 단위
윈도우에서 선 문자 입력 가능
scanf에 %.3f
와 같은 식으로 적으면 안됨.. printf에만!!!
printf에 %02d
와같이 적으면, 2칸을 사용해 출력하며 채워지지 않은 칸은 0으로 대체함을 뜻함
printf("%04d.%02d.%02d\n", y, m, d);
📍주소 연산자 &
를 사용하지 않아도 됨📍
문자 배열을 선언하는 과정에서 메모리에서 연속적으로 할당된 공간을 차지하게 되고
배열 이름 자체가 요소를 가리키는 포인터로 동작함
// 단어 하나 입력받아 출력
//
#include<stdio.h>
int main() {
char word[51]="";
scanf("%s", word);
printf("%s", word);
}
💡 다른 변수 또는 데이터 구조의 메모리 주소를 저장하는 변수 💡
-
포인터 변수 선언 방법: 변수 타입 뒤에
*
기호 사용 -
사용 예시
int num = 10; int *ptr = # printf("%d\n", *ptr); // 포인터를 통해 변수의 값 읽기 *ptr = 20; // 포인터를 통해 변수의 값 수정 printf("%d\n", num); // 변경된 값 출력
- 포인터를 통해 변수를 수정할 때
&num = 20;
이라고 쓰면 안됨
∵&
연산자는 변수의 주소를 나타내는 것일뿐, 변수를 가리키지 않음 *ptr = 20;
은 ptr이 가리키는 변수 num의 값을 수정함
- 포인터를 통해 변수를 수정할 때
scanf("%s", <문자열변수명>)
- 공백 미포함 문자열 입력 받음
- 공백 단위로 문자열을 입력 받음
gets(<문자열변수명>, <문자열크기>)
- 두 번째 매개변수인 문자열 크기는 생략 가능
- 공백 포함 문자열 입력 받음
- 줄바꿈 발생 시 문자열 끝에
\0
이 붙여짐
-
fgets(<문자열변수명>, <문자열크기>, stdin)
🐤 첫 번째 매개변수: 문자열에 대한 포인터를 받음 🐤 두 번째 매개변수: 문자열의 최대 크기를 받음 🐤 세 번째 매개변수: 문자열을 입력 받을 stream을 받음
스트림
스트림이란?
C언어에서 데이터를 입/출력하기 위한 일련의 문자열로,
프로그램과 입출력 장치 사이에서 입출력 데이터를 중계하는 역할을 함.
🐤 데이터 입출력하기 🐤
→ 스트림에 일련의 바이트 문자 기록
→ 스트림으로부터 데이터를 읽거나 특정 장치에 출력
C언어 표준 입출력 스트림
스트림 | 설명 | 장치 |
---|---|---|
stdin | 표준 입력 | 키보드 |
stdout | 표준 출력 | 화면 |
stderr | 표준 에러 | 화면 |
stdprn | 표준 프린터 | 프린터 |
stdaux | 표준 보조 | 직렬 포트 |
스트림의 종류
- 텍스트 스트림: 텍스트 문자만을 처리 ex) 표준 입출력 스트림
- 바이너리 스트림: 자료를 바이트 단위로 처리하여 모든 종류의 데이터를 처리 ex) 파일 사용 입출력
- 공백 포함 문자열 입력 받음
- stdin: 키보드에서 입력을 받겠다는 뜻임
"\n"
도 문자열의 일부로 인식하기 때문에 줄바꿈 문자를'\0'
으로 바꿔주어야 함 (작은 따옴표!!)
- 문자 저장 방식
- character 같은 경우 메모리 한 칸(?)에 하나로 저장됨
- String의 경우, 문자가 하나씩 저장되고 마지막에 널 값인 \0이 저장됨
- C언어는 문장을 저장하기 위해 연속된 공간(배열)에 연속으로 하나씩 저장하는 방법을 사용
- 단어나 문장을 scanf()로 입력받게 되면, 📍마지막에 NULL 문자가 자동으로 입력되는 것📍
문자열의 마지막에 NULL 문자라는 특별한 의미를 가지는 문자를 삽입하여 문장임을 나타냄
단항 연산자인 - (negative)를 변수 앞에 붙이면 부호가 반대로 바뀌어 계산된다
입력 문자의 다음 문자가 출력되는 코드
// 문자 하나 입력받고 다음 문자 출력하기
//
#include<stdio.h>
int main() {
char first;
scanf("%c", &first);
printf("%c\n", first+1); // +1을 해줌으로써 그다음값을 의미함
return 0;
}
C언어에서
정수/정수
연산 결과 →정수 몫
실수/정수
,정수/실수
,(float)정수/정수
,정수/(float)정수
연산 결과 →실수 값
형 변환 종류
- 묵시적 (데이터) 형 변환: 정수/실수 계산 결과가 자동으로 실수형으로 바뀜
- 명시적 (데이터) 형 변환:
(float)<변환대상>
의 형식으로 어떤 값이나 결과의 데이터형을 강제로 바꿈
- 비트를 이동시킴
비트 연산자 종류 | 설명 | 연산 이름 |
---|---|---|
~ called tilde |
비트를 1이면 0으로, 0이면 1로 반전시킴 | 비트 NOT 연산 |
& |
대응되는 비트가 모두 1이면 1을 반환함 | 비트 AND 연산 |
| |
대응되는 비트 중에서 하나라도 1이면 1을 반환함 | 비트 OR 연산 |
^ |
대응되는 비트가 서로 다르면 1을 반환함 | 비트 XOR 연산 |
- 2의 보수를 표현하거나
- 그래픽 처리ex) 두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분 처리 가능를 하는데에 이용됨
- ip 주소 & 연산 시, 두 컴퓨터가 같은 네트워크에 있는지 아닌지 판단하기도 함
비트 연산자 종류 | 의미 | 형식 | 내용 |
---|---|---|---|
>> |
오른쪽으로 이동 | 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 |
- 2의 거듭제곱 배 출력 source
논리 연산자 종류 | 의미 | 내용 |
---|---|---|
! (not) |
주어진 값의 반대 | false의 0이 주어졌다면 !0은 true인 1 의미 |
&& (and) |
둘 다 만족하는 경우 | 둘 다 true여야 1 리턴 |
|| (or) |
하나의 경우만 만족하는 경우 | 둘 다 false여야 0 리턴 |
<조건식> ? <참일 때의 값> : <거짓일 때의 값>
어떻게 이런 형식을 생각해냈을까...
- 조건식 계산 결과가 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;
}
- 간단한 반복 실행을 수행함
<레이블 이름>: 레이블 내용 /*반복하고 싶은 시점에*/ goto <레이블 이름>;
0이 입력될 때까지 무한 출력되는 코드
이름 | 바이트 | 이진 변환 | 이름 | 바이트 | 이진변환 |
---|---|---|---|---|---|
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 |