일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MySQL
- 기록으로 실력을 쌓자
- Java
- 공부
- 정보처리기사실기 기출문제
- 정보처리기사 실기
- CloudWatch
- 티스토리챌린지
- APM
- 코틀린 코루틴의 정석
- CKA 기출문제
- minikube
- CKA
- AI
- aws
- kotlin
- Linux
- kotlin querydsl
- Pinpoint
- AWS EKS
- Spring
- PETERICA
- kotlin spring
- 오블완
- mysql 튜닝
- 정보처리기사 실기 기출문제
- Kubernetes
- Elasticsearch
- IntelliJ
- kotlin coroutine
- Today
- Total
피터의 개발이야기
[정처기 실기] 2024년 실기 자주 출제되는 SQL, 프로그래밍 기출문제들 정리 본문
ㅁ 들어가며
ㅇ 시나공 자료실의 기출문제를 풀어보고 문제 분석과 풀이를 노트한 글입니다.
ㅇ 일부 내용은 개인적 이해를 바탕으로 풀어 썼기 때문에 정확하지 않을 수 있습니다.
매년 출제되는 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
▶ 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); |
3
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; |
1
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); } |
2
ㅁ 완전수(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); } } |
996
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); } } |
-8
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); } } } |
7
ㅁ 논리 연산자(&&, ||, &, |, ^, !)
구분 | 연산식 | 결과 | 설명 | ||
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) |
26
ㅁ 비트 쉬프트 연산 <<, >>
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); } } |
0
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); } } |
30
짝수만 더하는 코드
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; } |
10
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. 다음 C 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (단, 출력문의 출력 서식을 준수하시오.)
#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); } |
2
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. 다음 C 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (단, 출력문의 출력 서식을 준수하시오.)
#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); } |
501
{"데이터2", 84, 91,(84+75),(159+95+88)}
159+247+88
159+335
'개발이야기 > 정보처리기사' 카테고리의 다른 글
[정처기 실기] 정보처리기사 실기 - 2023년 2회 기출문제 (0) | 2024.04.27 |
---|---|
[정처기 실기] 2024년 실기, 핵심 키워드 130문제 풀이-1 (4) | 2024.04.25 |
[정처기 실기] 2024년 실기, 핵심 키워드 130문제 풀이-2 (2) | 2024.04.23 |
[정처기 실기] 정보처리기사 실기 - 2023년 3회 기출문제 (0) | 2024.04.15 |
[정처기] 정보처리기사 - 2020~ 2023년 합격률 (0) | 2024.04.08 |