안녕하세요
개인 풀이이므로 오답이 있을 수 있습니다.
답이 다르다 생각하시면 댓글로 말씀해 주시면 감사드리겠습니다!
01. cout과 << 연산자를 이용하여, 1에서 100까지 정수를 다음과 같이 한 줄에 10개씩 출력하라. 각 정수는 탭으로 분리하여 출력하라.
[ 정답 소스코드]
#include <iostream>
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>
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. 키보드로부터 두 개의 정수를 읽어 큰 수를 화면에 출력하라.
두 수를 입력하라 >> 10 20 큰 수 = 20 |
[ 정답 소스코드]
#include <iostream>
using namespace std;
int main() {
int a = 0,b = 0;
cout << "두 수를 입력하라>> ";
cin >> a;
cin >> b;
cout<< "큰 수 = " <<(a > b ? a : b);
}
[ 디버깅 화면 ]
04. 소수점을 가지는 5개의 실수를 입력 받아 제일 큰 수를 화면에 출력하라.
5 개의 실수를 입력하라 >> 5.2 -2.5 3.4 9.9 7.7 제일 큰 수 = 9.9 |
[ 정답 소스코드]
#include <iostream>
using namespace std;
int main() {
double num[5] = {0}, max = 0;
cout << "5 개의 실수를 입력하라>>";
for (int i = 0; i < 5; i++)
{
cin >> num[i];
num[i] > max?max = num[i]: max;
}
cout<< "제일 큰 수 = " << max;
}
또는
#include <iostream>
using namespace std;
int main() {
double num[5] = {0}, max = 0;
cout << "5 개의 실수를 입력하라>>";
for (int i = 0; i < 5; i++)
{
cin >> num[i];
if(num[i] > max)
max = num[i];
}
cout<< "제일 큰 수 = " << max;
}
푸앙이님의 피드백 풀이법.
int main() {
cout << "5개의 실수를 입력하라";
double a[5];
//숫자 5개 설정하기
for (int i = 0; i < 5; i++)
{
cin >> a[i];
}
int max = a[0];
//5개 중 가장 큰 수 max 값으로 설정하기
for (int i = 0; i < 5; i++)
{
if (max < a[i])
max = a[i];
}
cout << "가장 큰 수는" << max << "입니다";
}
또는 (함수)
#include <iostream>
using namespace std;
double biggest(double num[], int a)
{
double i;
i = num[0];
for (int j = 0; j < a; j++)
if (i < num[j])
i = num[j];
return i;
}
int main() {
cout << "5 개의 실수를 입력하라>>";
float num[5];
float max = 0;
for (int i = 0; i <= 4; i++)
{
cin >> num[i];
if (max < num[i])
max = num[i];
}
cout << "제일 큰 수는 = " << biggest(num,5) << endl;
}
[ 디버깅 화면 ]
05. <Enter> 키가 입력될 때까지 문자들을 읽고, 입력된 문자 'x'의 개수를 화면에 출력하라.
문자들을 입력하라(100개 미만). Hexadecimal x-axe y-axe x의 개수는 4개 |
[ 정답 소스코드 ]
#include <iostream>
using namespace std;
int main() {
char x[100];
int count = 0;
cout << "문자들을 입력하라(100개 미만)."<< endl;
cin.getline(x, 100);
for (int i=0; i <= sizeof(x); i++)
{
if (x[i] == 'x')
count++;
}
cout << "x의 개수는 " << count << endl;
}
[ 디버깅 화면 ]
06. 문자열을 두 개 입력받고 두 개의 문자열이 같은지 검사하는 프로그램을 작성하라. 만일 같으면 "같습니다", 아니면 "같지 않습니다"를 출력하라.
새 암호를 입력하세요 >> 파랑새 새 암호를 다시 한 번 입력하세요 >> 파랑새 같습니다 |
[ 정답 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
string a, b;
cout << "새 암호를 입력하세요>> ";
getline(cin,a);
cout << "새로운 암호를 다시 한 번 더 입력하세요>> ";
getline(cin, b);
if (a == b)
cout << "같습니다" << endl;
else
cout << "같지 않습니다" << endl;
}
[ 디버깅 화면 ]
07. 다음과 같이 "yes"가 입력될 때까지 종료하지 않는 프로그램을 작성하라. 사용자로부터의 입력은 cin.getline() 함수를 사용하라.
종료하고싶으면 yes를 입력하세요 >> OK 종료하고싶으면 yes를 입력하세요 >> Yes Sir 종료하고싶으면 yes를 입력하세요 >> yes 종료합니다... |
[ 정답 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
char a[100];
while (1)
{
cout << "종료하고싶으면 yes를 입력하세요>>";
cin.getline(a, 100);
if (strcmp(a, "yes") == 0)
break;
}
cout << "종료합니다..." << endl;
}
[ 디버깅 화면 ]
08. 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.
5 명의 이름을 ';'으로 구분하여 입력하세요 >> Mozart;Elvis Presley;Jim Carry;Schubert;Dominggo; 1 : Mozart 2 : Elvis Presley 3 : Jim Carry 4 : Schubert 5 : Dominggo 가장 긴 이름은 Elvis Presley |
힌트) ';'까지 문자열을 읽고자하면 다음 코드를 사용하고 char name[100]; cin.getline(name, 100, ';'); 5개 읽어야 하니 5번 루프를 돈다. |
[ 정답 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
string top_name = {};
char name[100] = {};
int max=0;
cout << "5 명의 이름을 ';'으로 구분하여 입력하세요" << endl << ">>";
for (int i = 0; i < 5; i++)
{
cin.getline(name, 100, ';');
cout << (i + 1) << ":" << name << endl;
if (max < strlen(name))
{
max = strlen(name);
top_name = name;
}
}
cout << "가장 긴 이름은 " << top_name << endl;
}
[ 디버깅 화면 ]
09. 이름, 주소, 나이를 입력받아 다시 출력하는 프로그램을 작성하라. 실행 예시는 다음과 같다.
이름은?황 기 태 주소는?서울시 안녕구 사랑동 해피아파트 나이는?21 황 기 태, 서울시 안녕구 사랑동 해피아파트. 21세 |
[ 정답 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
char name[20] = {}, address[50] = {};
int age=0;
cout << "이름은?";
cin.getline(name, 20);
cout << "주소는?";
cin.getline(address, 50);
cout << "나이는?";
cin >> age;
cout << name << ", " << address << ", " << age << "세" << endl;
}
[ 디버깅 화면 ]
10. 문자열을 하나 입력받고 문자열의 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라. 예시든 다음과 같다.
문자열 입력>>hello h he hel hell hello |
[ 정답 소스코드]
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[50];
cout << "문자열 입력>> ";
cin.getline(a, 50);
for (int i = 0; i < strlen(a); i++)
{
for (int j = 0; j <= i; j++)
{
cout << a[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;
}
끝 수를 입력하세요>>10 1에서 10까지의 합은 55입니다. |
[ 정답 소스코드 ]
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int i=0,sum=0,j=1;
cout << "끝 수를 입력하세요>>";
cin >> i;
for (; j <= i; j++)
{
sum += j;
}
cout << "1에서 " << i <<"까지의 합은 " << sum <<" 입니다." <<endl;
}
[ 디버깅 화면 ]
12.다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라. 이 프로그램의 실행 결과는 연습문제 11과 같다.
#include <stdio.h>
int sum(); // 함수 원형 선언
int main() {
int n=0;
printf("끝 수를 입력하세요>>");
scanf("%d", &n);
printf("1에서 %d까지의 합은 %d 입니다.\n", n, sum(1, n));
return 0;
}
int sum(int a, int b) {
int k, res =0;
for(K=a; k<=b; k++) {
res += k;
}
return res;
}
C++에서는 함수의 원형 선언에 매개 변수를 모두 선언하여야 한다. |
[ 정답 소스코드]
#include <iostream>
#include <cstring>
using namespace std;
int sum(int a, int b);
int main() {
int i=0;
cout << "끝 수를 입력하세요>>";
cin >> i;
cout << "1에서 " << i << "까지의 합은 " << sum(1, i) << " 입니다" << endl;
}
int sum(int a, int b)
{
int k, res = 0;
for (k = a; k <= b; k++)
{
res += k;
}
return res;
}
[ 디버깅 화면 ]
13. 중식당의 주문 과정을 C++ 프로그램으로 작성해보자. 다음 실행 결과와 같이 메뉴와 사람 수를 입력받고 이를 출력하면 된다. 잘못된 입력을 가려내는 부분도 코드에 추가하라.
***** 승리장에 오신 것을 환영합니다. ***** 짬뽕:1, 짜장:2, 군만두:3, 종료:4 >> 1 몇인분?4 짬뽕 4인분 나왔습니다 짬뽕:1, 짜장:2, 군만두:3, 종료:4 >> 2 몇인분?6 짜장 6인분 나왔습니다. 짬뽕:1, 짜장:2, 군만두:3, 종료:4 >> 6 다시 주문하세요 !! 짬뽕:1, 짜장:2, 군만두:3, 종료:4 >> 4 오늘 영업은 끝났습니다. |
[ 정답 소스코드 ]
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int i=0,j=0;
cout << "***** 승리장에 오신 것을 환영합니다. *****" << endl;
while (1)
{
cout << "짬뽕:1, 짜장:2, 군만두:3, 종료:4>>";
cin >> i;
if (i == 1)
{
cout << "몇인분?";
cin >> j;
cout << "짬뽕 " << j << "인분 나왔습니다." << endl;
}
else if (i == 2)
{
cout << "몇인분?";
cin >> j;
cout << "짜장 :" << j << "인분 나왔습니다." << endl;
}
else if (i == 3)
{
cout << "몇개?";
cin >> j;
cout << "군만두 " << j << "개 나왔습니다." << endl;
}
else if (i == 4)
{
cout << "오늘 영업은 끝났습니다.";
break;
}
else
{
cout << "다시 주문하세요!!" << endl;
}
}
}
[ 디버깅 화면 ]
14. 커피를 주문하는 간단한 C++ 프로그램을 작성해보자. 커피 종류는 "에스프레소", "아메리카노", "카푸치노"의 3가지이며 가격은 각각 2000원, 2300원, 2500원이다. 하루에 20000원 이상 벌게 되면 카페를 닫는다. 실행 결과와 같이 작동하는 프로그램을 작성하라.
에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원입니다. 주문>> 에스프레소 4 8000원입니다. 맛있게 드세요 주문>> 카푸치노 2 5000원입니다. 맛있게 드세요 주문>> 아메리카노 4 9200원입니다. 맛있게 드세요 오늘 22200원을 판매하여 카페를 닫습니다. 내일 봐요~~~ |
힌트 char coffee[100]; int num; cin >> coffee >> num;으로 커피 이름과 잔 수를 입력받으면 된다. 또한 또한 커피는 if(strcmp(coffe, "에스프레소")==0)과 같이 비교하면 된다. |
[ 정답 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
int num=0,sum=0,total=0;
char coffee[100];
cout << "에스프레소 2000원, 아메리카노 2300원, 카푸치노 2500원 입니다." << endl;
while (total <=20000)
{
cout << "주문>> ";
cin >> coffee >> num;
if (strcmp(coffee, "에스프레소") == 0)
{
sum =2000 * num;
total += sum;
cout << sum << "원입니다. 맛있게 드세요" << endl;
}
else if (strcmp(coffee, "아메리카노") == 0)
{
sum = 2300 * num;
total += sum;
cout << sum << "원입니다. 맛있게 드세요" << endl;
}
else if (strcmp(coffee, "카푸치노") == 0)
{
sum = 2500 * num;
total += sum;
cout << sum << "원입니다. 맛있게 드세요" << endl;
}
else {
cout << "잘 못 입력하셨어요" << endl;
}
}
cout << "오늘 " << total << "원을 판매하여 카페를 닫습니다. 내일 봐요~~~"<<endl;
}
[ 디버깅 화면 ]
15. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다.
? 2 + 34 2 + 34 = 36 ? - 1 - 36 - 1 - 36 = -37 ? 33 * 2 33 * 2 = 66 ? 77 / 2 77 / 2 =38 ? 88 % 3 88 % 3 =1 ? |
힌트 한 줄을 문자열을 읽고, 공백 문자를 찾아 연산자와 두 개의 피연산자를 구분한 후, 계산하면 된다. 문자열을 정수로 바꿀 때 atoi() 함수를 이용하면 된다. 예를 들면 atoi("34") = 34 |
atoi 함수에 대해서 잘 몰라서 그냥 보이는 그대로 푸는 방법으로 풀고 atoi를 사용하는 방법을 찾아서 비교하면서 풀었습니다.
[ 정답 소스코드 1번 ]
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int num1, num2;
char Cal;
while (true)
{
cout << "? ";
cin >> num1 >> Cal >> num2;
switch (Cal)
{
case '+': cout << num1 << " + " << num2 << " = " << num1 + num2 << "\n" << endl;
break;
case '-': cout << num1 << " - " << num2 << " = " << num1 - num2 << "\n" << endl;
break;
case '*': cout << num1 << " * " << num2 << " = " << num1 * num2 << "\n" << endl;
break;
case '/': cout << num1 << " / " << num2 << " = " << num1 / num2 << "\n" << endl;
break;
case '%': cout << num1 << " % " << num2 << " = " << num1 % num2 << "\n" << endl;
break;
default:
cout << "잘못입력하셨습니다.";
break;
}
}
}
[ 정답 소스코드 2번 ]
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int num1=0, num2=0;
char Cal[100];
char* mainText, *call;
while (true)
{
cout << "? ";
cin.getline(Cal, 100);
num1 = atoi(strtok_s(Cal, " ", &mainText));
call = strtok_s(NULL, " ", &mainText);
num2 = atoi(strtok_s(NULL, " ", &mainText));
if (*call == '+')
{
cout << num1 << " + " << num2 << " = " << num1 + num2 << "\n" << endl;
}
else if (*call == '-')
{
cout << num1 << " - " << num2 << " = " << num1 - num2 << "\n" << endl;
}
else if (*call == '*')
{
cout << num1 << " * " << num2 << " = " << num1 * num2 << "\n" << endl;
}
else if (*call == '/')
{
cout << num1 << " / " << num2 << " = " << num1 / num2 << "\n" << endl;
}
else if (*call == '%')
{
cout << num1 << " % " << num2 << "=" << num1 % num2 << "\n" << endl;
}
}
}
C언어에서 scanf 함수가 scanf_s로 바뀐 것과 같이
strtok 함수도 strtok_s 함수로 바뀌었습니다.
strtok_s() 함수의 경우 문자열을 분리하는 함수입니다. 이런 함수 가르쳐 주지도 않았으면서 사용하라는 게.. 첫 시작으로 배우시는 분들은 더 어려움이 있지 않을까 생각되네요ㅠ
strtok_s()
(원본 첫 시작하는 부분, 끝 구분 부분, &다음에 받을 문자열의 시작 주소를 포인터 변수로 연결해 줍니다)
[ 디버깅 화면 ]
16.영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다.
영문 텍스트를 입력하세요. 히스토그램을 그립니다. 텍스트의 끝은 ; 입니다. 10000개까지 가능합니다. Wise men say, only fools rush in But I can't help, falling in love with you Shall I stay? Would it be a sin? If I can't help, falling in love with you Like a river flows, surely to the sea Darling so it goes, some things aren't meant to be ; 총 알파벳 수 179 a (13) : ************* b (3) : *** c (2) : ** d (2) : ** e (17) : ***************** f (5) : ***** g (5) : ***** h (8) : ******** i (19) : ******************* j (0) : k (1) : * l (17) : ***************** m (3) : *** n (14) : ************** o (14) : ************** p (2) : ** q (0) : r (6) : ****** s (14) : ************** t (14) : ************** u (6) : ****** v (3) : *** w (5) : ***** x (0) : y (6) : ****** z (0) : |
힌트 cin.getline(buf, 10000, ';');를 이용하여 텍스트를 키보드로부터 읽으면 된다. 문자를 소문자로 바꿀 때 tolower(char c) 함수를 이용하고, 알파벳인지 검사하기 위해서 isalpha(char c) 함수를 이용하라. 텍스트 입력을 쉽게 하려면, 입력할 텍스트를 메모장에 입력한 후 ctrl-c로 복사하고, DOS 실행 창에 마우스 오른쪽 버튼을 누르고 붙여 넣기 메뉴를 선택하면 된다. |
[ 정답 소스코드 ]
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int countStack = 0, numCount = 0;
char buf[10000];
cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다." << endl;
cout << "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다." << endl;
cin.getline(buf, 10000, ';');
for (int i = 0; i <= strlen(buf); i++)
{
if (isalpha(buf[i]) != 0)
{
buf[i] = tolower(buf[i]);
numCount++;
}
}
cout << "총 알파벳 수 " << numCount << endl;
for (char i = 'a'; i <= 'z'; i++)
{
for (int j = 0; j <= strlen(buf); j++)
if (buf[j] == i)
countStack++;
cout << i << "(" << countStack << ")" << " : ";
for (int k = 0; k < countStack; k++)
cout << "*";
cout << endl;
countStack = 0;
}
}
isalpha(char c) 함수가 알파벳인지 검사하기 위해서 사용하라는 힌트를 보고 구분하는 것을 봤습니다.
숫자 등의 알파벳을 제외하고 찾으려면 ==0, 알파벳을 비교해서 찾고 싶으면 !=0을 작성해 줘야 합니다.
tolower(char c) 함수는 대문자를 소문자로 바꾸는 함수입니다.
isalpha로 알파벳이라면 tolower를 사용하여 buf에 저장된 값이 문자 값을 소문자로 i 번 째 만큼 값을 변경해둡니다.
이후 검색하며 출력하면 됩니다.
streln() 함수의 경우 문자열 길이를 반환하는 함수입니다. 그 문자열의 길이만큼 for 문을 돌려준다는 의미로 사용했습니다.
[ 디버깅 화면 ]
다음 포스팅 때 뵙겠습니다 ㅎㅎ
그리고 부족한 글 읽어주셔서 감사드립니다!
'C, C++ > C++' 카테고리의 다른 글
C++ 클래스를 이용하여 x자 출력하기 (0) | 2020.12.02 |
---|---|
명품 C++ Programming 2판 연습문제 3장 이론문제 개인 풀이 (5) | 2020.10.23 |
명품 C++ Programming 연습문제 2장 이론문제 개인 풀이 (6) | 2020.10.14 |
명품 C++ Programming 연습문제 1장 (실습문제)개인 풀이 및 개인 해설 (0) | 2020.10.13 |
명품 C++ Programming 연습문제 1장 (이론문제) 개인 풀이 및 개인 해설 (2) | 2020.10.11 |