ctrl + shift + A 로 소스파일에서 코드를 바로 만들 수 있다.
ctrl + shift + N 을 하면 프로젝트도 바로 만들 수 있다.
이렇게 입력을 시켜주고 '디버그하지않고 시작'의 단축키인 'ctrl + F5'를 눌러주면
이렇게 hello, world!가 나온다!
<stdio.h>는 사전같은 역할
c언어에서 ()가 있으면 그건 함수라고 보면 된다
함수는 특정한 기능을 하는 코드들을 묶어 하나의 명령어처럼 사용이 가능하게 해준다고 한다!
\n은 Enter 역할
printf()의 소괄호안은 출력되는 내용
저렇게 많이 써도 되고,
이렇게 써도 나온다!
;를 꼭 붙여야된다!!!
한글의 마침표같은 느낌?
동해물과 백두산이
마르고 닳도록
이 문장이 출력되도록 해보자.
이렇게 두가지 방법으로 할 수 있다.
으아 저기 studio.h라 해서 오류가 났다ㅠㅠ
저건 할때마다 헷갈리는 것 같다
저번에도 헷갈려서 studio라썼는데,,, 주의하자!
/*
stdio는 Standard Input/Output library (표준입출력 라이브러리)의 약어
*/
그럼 다시
이렇게 나온다
// ->주석처리
%d : 정수출력 (1,2,3,,,,0,-1,-2,-3)
%f : 실수 출력 (3.14,-2,0, ..)
%g : 실수 출력 (지수 형태로도 출력)
%c : 문자 출력(알파벳, 숫자, 몇몇 기호, \n) - 한글, 한자, 유니코드x
%s : 문자열 출력 (문자들이 열거) - 한글 o
a가 5라는게 아니라
a에 5를 대입!
main함수가 두개인 것을 막기위해빌드에서 제외를 눌러주자
이렇게 마지막에 a + b로 써도 되지만!
이렇게 앞에 a + b = hap으로 해놨다면 hap으로 써도 출력이 된다~
/* ~ */ 까지 다 주석처리 시킬 수있다!
ctrl + h 를 누르면 저렇게 바꿀 수 있다!
정수로 했을 때와 실수로 했을 때
double 은 64비트로 8바이트가 된다.
double은 float보다 더 정확성이 높다!
float는 부동 소수점(floating point)으로 소수점이 이리저리 왔다갔다 할 수 있어서 float이고,
double은 말그대로 더블이라고 한다!ㅋㅋㅋㅋ
아 그리고 저장 공간이 2배가 되면 표현 가능한 숫자의 개수는 제곱이 된다고 한다!
2진법 - 0, 1로만 구성
int - 32비트 = 4바이트
00000000 00000000 00000000 00000000
첫번째 자리 -> 양수일 땐 0, 음수일 땐 1
-1 = 11111111 11111111 11111111 11111111
37 = 100101(2)
= 00000000 00000000 00000000 00100101
8비트 = 1바이트
바이트 : 컴퓨터에서 데이터를 처리하는 가장 작은 단위
자료형 - 정수형, 실수형
정수형
char (1바이트) - 문자를 담는 데 쓰임
short (2바이트)
long (4바이트) -2147483648 ~ +2147483647
long long (8바이트)
int (시스템에 따라서 자동 결정, 대체로 long)
실수형
float (4바이트)
double (8바이트)
unsigned(부호를 무시하겠다), signed
unsigned int a;(부호 없는 정수형 변수 선언)
unsigned 를 하면 int의 범위가 0 ~ 2^32 -1
void : 리턴값이 없는 함수의 자료형
bool : 참, 거짓을 저장하는 자료형 (= char)
int 는 4바이트라 4, char 는 1바이트라 1, float는 4바이트라 4, double은 8바이트라 8
sizeof는 크기를 알려주기 때문에 4 1 4 8이 뜨는 것이다!
%d는 정수, %f는 실수를 출력하기 때문에 3.14는 3이 되고 10은 10.000000이 된 것이다!
실수를 정수형 변수에 담을 수 없다.
정수를 실수형 변수에 담을 수 있다.
세 수의 평균은 93.666667인데 왜 93.000000이 나왔을까?
정수 / 정수 = 정수
실수 / 정수 = 실수
실수 / 실수 = 실수
이렇기 때문에 sum, 3은 둘 다 정수이므로 결과값이 93.000000인 정수가 나온다!
그런데
이렇게 sum앞에 (double)을 써주면 sum은 실수인척 하는 정수가 된다
그래서 실수 / 정수 가 되므로 결과값은
이렇게 실수인 93.666667로 나오게 된다!
scanf()를 해보려고
작성을 했는데
'scanf':this function or variable may be unsafe.라는 오류가 뜬다..!
그래서 인터넷에 찾아봤더니
프로젝트 -> 속성 -> C/C++ -> SDL검사 -> 아니요(/sdl-)
를 해보라고 해서 해봤더니 된다!
여기서 SDL이란 'Security Development Lifecycle' 라고 한다
이는 보안 프로세서로써 SW 보안개발방법을 제공해준다고 한다!
출처 : https://blog.naver.com/jskurt9352/221727226170
여튼 난 SDL을 끄고 실행을 시켰더니 저 까만 창이 떴다
여기서 Enter를 누르게 되면
연산값이 나오게 된다
콘솔창에 숫자 두개를 엔터를 치든 스페이스를 하든 떨어져 있으면 scanf가 이 숫자를 골라서 앞에있는 숫자에 a가, 뒤에있는 숫자엔 b가 되어 저런 계산 과정이 나오는 것이다!
갑자기 %d대신 %f를 써도 될까 싶어 한번 해봤다!
ctrl + h로 %d를 %f로 바꿔줬다
콘솔에 4.1과 3을 넣어줬더니 이상하게 나온다...
흠ㅁ 뭐가 문제인걸까?
이건 나중에 더 알아봐야겠다
아 강의에서 이 다음 내용 배우는구나!ㅋㅋㅋㅋㅋ
문제는 int()였다
float()이 실수를 담는데 쓰이니까
int 대신 float를 넣어보자!
바꿔주고 콘솔창에 3.14와 5.6을 입력해봤다 그랬더니!
입력이 잘 된다~
어 근데 내가 3번째줄의 int도 float로 바꿔버렸는데 계산이 된다....
뭐지???? 뭐가 다른 것일까???
궁금해서 찾아봤는데
https://blog.naver.com/pihyang24/221720946377
C언어 프로그래밍 초급 독학 ▷ 1. main 함수, int 형, char 형에 대한 이야기
안녕하세요 피향입니다.가장 기초적으로 알고 있어야 할 내용들이 끝나서 조금씩 응용하거나 세부적인 내...
blog.naver.com
여기서 이 내용을 다루는데 난 아직 이해를 못하겠다,,,,ㅎㅎ
이건 나중에 c언어에 대해 더 알게되면 다시 봐야겠다!!
다시다시
int main()으로 하고 입력했더니
똑같이 나온다!
강의에서 여기서 가운데 float를 없애고 똑같이 할 수 있나를 물어봤다!
앞에서 printf("%d + %d = %d\n", a, b, a + b);를 앞에서 int hap = a + b 를 정의(?)해놨으면 a +b대신 hap을 쓴 것이 생각나 float ~를 다 지우고 hap대신에 a +b, ... , mok 대신에 a / b를 써봤다
실행을 시키고 콘솔창에 똑같이 3.14와 5.6을 적고 enter를 누르니
똑같은 값이 나왔다!
char : 1바이트 정수형 (int : 4바이트)
character : 문자 (반각문자만! - ABCabc12356_+;/#%), 한글, 한자, 일본어. ...
반각문자(Halfwidth)와 전각문자(Fullwidth)
실행을 해보자!
이번엔 a = 67로 바꿔주고 printf안에 있는%d를 %c로 바꿔주자!
a 대신에 'C'를 넣어보자(이때 대소문자 구분 해야된다! 소문자 c를 넣었다가 99가 나와서 당황했다...!ㅋㅋㅋㅋㅋ)
이렇게 입력을 해주고 실행을 시켜주면
이렇게 결과값이 C가 나오는 것을 볼 수 있다!
이번엔 a대신에 67을 넣어보자!
그럼 결과값이 C가 나오는 것을 알 수 있다
이번엔 %c 대신 %d를 넣고 해보자
67대신 a 'C'를 넣어주면!
이렇게 67이 나온다
이렇게 C는 67이라는 값을 갖음을 알 수 있다
이러한 것을 ASCII[American Standard Code for Information Interchange]코드라고 하는데
이건 문자와 숫자를 대응시켜준다고 한다
이번엔 scanf를 이용해보자!
이렇게 입력을 하면 콘솔창이 뜰텐데 거기에 R 적어보자
그럼 이렇게 뜨게 되는데 이 원리가
R을 입력하면
1. scanf안에 %c가 문자형태로 입력을 받아 a에 넣는다.
2. R에 해당되는 ascii값이 a에 저장이 된다.
3. printf에서 a값대신 82가 들어가면 %c니까 다시 한 번 82가 ascii코드에서 해당되는 문자인 R로 바뀌어 들어간다.
R말고도 다른 문자들을 입력해도 같은 과정으로 나온다!
이번엔
printf를 앞에 써줘서 콘솔창에 처음부터 '문자입력 : '이 나오게 해보자
그럼
이렇게 뜨게 되는데 대문자R을 입력해보자
그럼 이렇게 뜨게 된다!
이 원리도 말하자면~
1. scanf에서 %c이기 때문에 R의 ascill값이 a로 들어가게 된다.
2. 이 ascii값이 printf안의 a에 저장되고, %c에는 문자인 R로 다시 바뀌어 들어가고, %d에는 a의 ascii값인 82가 들어가게된다.
따라서 저렇게 결과값이 나오는 것이다!
반대로 숫자를 입력해서 ascii코드가 무엇인지 나오는 프로그램을 만들어보자!
이렇게 해주고 실행을 했을 때
이렇게 나오게 된다. 제대로 실행되는지 알아보기 위해 위에서 다뤘던 숫자인 67을 대입해보도록 하자!
그럼 이렇게 C가 나오게 된다!
이 원리도 설명하자면~
1. scanf안의 %d가 67을 a에 저장한다.
2. a에 저장되어있는 숫자인 67을 printf안의 %d에는 67, %c에는 67을 ascii코드에 해당되는 문자인 C로 출력하게 된다.
이 과정으로 저런 결과값이 나오게 되는 것이다!
문제 3개를 풀어보자.
1. 두 숫자를 입력받아서 그 숫자들의 합을 출력하는 프로그램을 만들어 보세요.
처음에 했을때
printf("%d + %d = %d\n" a, b, a + b); 라고 써서 뭐가 문제지 하고 보다보니까 , 하나를 안써서 계속 실행이 안됐다!!ㅋㅋㅋㅋ큐ㅠㅠㅠㅠ
이제 실행을 시켜보면~!
아무것도 없는 까만 콘솔창이 뜨는데 이때 3 5를 입력해보면
이렇게 더한 값이 나온다~!
근데 강의에서 해답 보니까 %d + %d = %d로 안하고 그냥 %d만 쓰네,,,, 머쓱
실수로도 해보자!
잘 뜬다~
2. 체중(kg, 실수)과 키(m, 실수)를 입력받아서 체질량 지수를 구하는 프로그램을 만들어 보세요.
이렇게 했는데 안된다...
문제점은 print였다ㅋㅋㅋㅋ printf인데 print라고 썼어... 그리고 고친김에 단위도 추가해주고 printf("키(m) : \n");에서 \n을 빼줬다
이걸 이제 실행해주고 키에 1.7, 체중에 60을 입력해주면
이렇게 체질량 지수가 나오게 된다!
3. 알파벳을 입력받아서 그 다음 알파벳을 출력하는 프로그램을 만들어 보세요. (Z제외)
일단 ASCII코드가 필요할것 같아서 인터넷에 찾아봤다!
이렇게 b의 ascii값은 a의 ascii값보다 1이 크고 다른 알파벳들도 그러길래 식을
이렇게 만들고 실행을 시켰더니 아무것도 없는 콘솔창이 나와 한번 A를 입력시켜봤다.
다른 알파벳도 입력해봤다!
소문자도 된다! 이번엔 한번에 성공했다!ㅎㅎ
이렇게 섹션1이 끝났다! :)
(참고한 강의 : youtu.be/nbkpd0JLoJM )
'C | C++' 카테고리의 다른 글
C언어 배열과 포인터 (0) | 2020.08.20 |
---|---|
C언어 - 연산자와 제어문 (1) | 2020.08.20 |