관리 메뉴

피터의 개발이야기

[정처기 실기] 2024년 실기 자주 출제되는 SQL, 프로그래밍 기출문제들 정리 본문

개발이야기/정보처리기사

[정처기 실기] 2024년 실기 자주 출제되는 SQL, 프로그래밍 기출문제들 정리

기록하는 백앤드개발자 2024. 4. 23. 07:58
반응형

 

ㅁ 들어가며

https://www.sinagong.co.kr/pds

 시나공 자료실의 기출문제를 풀어보고 문제 분석과 풀이를 노트한 글입니다.

ㅇ 일부 내용은 개인적 이해를 바탕으로 풀어 썼기 때문에 정확하지 않을 수 있습니다.

 

매년 출제되는 SQL 17문제

 

[SQL 명령문의 기본 형식과 조건]

 

1. 다음과 같이 테이블을 정의하고 튜플을 삽입하였을 때 각 번호()의 SQL문을 실행한 결과를 쓰시오.

CREATE TABLE 부서 (
        부서코드 INT PRIMARY KEY,
        부서명 VARCHAR(20)
);


CREATE TABLE 직원 (
    직원코드 INT PRIMARY KEY,
    부서코드 INT,
    직원명 VARCHAR(20),
    FOREIGN KEY(부서코드) REFERENCES 부서(부서코드)
        ON DELETE CASCADE
);


INSERT INTO 부서 VALUES(10, ‘영업부’);
INSERT INTO 부서 VALUES(20, ‘기획부’);
INSERT INTO 부서 VALUES(30, ‘개발부’);


INSERT INTO 직원 VALUES(1001, 10, ‘이진수’);
INSERT INTO 직원 VALUES(1002, 10, ‘곽연경’);
INSERT INTO 직원 VALUES(1003, 20, ‘김선길’);
INSERT INTO 직원 VALUES(1004, 20, ‘최민수’);
INSERT INTO 직원 VALUES(1005, 20, ‘이용갑’);
INSERT INTO 직원 VALUES(1006, 30, ‘박종일’);
INSERT INTO 직원 VALUES(1007, 30, ‘박미경’);

 

① SELECT DISTINCT COUNT(부서코드) FROM 직원 WHERE 부서코드 = 20;

더보기

답 : 3

 

② DELETE FROM 부서 WHERE 부서코드 = 20;

SELECT DISTINCT COUNT(부서코드) FROM 직원;

더보기

답 : 4

ㅇ FOREIGN에 DELETE CASCADE를 빼면 부서를 삭제해도 직원은 유지된다.

 

핵심 211) GRANT / REVOKE

CASCADE : 권한 취소 시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소함

 

2. 학생(STUDENT) 테이블에 전기과 학생이 50전산과 학생이 100전자과 학생이 50명 있다고 할 때다음 SQL문 의 실행 결과로 표시되는 튜플의 수를 쓰시오. (, DEPT 필드는 학과를 의미한다.)

① SELECT DEPT FROM STUDENT;
② SELECT DISTINCT DEPT FROM STUDENT;
③ SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT = ‘전산과’;
더보기

• ① 200

• ② 3

• ③ 1

 

3. 다음은 <제품>(제품명단가제조사테이블을 대상으로 “H” 제조사에서 생산한 제품들의 단가보다 높은 단가를 가진 제품의 정보를 조회하는 <SQL>이다괄호에 알맞은 답을 적어 <SQL>을 완성하시오.

<SQL>

SELECT 제품명단가제조사
FROM 제품
WHERE 단가 ( ) (SELECT 단가 FROM 제품 WHERE 제조사 = ‘H’);

▶ ALL : 모든 튜플을 검색할 때 지정하는 것으로, 주로 생략함
▶ DISTINCT:중복된 튜플이 있으면 그 중 첫번째 한 개만 검색함
▶ DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌, 튜플 전체를 대상으로 함

 

4. 다음 <TABLE>을 참조하여 <SQL>을 실행했을 때 출력되는 결과를 쓰시오. (<TABLE>에 표시된 ‘NULL’은 값이 없음을 의미한다.)

INDEX COL1 COL2
1 2 NULL
2 4 6
3 3 5
4 6 3
5 NULL 3

<SQL>

SELECT COUNT(COL2)
FROM TABLE
WHERE COL1 IN (2, 3)
    OR COL2 IN (3, 5);

COUNT는 null을 포함하지 않는다.

 

5. 다음은 <EMPLOYEE> 릴레이션에 대해 <관계 대수식>을 수행했을 때 출력되는 <결과>이다. <결과>의 각 괄호(~)에 들어갈 알맞은 답을 쓰시오.

<관계 대수식>

πTTL(EMPLOYEE)

 

INDEX AGE TTL
1 48 부장
2 25 대리
3 41 과장
4 36 차장

① )
② )
③ )
④ )
⑤ )
더보기

• ① TTL

• ② 부장

• ③ 대리

• ④ 과장

• ⑤ 차장

 

6. SQL과 관련한 다음 설명에서 괄호()에 들어갈 알맞은 답을 쓰시오.

 

UPDATE문은 테이블에 있는 튜플의 내용을 갱신할 때 사용하는 명령문으로, DML에 해당한다다른 DML로는 INSERT, DELETE가 있으며각각 새로운 튜플을 삽입하거나 삭제할 때 사용한다.

<학부생테이블

학부 학과번호 입학생수 담당관
정경대학 110 300 김해율
공과대학 310 250 이성관
인문대학 120 400 김해율
정경대학 120 300 김성수
인문대학 420 180 이율해

 

다음은 <학부생테이블에서 입학생수가 300 이상인 튜플의 학과번호를 999로 갱신하는 SQL문이다.

① ) 학부생 ② ) 학과번호 = 999 WHERE 입학생수 >= 300;
더보기

• ① UPDATE

• ② SET

 

7. <EMP_TBL> 테이블을 참고하여 <SQL>의 실행 결과를 쓰시오.

EMPNO SAL
100 1500
200 3000
300 2000

<SQL>

SELECT COUNT(*) FROM EMP_TBL WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;

 

8. <학생테이블에서 이름이 민수인 튜플을 삭제하고자 한다다음 <처리 조건>을 참고하여 SQL문을 작성하시오.

<처리 조건>

• 명령문 마지막의 세미콜론(;)은 생략이 가능하다.
• 인용 부호가 필요한 경우 작은따옴표(‘ ’)를 사용한다.
더보기

DELETE FROM 학생 WHERE 이름 = ‘민수’;

 

9. 다음 <속성 정의서>를 참고하여 <학생테이블에 대해 20자의 가변 길이를 가진 주소’ 속성을 추가하는 <SQL>을 완성하시오. (, SQL문은 ISO/IEC 9075 표준을 기반으로 작성하시오.)

속성명 데이터타입 제약조건 테이블명
학번 CHAR(10) UNIQUE 학생
이름 VARCAHR(8) NOT NULL 학생
주민번호 CHAR(13)   학생
학과 VARCAHR(16) FOREIGN KEY 학생
학년 INT   학생

<SQL>

① ) TABLE 학생 ② ) 주소 VARCHAR(20);
더보기

• ① ALTER

• ② ADD

 

10. 다음 <학생테이블을 참고하여 <처리 조건>에서 요구하는 SQL문을 작성하시오.

학번
(varchar)
이름
(varchar)
학년
(number)
수강과목
(varchar)
점수
(number)
연락처
(varchar)
20E0232 김인영 3 세무행정 4.5 010-5412-4544
19D0024 이성화 2 토목개론 3 010-1548-4796
20E0135 성유수 4 실용법학 3.5 010-9945-7411
20E0511 우인혁 1 데이터론 2 010-3451-4972

<처리 조건>

• 3, 4학년의 학번이름을 조회한다.
• IN 예약어를 사용해야 한다.
• 속성명 아래의 괄호는 속성의 자료형을 의미한다.
더보기

SELECT 학번이름 FROM 학생 WHERE 학년 IN (3, 4);

 

11. 다음 <student> 테이블을 참고하여 ‘name’ 속성으로 ‘idx_name’이라는 인덱스를 생성하는 SQL문을 작성하시오.

stid name score deptid
2001 brown 85 PE01
2002 white 45 EF03
2003 black 67 UW11
더보기

CREATE INDEX idx_name ON student(name);

 

[정렬]

12. 다음은 <성적테이블에서 이름(name)과 점수(score)를 조회하되점수를 기준으로 내림차순 정렬하여 조회하는 <SQL>이다괄호(~)에 알맞은 답을 적어 <SQL>을 완성하시오.

name class score
정기찬 A 85
이영호 C 74
환정형 C 95
김지수 A 90
최은영 B 82

<SQL>

SELECT name, score
FROM 성적
① BY ② ) ( ③ )
더보기

• ① ORDER

• ② score

• ③ DESC

 

[그룹]

13. 다음은 <회원테이블에서 이름이 로 시작하는 회원들을 가입일’ 순으로 내림차순 정렬하는 <SQL>이다괄호()에 들어갈 알맞은 답을 쓰시오.

<회원테이블

회원번호 이름 성별 가입일
1001 이진성 2021-06-23
1002 조이령 2021-06-24
1003 최민수 2021-06-28
1004 김차희 2021-07-03
1005 이미경 2021-07-10

<SQL>

SELECT * FROM 회원 WHERE 이름 LIKE ‘( )’ ORDER BY 가입일 ( );
더보기

• ① %

• ② DESC

 

14. 다음 질의 내용에 대한 SQL문을 완성하시오.

질의 학생 테이블에서 학과별 튜플의 개수를 검색하시오.
(아래의 실행 결과가 되도록 한다.)
학번 이름 학년 학과 주소
20160011 김영란 2 전기 서울
19210113 이재우 3 컴퓨터 대구
21168007 함소진 1 전자 부산
19168002 우혜정 3 전자 광주
18120073 김진수 4 컴퓨터 울산
학과 학과별튜플수
전기 1
컴퓨터 2
전자 2

 

<처리 조건>

• WHERE 조건절은 사용할 수 없다.
• GROUP BY는 반드시 포함한다.
• 집계함수(Aggregation Function)를 적용한다.
• 학과별튜플수 컬럼이름 출력에 Alias(AS)를 활용한다.
• 문장 끝의 세미콜론(;)은 생략해도 무방하다.
• 인용부호 사용이 필요한 경우 단일 따옴표(‘ ’ : Single Quotation)를 사용한다.
더보기

SELECT 학과, COUNT(*) AS 학과별튜플수 FROM 학생 GROUP BY 학과;

 

15. 다음의 <성적테이블에서 과목별 점수의 평균이 90점 이상인 과목이름’, ‘최소점수’, ‘최대점수를 검색하고자 한다. <처리 조건>을 참고하여 적합한 SQL문을 작성하시오.

학번 과목번호 과목이름 학점 점수
a2001 101 컴퓨터구조 6 95
a2002 101 컴퓨터구조 6 84
a2003 302 데이터베이스 5 89
a2004 201 인공지능 5 92
a2005 302 데이터베이스 5 100
a2006 302 데이터베이스 5 88
a2007 201 인공지능 5 93
과목이름 최소점수 최대점수
데이터베이스 88 100
인공지능 92 93

<처리 조건>

• WHERE문은 사용하지 않는다.
• GROUP BY와 HAVING을 이용한다.
• 집계함수(Aggregation Function)를 사용하여 명령문을 구성한다.
• 최소점수’, ‘최대점수는 별칭(Alias)을 위한 AS문을 이용한다.
• 명령문 마지막의 세미콜론(;)은 생략이 가능하다.
• 인용 부호가 필요한 경우 작은따옴표(‘ ’)를 사용한다.
더보기

SELECT 

과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 

FROM 성적 

GROUP BY 과목이름 

HAVING AVG(점수) >= 90;

 

[조인]

 

16. <A> 테이블과 <B> 테이블을 참고하여 <SQL>의 실행 결과를 쓰시오.

NAME
Smith
Allen
Scott
RULE
S%
%T%
 

 

<SQL>

SELECT COUNT(*) CNT FROM A CROSS JOIN B WHERE A.NAME LIKE B.RULE;

 

문제에 오류가 있어서 정정이 필요하다.

like는 대소문자 구분이 있다. 그래서 해답은 2가 되겠지만, 다른 기출문제에서 보니 이름이 모두 대문자였다.

SELECT COUNT(*) CNT FROM A CROSS JOIN B WHERE UPPER(A.NAME) LIKE B.RULE;

이렇게 SQL문을 수정하면 정답인 4가 나올 수 있다.

 

17. 다음 <사원테이블과 <동아리테이블을 조인(Join)한 <결과>를 확인하여 <SQL>의 괄호()에 들어갈 알맞은 답을 쓰시오.

코드 이름 부서
1601 김명해 인사
1602 이진성 경영지원
1731 박영광 개발
2001 이수진  
코드 동아리명
1601 테니스
1731 탁구
2001 볼링

 

<결과>

코드 이름 동아리명
1601 김명해 테니스
1602 이진성  
1731 박영광 탁구
2001 이수진 볼링

 

<SQL>

SELECT a.코드이름동아리명 FROM 사원 a LEFT JOIN 동아리 b ① a.코드 = b.② );
더보기

• ① ON

• ② 코드

 

 

 

 

이번에도 출제될 프로그래밍 - 제어문 14문제


    

1. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
main() {
    int s, el = 0;
    for (int i = 6; i <= 30; i++) {
        s = 0;
        for (int j = 1; j <= i / 2; j++)
            if (i % j == 0)
                s = s + j;
        if (s == i)
            el++;
    }
    printf("%d", el);
}

 

ㅁ 완전수(Perfect Number)

자기 자신을 제외한 약수의 합이 자기 자신이 되는 수
6, 28, 496, 8128

ㅇ 6의 약수: 1,2,3,6

  - 1+2+3 = 6

 

ㅇ 28의 약수: 1, 2, 4, 7, 14

 - 1+2+4+7+14 = 28

 

2. 다음 JAVA로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int r = 0;
        for (int i = 1; i < 999; i++) {
            if (i % 3 == 0 && i % 2 == 0)
                r = i;
        }
        System.out.print(r);
    }
}

 

3. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int i = 3, k = 1;
        switch(i) {
        case 1: k++;
        case 2: k -= 3;
        case 3: k = 0;
        case 4: k += 3;
        case 5: k -= 10;
        default: k--;
        }
        System.out.print(k);
    }
}

break가 없어서, k=0 +3-10 -1 이 처리됨.

 

4. 다음은 정수를 역순으로 출력하는 C언어 프로그램이다예를 들어 1234의 역순은 4321이다, 1230 처럼 0으로 끝나는 정수는 고려하지 않는다프로그램을 분석하여 괄호(~)에 들어갈 알맞은 연산자를 쓰시오.

#include <stdio.h>
int main() {
    int number = 1234;
    int div = 10, result = 0;


    while (number ① ) 0) {
        result = result * div;
        result = result + number ② ) div;
        number = number ③ ) div;
    }
    printf("%d", result);
}
더보기

• ① != 또는 >

• ② %

• ③ /

 

5. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int w = 3, x = 4, y = 3, z = 5;
        if((w == 2 | w == y) & !(y > z) & (1 == x ^ y != z)) {
            w = x + y;
            if(7 == x ^ y != w)
                System.out.println(w);
            else
                System.out.println(x);
        }
        else {
            w = y + z;
            if(7 == y ^ z != w)
                System.out.println(w);
            else
                System.out.println(z);
        }
    }
}

 

 

ㅁ 논리 연산자(&&, ||, &, |, ^, !)

구분 연산식 결과 설명
AND
(논리곱)
true &&
또는
&
true true 피 연산자 모두가 true 일 경우에만 연산 결과는 true이다
true false false
false true false
false false false
OR
(논리합)
true ||
또는
|
true true 피 연산자 중 하나만 true이면 true이다
true false true
false true true
false false false
XOR
(배타적 논리합)
true ^ true false 피 연산자가 하나는 true 이고 다른 하나가 false 일 경우에만 연산 결과는 true이다
true false true
false true true
false false false
NOT
(논리부정)
  ! true false 피 연산자의 논리값을 바꿈
  false true

 

 

6. 다음 Python으로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

a = 100
result = 0
for i in range(1,3):
    result = a >> i
    result = result + 1
print(result)

ㅁ 비트 쉬프트 연산 <<, >>

n = 10
print(n<<1)  #10을 2배 한 값인 20 이 출력된다.
print(n>>1)  #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2)  #10을 4배 한 값인 40 이 출력된다.
print(n>>2)  #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

 

ㅇ range  1부터 3 이전까지, 고로 1,2 

2 회차에 result가 result = a >> i 에서 25로 초기화됨.

 

7. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int j, i;
        for (j = 0, i = 0; i <= 5; i++) {
            j += i;
            System.out.print(i);
            if (i == 5) {
                System.out.print("=");
                System.out.print(j);
            }
            else
                System.out.print("+");
        }
    }
}
더보기

0+1+2+3+4+5=15

 

8. 다음 Python으로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
print(lol[0])
print(lol[2][1])
for sub in lol:
    for item in sub:
        print(item, end=' ')
    print()

 

9. 다음은 변수 n에 저장된 10진수를 2진수로 변환하여 출력하는 Java 프로그램이다프로그램을 분석하여 괄호()에 들어갈 알맞은 답을 쓰시오.

public class Test {
    public static void main(String[]args) {
        int a[] = new int[8];
        int i = 0;
        int n = 10;
        while( ① ) ) {
            a[i++] = ② );
            n /= 2;
        }
        for(i = 7; i >= 0; i--)
            System.out.print(a[i]);
    }
}
더보기

• ① n > 0

• ② n % 2

 

10. 다음 Java로 구현된 프로그램을 분석하여 괄호()에 들어갈 알맞은 답을 쓰시오.

public class Test {
    public static void main(String []args) {
        int ary[][] = new int[① )][② )];
        int n = 1;
        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 5; j++) {
                ary[i][j] = j * 3 + i + 1;
                System.out.print(ary[i][j] + " ");
            }
            System.out.println();
        }
    }
}
더보기

 ① 3

 ② 5

 

11. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int i = 0, c = 0;
        while (i < 10) {
            i++;
            c *= i;
        }
        System.out.println(c);
    }
}

 

12. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test{
    public static void main(String[] args){
        int a = 0, sum = 0;
        while (a < 10) {
            a++;
            if (a%2 == 1)
                continue;
            sum +=a;
        }
        System.out.println(sum);
    }
}

짝수만 더하는 코드

2+4+6+8+10=30

마지막 a<10 조건에서 10을 안더해서 틀린 문제.

마지막 조건에 주의 필요함.

 

13. 다음 JAVA로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int result[] = new int[5];
        int arr[] = { 77, 32, 10, 99, 50 };
        for(int i = 0; i < 5; i++) {
            result[i] = 1;
            for(int j = 0; j < 5; j++)
                if(arr[i] < arr[j])
                   result[i]++;
        }
        for(int k = 0; k < 5; k++)
            System.out.print(result[k]);
    }
}
더보기

24513

 

큰 수자의 등위를 추출하는 코드

99,77,50,32,10

result=[2,4,5,1,3];

print는 한줄로 출력 => 24513

 

14. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

public class Test {
    public static void main(String[] args) {
        int aa[][] = { {45, 50, 75},
                            {89} };
        System.out.println(aa[0].length);
        System.out.println(aa[1].length);
        System.out.println(aa[0][0]);
        System.out.println(aa[0][1]);
        System.out.println(aa[1][0]);
    }
}
더보기

3

1

45

50

89

 

 

두 번 시험보면 한 번은 출제되는 프로그래밍 - 포인터 5문제


 

    

1. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
int len(char* p);


int main( ) {
    char* p1 = "2022";
    char* p2 = "202207";
    int a = len(p1);
    int b = len(p2);
    printf("%d", a + b);
}


int len(char* p) {
    int r = 0;
    while (*p != '\0') {
        p++;
        r++;
    }
    return r;
}

 

2. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
int main( ) {
    int a[4] = { 0, 2, 4, 8 };
    int b[3];
    int* p;
    int sum = 0;
    for (int i = 1; i < 4; i++) {
        p = a + i;
        b[i - 1] = *p - a[i - 1];
        sum = sum + b[i - 1] + a[i];
    }
    printf("%d", sum);
}
더보기

답 : 22

i=3

*p=8

b=[2,2,4]

sum=(2+2)+(2+4)+(4+8)= 4+6+12=22

 

 

3. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
int main() {
    int* array[3];
    int a = 12, b = 24, c = 36;
    array[0] = &a;
    array[1] = &b;
    array[2] = &c;
    printf("%d", *array[1] + **array + 1);
}
더보기

답 37

int* array[3]; 포인터를 저장할 수 있는 array 선언.

array[0] = &a; a의 주소를 0번에 저장

*array[1]가 가르키는 곳의 값은 24

**array => *array는 array[0]의 주소이다. **array=*array[0]와 같다.

*array[0]가 가르키 곳의 값은 12

36+1=37

 

4. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
int main() {
    int ary[3];
    int s = 0;
    *(ary + 0) = 1;
    ary[1] = *(ary + 0) + 2;
    ary[2] = *ary + 3;
    for (int i = 0; i < 3; i++)
        s = s + ary[i];
    printf("%d", s);
}
더보기

답 8

ary=[1,3,4]

*(ary + 0) = *(ary)=ary[0]에 1를 대입.
ary[1] = *(ary + 0) + 2; 1+2
ary[2] = *ary + 3; 1+3

1+3+4=8

 

5. 다음 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
main() {
    char* p = "KOREA";
    printf("%s\n", p);
    printf("%s\n", p + 3);
    printf("%c\n", *p);
    printf("%c\n", *(p + 3));
    printf("%c\n", *p + 2);
}
더보기

KOREA

EA

K

E

M

 

*p + 2 = K의 문자코드 주소의 2번째, K L M

 

항상 비슷한 유형으로 출제되는 프로그래밍 - 구조체 3문제


    

1. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
struct A {
    int n;
    int g;
};
main( ) {
    struct A st[2];
    for (int i = 0; i < 2; i++) {
        st[i].n = i;
        st[i].g = i + 1;
    }
    printf("%d", st[0].n + st[1].g);
}

n=0 g=1

n=1 g=2

0+2=2

 

2. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
main() {
    struct insa {
        char name[10];
        int age;
    } a[] = { "Kim", 28, "Lee", 38, "Park", 42, "Choi", 31 };
    struct insa* p;
    p = a;
    p++;
    printf("%s\n", p->name);
    printf("%d\n", p->age);
}
더보기

Lee

38

 

3. 다음 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
struct jsu {
    char nae[12];
    int os, db, hab, hhab;
};


int main() {
    struct jsu st[3] = { {"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75} };
    struct jsu* p;
    p = &st[0];
    (p + 1)->hab = (p + 1)->os + (p + 2)->db;
    (p + 1)->hhab = (p + 1)->hab + p->os + p->db;
    printf("%d", (p + 1)->hab + (p + 1)->hhab);
}

{"데이터2", 84, 91,(84+75),(159+95+88)}

159+247+88

159+335

 

반응형
Comments