반응형

 

[2장 연습문제]

1. c++ 응용프로그램이 실행을 시작하는 함수의 원형은 무엇인가?

A. int main()

 

2. C++에서 main() 함수에 대한 설명 중 틀린 것은?

A. 3번 “main() 함수는 반드시 return문을 가지고 있어야 한다.”

C++에서는 main() 함수 끝에 return 0;을 생략할 경우 자동으로 작성됩니다.

 

3. 다음 소스에서 생략해도 되는 라인은 어디인가?

#include <iostream>

int main() {

std::cout << “I love C++\n”;

std::cout << “I love programming”;

return 0;

}


A. C++
에서 return 0;을 생략해도 자동으로 작성되기 때문에 retrun 0; 부분은 생략해도 무방합니다.

 

4. 다음 코드는 c컴파일러로 컴파일하면 컴파일 오류가 발생하지만 c++컴파일러로 컴파일하면 정상적으로 컴파일된다.

int a;

a = 4;

int square = a * a;

(1) c 컴파일러로 컴파일할 때 어떤 컴파일 오류가 발생하는가?

A. [형식 오류]. 형식 오류 c언어에서는 모든 변수가 실행문 전에 선언되어야 하므로 컴파일 오류가 발생

(2) c++ 컴파일러로 컴파일할 때 정상적으로 컴파일되는 것은 c++언어의 어떤 특성 때문인가?

A. 프로그램 어디서나 변수 선언이 가능한 성질

(3) 이 특징이 가진 장단점은 무엇인가?

A. 장점은 스크롤을 올렸다 내렸다 해야 하는 번거로움 줄일 수 있고, 변수가 필요할 때 바로 선언할 수 있어서 편하다. 단점은 선언된 변수들이 코드 사이에 흩어져 있으므로 선언된 모든 변수 한눈에 보기 힘들고 찾기도 어렵다.

 

5. 다음 프로그램의 실행 결과는 무엇인가?

#include<iostream>

int main()

{

std::cout << "I love C++\n" << "I love programing";

}

A.

I love C++

I love programing

 

6. 다음 프로그램에 컴파일 오류가 발생하지 않도록 빈칸을 채워라.

(1)

#include<iostream>

_________________________

int main()

{

int count = 0;

std::cin >> count;

cout << count + 1;

return 0;

}

(2)

#include<iostream>

__________________________

int main()

{

cout << "I love C++" << endl;

cout << "I love programming";

}

(1) using namespace std;

(2) using namespace std;

 

7. 다음 C++ 프로그램 코드에서 틀린 부분을 수정하라.

(1) #include <iostream>;

A. ; 지우기

(2) using namespace std

A. ; 추가

(3) std::cin << name;

A. std::cin >> name;

(4) std:cout<<1<<2<<'a'<<"hello"<<'/n';

A. std::cout << 1 << 2 << 'a' << "hello\n";

 

8. 다음 C++ 프로그램 코드에서 틀린 부분이 있으면 수정하라.

(1) using std::cin;

A. 틀린 부분 없음

(2) int year = 1; //year은 연도를 나타낸다.

A. 틀린 부분 없음

(3) int n=1; cout>>n+200;

A. cout은 << 연산자와 사용해야 한다 =>> int n=1; cout<<n+200;

(4) int year = 2004; cout<<2014+“”;

A. 두 포인터를 더할 수 없기 때문에 <<연산자로 이어주어야 한다

int year = 2004; cout<<year<<“년”;

 

9. 다음은 개발자가 작성한 myheader.h 파일의 소스이다.

#define MAX 100

#define MIN 0

다음 myprog.cpp 프로그램에서 빈칸에 적절한 라인을 삽입하라.

#include <iostream>

using namespace std;

_____________________ //이 곳에 myheader.h를 include하는 문을 작성하라.

int main() {

cout << MAX << MIN;

return 0;

}


A. #inlcude "myheader.h"

 

10. C++ 문자열에 대한 다음 질문에 O, X로 답하라.

  1. C-스트링이란 C언어에서 문자열을 다루는 방식이다.( O )
  2. C++에서 C-스트링 방식의 문자열이 사용된다. ( O )
  3. C++에서는 문자열을 다루기 위해 string클래스가 이용된다.( O , cin.getline()도 이용됨 )
  4. char name[]="C++";이 컴파일되면 name[] 배열의 크기가 3이 된다.( X, 배열의 크기는 4가 된다. )
  5. char name[10]; cin >> name;를 실행하면 공백 문자를 포함하여 키보드로부터 최대 9개의 문자를 읽을 수 있다.(O)

 

11. C-스트링을 다루기 위해, strcmp(), strlen() 등의 함수를 사용하고자 할 때 include 해야 하는 표준 헤더 파일은 무엇인가?

A. #include <cstring>

 

12. 다음 프로그램이 있다.

#include <iostream>

int main() {

char name[20];

std::cout << “이름을 입력하세요?”;

std::cin >> name;

std::cout << name << “님 환영합니다”;

return 0;

}

(1) 프로그램을 실행하고 다음과 같이 키보드로 kitae를 입력한 결과는 무엇인가?

A. kitae님 환영합니다 라고 출력된다.

(2) 프로그램을 실행하고 다음과 같이 키보드로 kitae Hwang을 입력한 결과는 무엇인가?

A. cin의 경우 공백을 구분자로 하기 때문에 Kitae님 환영합니다 라고 출력된다.

 

13. cin.getline(buf, 100. ';')에 대한 설명으로 틀린 것은?

A. 4번 cin.getline(buf,100);로 써도 무관하다.

왜냐하면 cin.getline() 함수의 경우 구분자의 디폴트 값이 ‘\n’ 이므로 ‘;’를 생략하면 안 된다.

 

14. char buf[100];가 선언되어 있다고 가정하고, 다음과 같이 <Enter> 키가 입력될 때까지 문자열을 읽는 코드로 잘못된 것은 무엇인가?

I love C++<Enter>

A. 4번 cin.getline(buf,11,'.');

1,2,3번은 문자열을 입력받고 엔터키를 받으면 getline() 함수가 종료된다.

그러나 4번은 '.'을 받아야만 getline() 함수가 종료된다.

 

15. C++에서 여러 사람들이 나누어 프로그램을 개발할 때 동일한 이름의 변수나 클래스. 함수 등이 충돌하는 것을 막기 위해. 개발자가 자신만의 이름 공간을 생성할 수 있도록 새로 도입한 키워드(혹은 개념)는 무엇인가?

namespace

 

16. C++ 표준 라이브러리가 모두 선언된 이름 공간은 무엇인가?

std

 

17. C++ 표준에서 입출력을 위한 클래스. 함수, 객체들이 포함된 이름 공간은 무엇인가?

std

 

 

18. C++ 표준에서 cin, cout 객체는 어떤 헤더 파일에 선언되어 있는가?

iostream

 

 

19. 다음은 화면에 나이와 학과를 출력하는 main.cpp 프로그램을 작성한 사례이다. 빈칸에 적절한 코드를 삽입하라.

#include <iostream>

using namespace std;

int main() {

int age = 20;

char* pDept = “컴퓨터 공학과”;

_______________________________

}



출력결과 :20 컴퓨터 공학과


A. cout << age << " " << pDept;

 

20. 다음 출력 결과와 같은 코드를 작성하고자 한다. 다음 C++ 프로그램을 완성하라.

#include <iostream>

using namespace std;

int main() {

for(int n=0; n<4; n++) {

_______________________________

_______________________________

_______________________________

}

}



출력 결과:

*

**

***

****

A.

for (int m =0; m <= n; m++) {

cout << "*";

} cout << endl;

 

[2장 실습 문제]

 

1. cout<< 연산자를 이용하여, 1에서 100까지 정수를 다음과 같이 한 줄에 10개씩 출력하고 각 정수는 탭으로 분리하여 출력하라.

[코드]

#include <iostream>
using namespace std;

int main()
{
	int n = 1;
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			cout << n << '\t';
			n++;
		}
		cout << endl;
	}
}

[실행결과]

 

2. cout<<연산자를 이용하여 다음과 같이 구구단을 출력하는 프로그램을 작성하라.

[코드]

#include <iostream>
using namespace std;

int main()
{
	for (int i = 1; i < 10; i++)
	{
		for (int j = 1; j < 10; j++) cout << j << "x" << i << "=" << i * j << '\t';
		cout << endl;
	}
}

[실행결과]

 

3. 키보드로부터 두 개의 정수를 읽어 큰 수를 화면에 출력하라.

[코드]

#include <iostream>
using namespace std;
int main() 
{
	int n,m;

	cout << "두 수를 입력하라>>";
	cin >> n >> m;

	if (n > m) cout << "큰 수 = " << n << endl;
	else if (n < m) cout << "큰 수 = " << m << endl;
	else cout << "두 수는 같습니다." << endl;
	
}

[실행결과]

 

4. 소수점을 가지는 5개의 실수를 입력받아 제일 큰 수를 화면에 출력하라.

[코드]

#include <iostream>
using namespace std;

int main()
{
	double arr[5];
	double max = 0;
	cout << "다섯개의 실수를 입력하라>>";
	
	for (int i = 0; i < 5; i++)
	{
		cin >> arr[i];
		if (i == 0) max = arr[0];
		if (max < arr[i]) max = arr[i];
	}
		
	cout << "제일 큰 수 = " << max << endl;
	
}

[실행결과]

 

5. <Enter> 키가 입력될 때까지 문자들을 읽고, 입력된 문자 'x'의 개수를 화면에 출력하라. 

[코드]

#include<iostream>
using namespace std;

int main()
{
	char c[100];
	int cnt = 0;
	cout << "문자들을 입력하라(100개 미만).\n";
	cin.getline(c, 100, '\n');

	for (int i = 0; i < 100; i++)
	{
		if (c[i] == 'x') cnt++;
	}

	cout << "x의 개수는 " << cnt << endl;

}

[실행결과]

 

6. 문자열을 두 개 입력받고 두 개의 문자열이 같은지 검사하는 프로그램을 작성하라. 만일 같으면 "같습니다", 아니면 "같지 않습니다"를 출력하라.

[코드]

#include<iostream>
using namespace std;

int main()
{
	string a, b;
	cout << "새 암호를 입력하세요>>";
	cin >> a;
	cout << "새 암호를 다시 한 번 입력하세요>>";
	cin >> b;

	if (a == b) cout << "같습니다." << endl;
}

[실행결과]

 

7. 다음과 같이 "yes"가 입력될 때까지 종료하지 않는 프로그램을 작성하라. 사용자로부터의 입력은 cin.getline() 함수를 사용하라. 

[코드]

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

int main()
{
	char c[100];
	
	while (true)
	{
		cout << "종료하고싶으면 yes를 입력하세요>>";
		cin.getline(c, 100, '\n');

		if (strcmp(c,"yes") == 0) break;
	}
	cout << "종료합니다..." << endl;
}

[실행결과]

 

8. 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.

[코드]

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

int main()
{
	string ans;
	char name[100];
	int max = 0;
	int n = 0;
	cout << "5 명의 이름을 ';'으로 구분하여 입력하세요\n" << ">>";
	
	for (int i = 1; i <= 5; i++)
	{
		cin.getline(name, 100, ';');
		cout << i << " : " << name;
		cout << endl;

		if (max < strlen(name))
		{
			max = strlen(name);
			n = i;
			ans = name;
		}
			
	}

	cout << "가장 긴 이름은 " << ans << endl;
	
}

[실행결과]

 

9. 이름, 주소, 나이를 입력받아 다시 출력하는 프로그램을 작성하라.

[코드]

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

int main()
{
	string name, address, age;
	cout << "이름은?";
	getline(cin,name);
	cout << "주소는?";
	getline(cin, address);
	cout << "나이는?";
	getline(cin, age);
	
	cout << name << ", " << address << ", " << age << endl;
}

[실행결과]

 

10. 문자열을 하나 입력받고 문자열 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라. 

[코드]

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

int main()
{
	string s;
	cout << "문자열 입력>>";
	getline(cin,s);

	for (int i = 0; i < s.length(); i++)
	{
		for (int j = 0; j <= i; j++)
		{
			cout << s[j];
		}
		cout << '\n';
	}

}

[실행결과]

 

11. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라.

#include<stdio.h>

int main()
{
	int k, n = 0;
	int sum = 0;
	printf("끝수를 입력하세요>>");
	scanf("%d", &n);
	for (k = 0; 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 = 0; k <= n; k++)
	{
		sum += k;
	}

	cout << "1에서 " << n << "까지의 합은 " << sum << " 입니다.\n";
}

[실행결과]

 

12. 다음 C 프로그램을 C++ 프로그램으로 수정하여 실행하라. 실행결과는 11번 문제와 같다.

#include<stdio.h>
int sum(); // 함수 원형 선언

int sum(int a, int b)
{
	int k, res = 0;
	for (k = a; k <= b; k++)
	{
		res += k;
	}

	return res;
}

int main()
{
	int n = 0;
	printf("끝수를 입력하세요>>");
	scanf("%d", &n);
	printf("1에서 %d까지의 합은 %d 입니다.\n", n, sum(1,n));
	return 0;
}

[코드]

#include<iostream>
using namespace std;

int sum(); // 함수 원형 선언

int sum(int a, int b)
{
	int k, res = 0;
	for (k = a; k <= b; k++)
	{
		res += k;
	}

	return res;
}

int main()
{
	int n = 0;
	cout << "끝수를 입력하세요>>";
	cin >> n;
	cout << "1에서 " << n << "까지의 합은 " << sum(1,n) << " 입니다.\n";
}

[실행결과]

 

13. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다, 정수와 연산자는 하나의 빈칸으로 분리된다.

[직관적 코드]

#include <iostream>
using namespace std;

int main() 
{
	int a, c;
	char b;
	while (true) 
	{
		cout << "? ";
		cin >> a >> b >> c;
		switch (b) {
		case '+':cout << a << " " << b << " " << c << " = " << a + c << endl; break;
		case '-':cout << a << " " << b << " " << c << " = " << a - c << endl; break;
		case '*':cout << a << " " << b << " " << c << " = " << a * c << endl; break;
		case '/':cout << a << " " << b << " " << c << " = " << a / c << endl; break;
		case '%':cout << a << " " << b << " " << c << " = " << a % c << endl; break;
		default: cout << "잘못된 연산자 입니다." << endl;
		}
	}
}

[문제의 힌트를 활용한 코드]

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

int main() 
{
	int a, c;
	char *b;

	while (true)
	{
		cout << "? ";
		char s[100];
		cin.getline(s, 100, '\n');
		a = atoi(strtok(s, " "));
		b = strtok(NULL, " ");
		c = atoi(strtok(NULL, " "));

		switch (*b)
		{
		case '+':
			cout << a << " + " << c << " = " << a + c << endl; break;
		case '-':
			cout << a << " - " << c << " = " << a - c << endl; break;
		case '*':
			cout << a << " * " << c << " = " << a * c << endl; break;
		case '/':
			cout << a << " / " << c << " = " << a / c << endl; break; 
		case '%':
			cout << a << " % " << c << " = " << a % c << endl; break;
		}

		
	}


}

[실행결과]

 

14. 영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다. 

[코드]

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

int main() 
{
	char c[10001];
	int cnt[26] = { 0, };
	cin.getline(c, 10000, ';');
	
	for (int i = 0; i < strlen(c); i++)
	{
		cnt[int(c[i])-97]++;
	}

	for (int i = 0; i < 26; i++)
	{
		cout << char(i + 97) << " (" << cnt[i] << ")\t: ";
		for (int j = 0; j < cnt[i]; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	
	


}

[실행결과]

 

문제풀이는 역시나 재밌다. 개인적으로는 실습 마지막 문제(14번) 보다는 실습 13번이 좀 더 어려웠던 것 같다. 문자열 관련 함수인 atoi(), strcmp(), strtok()와 같은 함수들은 처음 써보았는데 나중에 정리해서 포스팅해야겠다.

반응형

+ Recent posts