문제 세트 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;
}
퀴즈 답변
답변을 보지 않고 위의 질문을 모두 완료해야 합니다. 답변 시트로 바로 이동하여 도움을 받는 것보다 다른 사람에게 도움을 요청하는 것이 더 낫습니다.
여기에서 위 문제에 대한 답변을 확인할 수 있습니다.