🥞 BE
home

3. 반복문

Date
2022/04/12
Category
Programming Language
Tag
C++
Detail
후위, 전위 표현식
++, --
전위표현식이 후위보다 우선순위가 높음.
while 반복문
#include<iostream> using namespace std; int main() { int count = 0; while (count < 10) { cout << "Hello World!" << endl; count++; } return 0; }
C++
복사
여러 번 입력받기
#include<iostream> #include<iomanip> using namespace std; int main() { int score; int sum = 0; double average; int counter = 0; while (counter < 4) { cout << "점수 입력(0~100): "; cin >> score; sum = sum + score; counter++; } average = static_cast<double>(sum) / 4; cout << fixed << setprecision(2) << showpoint; // 소수점 아래 2개까지 출력. 정밀도 조정 cout << "점수 평균: " << average; return 0; }
C++
복사
수열의 합 구하기
#include<iostream> using namespace std; int main() { int sum1 = 0, sum2 = 0, sum3 = 0; int n; cout << "n값 지정: "; cin >> n; int counter = 1; while (counter <= n) { sum1 += counter; sum2 += counter * counter; sum3 += counter * counter * counter; counter++; } cout << "n값: " << n << endl; cout << "sum1값: " << sum1 << endl; cout << "sum2값: " << sum2 << endl; cout << "sum3값: " << sum3 << endl; return 0; }
C++
복사
센티넬 제어
구문을 정지하기 위한 특수한 장치
ex) 양의 정수 리스트에서 -1을 입력하면 구문 중지.
#include<iostream> using namespace std; int main() { // 변수 선언 int sum = 0; int num; // 입력 cout << "정수 입력 (-1 입력시 정지): "; cin >> num; while (num != -1) { sum = sum + num; cout << "정수 입력 (-1 입력시 정지): "; cin >> num; // 센티넬 갱신 } // 출력 cout << "합은: " << sum; return 0; }
C++
복사
EOF 제어 반복문
EOF : ctrl + z 를 말함.
주의사항
반복하지 않는 반복문 / 무한하게 반복하는 반복문 / 본문이 없는 반복문 / 조건으로 부동 소수점을 사용하는 반복문
위의 반복문들은 사용 시 주의해야함.
while 반복문의 조건 확인 횟수는 반복 횟수보다 언제나 1만큼 큼.
for 반복문
7로 나눌 수 있는 숫자를 출력.
#include<iostream> #include<iomanip> using namespace std; int main() { int n; cout << "출력 최대값 입력 : "; cin >> n; int col = 1; // 행 출력 개수 제한 // 입력 for (int i = 1; i < n; i++) { if (i % 7 == 0) { cout << setw(4) << i; // setw(n) : n만큼 공간을 확보 후 출력 col++; } if (col > 10) { cout << endl; col = 1; // 초기화 } } return 0; }
C++
복사
한 달을 달력 형태로 출력
#include<iostream> #include<iomanip> using namespace std; int main() { int monthday, startday; int col = 1; // 행 출력 개수 제한 do { cout << "해당 월 일수 - (28, 29, 30, 31): "; cin >> monthday; } while (monthday < 28 || monthday > 31); do { cout << "시작 요일 - 일(1)/월(2)/화(3)/수(4)/목(5)/금(6)/토(7): "; cin >> startday; } while (startday < 1 || startday > 7); // 달력 형태 출력 cout << "Sun Mon Tue Wen Thu Fri Sat" << endl; cout << "--- --- --- --- --- --- ---" << endl; // 시작일 공백 for (int i = 1; i < startday; i++) { cout << " "; col++; } // 날짜 출력 for (int j = 1; j <= monthday; j++) { cout << setw(3) << j << " "; col++; if (col > 7) { cout << endl; col = 1; } } return 0; }
C++
복사
일수와 시작요일을 지정하면 달력이 출력된다.
do-while 문
적어도 한 번 이상 반복문을 실행해야 하는 경우에 사용.
데이터 유효성 검사에 활용이 가능함.
#include<iostream> using namespace std; int main() { int score; char grade; do { cout << "0에서 100 사이 숫자 입력: "; cin >> score; } while (score < 0 || score > 100); switch (score / 10) { case 10: grade = 'A'; break; case 9: grade = 'A'; break; case 8: grade = 'B'; break; case 7: grade = 'C'; break; case 6: grade = 'D'; break; default: grade = 'F'; } cout << "성적은 " << grade << " 입니다." << endl; return 0; }
C++
복사
중첩 반복문
C 처음 공부할 때 같은 과 선배가 구구단 표랑 모양 만들기만 죽어라 시켰던 기억이 네..
#include<iostream> #include<iomanip> using namespace std; int main() { int size; do { cout << "사이즈를 입력하세요 (2~10): "; cin >> size; } while (size < 2 || size > 10); for (int i = 1; i <= size; i++) { for (int j = 1; j <= size; j++) { cout << setw(4) << i * j; } cout << endl; } return 0; }
C++
복사
반복문 관련 구문
return, break, continue, goto 가 있음.
return, continue 구문이 아니라면 굳이 사용하지 않는 것을 추천.
return 구문 사용
소수인지 확인하는 프로그램
#include<iostream> using namespace std; int main() { int n; do { cout << "Enter a positive integer: "; cin >> n; } while (n <= 0); if (n == 1) { cout << "1 is not a composite nor a prime."; return 0; } for (int i = 2; i < n; i++) { if (n % i == 0) { cout << n << " is composite." << endl; cout << "The first divisor is " << i << endl; return 0; } } cout << n << " is a prime." << endl; return 0; }
C++
복사
입력받은 수의 합과 곱 구하기
#include<iostream> #include<iomanip> using namespace std; int main() { int size; do { cout << "Enter a non-negative integer value for size: "; cin >> size; } while (size < 0); double num; double sum = 0; double product = 1; for (int i = 0; i < size; i++) { cout << "Enter the next number: "; cin >> num; sum += num; product *= num; } cout << fixed << setprecision(2); cout << "sum = " << sum << endl; cout << "product = " << product << endl; return 0; }
C++
복사
팩토리얼 구현
#include<iostream> using namespace std; int main() { // 변수 선언 int n; unsigned long long factorial; // 입력 do { cout << "Enterthe factorial size: "; cin >> n; } while (n < 0); // 초기화 factorial = 1; // 처리 for (int i = 1; i < n + 1; i++) { factorial *= i; } // 출력 cout << n << "! = " << factorial; return 0; }
C++
복사
거듭제곱 구하기
밑(base)과 지수(exponent)를 입력 받아서 거듭제곱 구하기
#include<iostream> using namespace std; int main() { // 변수 선언 int base, exponent; unsigned long int power, temp; // 4294967295가 최대 bool overflow; // 입력 do { cout << "Enter base: "; cin >> base; } while (base < 0); do { cout << "Enter n: "; cin >> exponent; } while (exponent < 0); // 초기화 power = 1; temp = power; overflow = false; // 처리 for (int i = 1; (i <= exponent) && (!overflow); i++) { power *= base; if (power / base != temp) { overflow = true; // 반복을 종료 } temp = power; } // 출력 if (overflow) { cout << "Overflow occurred! Try again with smaller b or n."; } else { cout << base << "^" << exponent << " = " << power; } return 0; }
C++
복사
최소값, 최대값
리스트 내부의 최소, 최대값 찾기
#include<iostream> #include<limits> using namespace std; int main() { // 변수 선언 int size; int smallest, largest; // 초기화 smallest = numeric_limits<int> :: max(); largest = numeric_limits<int> :: min(); // 입력 do { cout << "Enter the size of list: "; cin >> size; } while (size <= 0); int num; // 처리 for (int i = 1; i <= size; i++) { cout << "Enter the next item: "; cin >> num; if (num < smallest) { smallest = num; } if (num > largest) { largest = num; } } // 출력 cout << "The smallest number is " << smallest << endl; cout << "The largest number is " << largest << endl; return 0; }
C++
복사
any, all 조건 충족
적어도 하나가 그런지 확인하는 경우 (any) 기준에 맞는 항목을 찾는 순간 탈출,
모두 그런지 확인하는 경우 (all) 기준에 맞지 않는 항목이 하나라도 있으면 탈출.
→ 7로 나눠지는 수를 찾으면 종료 (센티넬 조건)
#include<iostream> using namespace std; int main() { // 변수 선언 int size; bool success; // 초기화 success = false; // 입력 do { cout << "Enter the number of items in the list: "; cin >> size; } while (size < 0); // 처리 int item; for (int i = 0; (i < size) && (!success); i++) { cout << "Enter the next item: "; cin >> item; success = (item % 7 == 0); } // 출력 if (success) { cout << "The number " << item << " is divisible by 7." << endl; } else { cout << "None of the number is divisible by 7." << endl; } return 0; }
C++
복사