[정보처리기능사 실기] 2023년 3회 기출문제 풀이
2. C언어 실행결과를 쓰시오.
#include <stdio.>
int main() {
int num =15;
print("%o", num);
}
. 코드 분석:
- #include <stdio.h>: 표준 입출력 라이브러리를 포함합니다. 이 라이브러리는 printf 함수와 같은 입출력 함수를 제공합니다.
- int main(): 프로그램의 시작점을 나타냅니다. 모든 C 프로그램은 main 함수를 가져야 합니다.
- int num = 15;: num이라는 이름의 정수 변수를 선언하고 15로 초기화합니다.
- printf("%o", num);: printf 함수를 사용하여 num의 값을 옥타 수 형식으로 출력합니다.
2. 코드 실행 과정:
- main 함수가 시작됩니다.
- num 변수가 15로 초기화됩니다.
- printf("%o", num); 함수가 실행됩니다.
- %o 형식 지정자는 옥타 수 형식으로 값을 출력하도록 지시합니다.
- num의 값은 15입니다. 15를 옥타 수로 변환하면 17입니다.
- 따라서 printf("%o", num); 함수는 "17"을 출력합니다.
- main 함수가 종료됩니다.
3. 출력 결과:
17
4. 주요 개념:
- 변수: 값을 저장하는 데 사용되는 메모리 영역입니다.
- 데이터 형식: 변수에 저장할 수 있는 값의 종류를 결정합니다. int 형식은 정수 값을 저장하는 데 사용됩니다.
- 초기화: 변수에 값을 할당하는 프로세스입니다.
- 형식 지정자: printf 함수와 같은 입출력 함수에 사용되는 특수 문자입니다. %o 형식 지정자는 옥타 수 형식으로 값을 출력하도록 지시합니다.
- 옥타 수: 8진수(octal) 시스템을 기반으로 하는 숫자 체계입니다. 0에서 7까지의 숫자를 사용하여 숫자를 표현합니다.
8. C언어 실행결과를 쓰시오.
#include <stdio.h>
void printBin(int n) {
if(n>1)
printBin(n/2);
printf("%d", n%2);
}
int main() {
printBin(11);
}
- printBin 함수:
- n이 1보다 크면 printBin(n / 2)를 재귀적으로 호출하여 n을 2로 나누어 계속 호출합니다.
- 재귀 호출이 끝나면 printf("%d", n % 2)를 사용하여 n을 2로 나눈 나머지를 출력합니다.
- main 함수:
- printBin(11)을 호출하여 11을 이진수로 변환하여 출력합니다.
2. 출력 과정:
- main 함수에서 printBin(11)을 호출합니다.
- printBin(11) 함수는 11이 1보다 크므로 printBin(11 / 2)를 호출합니다.
- printBin(5) 함수는 5가 1보다 크므로 printBin(5 / 2)를 호출합니다.
- printBin(2) 함수는 2가 1보다 크므로 printBin(2 / 2)를 호출합니다.
- printBin(1) 함수는 1이 1보다 작으므로 재귀 호출을 중단하고 printf("%d", 1 % 2)를 실행하여 1을 출력합니다.
- printBin(2) 함수는 printf("%d", 2 % 2)를 실행하여 0을 출력합니다.
- printBin(5) 함수는 printf("%d", 5 % 2)를 실행하여 1을 출력합니다.
- printBin(11) 함수는 printf("%d", 11 % 2)를 실행하여 1을 출력합니다.
- main 함수는 printBin 함수가 종료되면 종료됩니다.
3. 출력 결과:
1011
4. 작동 원리:
이 코드는 재귀 함수를 사용하여 10진수를 이진수로 변환합니다. 재귀 함수는 자신을 호출하여 작업을 반복적으로 수행합니다. printBin 함수는 n을 2로 나누고 나머지를 출력합니다. 이 과정을 n이 1이 될 때까지 반복합니다. 1이 되면 재귀 호출이 중단되고 출력이 완료됩니다.
def printBin(n):
if n > 1:
printBin(n // 2)
print(n % 2)
def main():
printBin(11)
if __name__ == "__main__":
main()
설명:
- printBin 함수는 정수 n을 이진수로 변환하여 출력하는 재귀 함수입니다.
- main 함수는 printBin 함수를 11에 대해 호출합니다.
- // 연산자는 정수 몫을 계산하고, % 연산자는 나머지를 계산합니다.
- print 함수는 주어진 값을 콘솔에 출력합니다.
주의:
- 이 코드는 C 언어 코드와 동일한 동작을 하지만, 파이썬 언어의 구문과 스타일을 따릅니다.
- 파이썬에서는 함수 선언 뒤에 콜론(:)을 사용하고, 코드 블록을 들여쓰기(indentation)를 사용합니다.
9. JAVA언어 : 실행결과를 쓰시오.
public class Gisafirst {
public static void main(String [] args) {
String str = "hello!@#world$%";
String res = str. replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");
System.out.print(res);
}
}
코드 설명 (Gisafirst.java) Gemini에서 돌려돔.
코드 분석:
public class Gisafirst {
public static void main(String[] args) {
String str = "hello!@#world$%";
String res = str.replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");
System.out.print(res);
}
}
1. 클래스 및 메서드:
- public class Gisafirst: 이 코드는 Gisafirst라는 이름의 공개 클래스를 선언합니다. 클래스는 객체를 생성하기 위한 설계도이며 데이터(필드)와 동작(메서드)을 캡슐화합니다.
- public static void main(String[] args): 이 코드는 프로그램의 진입점인 main 메서드를 정의합니다. 프로그램 실행은 여기서 시작됩니다.
2. 문자열 처리:
- 문자열 선언:
- String str = "hello!@#world$%";: 이 코드는 str이라는 이름의 문자열 변수를 선언하고 값 "hello!@#world$%"로 초기화합니다. 문자열 변수는 문자 시퀀스를 저장합니다.
- 정규 표현식을 사용한 문자 치환:
- String res = str.replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");: 이 코드는 다음 작업을 수행합니다.
- str.replaceAll(): 이 메서드는 str 문자열 객체를 대상으로 문자열의 일부를 바꿉니다.
- []: 이는 정규 표현식으로 매칭될 수 있는 문자 집합을 정의하는 문자 클래스입니다.
- ^: 캐럿 기호는 문자 클래스 내부의 문자가 매칭되지 않아야 한다는 것을 나타냅니다.
- [0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]: 정규 표현식의 이 부분은 다음과 같은 다양한 문자를 매칭합니다.
- [0-9]: 숫자 (0-9)를 매칭합니다.
- [a-zA-Z]: 소문자 또는 대문자 알파벳 (a-z, A-Z)을 매칭합니다.
- [ㄱ-ㅎ]: 한글 자음 (ㄱ-ㅎ)을 매칭합니다.
- [ㅏ-ㅣ]: 한글 모음 (ㅏ-ㅣ)을 매칭합니다.
- [가-힣]: 대부분의 한글 문자 (가-힣)를 매칭합니다.
- .: 개행 문자를 제외한 모든 단일 문자를 매칭합니다.
- ..: 개행 문자를 포함하여 모든 두 문자를 매칭합니다.
- *: 이 문자는 바꿀 문자가 별표(*)가 되어야 한다는 것을 나타냅니다.
- ;: 세미콜론은 문을 종료합니다.
- String res = str.replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");: 이 코드는 다음 작업을 수행합니다.
- 결과 출력:
- System.out.print(res);: 이 코드는 res 문자열 변수의 값을 콘솔에 출력합니다. System.out 객체는 입력 및 출력 작업에 사용됩니다.
예상 출력:
정규 표현식은 원본 문자열 "hello!@#world$%"의 모든 문자를 매칭하지만 느낌표 (!)와 달러 기호 ($)는 제외합니다. 따라서 프로그램의 출력은 다음과 같습니다. ??????? 왜 위의 두개는 제외되지???
hello*world*
clova x => hello*world*
ChatGPT 3.5 => hello**world
뤼튼은 값을 못내준다.
어떤게 맞는걸까???
12. JAVA언어 : 실행결과를 쓰시오.
public class Gisafirst {
public static void main(String[] args) {
String str = “1,2,3,4,,,5,6,7,,8,9”;
String splt[] = str.split(“,”);
for(int i=0; i<splt.length;i++);
System.out.print(splt[i]);
if((i+1)%3==0){
System.out.println();
}
}
}
}
코드 설명 (Gisafirst.java)
1. 클래스 선언:
- public class Gisafirst: 이 코드는 Gisafirst라는 이름의 공개 클래스를 선언합니다. 클래스는 객체를 생성하기 위한 설계도이며 데이터(필드)와 동작(메서드)을 캡슐화합니다. 이 경우 클래스는 main 메서드를 위한 컨테이너 역할을 합니다.
2. 메인 메서드:
- public static void main(String[] args): 이 코드는 Java 프로그램의 진입점입니다. main 메서드는 프로그램 실행이 시작되는 곳입니다. 명령줄 인수를 프로그램에 전달하는 데 사용할 수 있는 문자열 배열 (args)을 인수로 받습니다. 하지만 이 코드는 이 특정 인스턴스에서 이를 사용하지 않습니다.
3. 문자열 초기화:
- String str = "1,2,3,4,,,5,6,7,,8,9";: 이 코드는 str이라는 이름의 문자열 변수를 선언하고 값 "1,2,3,4,,,5,6,7,,8,9"로 초기화합니다. 이 문자열은 쉼표로 구분된 숫자를 포함합니다.
4. 문자열 분할:
- String[] splt = str.split(",");: 이 코드는 쉼표 (",")를 구분자로 사용하여 str 문자열을 분할합니다. split 메서드는 문자열 배열을 반환하며, 배열의 각 요소는 원래 문자열에서 구분자로 분리된 서브 문자열을 나타냅니다. 따라서 splt는 이제 ["1", "2", "3", "4", ..., "9"]와 같은 개별 숫자를 포함하는 배열이 됩니다.
5. 분할된 요소 처리를 위한 루프:
- for (int i = 0; i < splt.length; i++): 이 코드는 splt 배열을 반복하는 for 루프를 시작합니다. 루프 변수 i는 정수이며 카운터 역할을 하며 0에서 시작하여 배열 길이보다 하나 작은 값까지 증가합니다 (splt.length - 1).
- System.out.print(splt[i]);: 루프 내부에서 이 코드는 splt 배열의 각 요소(각 숫자)를 줄 바꿈 문자를 추가하지 않고 출력합니다. 따라서 숫자는 연속적으로 출력됩니다.
6. 조건부 줄 바꿈 출력:
- if ((i + 1) % 3 == 0 && i < splt.length - 1): 이 if 문은 두 가지 조건을 확인합니다.
- (i + 1) % 3 == 0: 이 조건은 현재 인덱스 (i)에 1을 더한 값이 3으로 나누어 떨어지는지 확인합니다. 그렇다면 3개의 요소 그룹의 끝에 도달한 것을 의미합니다(마지막 요소는 제외).
- i < splt.length - 1: 이 조건은 출력의 끝에 추가 줄 바꿈을 출력하지 않도록 합니다.
- System.out.println();: if 문의 두 조건이 모두 참이면 이 코드는 줄 바꿈 문자를 출력하여 3개의 요소 그룹마다 다음 줄로 이동합니다.
예상 출력: 해설과 다르다???
1 2 3
4 5 6
7 8 9
주요 개선 사항:
- 수정된 오타 (length 대신 lenth)는 배열 길이에 대한 적절한 액세스를 보장합니다.
- 루프 조건 뒤에 제거된 빈 세미콜론은 무한 루프를 방지합니다.
- i < splt.length - 1을 사용한 향상된 if 조건은 끝에 추가 줄 바꿈을 방지합니다.
유튜브 해설 | chat gpt | clova x | gemini |
123 4 567 89 |
123 4 5 678 9 |
1 2 3 5 6 7 9 |
123 456 789 |
13. JAVA언어
public class Gisafirst {
public static void main(String[] args) {
String str1 = "Helloworld!";
String str2 = "HElloWOrld!";
if (str1.equals(str2)) {
System.out.println(str1.toUpperCase());
} else if (str1.equalsIgnoreCase(str2)) {
System.out.println(str1.toLowerCase());
}
}
}
결과 : helloworld!
코드 설명
- String str1 = "Helloworld!"; : str1 변수에 "Helloworld!"라는 문자열을 저장합니다.
- String str2 = "HElloWOrld!"; : str2 변수에 "HElloWOrld!"라는 문자열을 저장합니다.
- if (str1.equals(str2)) : str1과 str2의 문자열이 정확히 동일한지 비교합니다. 동일하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
- System.out.println(str1.toUpperCase()); : str1의 모든 문자를 대문자로 변환하여 출력합니다. 예를 들어, str1이 "Helloworld!"라면 "HELLOWORLD!"가 됩니다.
- else if (str1.equalsIgnoreCase(str2)) : str1과 str2의 문자열이 대소문자를 구분하지 않고 동일한지 비교합니다. 동일하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
- System.out.println(str1.toLowerCase()); : str1의 모든 문자를 소문자로 변환하여 출력합니다. 예를 들어, str1이 "Helloworld!"라면 "helloworld!"가 됩니다.
이유
- str1.equals(str2)는 false를 반환합니다. 왜냐하면 "Helloworld!"와 "HElloWOrld!"는 대소문자가 달라서 정확히 동일하지 않기 때문입니다.
- str1.equalsIgnoreCase(str2)는 true를 반환합니다. 왜냐하면 "Helloworld!"와 "HElloWOrld!"는 대소문자를 무시하면 동일한 문자열이기 때문입니다.
- 따라서 str1.toLowerCase()가 실행되어 str1을 소문자로 변환한 "helloworld!"가 출력됩니다.
20. C언어 : 실행결과를 쓰시오.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void delBI(char a[] {
int len = strlen(a);
char *b = (char*mallosizeof(char)*len);
int i, k = 0
for (i=0;i<len;i++) {
if(a[i]!=' ')
b[k++] = a[i];
}
b[k] = '\0';
strcpy(a,b);
free(b);
}
int main() {
char a[] = 'A B c D e F ! ";
delBI(a);
printf("%s",a);
}
3. 코드 설명:
1) #include 구문:
- #include <stdio.h>: 표준 입력/출력 함수를 사용하기 위한 헤더 파일입니다.
- #include <stdlib.h>: 메모리 할당 및 해제를 위한 함수를 사용하기 위한 헤더 파일입니다.
- #include <string.h>: 문자열 처리 함수를 사용하기 위한 헤더 파일입니다.
2) delBI 함수:
- void delBI(char a[]): a라는 이름의 문자열 배열을 인자로 받는 함수입니다.
- int len = strlen(a);: a 문자열 배열의 길이를 변수 len에 저장합니다.
- char *b = (char *)malloc(sizeof(char) * len);: len 길이의 새로운 문자열 배열 b를 메모리에 동적으로 할당합니다.
- int i, k = 0;: 반복문을 위한 변수 i와 k를 초기화합니다.
- for (i = 0; i < len; i++): a 문자열 배열의 모든 문자를 반복적으로 검사합니다.
- if (a[i] != ' '): 만약 현재 문자가 공백이 아니라면
- b[k++] = a[i];: b 문자열 배열에 현재 문자를 저장하고, k 인덱스를 1씩 증가시킵니다.
- if (a[i] != ' '): 만약 현재 문자가 공백이 아니라면
- b[k] = '\0';: b 문자열 배열의 마지막 문자를 null 문자로 설정하여 문자열임을 표시합니다.
- strcpy(a, b);: b 문자열 배열의 내용을 a 문자열 배열에 복사합니다.
- free(b);: 동적으로 할당된 메모리 공간 b를 해제합니다.
3) main 함수:
- int main(): 프로그램의 시작점을 나타내는 함수입니다.
- char a[] = "A B c D e F ! ";: "A B c D e F ! "라는 문자열을 a라는 이름의 문자열 배열에 저장합니다.
- delBI(a);: delBI 함수를 호출하여 a 문자열 배열에서 공백을 제거합니다.
- printf("%s", a);: a 문자열 배열의 내용을 화면에 출력합니다.
- return 0;: 프로그램을 정상적으로 종료합니다.
https://youtu.be/AunDOTgIVwg?si=t0Jabx-coLYiODY0
'자격증(국가,민간) > 정보처리기능사' 카테고리의 다른 글
정보처리기능사 2023년4회 실기 기출 (0) | 2024.05.13 |
---|---|
[정보처리기능사 실기] 2023년 2회 기출문제 풀이 (0) | 2024.02.04 |
[정보처리기능사 실기] 2023년 1회 기출문제 풀이 (0) | 2024.02.04 |
정보처리기능사 실기 03-2강 데이터베이스-키,무결성,정규화<기사퍼스트> (0) | 2024.02.04 |
정보처리기능사 실기 03-1강 데이터베이스-OSI 데이터베이스 개념, 관계형 데이터베이스 <기사퍼스트> (1) | 2024.02.04 |