문제 세트 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: 이 프로그램은 어떤 결과를 얻게 되나요?
가) |
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 |
D) |
1. 1 2.4 1. 1 1. 1 2.4 |
E) | 아무것도 출력되지 않습니다. 구문에 오류가 있습니다. |
질문 2: '카운터' 초기화를 삭제하면 어떻게 되나요? 수행하나요?
가) | 무한 루프 - do-while 루프는 일련의 1을 출력합니다. |
B) | 프로그램의 출력은 변경되지 않습니다. |
C) | do-while 루프는 2와 4를 출력합니다. |
D) | do-while 루프는 아무것도 출력하지 않습니다. |
E) | do-while 루프는 3과 9를 출력합니다. |
질문 3: 이 페이지 상단에 있는 원래의 프로그램이 있다고 가정하고 while 루프 앞에 카운터 변수를 초기화하는 행이 삭제되었습니다. 대상 다음과 같이 while 루프 내부의 counter++ 줄도 삭제하면 발생할 수 있습니다. 어떻게 해야 할까요?
가) | while 루프는 아무것도 출력하지 않습니다. |
B) | while 루프는 1과 1을 출력합니다. do-while 루프는 아무것도 출력하지 않습니다. |
C) | while 루프의 출력은 두 줄이 모두 입력될 때와 동일합니다. 포함됩니다. |
D) | 시스템은 컴퓨터를 돌릴 때까지 랜덤 숫자를 출력합니다. 사용 중지됩니다. |
E) | while 루프는 무한 루프임 |
질문 4: 이 페이지 상단에 있는 원래 프로그램을 사용하면 어떻게 될까요? while 루프가 다음과 같다면 어떨까요?
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
가) | while 루프의 출력은 원본 프로그램에서와 동일합니다. |
B) | while 루프는 어떤 것도 출력하지 않음 |
C) | while 루프의 출력은 1 1 및 1 4입니다. |
D) | while 루프의 출력은 1 2 및 2 4입니다. |
E) | while 루프의 출력은 1 4와 2 4입니다. |
F) | while 루프의 출력은 2 4와 2 4입니다. |
질문 5: 첫 번째 변수가 마지막 변수보다 크면 어떻게 될까요?
가) | while 루프는 무언가를 출력하지만 다른 것은 출력하지 않습니다. |
B) | do when-loop는 무언가를 출력하지만 다른 것은 출력하지 않습니다. |
C) | 출력은 전혀 없습니다. |
D) | 프로그램에서 오류 또는 비정상 종료를 분류합니다. |
E) | for 루프는 무언가를 출력하지만 다른 것은 출력하지 않습니다. |
질문 6: 첫 번째 변수를 초기화하면 프로그램에서 무엇을 출력하나요? 어떻게 될까요?
가) | do when-loop는 무언가를 출력하지만 다른 것은 출력하지 않습니다. |
B) | while 루프는 무언가를 출력하지만 다른 것은 출력하지 않습니다. |
C) | 각 루프는 한 줄을 출력합니다. |
D) | do while-loop는 두 줄을 출력하고 다른 루프는 한 줄을 출력합니다. |
E) | 아무것도 출력되지 않음 |
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: 표시된 선에서 남자 어린이 변수의 출력은 무엇인가요?
가) |
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 |
D) | 아무것도 출력되지 않습니다. 컴파일되거나 실행되지 않기 때문입니다. |
질문 2: 프로그램의 다음 라인과 관련된 항목을 모두 선택하세요.
void F1(int males, int females); void F2(int &m, int &f);
가) | C++ 규칙에서는 문제가 해결되기 전까지는 이 두 줄을 삭제할 수 메서드는 사용 전에 정의됩니다. |
B) | C++ 규칙에서는 인수 이름이 선언과 정의를 살펴보겠습니다 |
C) | 이 두 줄을 삭제하면 프로그램이 비정상 종료됩니다. |
D) | 선언이 전역에서 언급되는 것이 더 일반적입니다. 범위를 제공합니다 |
E) | 이를 전방 선언이라고 합니다. |
질문 3: main()에서 다음 줄을 이동하여 전역 어떻게 될까요?
int Boys = 3, Girls = 5;
가) | 출력은 동일합니다. |
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;
가) | 프로그램은 컴파일되지만 실행하려고 하면 비정상 종료됩니다. |
B) | 출력에 변경사항이 없습니다. |
C) | 프로그램 전반에 걸쳐 출력은 남아 = 3 소녀 = 5가 됩니다. |
D) | main()의 출력에서만 Boys = 3 Girls = 5가 출력됩니다. |
E) | (컴파일러에 따라) 프로그램이 컴파일되지 않을 수 있습니다. |
질문 5: 데이터가 F2의 값으로 전달됩니다.
가) | 참입니다. |
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의 입력으로 무엇을 출력하나요? 열?
가) |
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 |
D) |
1 3 2 4 8 6 7 5 9 11 10 12 |
E) |
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) | 아무것도 출력되지 않습니다. 로직에 결함이 있습니다. |
전) | 아무것도 출력되지 않습니다. 구문 오류가 있습니다. |
J) | 아무것도 출력되지 않습니다. |
. | 프로그램이 실행되기를 기다리는 동안 떠오르는 처음 12개의 숫자를 출력합니다. |
질문 2: main() 함수에 다음 줄을 추가하면 어떻게 될까요?
MAX_SIZE = 10;
가) | 이는 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를 사용할 수 있나요?
가) | 1) 예 2) 예 |
B) | 1) 아니요 2) 아니요 |
C) | 1) 아니요 2) 예 |
D) | 1) 예 2) 아니요 |
질문 4: 다음을 사용할 수 있나요?
#define MAX_SIZE 20
const int MAX_SIZE = 20;
가) | 예, 작동하며 에서 상수에 #define을 사용하여 C++ |
B) | 예, 작동하지만 일반적으로 상수에 #define을 사용하지 않습니다. (C++) |
C) | #define은 C++에서 사용할 수 없습니다. |
D) | C에서는 다음 작업을 할 수 없습니다. |
질문 5: typedef는 유형 이름의 별칭을 만드는 데 사용됩니다.
가) | 참입니다. |
B) | 거짓입니다. |
질문 6: 배열에서 0으로 초기화하지 않으면 어떻게 될까요? Fill() 함수를 호출합니다.
가) | 실행되지만 출력은 |
B) | 제대로 실행되고 배열이 0으로 초기화됨 |
C) | 프로그램이 실행되지 않거나 비정상 종료됩니다. |
D) | 실행되지만 출력은 모두 0 |
E) | 실행되지만 출력을 생성하지 않을 수 있습니다. |
질문 7: 해당하는 항목을 모두 선택하세요. 이 프로그램에서 MAX_SIZE에 const를 사용하는 이유는 무엇인가요? '20'을 입력하는 것이 더 쉽지 않나요 (있는 경우) MAX_SIZE 대신 어떻게 해야 할까요?
가) | MAX_SIZE는 누구나 사용할 수 있는 기본 제공 C++ 값입니다. 방금 설정 사용할 수 있습니다. |
B) | 전역 변수와 마찬가지로 전역 상수는 피해야 합니다. |
C) | const를 사용하면 프로그램을 더 쉽게 이해할 수 있습니다. |
D) | 프로그램에서 매직 번호는 일반적으로 좋은 방법으로 간주됩니다. |
E) | MAX_SIZE를 변경하려면 한 번만 변경하면 됩니다. 장소 |
질문 8: Fill() 함수의 switch 문에 기본값이 있어야 함 왜냐하면 이를 포함하는 것이 좋은 스타일로 간주되기 때문입니다.
가) | 참입니다. |
B) | 거짓입니다. |
질문 9: Fill() 함수에서 문 사이에 변수를 선언합니다. 예를 들어 cNum 및 cRow는 for 루프가 실행된 후 선언되고 초기화됩니다. C++에서 작동할까요, 아니면 모든 변수를 함수
가) | 이렇게 해도 괜찮습니다. |
B) | 모든 변수는 함수의 맨 위에서 선언해야 합니다. |
C) | 두 방법 모두 잘못되었습니다. C++는 있습니다. |
D) | 모든 변수는 전역 범위에서 선언해야 합니다. |
문제 세트 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: 이 프로그램은 무엇을 출력하나요?
가) | 'MOO'라고 말하는 벳시 Betsy는 몸무게가 400이고 0이라며 MOO라고 합니다. |
B) | 'MOO'라고 말하는 벳시 몸무게가 400인데 흑인인 벳시가 'MOO'라고 말합니다. |
C) | 'MOO'라고 말하는 벳시 베시의 몸무게는 400이고, |
질문 2: 접근자 메서드와 뮤테이터 메서드의 코드를 배치해서는 안 됩니다. 헤더 파일에 포함됩니다. (접근자는 값을 반환하는 메서드이며 변형자는 는 값을 수정하는 메서드입니다.)
가) | 참입니다. |
B) | 거짓입니다. |
질문 3: '소::'가 필요한가요? 각 함수 정의 앞에 포함되어 있나요?
가) | 아니요 - cow.h가 포함되어 있기 때문에 |
B) | 예 |
질문 4: 역할은 무엇인가요?
#ifndef COW_H #define COW_H ... #endif
재생할까요?
해당되는 항목을 모두 선택하세요.
가) | 파일 이름이 cow.h이므로 쓸모가 없습니다. COW_H가 아닙니다. |
B) | 이렇게 하지 않으면 런타임 오류가 발생합니다. |
C) | 이렇게 하지 않으면 파일이 두 번 이상 포함될 수 있습니다. |
D) | 키워드 맞춤법이 틀린 키워드가 하나 이상 있어 아무 작업도 수행하지 않습니다. |
E) | Cow 클래스에는 헤더 파일이 하나만 있으므로 아무 작업도 하지 않습니다. |
질문 5: cowmain.cc에 다음 행을 추가하면 어떻게 되나요?
cow1.weight_ = 24;
가) | 프로그램이 실행되고 가중치 변수가 수정됨 살펴보겠습니다. |
B) | 프로그램이 컴파일되고 실행되지만 해당 줄에서 비정상 종료됩니다. |
C) | C++에서는 이를 허용하지 않습니다. |
D) | 프로그램은 컴파일되고 실행되지만 가중치 변수는 변경할 수 있습니다. |
질문 6: 다음 행이 실행되면 Cow 클래스의 생성자가 호출됩니다.
Cow cow1;
생성자의 중요한 특성은 무엇인가요?
해당되는 항목을 모두 선택해 주세요.
가) | 일반적으로 어떤 값도 반환하지 않습니다. |
B) | 클래스에 생성자를 제공하지 않으면 클래스는 컴파일하지 않음 |
C) | Cow 클래스의 생성자는 초기화되지 않으므로 이례적입니다. 사용할 수 없습니다. |
D) | 항상 클래스와 이름이 같습니다. |
E) | 인수가 다름 |
F) | 생성자는 클래스가 인스턴스화될 때 호출됩니다. |
질문 7: 소멸자의 중요한 특성은 무엇인가요?
가) | 객체가 범위를 벗어날 때 소멸자가 호출됩니다. |
B) | 소멸자는 클래스와 이름이 같지만 앞에 '~'가 붙습니다. |
C) | cow.cc의 소멸자에 문제가 있어 아무것도 하지 않습니다. |
D) | 클래스의 소멸자를 만들지 않으면 클래스는 다음 작업을 하지 않습니다. 컴파일하다 |
질문 8: 고객 프로그램에서 수업을 사용하는 방식을 고려할 때 있습니다.
소 클래스에서 멤버를 공개와 비공개로 나누는 것은 적절하지 않습니다. 즉, 비공개 항목은 공개 항목이어야 하고 공개 항목은 비공개여야 합니다.
가) | 참입니다. |
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();
이것이 가능한가요?
해당되는 항목을 모두 선택해 주세요.
가) | main()에서 cow2를 초기화하는 줄이 다운됩니다. |
B) | 생성자는 하나만 있을 수 있습니다. |
C) | 이는 C++에서 일반적입니다. |
D) | 예. 하지만 일반적인 C++ 사용법은 아닙니다. |
E) | 정상적으로 실행되지만 아무것도 출력되지 않습니다. 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;
다음 중 맞는 문장을 모두 선택하세요.
가) | Apple* granny_smith = NULL; if (granny_smith == NULL)... 이는 문제가 될 수 있습니다. NULL은 이러한 방식으로 확인할 수 있는 값이 아닙니다. |
B) | Apple* granny_smith, fuji; Apple 객체에 대한 두 개의 포인터가 선언됩니다. |
C) | granny_smith 변수에는 Apple 객체와 연결된 인스턴스 변수 값이 포함됩니다. |
D) | Apple* granny_smith = NULL; 괜찮습니다. |
E) | granny_smith 변수에는 Apple 객체의 주소가 포함됩니다. |
F) | string gs_color = *(granny_smith.get_color()); 이 문은 granny_smith 객체의 색상을 반환하며, 객체가 초기화되었다고 가정합니다. |
G) | 새 Apple 객체의 스토리지가 힙에 할당됨 |
H) | 새 Apple 객체를 위한 스토리지가 런타임 스택에 할당됨 |
전) | 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; }
퀴즈 답변
답변을 보지 않고 위의 질문을 모두 완료해야 합니다. 답변 시트로 바로 이동하여 도움을 받는 것보다 다른 사람에게 도움을 요청하는 것이 더 낫습니다.
여기에서 위 문제에 대한 답변을 확인할 수 있습니다.