[정처기] 정보처리기사 실기 C언어 문제 모음

업데이트:



✅ 정보처리기사 C언어 문제 모음

📌 다음은 C 언어 코드이다. 알맞는 출력 결과를 작성하시오. ( 23년 3회 )


#include <stdio.h>

int test(int n) {
    int i, sum = 0;
    
    for (i = 1; i <= n / 2; i++){
        if (n % i == 0)
        sum += i;
    }

    if (n == sum) 
        return 1;
   
    return 0;
}

int main(){
    int i, sum=0;
    
    for (i = 2; i <= 100; i++){ 
        if (test(i))
        sum += i;
    }

    printf("%d ", sum); 
    return 0;

}


정답 : 34

숫자를 일일히 넣어서 무슨 함수인지 확인해보면 자기 자신을 제외한 약수의 합자기자신과 같은 “완전수”를 찾는 문제이다. 범위는 2부터 100까지 이므로 완전수인 6, 28의 합인 34가 정답이다. 6 = 1+2+3 , 28 = 1+2+4+7+14







📌 C언어에서 구조체의 멤버에 접근하기 위해 괄호안의 ‘기호’를 작성하시오. ( 23년 3회 )


#include <stdio.h>
#include <stdlib.h>
 
typedef struct Data{
    char c;
    int *numPtr; 
} Data;
 
int main(){
    int num = 10;
    Data d1;    
    Data *d2 = malloc(sizeof(struct Data));
    
    d1.numPtr = &num;  
    d2 ( ) numPtr = &num; 
 
    printf("%d\n", *d1.numPtr); 
    printf("%d\n", *d2 ( ) numPtr);
 
    free(d2); 
    return 0;
}


[ 출력 결과 ] 
10
10


정답 : ->

C언어에서 구조체 포인터에 접근하기 위한 기호는 -> 이다.







📌 다음 C언어 코드에 알맞는 출력값을 작성하시오. ( 23년 3회 )


#include
 
int f(int n) {
    if(n<=1) return 1;
    else return n*f(n-1);
}
 
int main() {
    printf("%d", f(7));
}


정답 : 5040

함수를 해석해보면 1x2x3x4x5x6x7 을 의미한다.







📌다음은 C언어의 포인터 문제이다. 알맞는 출력값을 작성하시오. ( 23년 3회 )


#include
 
int main() {
    char* p = "KOREA";
    printf("%s ", p);
    printf("%s ", p+1);
    printf("%c ", *p);
    printf("%c ", *(p+3));
    printf("%c ", *p+4);
}


정답 : > KOREA > OREA > K > E > O

포인터는 주소값을 의미한다는 사실만 알고있으면 쉽게 풀 수 있다. 그리고 *p가 의미하는것이 p의 주소값을 참조한다p의 주소값을 통해 실제값(여기서는 문자)을 가진다 라고 생각하면 문제를 풀기 쉽다. 일단 p는 포인터 문자로 선언되어 있으므로 K의 주소값을 가진다.

첫번째 printf("%s ", p);는 p가 나타내는 문자열 KOREA 를 출력한다. 두번째 printf("%s ", p+1);은 p의 바로 다음 주소인 O부터 KOREA를 출력한다. 세번째 printf("%c ", *p);는 p를 참조한다. 즉 p의 실제값인 K를 출력한다. 네번째 printf("%c ", *(p+3));은 p+3의 주소값을 참조한다. 즉 E를 출력한다. 마지막 printf("%c ", *p+4);는 p를 참조하고 아스키값 4를 더한다. 즉 K+4=O를 출력한다







📌다음은 C언어 코드의 문제이다. 다음의 조건에 맞도록 빈 괄호 안에 알맞은 코드를 작성하시오. ( 23년 2회 )

조건 : 입력값이 54321일 경우 출력값이 43215로 출력되어야 한다.


int main(void) {
 
    int n[5];
    int i;
 
    for (i = 0; i < 5; i++) {
        printf("숫자를 입력해주세요 : ");
        scanf("%d", &n[i]);
    }
 
    for (i = 0; i < 5; i++) {
        printf("%d", (            ) );
    }
 
  return 0;
 
}


정답 : n[(i+1)%5]

뭐 딱히 해설할게 없다. 그냥 첫번째 입력한걸 마지막에 출력되게 작성하면 된다.







📌다음은 c언어의 코드이다. 보기의 조건에 맞추어 알맞은 출력값을 작성하시오. ( 23년 2회 )

` 입력값은 홍길동, 김철수, 박영희 순서로 주어진다. `


#include<stdlio.h> 
#include<stdlib.h> 

char n[30];
char* test() {
    printf(입력하세요 : );
    gets(n);
    return n;
}
 
int main()
 
{
    char* test1;
    char* test2;
    char* test3;
 
    test1 = test();
    test2 = test();
    test3 = test();
 
    printf(%s\n,test1);
    printf(%s\n,test2);
    printf(%s,test3);
}


정답 :
박영희
박영희
박영희







📌다음은 c언어의 코드이다. 알맞은 출력값을 작성하시오. ( 23년 2회 )


int n[3] = [73, 95, 82] 
int sum = 0 
 
for(i=0;i<3;i++){
    sum += n[i];
}
 
switch(sum/30){
    case 10:
    case 9: printf("A");
    case 8: printf("B");
    case 7: 
    case 6: printf("C");
    default: printf("D");
}


정답 : BCD

먼저 for문을 통해 sum = n[0]+n[1]+n[2] 가 되므로 sum = 250 이 된다. 따라서 switch(sum/30)은 switch(250/3), 즉 switch(8) 이 실행된다. 근데 주의할점은 switch문의 각 case마다 break가 걸려있지 않다는 점이다. 때문에 case8 을 수행한뒤 case7, case6,default 까지 실행될 것이다. 따라서 정답은 BCD 이다.







📌다음 소스코드의 알맞은 출력을 작성하시오. ( 23년 2회 )


#include <stdio.h>
 
int main(){
 
    int c = 0;
 
    for(int i = 1; i <=2023; i++) { 
		if(i%4 == 0) c++; 
    }
    printf("%d", c);
}


정답 : 505

for문의 i는 1~2023까지 돌고, i가 4의배수일때 c++ 하므로 c는 505번 1 증가한다. 따라서 정답은 505







📌다음은 C언어 문제이다. 알맞은 출력값을 작성하시오. ( 23년 2회 )


#include <stdio.h>
#define MAX_SIZE 10
 
int isWhat[MAX_SIZE];
int point= -1; 
 
void into(int num) {
    if (point >= 10) printf("Full");
    isWhat[++point] = num;
}
 
int take() {
    if (isEmpty() == 1) printf("Empty");
    return isWhat[point--];
}
 
int isEmpty() {
    if (point == -1) return 1;
    return 0;
}
 
int isFull() {
    if (point == 10) return 1;
    return 0;
}
 
int main(int argc, char const *argv[]){
    int e;
    into(5);
    into(2);
    while(!isEmpty()){
        printf("%d", take());
        into(4); into(1); printf("%d", take()); 
        into(3); printf("%d", take()); printf("%d", take()); 
        into(6); printf("%d", take()); printf("%d", take()); 
    }
    return 0;
}


정답 : 213465

c언어로 stack을 구현한 코드라고 보면 된다. 일반적으로 알고있는 stack의 push,pop,isEmpty, isFull을 생각하면 된다.







📌다음 코드는 선택정렬 구현에 관한 문제이다. 빈칸에 알맞는 연산자를 보기에서 골라 작성하시오. ( 23년 2회 )


#include
int main() {
    int E[] = {64, 25, 12, 22, 11};
    int n = sizeof(E) / sizeof(E[0]);
    int i = 0;
    do {
        int j = i + 1;
        do {
            if (E[i] (     ) E[j]) {
                int tmp = E[i];
                E[i] = E[j];
                E[j] = tmp;
            }
            j++;
        } while (j < n);
        i++;
    } while (i < n-1);
    for(int i=0; i<=4; i++)
        printf("%d ", E[i]);
}


정답 : >

그냥 직관적으로도 풀수있는 문제.







📌다음 C언어의 출력값을 작성하시오. ( 23년 1회 )


#include <stdio.h>
 
int main(){
    char a[] = "Art";
    char* p = NULL;
    p = a;
 
    printf("%s\n", a);
    printf("%c\n", *p);
    printf("%c\n", *a);
    printf("%s\n", p);
 
    for(int i = 0; a[i] != '\0'; i++)
    printf("%c", a[i]);
 
}


정답 : Art A A Art Art







📌다음 C언어의 출력값을 작성하시오. ( 23년 1회 )


#include <stdio.h>
 
int main(){
 
    char* a = "qwer";
    char* b = "qwtety";
 
    for(int i = 0; a[i] != '\0' ; i++){
        for(int j = 0; b[j] != '\0'; j++){
            if(a[i] == b[j]) printf("%c", a[i]);
        }
    }
 
}


정답 : qwe







📌다음 아래 코드에서 이진수를 십진수로 변환하는 코드에 대해 괄호 (a) (b)의 적합한 답을 작성하시오. ( 23년 1회 )


#include <stdio.h>
 
int main() {
 
    int input = 101110;
    int di = 1;
    int sum = 0;
 
    while (1) {
 
        if (input == 0) break
        else {
 
          sum = sum + (input (a)(b)) * di;
             di = di * 2;
             input = input / 10;
 
        }
    }
 
    printf("%d", sum);
 
    return 0;
}


정답 : (a) %, (b) 10 or 5 or 2

댓글남기기