두들낙서 C/C++ 1주차 1-18강
- 2강 Hello Wolrd 해석해보기
#include <stdio.h>
int main()
{
printf("Hello, World\n"); #printf( )함수는 한글, 영어 다 출력 가능
}
<stdio.h>라는 파일을 include해라.
<stdio.h>에 printf, 등등의 함수가 있음.
- \n은 엔터키
#include <stdio.h>
int main()
{
printf("Hello, World\nHello, World!\n"); //이렇게 하면 두 번 출력
}
#include <stdio.h>
int main()
{
printf("동해물과 백두산이\n마르고\n닳도록");
}
//다른방법
#include <stdio.h>
int main()
{
printf("동해물과 백두산이\n");
printf("마르고\n");
printf("닳도록\n");
}
- 3강 printf로 다양한 데이터를 출력해보자
#include <stdio.h>
int main()
{
//%d: 정수를 출력
printf("%d + %d = %d\n", 2, 3, 5);
//%f: 실수를 출력
printf("%f\n", 3.14); //뒤에 자동으로 소숫점 6째자리까지 출력
printf("%.2f\n", 3.141592); //소수점 둘째자리까지만 출력
//%g: 실수 출력(지수 형태로도 출력)
printf("%g\n", 3.141592);
printf("%.3g\n", 8565244.122256); //유효숫자+제곱수
//%c: 문자 출력(알파벳, 숫자, 기호) <-- 한글, 한자, 유니코드는 X
printf("%c %c %c\n", 'a', 'b', 'c');
printf("%c\n", 97); //이렇게 해도 a가 출력됨.
//%s: 문자열 출력
printf("%s\n", "안녕하세요!");
}
- 4강 변수
#include <stdio.h>
int main()
{
int a = 2;
int b = 3;
printf("%d + %d = %d\n", a, b, a + b);
}
//변수이름: 알파벳 대소문자 , _ , 숫자(첫번째 글자) 가능
//ex int abc, 2a, a2, _under_score
/* int main()
{
int a = 2;
int b = 3;
int sum = a + b;
printf("%d + %d = %d\n", a, b, sum);
} */
변수이름: 알파벳 대소문자 , _ , 숫자(첫번째 글자) 가능
ex int abc, 2a, a2, _under_score
- 5강 자료형 part 1
#include <stdio.h>
int main()
{
//int: 32bit= 4byte, 정수를 담는 데 쓰임
int a = 5;
int b = 3;
int hap = a + b;
int cha = a - b;
int gop = a * b;
int mok = a / b;
int namugi = a % b;
printf("%d + %d = %d\n", a, b, hap);
printf("%d - %d = %d\n", a, b, cha);
printf("%d * %d = %d\n", a, b, gop);
printf("%d / %d = %d\n", a, b, mok); //몫이고
printf("%d %% %d = %d\n", a, b, namugi); //나머지
}
#include <stdio.h>
int main()
{
//float:32비트 (4바이트), 실수를 담는 데 쓰임
//double:64비트 (8바이트), 실수를 담는 데 쓰임
float a = 9.8;
float b = 3.14;
float hap = a + b;
float cha = a - b;
float gop = a * b;
float mok = a / b;
printf("%f + %f = %f\n", a, b, hap);
printf("%f - %f = %f\n", a, b, cha);
printf("%f * %f = %f\n", a, b, gop);
printf("%f / %f = %f\n", a, b, mok); //몫
//부동소수점: 소수점이 floating 한다는 뜻.이리저리 움직일 수 있다 뭐 그런 뜻
}
- 5강 자료형 part 2
2진법 자료형 총정리
10진법: 한 자리수 늘어날 때마다 10배
12345 = 1*10^4 + 2*10^3 + 3*10^2 + 4*10 + 5
2진법: 0,1로만 구성, 한 자리수 늘어날 때마다 2배
100110 (2) = 1*2^5 + 1*2^2+ 1*2 = 38
int : 32bit : 4byte = 8bit : 1byte
00000000 00000000 00000000 00000101
11111111 11111111 11111111 11111111 == -1
5 = 101(2)
37 = 10101
8비트 = 1 바이트
바이트: 컴퓨터에서 데이터를 처리하는 가장 작은 단위
자료형 - 정수형, 실수형
정수형
char (1 바이트) - 문자를 담는 데 쓰임
short (2 바이트)
long (4 바이트) -2147483648 ~ +2147483647 (-2^31 ~ 2^31-1 사이의 수의 개수는 2^32개)
long long (8 바이트)
int (대체로 long, 시스템에 따라 자동 결정 )
실수형
float (4 바이트)
double (8 바이트)
unsigned(부호를 무시), signed
unsigned int a; //부호없는 정수형 변수,-를 쓰지 않겠다 ex) 0~ +4294967295
void: 리턴값이 없는 함수의 자료형
bool: 참, 거짓을 저장하는 자료형 (그냥 = char쓰는 거랑 똑같음 8비트 쓰니까)
- 6강 sizeof 연산자와 형변환
#include <stdio.h>
int main()
{
printf(" %d %d %d %d\n", sizeof(int), sizeof(char), sizeof(float), sizeof(double));
int a; char b; float c; double d;
printf("%d %d %d %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));
}
//sizeof(x) : x의 크기를 알려줌
각각 바이트 크기가 출력된 것임.
#include <stdio.h>
int main()
{
int a = 3.14;
double b = 10;
printf("%d %f\n", a, b);
}
실수를 정수형 변수에 담을 수 있다.
정수를 실수형 변수에 담을 수 있다.
#include <stdio.h>
//형변환: 자료형을 다른 자료형으로 바꾸는 작업
int main()
{
int math = 90, korean = 95, english = 96;
int sum = math + korean + english;
double avg = (double)sum / 3; //sum이 잠시동안 실수가 됨. 실수/정수 = 실수가 나오게 된다!
printf("%f\n", avg); //93.666667이 나온다
}
// 정수 / 정수 = 정수
// 실수 / 정수 = 실수
// 실수 / 실수 = 실수
만약 double avg = sum/3 하면 93.0000000이 된다. 정수/정수= 정수니까
- 7강. 입력받기
scanf( )쓸 때: 프로그램 맨 첫 번째 행에 #define _CRT_SECURE_NO_WARNINGS 붙이거나 OR scanf_s( )로 사용하기
strcpy( )도 마찬가지로 첫 행에 #define _CRT_SECURE_NO_WARNINGS 붙이거나 strcpy_s( s, s의 길이, t)로 인수변경
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b); //&: 포인터 , scanf를 쓸 때는 포인터를 써야한다.
int hap = a + b;
int cha = a - b;
int gop = a * b;
int mok = a / b;
int namugi = a % b;
printf("%d + %d = %d\n", a, b, hap);
printf("%d - %d = %d\n", a, b, cha);
printf("%d * %d = %d\n", a, b, gop);
printf("%d / %d = %d\n", a, b, mok); //몫
printf("%d %% %d = %d\n", a, b, namugi); //나머지
}
scanf("%d%d", &a, &b); //16과 7을 입력했다면 → scanf는 16과 7을 각각 %d로 인식→ &a, &b로 넣어줌
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float a, b;
scanf("%f %f", &a, &b); //&: 포인터 , scanf를 쓸 때는 포인터를 써야한다.
float hap = a + b;
float cha = a - b;
float gop = a * b;
float mok = a / b;
printf("%f + %f = %f\n", a, b, hap);
printf("%f - %f = %f\n", a, b, cha);
printf("%f * %f = %f\n", a, b, gop);
printf("%f / %f = %f\n", a, b, mok); //몫
}
- 8강. char 형과 ASCII코드
- char: 1바이트 정수형 (int : 4바이트)
- character: 문자(반각문자 ABCabcdefg_+*?#@%) , 한글, 한자, 유니코드 등은 적용이 안됩니다!
ASCII: 문자-숫자에 대응

#include <stdio.h>
int main() {
char a = 67;
printf("%c\n", a);
printf("%c\n", 'C');
printf("%c\n", 67); //전부 C 출력
printf("%d\n", 'C'); // 67출력
//즉 'C' == 67
}
#include <stdio.h>
int main() {
char a; //'A'입력
scanf_s("%c", &a); //a에는 65가 저장됨
printf("당신이 입력한 문자는 %c 입니다.\n", a); //a에 저장된 65가 %c에 적용되서 'A'가 됨.
}
문자입력 받고 ASCII값 출력하는 프로그램
#include <stdio.h>
int main() {
char a;
printf("문자 입력: "); // 't'
scanf_s("%c", &a); // a에는 116이 들어감
printf("%c의 ASCII값 : %d\n", a,a);
}
ASCII값(숫자) 입력 받고 문자 출력하는 프로그램
#include <stdio.h>
int main() {
int a;
printf("숫자 입력: "); // 65입력
scanf_s("%d", &a); // a에 65가 저장
printf("%d의 해당하는 문자는 : %c\n", a,a); //%c에서 65가 문자 'A'로 전환
}
- 9강. 1부(입출력과 변수 종합문제)
//1. 두 숫자를 입력받아서 합을 출력하는 프로그램
#include <stdio.h>
int main()
{
int a, b;
scanf_s("%d %d", &a, &b);
printf("%d + %d = %d", a, b, a + b);
}
//2. 체중과 키를 이용해 체질량 지수 구하기
#include <stdio.h>
int main() {
float w, t;
scanf_s("%f %f", &w, &t);
printf("당신의 체질량 지수는: %f 입니다\n", w / (t*t));
}
//3. 알파벳을 입력 받아 그 다음 알파벳을 출력하는 프로그램 만들기
#include <stdio.h>
int main()
{
char a;
scanf_s("%c", &a);
printf("다음 알파벳은 %c 입니다.", a + 1);
}
- 10강. 변수로 연산하기
산술연산자들
+, -, *, /, =
+= -= *= /= %/
++ =
#include <stdio.h>
int main()
{
int a = 5;
printf("a는 원래 %d 였다....\n", a);
a = a + 3; //대입연산
printf("3을 더했더니 %d가 됐다..\n", a);
}
int a = 5;
a += 6; // a = a + 6
a *= 7; // a = a * 7
a %= 7; // a = a % 7
a++ // a = a + 1
a-- // a = a - 1
전치
b= ++a
--> a에다 1을 증가시키고 그 값을 b에 대입
후치
b= a++
-->b에 먼저 a값을 저장하고 그다음에 a+1
--> 같은 표현으로
b=a;
a++; 해줘도 된다.
- 11강. 변수로 연산하기(2)
비교연산자, 논리연산자
//비교연산자, 논리연산자
#include <stdio.h>
int main()
{
int a ,b;
scanf_s("%d %d", &a, &b);
int p = a > b; //참: 1, 거짓: 0
int q = a < b;
int r = a == b; // ==: 같다
printf("%d\n", p);
printf("%d\n", q);
printf("%d\n", r);
}
//비교연산자, 논리연산자
#include <stdio.h>
int main()
{
int a ,b;
scanf_s("%d %d", &a, &b);
//bool: 진리값 저장용 변수 (1바이트)
bool p = a > b; //참: 1, 거짓: 0
bool q = a < b;
bool r = a == b; // ==: 같다
printf("%d\n", p);
printf("%d\n", q);
printf("%d\n", r);
}
Q. bool이 식별자로 정의되어 있지 않다고 뜬다.
A. 소스코드 확장자를 c로 했기 때문, <stdbool.h>를 인클루드해주면 된다. cpp로 설정했다면 인클루드 할 필요없이 사용 가능하다.
- 12강. 경우 나누기
#include <stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
if (n % 2 == 0) {
printf("n은 짝수\n");
}
else {
printf("n은 홀수\n");
}
}
위의 경우와 비슷한 예시로 본다면
#include <stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
//0, 1만 있다.
if (n % 2) { //n이 홀수일 때 1이니까 참으로 인식
printf("n은 홀수\n");
}
else {
printf("n은 짝수\n");
}
}
//if else if else 써보기
//파이썬에서는 if, elif, else임
#include <stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
if (n > 0) {
printf("n은 양수\n");
}
else if (n == 0) {
printf("n은 0\n");
}
else {
printf("n은 음수\n");
}
}
- if문 잘 쓰기
//중첩 if문
//중괄호 코딩 스타일
//세 숫자 중 최댓값 구하기
#include <stdio.h>
int main()
{
int a, b, c;
scanf_s("%d%d%d", &a, &b, &c);
if (a > b) {
// a > b > c
// a > c > b
// c > a > b
if (a > c) {
printf("%d\n", a);
}
else {
printf("%d\n", c);
}
}
else { // b > a
// c > b > a
// b > c > a
// b > a > c
if (b > c) {
printf("%d\n", b);
}
else {
printf("%d\n", c);
}
}
}
//if문 깔끔하게 줄이는 법 --> 대신 이해하기에는 어려움
#include <stdio.h>
int main(){
int a, b, c;
scanf_s("%d%d%d", &a, &b, &c);
if (a > b) {
if (a > c) printf("%d\n", a);
else printf("%d\n", c);
}
else if (b > c) printf("%d\n", b);
else printf("%d\n", c);
}
- 14강. switch와 goto문
#include <stdio.h>
int main(){
int choice;
makeChoice:
printf("세 게임: 1\n");
printf("불러오기: 2\n");
printf("설정: 3\n");
printf("크레딧: 4\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
printf("새 게임.\n");
break; //break에 걸리면 중괄호 바로 밖으로 나갈 수 있음. 안 걸면 전체가 실행되버림!
case 2:
printf("불러오기.\n");
break;
case 3:
printf("설정.\n");
break;
case 4:
printf("크레딧.\n");
break;
default: //나머지 예외 경우 처리
printf("잘못 입력하셨습니다.");
goto makeChoice; // goto를 만나면 다시 위로 올라감
break;
}
}
- 15강. 반복하기 while문
while
//반복문 (while)
#include <stdio.h>
int main(){
int i = 1;
while (i<=10) {
printf("%d\n", i);
i++;
}
}
do while
//do while
#include <stdio.h>
int main() {
int i = 18;
do {
printf("%d\n", i);
i++;
} while (i <= 10);
}
//18은 while조건에 안 맞으니까 실행이 안되어야 하지만, do while을 하면 do행안에 있는 식은 딱 한번은 실행됨.
*while문 안에 true를 적어주면 무한 반복된다
*do while은 처음 한 번은 반드시 실행해야 할 때 쓰면 좋다.
- 16강 for문 (1)
//for문과 while문 비교
#include <stdio.h>
int main() {
/*
int i;
while (i <= 10)
{
printf("%d", i);
i++;
}
*/
for (int i = 1; i <= 10; i++)
printf("%d", i);
}
for(1 , 2, 3 ){
4
}
이런식으로 for문이 있다면 1, 2->4->3의 순서가 반복됨. 2의 조건에 벗어나는 순간 for문을 빠져나옴.
팁)반복문 쓸 때 시작값, 끝 값을 입력해보는 습관을 가지자. 여기선 1과, n을 대입해보기, +)극단적인 값도 입력해보기
//for문과 while문 비교
#include <stdio.h>
//n전까지의 1, 2, 4, 8, 16 ,32 ... 2의 제곱 출력
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i *= 2) {
printf("%d\n", i);
}
}
//for문과 while문 비교
#include <stdio.h>
//1부터 n까지 합 출력하는 프로그램
int main() {
int n;
scanf_s("%d", &n);
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
}
//for문과 while문 비교
#include <stdio.h>
//*를 n개 출력하기
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
printf("*");
}
printf("\n");
}
- 17강 for문 (2)
for문의 융통성
for (int i = 1; true; i++){
//초기값 설정 안해도 되고
// 조건을 생략하면 --> 그냥 true로 가정이라 무한반복
// 증가를 안하고 싶으면 비워둬도 됨.
}
<while문으로 만든 경우>
//2^0 = 1
//2^1 = 2
// .. 2^6 = 64
// ...과 같은 프로그램을 만들어보자
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int i = 0, t = 1;
while (i <= n) {
printf("2^%d = %d\n", i, t);
t*= 2;
i++;
}
}
<for문으로 만든 경우>
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int t = 1;
for (int i = 1; i <= n; i++) {
printf("2^%d = %d\n", i, t);
t *= 2;
}
}
그런데 위의 for문은 더 축약이 가능하다.
//위의 for문을 축약한 코드
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
for (int i = 0, t = 1; i <= n; i++, t *= 2) {
printf("2^%d = %d\n", i, t);
}
}
다른 코드도 생략, 축약해보자
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
printf("%d\n", sum);
}
위의 코드를 축약하면 아래와 같다.
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
int sum, i;
for (i = 1, sum = 0; i <= n; sum += i, i++);
printf("%d\n", sum);
}
Q.
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1, sum = 0; i <= n; sum += i, i++); <-- sum이 정의되지 않았고, 초기화되지 않았다고 뜬다. for문 안에서 정의했기 때문에 밖에서 printf가 하면 초기화가 안됐다고 뜨는 걸까??
printf("%d\n", sum);
}
- 18강 for문 (3)
- break: 반복문 한 개를 빠져나옴
- continue
- 중첩 for문
break예시
include <stdio.h>
int main() {
for (int i = 1; ; i++) {
int k;
scanf_s("%d", &k);
if (k == 0)
break;
printf("%d번째: %d\n", i, k);
}
}
continue
중첩for문
//정사각형을 출력하자1
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("*"); //*이 n번만큼 출력된다.
}
printf("\n"); //*을 n개 출력할 때마다 줄바꿈
}
}
//정사각형을 출력하자2
#include <stdio.h>
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("*"); //*이 n번만큼 출력된다.
}
printf("\n"); //*을 n개 출력할 때마다 줄바꿈
}
}
//점점 늘어나는 계단모양이 나온다
'컴퓨터과학 > C언어 C++스터디' 카테고리의 다른 글
5주차 C언어 C++스터디 (0) | 2022.04.02 |
---|