퀴즈

문제 세트 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;
}


퀴즈 답변

답변을 보지 않고 위의 질문을 모두 완료해야 합니다. 답변 시트로 바로 이동하여 도움을 받는 것보다 다른 사람에게 도움을 요청하는 것이 더 낫습니다.

여기에서 위 문제에 대한 답변을 확인할 수 있습니다.