C++

02. 제어와 배열

til_t 2021. 1. 21. 11:26

제어와 배열

  • 관계 연산자 -> 결과 bool
< ex01_rel.cpp >
#include <iostream>
using namespace std;

int main(int arg, char const *argv[]){
    bool b;
     
    b = (1 == 2);

    cout << std::boolalpha;
    // 설정을 바꾸겠다
    // bool을 숫자 말고 true, false로 출력하도록 설정을 바꾸겠다
    cout << b << endl;

    return 0;
    
}
< ex02_rel.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]){
    bool b;
    int x = 3;
    int y = 3;
    cout << std::boolalpha;

    b = (x == 3) && (y == 3);
    cout << b << endl;

    y = 2;
    b = (x == 3) && (y ==3);
    cout << b << endl;
}
< ex03_if.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]){
    int x = 100;

    if(x == 100){
        cout << "100입니다." << endl;
    }

}
  • if - else
    • 괄호와 중괄호 꼭 기입

< ex03_if_else.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {
    int x, y;

    cout << "x : ";
    cin >> x;
    
    cout << "y : ";
    cin  >> y;

    if(x > y){
        cout << "x가 y보다 큽니다" << endl;
    } else {
        cout << "y가 x보다 크거나 같습니다" << endl;
    }
    
    return 0;
}
< ex06_multi-if.cpp >
 
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {

int x, y;

cout << "x값을 입력하세요";
cin >> x;

cout << "y값을 입력하세요";
cin >> y;

if(x > y)
cout << "x가 y보다 큽니다." << endl;
else if (x < y)
cout << "x가 y보다 작습니다." << endl;
else
cout << "x와 y가 같습니다." << endl;

return 0;
}
  • 파이썬과 다르게 else if이다

< ex07_switch.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {
int number;
cout << "숫자를 입력하세요:";
cin >> number;

switch(number) {
case 0:
cout <<"zero\n";
break;

case 1:
cout <<"one\n";
break;

case 2:
cout <<"two\n";
break;

default:
cout <<"many\n";
break;
}

return 0;
}
  • switch문
    • if - else if를 여러개 쓴 효과
    • default(위의 경우가 다 아니라면 적용될 것)는 생략 가능하다
    • break문을 만날 때 스위치문을 벗어난다
    • 만약, break문이 없을 경우 계속 실행이 다음으로 넘어간다
    • 숫자만 가능하다, 정수만 가능하다

< ex08_switch.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {

int number;
cout << "숫자를 입력하세요:";
cin >> number;

switch(number) {
case 0:
cout <<"zero\n";

case 1:
cout <<"one\n";

case 2:
cout <<"two\n";

default:
cout <<"many\n";

break;
}

return 0;
}

 

< ex09_while.cpp >
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {

int n = 10;

while(n>0) {
cout << n << " ";
n--;
}

cout << "fire!" << endl;

return 0;
}
< ex10_while.cpp >
 
#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) { int n; int i = 1; cout << "구구단 중에서 출력하고 싶은 단을 입력하세요: "; cin >> n; while( i<=9 ) { cout << n << " * " << i
<< " = " << n*i << endl;
i++;
}
return 0;
}

< ex10_while.cpp >

#include <iostream>
using namespace std;

int main(int argc, char const *argv[]) {
string str;

do {
cout<<"문자열을 입력하세요:";
getline(cin, str);

// getline -> 사용자의 입력을 뒤의 변수에 넣어준다

// cin과 차이점

cout << "사용자의 입력: " << str << endl;
} while(str != "종료");

return 0;
}
  • getline과 cin의 차이점

    • 입력 문자열에 공백이 있는 경우

    • getline은 공백이 있어도 변수에 저장이 된다, 엔터를 칠 때까지 데이터를 취하겠다는 뜻

    • 데이터 안에 엔터는 빼고 저장해준다

  • cin은 공백을 만나게 되면 데이터 하나로 간주한다

< ex12_for.cpp >
 
#include <iostream>
using namespace std;

int main() {

int sum = 0;

for(int i=0; i<=10; i++) {
sum += i;
}

cout << "1부터 10까지 정수의 합 = " << sum << endl;

return 0;
}

for 루프
    • for (초기식; 조건식; 증감식){}
  • c++에서 +연산자는 문자열+문자열만 지원한다

  • 문자열 + 숫자는 지원하지 않는다

  • continue

    • continue를 만나면 반복문으로 돌아가 다시 루프를 돈다

< ex16_array.cpp >
#include <iostream>
using namespace std;

int main() {
const int STUDENTS = 10;
int scores[STUDENTS];

int sum = 0;

int i, average;

for(i=0; i<STUDENTS; i++) {
cout << "학생들의 성적을 입력하시요: ";
cin >> scores[i];
}

// 루프를 돌면서 배열값 초기화

for(i=0; i<STUDENTS; i++) {
sum += scores[i];
}

average = sum / STUDENTS;

cout << "성적 평균= " << average << endl;

return 0;
}
  • 배열
  • 데이터타입 배열이름[배열크기];
    • 데이터타입이 동일한 데이터가 순차적으로 메모리에 저장되는 자료 구조
    • 각각의 요소들은 인덱스를 사용하여 독립적으로 접근 가능
    • 대용량의 데이터를 동일한 이름으로 쉽게 저장하고 처리 가능
    • 처음 선언할 때 배열의 크기를 알려줘야 하고, 변경 불가능
    • 처음 해야 할 일 -> 루프를 돌리면서 배열을 초기화하기
    • 배열의 개수 관리를 상수를 통해서 해주기(중요)
    • 배열의 개수를 지정하지 않을 경우 데이터 개수를 보고 요소의 개수 결정한다
    • 초기화되지 않은 요소는 0으로 자동 초기화된다
    • 배열 전체를 0으로 초기화하고 싶을 때
      • ex) int score[STUDENTS] = {
      • 0,
      • }

< ex17_array_init.cpp >
#include <iostream>
using namespace std;

int main() {
const int STUDENTS = 5;
int scores[STUDENTS] = {
100, 200, 300, 400, 500
};

int sum = 0;

int i, average;

for(i=0; i<STUDENTS; i++) {
sum += scores[i];
}

average = sum / STUDENTS;

cout << "성적 평균= " << average << endl;

return 0;
}

 

< ex18_advanced_for.cpp >

 

#include <iostream>
using namespace std;
int main() {
int list[] = {1, 2, 3, 4, 5, 6 ,7, 8, 9, 10};// 밑의 for문을 돌면서 i에 들어간다
int sum = 0;
for(int i : list) { // 중요

// 값의 복사

sum += i;
}
cout << sum << endl << endl;
for(int& i : list) {

// 값의 복사가 되지 않는다!!, 오버헤드가 줄어든다(시간상의 이점이 생긴다)

// i가 리스트를 가리키는 게 달라진다

// &는 참조형 변수를 뜻한다

// c++의 변수(참조 변수, 일반 변수, 포인터 변수)

// int &total = sum -> 데이터는 하나만 존재하나 저장공간을 가리키는 이름이 두 개(sum, total)이 되는 것, total을 위한 공간이 하나 더 생긴 것이 아니다 (참조 변수);

// int total = sum; -> total이라는 변수를 하나 더 만든 것 sum을 위한 공간 원래 있고, total을 위한 공간이 새로 만들어짐 total의 공간에 sum에 있던 값이 복사가 되는 것

cout << i << " ";
}
cout << endl;
for(auto& i : list) { // 중요
cout << i << " ";
}
return 0;
}

범위 기반 for문

  • for(변수 : 범위){}