두들낙서 C/C++ 1주차 1-18강

2022. 3. 5. 16:11·컴퓨터과학/C언어 C++스터디
두들낙서 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개 출력할 때마다 줄바꿈
	}
}

*을 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개 출력할 때마다 줄바꿈
	}
}
//점점 늘어나는 계단모양이 나온다

 

중첩 for문에서 바깥 쪽 for문의 변수가 안쪽 for문의 변수의 반복횟수에 영향을 줄 수 있다는 예시를 간접적으로 보여줌

 

'컴퓨터과학 > C언어 C++스터디' 카테고리의 다른 글

5주차 C언어 C++스터디  (0) 2022.04.02
'컴퓨터과학/C언어 C++스터디' 카테고리의 다른 글
  • 5주차 C언어 C++스터디
Yeni_aa
Yeni_aa
  • Yeni_aa
    Study with Yeni
    Yeni_aa
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • 금융자격증시험 (2)
        • 신용분석사 (1)
        • 투자자산운용사 (1)
      • 토익 (0)
      • 컴퓨터과학 (6)
        • C언어 C++스터디 (2)
        • 자구 알고리즘 스터디 (1)
        • 자바 (3)
        • 동영상 강의 (0)
        • 프로그래밍언어론 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Yeni_aa
두들낙서 C/C++ 1주차 1-18강
상단으로

티스토리툴바