01. cout과 << 연산자를 이용하여, 1에서 100까지 정수를 다음과 같이 한 줄에 10개씩 출력하라. 각 정수는 탭으로 분리하여 출력하라.
#include <iostream>
#include <string>
using namespace std;
int main() {
for (int i = 1; i <= 100; i++) {
cout << i << '\t';
if ((i % 10) == 0)
cout << endl;
}
}
02. cout과 << 연산자를 이용하여 다음과 같이 구구단을 출력하는 프로그램을 작성하라.
#include <iostream>
#include <string>
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cout << j << 'x' << i << '=' << i * j << '\t';
}
cout << endl;
}
}
03. 키보드로부터 두개의 정수를 읽어 큰 수를 화면에 출력하라.
#include <iostream>
using namespace std;
int main() {
int num1, num2;
cout << "두 수를 입력하라>>";
cin >> num1 >> num2;
cout << "큰 수 = "<< ((num1 > num2) ? num1 : num2);
// () 괄호 없이 (num1 > num2) ? num1 : num2 일 경우 true 또는 false가 반환되어 1 또는 0이 출력됨
// 연산자 우선순위 때문
}
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << "두 수를 입력하라>>";
cin >> a >> b;
(a > b) ? (cout << a) : (cout << b);
}
04. 소수점을 가지는 5개의 실수를 입력 받아 제일 큰 수를 화면에 출력하라.
#include <iostream>
using namespace std;
float find_max(float num[], int size) {
float max = num[0];
for (int i = 1; i < size; i++) {
if (max < num[i])
max = num[i];
}
return max;
}
int main() {
float num[5], max;
int size = sizeof(num) / sizeof(num[0]);
cout << "5 개의 실수를 입력하라>>";
for (int i = 0; i < size; i++)
cin >> num[i];
max = find_max(num, size);
cout << "제일 큰 수 = " << max;
}
05. <Enter> 키가 입력될 때까지 문자들을 읽고, 입력된 문자 'x'의 개수를 화면에 출력하라.
#include <iostream>
using namespace std;
int count_x(char str[]) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == 'x')
count++;
}
return count;
}
int main() {
char str[100];
int count;
cout << "문자들을 입력하라(100개 미만).\n";
cin.getline(str, sizeof(str));
count = count_x(str);
cout << "x의 개수는 " << count;
}
06. 문자열 두 개 입력받고 두 개의 문자열이 같은지 검사하는 프로그램을 작성하라. 만일 같으면 "같습니다", 아니면 "같지않습니다."를 출력하라.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int is_Same(char* pass, char* re_pass) {
if (strcmp(pass, re_pass) == 0)
return 1;
return 0;
}
int main() {
char pass[10], re_pass[10];
cout << "새 암호를 입력하세요>>";
cin >> pass;
cout << "새 암호를 다시 한 번 입력하세요>>";
cin >> re_pass;
if (is_Same(pass, re_pass))
cout << "같습니다.\n";
else
cout << "다릅니다.\n";
}
책에 적힌 해당 문제에 대한 목적은 위의 방법이지만 사용자가 어느 길이의 암호를 입력할지 정해져 있지 않다면 아래 방법(string)이 더 적합하다고 생각한다.
#include <iostream>
#include <string>
using namespace std;
int isSame(string s1, string s2) {
if (s1 == s2)
return 1;
return 0;
}
int main() {
string pass, re_pass;
cout << "새 암호를 입력하세요>>";
getline(cin, pass);
cout << "새 암호를 다시 한 번 입력하세요>>";
getline(cin, re_pass);
if (isSame(pass, re_pass))
cout << "같습니다\n";
else
cout << "다릅니다\n";
}
07. 다음과 같이 "yes"가 입력될 때까지 종료하지 않는 프로글매을 작성하라. 사용자로부터의 입력은 cin.getline() 함수를 사용하라.
#include <iostream>
#include <string>
#include <cstring>
//using namespace std;
int is_end(char *s) {
if (strcmp(s,"yes")==0)
return 0;
return 1;
}
int main() {
char ans[100];
int result;
do {
std::cout << "종료하고싶으면 yes를 입력하세요>>";
std::cin.getline(ans, sizeof(ans), '\n');
} while (is_end(ans));
// while(true) { if (strcmp() == 0) break; } 도 가능하다
std::cout << "종료합니다...";
}
책에서 cin.getline()을 사용하라 하였지만
사용자가 어느 길이 만큼의 문자열을 입력할지 모르는 상황에서는 string과 std::getline()을 사용하는게 더 적합하다고 생각한다.
#include <iostream>
#include <string>
//using namespace std;
int is_end(std::string s) {
if (s == "yes")
return 0;
return 1;
}
int main() {
std::string ans;
int result;
do {
std::cout << "종료하고싶으면 yes를 입력하세요>>";
getline(std::cin, ans,'\n');
} while (is_end(ans));
std::cout << "종료합니다...";
}
08. 한 라인에 ';' 으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
#define ROWS 5
#define COLS 100
char* find_long(char arr[][COLS]) {
char* max = arr[0];
for (int i = 1; i < ROWS; i++) {
if (strlen(max) < strlen(arr[i]))
max = arr[i];
}
return max;
}
void print_name(char arr[][COLS]) {
for (int i = 0; i < ROWS; i++) {
cout << i + 1 << " : " << arr[i] << endl;
}
}
int main() {
char name[5][100];
char* longest;
cout << ROWS << " 명의 이름을 ';'으로 구분하여 입력하세요" << endl;
cout << ">>";
for (int i = 0; i < ROWS; i++) {
cin.getline(name[i], COLS, ';');
}
print_name(name);
longest = find_long(name);
cout << "가장 긴 이름은 " << longest << endl;
}
09. 이름, 주소, 나이를 입력받아 다시 출력하는 프로그램을 작성하라. 실행 예시는 다음과 같다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int age;
char name[20];
string address;
cout << "이름은?";
cin.getline(name, sizeof(name), '\n');
cout << "주소는?";
getline(cin, address, '\n');
cout << "나이는?";
cin >> age;
cout << age << ", " << address << ", " << age << "세" << endl;
}
10. 문자열을 하나 입력받고 문자열의 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라. 예시는 다음과 같다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cout << "문자열 입력>>";
getline(cin, str);
for (int i = 0; str[i] != '\0'; i++) {
for (int j = 0; j <= i; j++) {
cout << str[j];
}
cout << endl;
}
}
11. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라.
#include <stdio.h>
int main() {
int k, n = 0;
int sum = 0;
printf("끝 수를 입력하세요>>");
scanf("%d", &n);
for (k = 1; k <= n; k++) {
sum += k;
}
printf("1에서 %d까지의 합은 %d 입니다. \n", n, sum);
return 0;
}
#include <iostream>
using namespace std;
int main() {
int k, n = 0;
int sum = 0;
cout << "끝 수를 입력하세요>>";
cin >> n;
for (k = 1; k <= n; k++) {
sum += k;
}
cout << "1에서 " << n << "까지의 합은 " << sum << "입니다." << endl;
}
여기서는 반복문을 통해 합을 구했지만 등차수열의 합을 이용하는 것이 훨씬 효과적이다. ( 평균 * 항의 갯수)
12. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라. 이 프로그램의 실행 결과는 연습문제 11과 같다.
#include <iostream>
using namespace std;
int sum(int, int);
int main() {
int n = 0;
cout << "끝 수를 입력하세요>>";
cin >> n;
cout << "1에서 " << n << "까지의 합은 " << sum(1,n) << "입니다." << endl;
}
int sum(int a, int b) {
int k, res = 0;
for (k = a; k <= b; k++) {
res += k;
}
return res;
}
13. 중식당의 주문 과정을 C++ 프로그램으로 작성해보자. 다음 실행 결과와 같이 메뉴와 사람 수를 입력받고 이를 출력하면 된다. 잘못된 입력을 가려내는 부분도 코드에 추가하라.
방법 1)
#include <iostream>
using namespace std;
int main() {
int menu, people;
cout << "***** 승리장에 오신 것을 환영합니다. *****\n";
while (true) {
cout << "짬뽕:1, 짜장:2, 군만두:3, 종료:4>>\t";
cin >> menu;
if (menu > 4 || menu < 1) {
cout << "다시 주분하세요!!\n";
continue;
}
else if (menu == 4) {
cout << "오늘 영업은 끝났습니다.\n";
break;
}
cout << "몇인분?";
cin >> people;
switch (menu) {
case 1:
cout << "짬뽕 " << people << "인분 나왔습니다" << endl;
break;
case 2:
cout << "짜장 " << people << "인분 나왔습니다" << endl;
break;
case 3:
cout << "군만두 " << people << "인분 나왔습니다" << endl;
break;
}
}
}
방법2)
c++ 에서 bool타입을 지원하면서 기존에 리턴타입 int 함수(리턴값이 1/0) 대신 bool 타입으로도 대체 가능해짐
어떤 방식이 더 효율적일까..
#include <iostream>
using namespace std;
string menu_arr[] = { "짬뽕","짜장","군만두", "종료"};
#define SIZE 4
void print_menu() {
for (int i = 0; i < SIZE; i++) {
cout << menu_arr[i] << ":" << i + 1;
if (i < SIZE - 1)
cout << ", ";
}
cout << ">>\t";
}
bool check_menu(int menu) {
return menu >= 1 && menu <= SIZE;
}
bool is_end(int menu) {
return menu == SIZE;
}
void print_order(int menu, int people) {
cout << menu_arr[menu - 1] << " " << people << "인분 나왔습니다.\n";
}
int main() {
int menu, people;
cout << "***** 승리장에 오신 것을 환영합니다. *****"<< endl;
while (true) {
print_menu();
cin >> menu;
if (!check_menu(menu)) {
cout << "다시 주문하세요!!" << endl;
continue;
}
if (is_end(menu)) {
cout << "오늘 영업은 끝났습니다." << endl;
break;
}
cout << "몇인분?";
cin >> people;
print_order(menu, people);
}
}
14. 커피를 주문하는 간단한 C++ 프로그램을 작성해보자. 커피 종류는 "에스프레소", "아메리카노", "카푸치노"의 3가지이며 가격은 각각 2000원, 2300원, 2500원이다. 하루에 20000원 이상 벌게 되면 카페를 닫는다. 실행 결과와 같이 작돋하는 프로그램을 작성하라.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char coffee[100];
int money = 0, num, price;
cout << "에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다.\n";
while (money < 20000) {
cout << "주문 >> ";
cin >> coffee >> num;
if (num < 0) {
cout << "잘못된 수량입니다. 다시 입력해주세요\n";
continue;
}
else if (strcmp(coffee, "에스프레소") == 0)
price = num * 2000;
else if (strcmp(coffee, "아메리카노") == 0)
price = num * 2300;
else if (strcmp(coffee, "카푸치노") == 0)
price = num * 2500;
else {
cout << "다시 메뉴를 선택해주세요" << endl;
continue;
}
money += price;
cout << price << "원입니다. 맛있게 드세요\n";
}
cout << "오늘 " << money << "원을 판매하여 카페를 닫습니다. 내일 봐요~~\n";
}
15. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다. ( cin 으로 입력 받을 때, 데이터의 유형은 입력 받는 변수의 데이터타입에 따라 달라진다)
1) 책에서 권장하는 방식
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
int num1, num2;
char cal[10], op;
char* tok[3];
while (true) {
cout << "?";
cin.getline(cal, 10);
tok[0] = strtok(cal, " ");
tok[1] = strtok(NULL, " ");
tok[2] = strtok(NULL, " ");
num1 = atoi(tok[0]);
num2 = atoi(tok[2]);
switch (*tok[1]) {
case '+':
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
break;
case '-':
cout << num1 << " - " << num2 << " = " << num1 - num2 << endl;
break;
case '*':
cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;
break;
case '/':
cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
break;
case '%':
cout << num1 << " % " << num2 << " = " << num1 % num2 << endl;
break;
default:
cout << "잘못된 수식을 입력했습니다.\n";
continue;
}
}
}
2) 내 맘대로 작성한 코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
int num1, num2;
char op;
while (true) {
cout << "?";
cin >> num1 >> op >> num2;
switch (op) {
case '+':
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
break;
case '-':
cout << num1 << " - " << num2 << " = " << num1 - num2 << endl;
break;
case '*':
cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;
break;
case '/':
cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
break;
case '%':
cout << num1 << " % " << num2 << " = " << num1 % num2 << endl;
break;
default:
cout << "잘못된 수식을 입력했습니다.\n";
continue;
}
}
}
16. 영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char input[10001];
int alpha[26] = { 0 };
int total = 0;
cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다." << endl;
cout << "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다." << endl;
cin.getline(input, sizeof(input), ';');
for (int i = 0; input[i] != '\0'; i++) {
if (isalpha(input[i])) {
total++;
alpha[tolower(input[i]) - 'a']++;
}
}
cout << "총 알파벳 수 " << total << "\n\n";
for (char i = 'a'; i <= 'z'; i++) {
cout << i << " (" << alpha[(int)i - 'a'] << ")\t:";
for (int j = 0; j < alpha[(int)i - 'a']; j++)
cout << "*";
cout << endl;
}
}
'C++' 카테고리의 다른 글
[명품 C++ Programming] 3장 실습 문제 (1) | 2025.04.26 |
---|---|
[명품 C++ Programming] 3장 Open Challenge (지수 표현 클래스 만들기) (0) | 2025.04.26 |
[명품 C++ Programming] 4장 실습 문제 (0) | 2025.04.08 |
[명품 C++ Programming] 2장 Open Challenge (6) | 2025.01.13 |
C++ 빌드 프로세스와 주요 오류의 이해 (4) | 2025.01.13 |