2023년 5월 전자공학회 C++ 프로그래밍 레벨 시험(2급) 실기 문제 분석

여기에 이미지 설명을 삽입하세요.

C/C++ 프로그래밍 (레벨 1~8) 모든 실제 질문・여기를 클릭하세요

질문 1: 디지털 증폭

정수 시퀀스와 증폭 인자 x가 주어지면 시퀀스의 각 정수를 x번 증폭하여 출력합니다.
시간 제한: 1000
메모리 제한: 65536
입력
에는 3개의 라인이 포함됩니다: 첫 번째 라인은 정수 시퀀스의 길이(N ≤ 100)를 나타내는 N이고, 두 번째 라인은 정수 범위를 초과하지 않는 N개의 정수이며, space. ; 세 번째 줄에는 지정된 정수 x인 정수(정수 범위를 초과하지 않음)가 포함됩니다. 원본 시퀀스를 증폭한 시퀀스인 N개의 정수를
출력합니다 . 정수는 공백으로 구분됩니다. 샘플 입력 3 1 5 7 2 샘플 출력 2 10 14






다음은 문제를 해결하기 위한 전체 C++ 코드 및 구문 분석 프로세스입니다.

#include <iostream>

int main() {
    
    
    int N;
    std::cin >> N;

    int sequence[N];
    for (int i = 0; i < N; i++) {
    
    
        std::cin >> sequence[i];
    }

    int x;
    std::cin >> x;

    for (int i = 0; i < N; i++) {
    
    
        sequence[i] *= x;
        std::cout << sequence[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

구문 분석 프로세스는 다음과 같습니다.

  1. 먼저, <iostream>입력과 출력을 위한 표준 라이브러리인 헤더 파일을 포함시킵니다.

  2. main()함수 에서 N정수 시퀀스의 길이를 저장하는 정수 변수를 선언합니다.

  3. 개체를 사용하여 std::cin입력 스트림 연산자를 통해 >>입력 정수 시퀀스의 길이를 변수에 할당합니다 N.

  4. 정수 시퀀스를 저장할 크기의 N정수 배열을 선언합니다 .sequence

  5. 루프를 사용하여 for배열을 반복하고 변수를 i0에서 까지 반복합니다 N-1.

  6. 루프에서 개체를 사용하여 std::cin입력 스트림 연산자를 통해 차례로 배열 의 각 요소 >>에 입력 정수를 할당합니다 .sequence

  7. x배율을 저장할 정수 변수를 선언합니다 .

  8. 개체를 사용하여 std::cin입력 스트림 연산자를 통해 >>변수에 입력 확대 비율을 할당합니다 x.

  9. 루프를 사용하여 for배열을 반복하고 변수를 i0에서 까지 반복합니다 N-1.

  10. 루프 내에서 sequence배열의 각 요소에 확대 비율을 곱하고 x결과가 해당 배열 요소에 다시 저장됩니다.

  11. std::cout객체 및 출력 스트림 연산자를 사용하여 <<배열의 각 요소를 공백 sequence으로 구분하여 루프로 출력합니다.

  12. 출력 루프가 끝난 후 std::endl출력을 래핑하기 위해 개행 문자를 출력하는 데 사용합니다.

  13. return 0;프로그램이 정상적으로 종료되었음을 나타냅니다.

  14. 프로그램을 실행할 때 질문에서 요구하는 정수열의 길이 N, 정수열 및 배율을 입력합니다 x.

  15. 프로그램은 정수 시퀀스의 각 정수를 증폭한 다음 증폭된 시퀀스를 출력합니다.

예를 들어, 샘플 입력 3, 1 5 7및 의 경우 2프로그램은 1 5 7정수 시퀀스의 각 정수를 2배로 증폭하여 를 얻고 2 10 14출력 결과는 입니다 2 10 14.

질문 2: 단어 반전

영어 한 줄(문자와 공백만 포함하고 단어는 공백으로 구분됨)을 읽고 모든 단어의 순서를 반대로 한 후 공백으로 구분하여 출력하는 프로그램을 작성하세요.
시간 제한: 10000
메모리 제한: 65536
입력 입력
은 문자열입니다(문자열 길이는 최대 100).
출력
출력은 필요에 따라 정렬된 문자열입니다.
샘플 입력
나는 학생입니다.
샘플 출력
학생 a는 Ie입니다.

다음은 이 문제를 해결하는 C++ 코드 예제입니다.

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>

int main() {
    
    
    std::string input;
    std::getline(std::cin, input);

    std::istringstream iss(input);
    std::vector<std::string> words;

    std::string word;
    while (iss >> word) {
    
    
        words.push_back(word);
    }

    std::reverse(words.begin(), words.end());

    for (const std::string& w : words) {
    
    
        std::cout << w << " ";
    }
    std::cout << std::endl;

    return 0;
}

구문 분석 프로세스는 다음과 같습니다.

  1. 먼저, <iostream>입력과 출력을 위한 표준 라이브러리인 헤더 파일을 포함시킵니다.

  2. <sstream>문자열 스트림 작업의 표준 라이브러리인 헤더 파일을 포함합니다 .

  3. <vector>동적 배열을 저장하기 위한 표준 라이브러리인 헤더 파일을 포함합니다 .

  4. <algorithm>알고리즘 작업을 위한 표준 라이브러리인 헤더 파일이 포함되어 있습니다 .

  5. main()함수 에서 input입력 문자열을 저장할 문자열 변수를 선언합니다.

  6. 이 함수를 사용하여 std::getline()표준 입력에서 문자열 한 줄을 읽고 이를 input변수에 저장합니다.

  7. 문자열을 문자열 스트림으로 변환하는 std::istringstream개체를 선언합니다 .issinput

  8. 분해된 단어를 저장할 std::vector<std::string>컨테이너를 선언합니다 .words

  9. word각 단어를 임시로 저장할 문자열 변수를 선언하세요 .

  10. 루프를 사용하여 while문자열 스트림을 통해 단어를 하나씩 읽고 문자열 스트림이 모든 단어를 읽을 때까지 컨테이너에 iss저장합니다 .wordsiss

  11. std::reverse()이 기능을 사용하면 words컨테이너의 단어 순서를 반대로 바꿀 수 있습니다.

  12. 루프를 사용하여 for컨테이너를 반복하고 words루프 변수는 w컨테이너의 각 단어를 나타냅니다.

  13. 루프에서 단어를 출력하려면 객체 및 출력 스트림 연산자를 w사용합니다 .std::cout<<

  14. 출력 루프가 끝난 후 std::endl출력을 래핑하기 위해 개행 문자를 출력하는 데 사용합니다.

  15. return 0;프로그램이 정상적으로 종료되었음을 나타냅니다.

  16. 프로그램을 실행할 때 질문에 필요한 문자열을 입력합니다.

  17. 프로그램은 입력 문자열을 분해하고 반전시켜 결과를 출력합니다.

예를 들어 샘플 입력의 경우 "I am a student"프로그램은 문자열을 단어 "I", "am", "a", 로 분해한 "student"다음 반전 연산을 수행하여 "student", "a", "am", 을 얻고 "I"최종 출력 결과는 입니다 "student a am I".

질문 3: 행렬의 모서리 요소의 합을 계산하세요

행렬의 가장자리에 있는 소위 요소는 첫 번째 및 마지막 행의 요소와 첫 번째 및 마지막 열의 요소입니다.
시간 제한: 10000
메모리 제한: 65536
입력
첫 번째 행은 공백으로 구분된 행렬(m < 100, n < 100)의 행 수 m과 열 수 n입니다. 다음 m개 라인의 데이터 입력에서 각 라인은 공백으로 구분된 n개의 정수를 포함합니다.
출력
해당 행렬의 에지 요소와
샘플 입력을 출력
3 3
3 4 1
3 7
1 2 0 1
샘플 출력
15

다음은 이 문제를 해결하는 C++ 코드 예제입니다.

#include <iostream>
#include <vector>

int main() {
    
    
    int m, n;
    std::cin >> m >> n;

    std::vector<std::vector<int>> matrix(m, std::vector<int>(n));

    for (int i = 0; i < m; i++) {
    
    
        for (int j = 0; j < n; j++) {
    
    
            std::cin >> matrix[i][j];
        }
    }

    int sum = 0;

    for (int i = 0; i < m; i++) {
    
    
        for (int j = 0; j < n; j++) {
    
    
            if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {
    
    
                sum += matrix[i][j];
            }
        }
    }

    std::cout << sum << std::endl;

    return 0;
}

구문 분석 프로세스는 다음과 같습니다.

  1. 먼저, <iostream>입력과 출력을 위한 표준 라이브러리인 헤더 파일을 포함시킵니다.

  2. <vector>동적 배열을 저장하기 위한 표준 라이브러리인 헤더 파일을 포함합니다 .

  3. main()함수 에서 두 개의 정수 변수를 선언 m하고 n행렬의 행과 열 수를 저장합니다.

  4. 개체를 사용 하고 std::cin입력 스트림 연산자를 통해 >>입력 행 번호 m와 열 번호를 n변수 m및 각각에 할당합니다 n.

  5. matrix행렬의 요소를 저장하기 위해 행과 m 크기의 2차원 정수 벡터를 선언합니다 .n

  6. 두 개의 중첩 for루프를 사용하여 루프 변수는 i0에서 으로 이동 m-1하고 루프 변수는 j0에서 으로 이동합니다 n-1.

  7. 루프에서 개체를 사용하여 std::cin입력 스트림 연산자를 통해 >>입력 정수를 행렬 matrix의 각 요소 에 차례로 할당합니다.

  8. sum모서리 요소의 합을 저장할 정수 변수를 선언합니다 . 초기 값은 0입니다.

  9. 두 개의 중첩 for루프를 사용하여 루프 변수는 i0에서 으로 이동 m-1하고 루프 변수는 j0에서 으로 이동합니다 n-1.

  10. 루프에서는 조건부 판단문을 사용하여 현재 요소가 행렬의 가장자리에 위치하는지, 즉 i0인지 m-1, j0인지 인지 판단합니다 n-1.

  11. 현재 요소가 행렬의 가장자리에 있으면 해당 값이 에 누적됩니다 sum.

  12. std::cout개체 및 출력 스트림 연산자를 사용하여 변수 값을 <<출력합니다 .sum

  13. 출력 후 std::endl개행 문자를 출력하여 출력을 래핑하는 데 사용합니다.

  14. return 0;프로그램이 정상적으로 종료되었음을 나타냅니다.

  15. 프로그램을 실행할 때 질문에서 요구하는 대로 행렬 의 행 m, 열 , 요소 수를 입력하세요.n

  16. 프로그램은 행렬의 가장자리 요소의 합을 계산하고 결과를 출력합니다.

예를 들어, 샘플 입력 3 3, 및 의 경우 프로그램은 행렬의 가장자리 요소의 합을 로 계산한 3 4 1다음 결과를 로 출력합니다 .3 7 12 0 11515

질문 4: 홀수 단일 증가 수열

길이 N(500 이하)의 양의 정수 시퀀스가 ​​주어지면 모든 홀수를 꺼내어 오름차순으로 출력하세요.
시간 제한: 1000
메모리 제한: 65536
입력
총 2줄: 첫 번째 줄은 N이고 두 번째 줄은 공백으로 구분된 N 양의 정수입니다.
출력
쉼표로 구분된 일련의 홀수 출력이 증가하는 순서로 표시됩니다. 데이터에는 적어도 하나의 홀수가 보장됩니다.
샘플 입력
10
1 3 2 6 5 4 9 8 7 10
샘플 출력
1,3,5,7,9

다음은 이 문제를 해결하는 C++ 코드 예제입니다.

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    
    
    int N;
    std::cin >> N;

    std::vector<int> numbers(N);

    for (int i = 0; i < N; i++) {
    
    
        std::cin >> numbers[i];
    }

    std::vector<int> oddNumbers;

    for (int i = 0; i < N; i++) {
    
    
        if (numbers[i] % 2 != 0) {
    
    
            oddNumbers.push_back(numbers[i]);
        }
    }

    std::sort(oddNumbers.begin(), oddNumbers.end());

    for (int i = 0; i < oddNumbers.size(); i++) {
    
    
        std::cout << oddNumbers[i];
        if (i != oddNumbers.size() - 1) {
    
    
            std::cout << ",";
        }
    }

    std::cout << std::endl;

    return 0;
}

구문 분석 프로세스는 다음과 같습니다.

  1. 먼저, <iostream>입력과 출력을 위한 표준 라이브러리인 헤더 파일을 포함시킵니다.

  2. <vector>동적 배열을 저장하기 위한 표준 라이브러리인 헤더 파일을 포함합니다 .

  3. <algorithm>알고리즘 작업을 위한 표준 라이브러리인 헤더 파일이 포함되어 있습니다 .

  4. main()함수 에서 N시퀀스의 길이를 저장할 정수 변수를 선언합니다.

  5. 객체를 사용하여 std::cin입력 스트림 연산자를 통해 변수에 >>입력 길이를 할당합니다 .NN

  6. 양의 정수 시퀀스의 요소를 저장하는 numbers크기의 정수 벡터를 선언합니다 .N

  7. 루프를 사용하면 for루프 변수는 i0에서 N-1.

  8. 루프에서 개체를 사용하여 std::cin입력 스트림 연산자를 통해 차례로 벡터 의 각 요소 >>에 입력 정수를 할당합니다 .numbers

  9. oddNumbers선택한 홀수를 저장할 정수 벡터를 선언합니다 .

  10. 루프를 사용하면 for루프 변수는 i0에서 N-1.

  11. 루프에서는 조건부 판단문을 사용하여 현재 요소가 홀수인지, 즉 numbers[i]홀수인지 판단합니다.

  12. 현재 요소가 홀수이면 벡터에 추가됩니다 oddNumbers.

  13. std::sort()이 함수를 사용하여 oddNumbers벡터를 오름차순으로 정렬합니다.

  14. 루프를 사용하면 for루프 변수는 i0에서 oddNumbers1씩 감소하는 크기로 변경됩니다.

  15. 루프에서는 std::cout객체와 출력 스트림 연산자를 사용하여 값을 차례로 <<출력합니다 .oddNumbers[i]

  16. 각 출력 후 조건문을 사용하여 마지막 요소인지 확인하고, 그렇지 않은 경우 쉼표를 출력합니다 ,.

  17. 출력 루프가 끝난 후 std::endl출력을 래핑하기 위해 개행 문자를 출력하는 데 사용합니다.

  18. return 0;프로그램이 정상적으로 종료되었음을 나타냅니다.

  19. 프로그램을 실행할 때 질문에서 요구하는 대로 시퀀스의 길이 N와 시퀀스의 요소를 입력합니다.

  20. 프로그램은 입력 순서에서 홀수를 선택하여 오름차순으로 출력합니다.

예를 들어 샘플 입력 의 경우 10프로그램 1 3 2 6 5 4 9 8 7 10은 홀수를 선택하여 1, 3, 5, 7, 9오름차순으로 정렬한 다음 결과를 로 출력합니다 1,3,5,7,9.

질문 5: 실수의 덧셈

두 개의 실수를 더한 합을 구합니다.
문제의 입력과 출력에 나타나는 부동 소수점 숫자는 P1P2…Pi.Q1Q2…Qj 형식을 갖습니다. 정수 부분의 경우 P1P2...Pi는 음수가 아닌 정수이고 정수 부분이 0이 아닌 경우 P1은 0이 아니며 소수 부분의 경우 Qj는 0이 아닙니다.
시간 제한: 1000
메모리 제한: 65536 2줄을
입력하세요
. 각 줄은 가수입니다. 각 가수의 길이는 100을 초과할 수 없습니다. 해당 합계를 한 줄로
출력합니다 .
출력은 소수 부분이 0이 아닌 실수로 보장됩니다.
샘플 입력
0.1111111111111111111111111111
0.1111111111111111111111111111111
샘플 출력
0.222222222222222222222222222222

다음은 이 문제를 해결하는 C++ 코드 예제입니다.

#include <iostream>
#include <string>

std::string addRealNumbers(const std::string& num1, const std::string& num2) {
    
    
    std::string result;
    int carry = 0;
    int i = num1.size() - 1;
    int j = num2.size() - 1;

    while (i >= 0 || j >= 0 || carry > 0) {
    
    
        int digit1 = i >= 0 ? num1[i] - '0' : 0;
        int digit2 = j >= 0 ? num2[j] - '0' : 0;
        int sum = digit1 + digit2 + carry;
        carry = sum / 10;
        int digit = sum % 10;
        result = std::to_string(digit) + result;
        i--;
        j--;
    }

    return result;
}

int main() {
    
    
    std::string num1, num2;
    std::cin >> num1 >> num2;

    std::string sum = addRealNumbers(num1, num2);

    std::cout << sum << std::endl;

    return 0;
}

구문 분석 프로세스는 다음과 같습니다.

  1. 먼저, <iostream>입력과 출력을 위한 표준 라이브러리인 헤더 파일을 포함시킵니다.

  2. <string>문자열 조작을 위한 표준 라이브러리인 헤더 파일을 포함합니다 .

  3. addRealNumbers()실수를 더하는 논리를 구현하는 함수를 선언합니다 . 이 함수는 각각 두 개의 가수를 나타내는 문자열 유형 num1및 의 두 num2매개변수를 허용합니다.

  4. addRealNumbers()함수 에서 result덧셈 결과를 저장할 문자열 변수를 선언합니다.

  5. 캐리를 기록하기 위해 정수 변수를 선언합니다 carry.

  6. 각각 및 의 마지막 문자 인덱스 로 초기화된 두 개의 정수 변수 i및 를 선언합니다.jnum1num2

  7. 루프를 사용하면 while루프 조건이 i0보다 크거나 같거나 j0보다 carry크거나 같거나 0보다 큽니다.

  8. 루프에서는 조건판단문을 사용하여 현재 인덱스가 유효한지 판단하고, 유효하면 해당 위치의 문자를 정수로 변환하고, 그렇지 않으면 0으로 설정한다.

  9. 두 숫자와 캐리의 합을 계산하고 그 합을 10으로 나누어 캐리와 현재 숫자의 값을 구합니다.

  10. 현재 비트의 값을 문자로 변환하고 앞에 붙입니다 result.

  11. 업데이트 인덱스 i및 는 j각각 1씩 감소합니다.

  12. result덧셈 결과를 반환합니다 .

  13. main()함수 에서 두 개의 문자열 변수를 선언 num1하고 num2두 개의 입력 가수를 저장합니다.

  14. 객체를 사용하여 두 개의 입력 가수를 변수에 할당 하고 std::cin입력 스트림 연산자를 통해 할당합니다 .>>num1num2

  15. addRealNumbers()함수를 호출 하여 num1및 를 전달 num2하고 반환된 결과를 변수에 할당합니다 sum.

  16. std::cout개체 및 출력 스트림 연산자를 사용하여 변수 값을 <<출력합니다 .sum

  17. 출력 후 std::endl개행 문자를 출력하여 출력을 래핑하는 데 사용합니다.

  18. return 0;프로그램이 정상적으로 종료되었음을 나타냅니다.

  19. 프로그램을 실행할 때 질문에서 요구하는 대로 두 개의 실제 가수를 입력합니다.

  20. 프로그램은 두 실수의 합을 계산하고 결과를 인쇄합니다.

예를 들어 샘플 입력 0.111111111111111111111111111111및 의 경우 0.111111111111111111111111111111프로그램은 해당 합계를 로 계산한 0.222222222222222222222222222222다음 결과를 로 출력합니다 0.222222222222222222222222222222.

추천

출처blog.csdn.net/gozhuyinglong/article/details/132891053