본문 바로가기
2CHAECHAE 학교생활/객체지향프로그래밍(C++)

[ 객체지향프로그래밍(C++) 3주차 ① ]

by 2CHAE._.EUN 2022. 3. 21.

[ 3주차 - 1 ]

 

if 조건식 

0은 자동으로 false로 변환되고, 0이 아닌 값은 true로 변환된다. 

 

#include <iostream>
using namespace std;

int  main() {
	int a, b;
	cout << "Enter two numbers : ";
	cin >> a >> b;
	if (b) {
		cout << a / b << "\n";
	}
	else {
		cout << "Cannot divide by zero\n";
	}

	return 0;
}

 

 

for 반복문

 

< 1과 10까지 사이 수의 제곱근을 출력 >

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int num;
	double sq_root;

	for (num = 1; num < 10; num++) {
		sq_root = sqrt((double)num);
		cout << num << " " << sq_root << "\n";
	}
}

 

 

< _kbhit() : 사용자가 키보드에서 하나의 키를 누를 때 까지 대기 ( 헤더 파일 conio.h를 사용 ) >

 

#include <iostream>
#include <conio.h>
using namespace std;

int main() {
	int i;

	// 하나의 키를 누를 때까지 수들을 입력한다.
	for (i = 0; !_kbhit(); i++) {
		cout << i << ' ';
	}

	return 0;
}

 

< 범위 기반 for 반복문 >

//배열 원소의 개수 만큼 반복

for( auto 변수 : 배열이름 ) { //일반 변수
	반복할 실행문;
}

for ( auto &변수 : 배열이름 ) { //참조형 변수
	반복할 실행문;
}

 

#include <iostream>
using namespace std;

int main(){
	int aList[5] = { 10,20,30,40,50 };
	cout << "범위 기반 for문\n";

	for (auto i : aList) {
		cout << i << ' ';
		i = 15; //aList[i]에 저장되지 않음
	}
	cout << endl;

	for (int k = 0; k < 5; k++) {
		cout << aList[k] << ' ';
	}
	cout << endl;

	for (auto &i : aList) {
		cout << i << ' ';
		i = 15; //aList[i]에 저장됨
	}
	cout << endl;

	for (int k = 0; k < 5; k++) {
		cout << aList[k] << ' ';
	}
	cout << endl;

	return 0;
}

 

i가 일반 변수일 경우 배열의 원소 수만큼 반복하면서 배열의 원소 값들을 차례데로 출력한다. 그리고 aList의 

변화된 값을 확인해보면 i에 15를 넣어주더라도 aList의 값은 변하지 않는다.

반면에 i가 참조형 변수일 경우 배열의 원소 수 만큼 반복하면서 원소 값들을 차례데로 출력한다. 하지만 i는

참조형 변수이므로 i에 15를 넣어주면 그 원소 자리에 15가 들어가게 된다.

참조형 변수의 성질에 의해서 해당 배열의 해당 원소 자리에 값이 바로 저장이 된다. 

 

 

switch문
switch(expression){
case constant1 :
   ...
   break;
case constant2 :
    ...
    break;
    
    ....
    
default :
	....
}

 

switch문의 expression은 문자 또는 정수 값으로 계산되어야만 한다.

 

#include <iostream>
using namespace std;

int main() {
	int choice;
	cout << "Choose one -> 1. for  2. if  3. switch\n";
	cin >> choice;
	cout << "\n";

	switch (choice){
	case 1:
		cout << "for loop!\n";
		break;
	case 2:
		cout << "if!!\n";
		break;
	case 3:
		cout << "switch!!";
		break;
	default:
		cout << "choose one between 1 and 3\n";
	}

	return 0;
}

 

break문이 없다면 case 안에 있는 모든 문장들과 그 다음 case 들에 있는 실행문들이 break를 만날 때까지

switch문의 끝까지 실행한다. 

 

switch(i){
case 1 :
case 2 :
case 3 :
	do_something();
    break;
case 4 :
	do_something_else();
    break;

 

break문을 생략시켜서 코드를 공유할 수 있다. i가 1,2,3 일 경우 다 do_something()을 실행하고 끝나게 된다.

 

 

while 반복문

 

확장 문자 세트를 포함하여 모든 출력 가능한 문자들을 출력

#include <iostream>
using namespace std;

int main() {
	unsigned char ch;
	ch = 32;
	while (32) {
		cout << ch;
		ch++;
	}
	return 0;
}

 

* do-while문

반복의 끝에서 조건을 확인한다. 무조건 do 안에 있는 실행문을 실행하고 조건문을 확인해 참일 동안 계속 실행한다.

while문은 조건이 거짓이여서 한번도 실행이 안될 수도 있지만 do-while문은 적어도 한번은 실행한다.

 

 

continue문과 break문

 

continue문은 자신과 반복을 제어하는 조건식 사이의 명령문을 생략하고 다음 반복으로 넘어가게 한다.

 

#include <iostream>
using namespace std;

//0과 100사이의 짝수만을 출력
int main() {
	int x;
	for (x = 0; x <= 100; x++) {
		if (x % 2) {
			continue;
			// x % 2 의 값이 1일 경우 바로 다음 반복으로 가서 cout을 실행시키지 않는다.
		}
		cout << x << ' ';
	}
	return 0;
}

 

break문은 반복문 내에서 만나면 반복을 즉각 종료한다.

 

#include <iostream>
using namespace std;

int main() {
	int t;
	for (t = 0; t < 100; t++) {
		if (t == 10) {
			break;
		}
		cout << t << ' ';
	}
	return 0;
}

 

* break문이 아니라 continue일 경우 10만 출력되지 않고 t가 바로 11로 넘어간다.

 

중첩 반복문일 경우 안에 있는 for문에서 break문을 만날 경우 전체 for문을 벗어나는 것이 아니라 break문을

포함하고 있는 안에 있는 for문만 벗어나게 된다. ( break와 가장 가까운 반복문만 벗어남. )

 

 

실습문제

 

6개의 정수를 일차원 배열에 입력받아 가장 작은 수를 찾아 0번째 위치에 재배치하는 프로그램을 작성하기

 

#include <iostream>
using namespace std;

int main() {

	int myList[6] = {};
	int length = sizeof(myList) / sizeof(int);

	cout << "Enter 6 numbers : ";
	for (int i = 0; i < length; i++) {
		cin >> myList[i];
	}

	
	int tmp = 0;
	for (int i = 0; i < length-1; i++) {
		if (myList[0] > myList[i+1]) {
			int tmp = myList[i + 1];
			myList[i+1] = myList[0];
			myList[0] = tmp;
		}
	}

	for (int i = 0; i < length; i++) {
		cout << myList[i] << ' ';
	}

	return 0;
}