문제 세트 1
다음 프로그램을 공부한 후 아래 질문에 답하세요. 소스 코드만 살펴봄으로써 질문에 답하시기 바랍니다. 즉, 파일을 파일에 복사하고 컴파일하지 말고 실행에 따라 질문에 답하세요. 마음껏 즐기세요.
int main() { int counter, first, last, next; first = 1; last = 2; for (counter = first; counter <= last; counter++) { cout << "\n " << counter; next = counter * counter; cout << " " << next; } counter = first; while (counter <= last) { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } counter = first; do { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } while (counter < last); }
질문 1: 이 프로그램의 결과는 무엇인가요?
A) |
1 2 2 4 1 2 2 4 1 2 2 4 |
B) |
1 1 2 4 1 1 2 4 1 1 2 4 |
C) |
1 1 2 4 1 1 2 4 1 1 |
4일) |
1 1 2 4 1 1 1 1 2 4 |
다운로드) | 아무것도 출력되지 않습니다. 구문에 오류가 있습니다. |
질문 2: do-when 루프 전에 '카운터'의 초기화를 삭제하면 어떻게 될까요?
A) | 무한 루프 - do-when 루프는 일련의 1을 출력합니다. |
B) | 프로그램의 출력은 변경되지 않습니다. |
C) | do-round 루프는 2와 4를 출력합니다. |
4일) | do-round 루프는 |
다운로드) | do-round 루프는 3과 9를 출력합니다. |
질문 3: 이 페이지 상단에 있는 원래 프로그램의 경우 while 루프 전에 카운터 변수를 초기화하는 줄을 삭제했다고 가정해 보겠습니다. 다음과 같이 while 루프 내에서 counter++ 라인도 삭제하면 어떻게 되나요?
A) | while 루프는 아무것도 출력하지 않습니다. |
B) | while 루프는 1과 1을 출력하지만 do-when 루프는 아무것도 출력하지 않습니다. |
C) | while 루프의 출력은 두 줄이 모두 포함된 경우와 동일합니다. |
4일) | 시스템은 컴퓨터를 끌 때까지 랜덤 숫자를 출력합니다. |
다운로드) | while 루프는 무한 루프입니다. |
질문 4: 이 페이지 상단에 있는 원래 프로그램을 고려할 때 while 루프가 다음과 같으면 어떻게 될까요?
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
A) | while 루프의 출력은 원래 프로그램의 출력과 동일합니다. |
B) | while 루프는 어떤 것도 출력하지 않습니다. |
C) | while 루프의 출력은 1 1과 1 4입니다. |
4일) | while 루프의 출력은 1 2 및 2 4입니다. |
다운로드) | while 루프의 출력은 1 4 및 2 4입니다. |
F) | while 루프의 출력은 2 4 및 2 4입니다. |
질문 5: 첫 번째 변수가 마지막 변수보다 크면 어떻게 될까요?
A) | while 루프는 무언가를 출력하지만 다른 것은 출력되지 않습니다. |
B) | do when-loop는 무언가를 출력하지만 다른 것은 없습니다. |
C) | 아무것도 출력되지 않습니다. |
4일) | 이 프로그램은 오류 또는 비정상 종료를 |
다운로드) | for 루프는 무언가를 출력하지만, 다른 것은 아무것도 출력하지 않습니다. |
질문 6: 첫 번째 변수를 마지막 변수와 동일하게 초기화하면 프로그램은 어떻게 출력되나요?
A) | do when-loop는 무언가를 출력하지만 다른 것은 없습니다. |
B) | while 루프는 무언가를 출력하지만 다른 것은 출력되지 않습니다. |
C) | 각 루프는 한 줄을 출력합니다. |
4일) | do while-loop는 두 줄을 출력하고 다른 한 줄은 한 줄을 루프합니다. |
다운로드) | 아무 것도 출력되지 않으며 |
F) | for 루프는 무언가를 출력하지만, 다른 것은 아무것도 출력하지 않습니다. |
문제 세트 2
이전 문제 세트에서와 마찬가지로, 이 프로그램은 다음과 같습니다. 소스 코드만 참고하여 이어지는 질문에 답하세요.
#include <iostream> using namespace std; int main() { int Boys = 3, Girls = 5; void F1(int males, int females); void F2(int &m, int &f); F1(Boys, Girls); cout << "\nAfter calling F1, within main()"; cout << "\n\tBoys = " << Boys; // #2 cout << "\n\tGirls = " << Girls; F2(Boys, Girls); cout << "\nAfter calling F2, within main()"; cout << "\n\tBoys = " << Boys; // #4 cout << "\n\tGirls = " << Girls; } void F1(int b, int g) { b += 3, g += 4; cout << "\nF1"; cout << "\n\tBoys = " << b; // #1 cout << "\n\tGirls = " << g; } void F2(int &b, int &g) { b = b + 8, g = g + 5; cout << "\nF2"; cout << "\n\tBoys = " << b; // #3 cout << "\n\tGirls = " << g; }
질문 1: 표시된 선에서 남자 어린이 변수의 출력은 무엇인가?
A) |
#1: 6 #2: 3 #3: 11 #4: 11 |
B) |
#1: 6 #2: 3 #3: 11 #4: 3 |
C) |
#1: 6 #2: 6 #3: 11 #4: 11 |
4일) | 컴파일하거나 실행되지 않으므로 아무것도 출력되지 않습니다. |
질문 2: 프로그램의 다음 항목과 관련된 항목을 모두 선택하세요.
void F1(int males, int females); void F2(int &m, int &f);
A) | C++ 규칙에서는 메서드를 사용하기 전에 메서드가 정의되어 있다면 이 두 줄을 삭제할 수 있다고 명시합니다. |
B) | C++ 규칙은 선언과 정의 간에 인수 이름이 동일해야 한다고 명시합니다. |
C) | 이 두 줄을 삭제하면 이 프로그램이 다운됩니다. |
4일) | 선언은 전역 범위에 명시되는 것이 더 일반적입니다. |
다운로드) | 이를 전방 선언이라고 합니다. |
질문 3: main()에서 다음 줄을 이동하여 전역 범위에 배치하면 어떻게 될까요?
int Boys = 3, Girls = 5;
A) | 출력이 동일합니다. |
B) | 모든 출력에서 남자 아이는 3, 여학생은 5입니다. |
C) | main()의 출력에서만 남아는 = 3이고, 여학생은 = 5입니다. |
질문 4: 프로그램의 시작을 다음과 같이 변경하면 어떻게 될까요?
// We have moved moved these to global scope const int Boys = 3; const int Girls = 5; void main() { //int Boys = 3, Girls = 5;
A) | 프로그램이 컴파일되지만 실행하려고 하면 비정상 종료됩니다. |
B) | 출력은 변경되지 않습니다. |
C) | 프로그램 전체에서 남자 아이 = 3 여학생 = 5가 출력됩니다. |
4일) | main()의 출력에서만 Boys = 3 Girls = 5가 출력됩니다. |
다운로드) | 컴파일러에 따라 프로그램이 컴파일되지 않을 수 있습니다. |
질문 5: F2의 값으로 데이터가 전달됩니다.
A) | 참입니다. |
B) | 거짓입니다. |
문제 세트 3
이전 문제 세트에서와 마찬가지로, 이 프로그램은 다음과 같습니다. 소스 코드만 참고하여 이어지는 질문에 답하세요.이 방법은 이전 두 가지보다 더 흥미롭습니다. 코드를 주의 깊게 추적하세요.
#include <iostream> using namespace std; const int MAX_SIZE = 20; typedef int ARR2D[MAX_SIZE][MAX_SIZE]; void Print(ARR2D in_array, int rows, int cols); void Fill(ARR2D in_array, int rows, int cols); int main() { ARR2D matrix; int row, col; do { cout << "Please enter the size of the matrix to generate (rows and cols) :" << endl; cin >> row >> col; } while (row <= 0 || row > MAX_SIZE || col <= 0 || col > MAX_SIZE); Fill(matrix, row, col); Print(matrix, row, col); return(0); } void Print(ARR2D in_array, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) cout << '\t' << in_array[i][j]; cout << endl; } } void Fill(ARR2D in_array, int rows, int cols) { for(int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) in_array[i][j] = 0; const int limit = rows * cols; int cNum = 1; int cRow = 0; int cCol = 0; int cDir = 0; // 0-north, 1-east, 2-south, 3-west while(true) { // Place the number. in_array[cRow][cCol] = cNum; cNum++; if (cNum > limit) break; int fRow = cRow; int fCol = cCol; while (true) { fRow = cRow; fCol = cCol; switch(cDir) { case 0: fRow--; break; case 1: fCol++; break; case 2: fRow++; break; case 3: fCol--; break; } if ( fRow >= 0 && fRow < rows && fCol >= 0 && fCol < cols && in_array[fRow][fCol] == 0) break; cDir = (cDir + 1) % 4; } cRow = fRow; cCol = fCol; } }
질문 1: 이 프로그램은 행에 대해 3, 열에 대해 4를 입력했을 때 무엇을 출력하나요?
A) |
1 2 3 4 5 6 7 8 9 10 11 12 |
B) |
1 2 3 4 5 6 7 8 9 10 11 12 |
C) |
12 11 10 9 8 7 6 5 4 3 2 1 |
4일) |
1 3 2 4 8 6 7 5 9 11 10 12 |
다운로드) |
1 2 3 4 10 11 12 5 9 8 7 6 |
G) |
9 8 7 6 10 11 12 5 1 2 3 4 |
H) | 아무것도 출력되지 않습니다. 로직에 결함이 있습니다. |
1) | 아무것도 출력되지 않습니다. 구문 오류가 있습니다. |
로열) | 아무것도 출력하지 않습니다. 그러면 안 됩니다. |
K) | 프로그램이 실행되기를 기다리는 동안 떠오르는 처음 12개의 숫자가 출력됩니다. |
질문 2: main() 함수에 다음 줄을 추가하면 어떻게 될까요?
MAX_SIZE = 10;
A) | C++에서는 허용되지 않습니다. |
B) | 이는 허용됩니다. 프로그램은 MAX_SIZE를 20으로 설정하여 실행됩니다. |
C) | 이는 허용됩니다. 프로그램은 MAX_SIZE를 10으로 설정하여 실행됩니다. |
질문 3: 위 프로그램에서 다음 네 줄을 고려해보세요.
const int MAX_SIZE = 20; typedef int ARR2D [MAX_SIZE][MAX_SIZE]; void Print (ARR2D A, int rows, int cols); void Fill (ARR2D A, int rows, int cols);
1) typedef에서 const를 사용할 수 있나요?
2) 변수가 선언되기 전에 선언에서 typedef를 사용할 수 있나요?
A) | 1) 예 2) 예 |
B) | 1) 아니요 2) 아니요 |
C) | 1) 아니요 2) 예 |
4일) | 1) 예 2) 아니요 |
질문 4: 다음을 사용할 수 있나요?
#define MAX_SIZE 20다음 대신:
const int MAX_SIZE = 20;
A) | 예, 작동하며 C++의 상수에 #define을 사용해도 됩니다. |
B) | 예, 작동하지만 일반적으로 C++에서는 상수에 #define을 사용하지 않습니다. |
C) | C++에서는 #define을 사용할 수 없습니다. |
4일) | C에서는 이 두 가지 중 어느 것도 할 수 없습니다. |
질문 5: typedef는 유형 이름의 별칭을 만드는 데 사용됩니다.
A) | 참입니다. |
B) | 거짓입니다. |
질문 6: Fill() 함수에서 배열을 0으로 초기화하지 않으면 어떻게 되나요?
A) | 실행되지만 모두 12가 출력됩니다. |
B) | 제대로 실행되고 배열이 0으로 초기화된 것과 동일한 출력이 생성됩니다. |
C) | 프로그램이 실행되지 않거나 다운됩니다. |
4일) | 실행되지만 출력은 모두 0이 됩니다. |
다운로드) | 실행되지만 출력을 생성하지 않을 수 있습니다. |
질문 7: 해당되는 것을 모두 선택하세요. 이 프로그램에서 MAX_SIZE에 const를 사용하는 이유는 무엇인가요? 필요한 곳에 MAX_SIZE를 입력하는 대신 '20'을 입력하는 게 더 쉽지 않을까요?
A) | MAX_SIZE는 누구나 사용할 수 있는 기본 제공 C++ 값입니다. 설정하여 사용하기만 하면 됩니다. |
B) | 전역 변수처럼 전역 상수를 사용하지 않아야 함 |
C) | const를 사용하면 프로그램을 더 쉽게 이해할 수 있습니다. |
4일) | 프로그램에서 매직 숫자는 일반적으로 좋은 사례로 간주됩니다. |
다운로드) | MAX_SIZE를 변경하려면 한 곳에서만 변경하면 됩니다. |
질문 8: Fill() 함수의 switch 문에는 기본 사례가 있어야 합니다. 기본 사례를 포함하는 것이 좋은 스타일로 간주되기 때문입니다.
A) | 참입니다. |
B) | 거짓입니다. |
질문 9: Fill() 함수에서 문 사이에 변수를 선언합니다. 예를 들어 cNum 및 cRow는 for 루프가 실행된 후에 선언되고 초기화됩니다. C++에서 작동하나요? 아니면 모든 변수를 함수 상단에 선언해야 하나요?
A) | 이렇게 해도 괜찮습니다. |
B) | 모든 변수는 함수의 맨 위에서 선언해야 합니다. |
C) | 두 가지 방법 모두 잘못되었습니다. C++는 프로그램의 어디에도 변수를 허용하지 않습니다. |
4일) | 모든 변수는 전역 범위에서 선언해야 합니다. |
문제 세트 4
다음은 간단한 클래스를 정의하고 테스트하는 파일 세트입니다. 평소대로 소스 코드만 참조하여 이어지는 질문에 답하세요.
헤더 파일 (cow.h)은 다음과 같습니다.
#ifndef COW_H #define COW_H using namespace std; typedef enum Color {black, brown, beige, blackandwhite, nocolor}; class Cow { public: Cow(); ~Cow(); // accessors double weight() { return weight_; }; string name() { return name_; }; Color color() { return color_; }; // mutators void set_name(string inName) { name_ = inName; }; void set_color(Color inColor) { color_ = inColor; }; void set_weight(double inWeight) {weight_ = inWeight; }; void Moo(); void Properties(); private: Color color_; double weight_; string name_; }; #endif
다음은 관련 .cc 파일 (cow.cc)입니다.
#include <iostream> #include "cow.h" using namespace std; Cow::Cow() {} Cow::~Cow() {} void Cow::Moo() { cout << name() << " says MOO." << endl; } void Cow::Properties() { cout << name() << " weighs " << weight() << ", is " << color() << " and says MOO." << endl; }
다음은 이 클래스 (cowmain.cc)를 위한 클라이언트 프로그램입니다.
#include <iostream> #include "cow.h" using namespace std; int main() { Cow cow1; cow1.set_name("betsy"); cow1.set_weight(400.0); cow1.set_color(black); cow1.Moo(); cow1.Properties(); }
질문 1: 이 프로그램은 무엇을 출력하나요?
A) | "MOO"라고 말합니다. 벳시의 몸무게는 400이고 0은 MOO라고 합니다. |
B) | "MOO"라고 말합니다. 몸무게가 400이고 흑인이며 MOO라고 합니다. |
C) | "MOO"라고 말합니다. 베시의 몸무게는 400입니다 |
질문 2: 접근자 메서드와 뮤테이터 메서드의 코드를 헤더 파일에 배치해서는 안 됩니다. 접근자는 값을 반환하는 메서드이고 뮤테이터는 값을 수정하는 메서드입니다.
A) | 참입니다. |
B) | 거짓입니다. |
질문 3: cow.cc의 각 함수 정의 앞에 'Cow::'가 필요한가요?
A) | 아니요 - cow.h가 포함되었기 때문입니다. |
B) | 지원됨 |
질문 4: 역할의 정의
#ifndef COW_H #define COW_H ... #endif
헤더 파일에서 재생하나요?
해당되는 항목을 모두 선택하세요.
A) | 하지만 파일 이름이 COW_H가 아니라 cow.h이므로 아무 쓸모도 없습니다. |
B) | 이렇게 하지 않으면 런타임 오류가 발생합니다. |
C) | 이렇게 하지 않으면 파일을 두 번 이상 포함할 수 있습니다. |
4일) | 하나 이상의 키워드에 철자 오류가 있기 때문에 아무 작업도 하지 않습니다. |
다운로드) | Cow 클래스에는 헤더 파일이 하나만 있으므로 아무것도 하지 않습니다. |
질문 5: cowmain.cc에 다음 행을 추가하면 어떻게 될까요?
cow1.weight_ = 24;
A) | 프로그램이 실행되고 가중치 변수가 이 줄로 수정됩니다. |
B) | 프로그램은 컴파일되고 실행되지만 해당 줄에서 비정상 종료됩니다. |
C) | C++에서는 이를 허용하지 않습니다. |
4일) | 프로그램은 컴파일되고 실행되지만 가중치 변수는 이 행으로 인해 변경되지 않습니다. |
질문 6: 다음 줄이 실행되면 Cow 클래스의 생성자가 호출됩니다.
Cow cow1;
생성자의 중요한 특성은 무엇인가요?
해당되는 항목을 모두 선택해 주세요.
A) | 일반적으로 어떤 값도 반환하지 않습니다. |
B) | 클래스에 생성자를 제공하지 않으면 클래스가 컴파일되지 않습니다. |
C) | Cow 클래스의 생성자는 비공개 변수를 초기화하지 않으므로 비일반적입니다. |
4일) | 항상 클래스와 동일한 이름을 갖습니다. |
다운로드) | 인수가 다르면 한 클래스에 여러 생성자가 있을 수 있습니다. |
F) | 클래스가 시작되면 생성자가 호출됩니다. |
질문 7: 소멸자의 중요한 특징은 무엇인가요?
A) | 객체가 범위를 벗어나면 소멸자가 호출됩니다. |
B) | 소멸자는 클래스와 이름이 같지만 앞에 '~'가 옵니다. |
C) | cow.cc의 소멸자에 아무 작업도 하지 않는다는 점에서 문제가 있습니다. |
4일) | 클래스의 소멸자를 만들지 않으면 클래스가 컴파일되지 않습니다. |
질문 8: 클라이언트 프로그램이 클래스를 사용하는 방식을 고려할 때 다음을 고려하세요.
Cow 클래스에서 구성원을 공개와 비공개로 나누는 것은 적절하지 않습니다. 즉, 비공개인 것은 공개해야 하고, 공개된 것은 비공개여야 합니다.
A) | 참입니다. |
B) | 거짓입니다. |
질문 9: cow.cc로 만든 생성자 외에 다른 생성자를 추가하면 어떻게 해야 할까요? 새 생성자는 다음과 같습니다.
Cow::Cow(string inName, double inWeight, Color inColor) { set_name(inName); set_weight(inWeight); set_color(inColor); }
그리고 main()에 다음 줄을 추가합니다.
Cow cow2("milly", 350.2, brown); cow2.Moo(); cow2.Properties();
이것이 가능한가요?
해당되는 항목을 모두 선택해 주세요.
A) | cow2를 초기화하는 main()의 줄이 비정상 종료됩니다. |
B) | 생성자는 하나만 가질 수 있습니다. |
C) | 이는 C++에서 일반적입니다. |
4일) | 예, 하지만 이는 일반적인 C++ 사용과는 다릅니다. |
다운로드) | 정상적으로 실행되지만 privates가 초기화되지 않았으므로 아무것도 출력되지 않습니다. |
F) | 동일한 클래스의 메서드 내에서 setName(), setColor() 및 setWeight()를 호출할 수 없습니다. |
보너스 질문
질문 1) 다음 출력은 무엇인가요?
#include <iostream> using namespace std; void HelpMe(int *p, int *num, int *q); void WhereAmI(int *p, int *q, int a); void HelpMe(int *p, int *num, int *q) { int a; a = 2; q = &a; *p = *q + *num; num = p; } void WhereAmI(int *p, int *q, int a) { a = 6; *p = a + *p; *q = a + 3; HelpMe(q, &a, p); } int main() { int *p; int q; int *num; int a; a = 3; q = 5; p = &a; num = &q; HelpMe(&a, p, num); WhereAmI(&q, p, *num); cout << "*p = " << *p << " q = " << q << " *num = " << *num << endl; }
질문 2) Apple 클래스가 존재하고 초기화되었다고 가정하고 다음 문을 생각해 보세요. Apple 클래스에는 color_ 인스턴스 변수가 있습니다.
Apple* granny_smith = new Apple;
다음 중 맞는 문장을 모두 선택하세요.
A) | Apple* granny_smith = NULL; if (granny_smith == NULL)... 이는 허용되지 않습니다. NULL은 이 방식으로 확인할 수 있는 값이 아닙니다. |
B) | Apple* granny_smith, fuji. Apple 객체에 대한 포인터 두 개를 선언합니다. |
C) | granny_smith 변수에는 Apple 객체와 연결된 인스턴스 변수 값이 포함됩니다. |
4일) | Apple* granny_smith = NULL; 괜찮습니다. |
다운로드) | granny_smith 변수에는 Apple 객체의 주소가 포함됩니다. |
F) | string gs_color = *(granny_smith.get_color()); 이 문은 granny_smith 객체의 색상이 초기화되었다고 가정하고 색상을 반환합니다. |
G) | 새 Apple 객체의 저장소가 힙에 할당됨 |
H) | 새 Apple 객체의 스토리지가 런타임 스택에 할당됨 |
1) | int* a = &b; 이는 b의 주소를 a에 배치합니다. |
질문 3) 다음 프로그램의 출력은 무엇입니까?
#include <iostream> using namespace std; const int kNumVeggies = 4; void Grill(int squash, int *mushroom); int Saute(int onions[], int celery); void Grill(int squash, int *mushroom) { *mushroom = squash/4; cout << *mushroom + squash << endl; } int Saute(int onions[], int celery) { celery *= 2; onions[celery]++; Grill(onions[0], &onions[3]); cout << celery << " " << onions[3] << endl; return celery; } int main() { int broccoli, peppers[kNumVeggies], *zucchini; for (broccoli = 0; broccoli < kNumVeggies; broccoli++) peppers[broccoli] = kNumVeggies - broccoli; zucchini = &peppers[Saute(peppers,1)]; Grill(*zucchini, zucchini); zucchini--; cout << peppers[3] + *zucchini + *(zucchini + 1) << endl; }
퀴즈 답변
답을 보지 않고 위의 모든 질문에 답하려고 노력해야 합니다. 답변 시트로 바로 이동해 도움을 요청하는 것보다 도움을 요청하는 것이 더 낫습니다.
여기에서 위 문제에 대한 답변을 확인할 수 있습니다.