[23년 1회]
#include <stido.h>
int main(void) {
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
[풀이]
1. 문자열 a → "Art" 출력
2. 포인터 p가 가리키는 첫 번째 문자 → 'A'출력
3. 문자열 a의 첫 번째 문자 → 'A'출력
4. 포인터 p가 가리키는 문자열 전체 → "Art" 출력
: printf("%s\n", p);는 포인터 p가 가리키는 주소부터 시작하여 문자열 "Art" 전체를 출력
'\0'이 나올 때까지 메모리에서 문자를 차례대로 읽어서 출력하는 방식
5. 문자열 a의 각 문자를 순회 후 순차적 출력 → "Art" 출력
#include <stdio.h>
int main(void) {
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
[풀이]
char* a에 할당된 데이터 qwer을 각각 반복문을 통해 순회하면서
char* b랑 같으면 그 문자를 출력하면 됨
ex. a[0] = q → b[0] ~ b[5]까지 반복문 돌면서 q가 있으면 출력
위와 같은 방식으로 a[3]까지 반복해서 두개의 문자열 리터럴을 비교해서 같은 문자를 출력하면 됨
// 다음은 이진수에서 십진수로 변환하는 코드이다.
// (가)는 연산자이고 (나)는 정수일 때 빈칸을 알맞게 쓰시오.
#include <stdio.h>
int main(void){
int input = 101110;
int di = 1;
int sum = 0;
while (input > 0){
sum = sum + (input (가)(나) * di);
di = di * 2;
input = input / 10;
}
printf("%d", sum);
return 0;
}
정답
(가) %
(나) 10
// (가), (나) 빈칸에 알맞은 변수를 쓰시오.
#include <stdio.h>
void swap(int* idx1, int* idx2){
int t = *idx1;
*idx1 = *idx2;
*(가) = t;
}
void Usort(int a[], int len){
for(int i=0; i < len - 1; i++) {
for(int j=0; j < len - i - 1; j++){
if(a[j] > a[j+1])
swap(&a[j], &a[j+1]);
}
}
for(int k=0; k<5; k++){
printf("%d", a[k]);
}
}
int main(void){
int arr[] = {64, 34, 25, 12, 40};
int nx = 5;
Usort(arr, (나));
return 0;
}
정답
(가) idx2
(나) nx
[풀이]
swap() → 두 정수를 바꾸는 함수
Usrot() → 버블정렬 오름차순 함수
[23년 2회]
// 입력값이 순서대로 5,4,3,2,1일 경우 출력값이 43215로 출력 되도록 빈칸 (가)에 들어갈 코드를 작성하시오.
#include <stdio.h>
int main(){
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]
// a,b,c,d의 빈칸에 알맞은 식을 <보기>에서 찾아쓰는데 <보기>를 최소한으로 쓰시오.
// [보기]
// 1000 500 100 10 % / + -
#include <stdio.h>
int main() {
int m = 4620;
int a,b,c,d;
a=(가)
b=(나)
c=(다)
d=(라)
printf("1000원 개수 : %d", a);
printf("500원 개수 : %d", b);
printf("100원 개수 : %d", c);
printf("10원 개수 : %d", d);
return 0;
}
정답
(가) m / 1000
(나) (m % 1000) / 500
(다) (m % 500) / 100
(라) (m%100) / 10
// 홍길동, 김철수, 박영희 순서대로 입력했다고 할 때 출력결과
#include<stdio.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);
return 0;
}
정답
박영희
박영희
박영희
#include <stdio.h>
int main(void){
int n[3] = {73,95,82};
int sum = 0;
for(int 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");
}
return 0;
}
정답 : BCD
[풀이]
switch문은 break가 없는 경우, 해당 case 이후의 case가 모두 실행됨
sum = 250 이고 sum / 30 = 8 이므로
case 8 이후의 case들이 모두 실행
#include <stdio.h>
int main(void){
int c=0;
for(int i=1; i<=2023; i++){
if(i%4 == 0) c++;
}
printf("%d", c);
return 0;
}
정답 : 505
#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());
pirntf("%d", take());
into(6);
printf("%d", take());
printf("%d", take());
}
return 0;
}
정답 : 213465
[풀이] - chatGPT
- 변수 및 배열 정의:
- int isWhat[MAX_SIZE]; : 스택을 구현하기 위한 배열. 최대 MAX_SIZE (10)까지 정수 저장 가능
- int point = -1; : 스택의 현재 최상단 인덱스를 나타냅니다. 초기 값은 -1, 즉 스택이 비어 있는 상태
- into(int num) 함수:
- 입력된 정수 num을 스택에 추가
- point가 10 이상인 경우 "Full" 메시지를 출력
- point를 증가시키고 num을 isWhat 배열에 추가
- take() 함수:
- 스택에서 최상단 요소를 꺼내는 함수
- 스택이 비어 있는 경우 "Empty" 메시지를 출력
- 최상단 요소를 반환하고 point를 감소
- isEmpty() 함수:
- 스택이 비어 있는지를 확인
- point가 -1이면 스택이 비어있다고 판단하고 1을 반환. 그렇지 않으면 0을 반환
- isFull() 함수:
- 스택이 가득 차 있는지를 확인
- point가 10이면 스택이 가득 차 있다고 판단하고 1을 반환. 그렇지 않으면 0을 반환
- main() 함수:
- into(5)와 into(2)를 호출하여 스택에 5와 2를 추가
- while 루프는 스택이 비어 있지 않을 때까지 반복.
- take()를 호출하여 스택에서 최상단 요소를 꺼내고 출력
- 4와 1을 스택에 추가합니다.
- 다시 take()를 호출하여 최상단 요소를 꺼내고 출력
- 3을 스택에 추가한 후, 두 번 take()를 호출하여 최상단 요소를 꺼내고 각각 출력
- 6을 스택에 추가한 후, 두 번 take()를 호출하여 최상단 요소를 꺼내고 각각 출력
// 다음은 선택정렬을 하는 코드이다. (가)에 들어갈 기호를 쓰시오.
#include <stdio.h>
int main(void) {
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);
return 0;
}
정답 : >
* 선택정렬과 버블정렬
선택 정렬 (Selection Sort)
- 작동 방식:
- 주어진 배열에서 가장 작은(또는 큰) 요소를 찾습니다.
- 찾은 요소를 배열의 맨 앞(또는 맨 뒤)으로 교환합니다.
- 이 과정을 배열의 끝까지 반복합니다. 즉, 매 반복마다 남은 배열에서 최솟값(최댓값)을 찾아 정렬합니다.
- 복잡도:
- 시간 복잡도: O(n2)O(n^2) (모든 요소를 비교해야 하므로)
- 공간 복잡도: O(1)O(1) (제자리 정렬, 추가 배열이 필요 없음)
- 특징:
- 안정성: 안정적이지 않음 (동일한 값이 있을 경우, 순서가 바뀔 수 있음)
- 많은 요소의 데이터에 비효율적임 (정렬된 상태에서 성능이 저하되지 않음)
버블 정렬 (Bubble Sort)
- 작동 방식:
- 인접한 두 요소를 비교하고, 순서가 올바르지 않으면 교환합니다.
- 배열의 끝까지 이동하며 이 과정을 반복합니다.
- 가장 큰(또는 작은) 요소가 배열의 끝으로 "거품처럼" 올라가는 형태입니다.
- 이 과정을 여러 번 반복하여 전체 배열이 정렬될 때까지 계속합니다.
- 복잡도:
- 시간 복잡도: O(n2)O(n^2) (중첩 루프 사용)
- 공간 복잡도: O(1)O(1) (제자리 정렬, 추가 배열이 필요 없음)
- 특징:
- 안정성: 안정적임 (동일한 값의 상대적 순서는 유지됨)
- 최적화 가능성: 만약 배열이 이미 정렬되어 있다면, 한 번의 패스만으로 정렬이 완료되므로 성능이 향상될 수 있음.
[23년 3회]
#include <stdio.h>
int mian() {
char* p = "KOREA";
printf("%s\n", p);
printf("%s\n", p+1);
printf("%c\n", *p);
printf("%c\n", *(p+3));
printf("%c\n", *p+4);
}
정답
KOREA
OREA
K
E
O
C 언어에서 구조체의 멤버에 접근하기 위한 기호를 쓰시오
정답 : ->
#include <stdio.h>
int complete(int n){
int sum = 0;
for(int j=1; j<=n/2; j++) {
if(n%j == 0) {
sum = sum + j;
}
}
if(sum == n){
return 1;
} else {
return 0;
}
}
int main() {
int s = 0;
for(int i=1; i<=100; i++){
if(complete(i))
s += i;
}
printf("%d",s);
}
정답 : 34
[풀이]
완전수 찾는 문제
완전수 : 자기 자신을 제외한 모든 약수의 합이 자신과 같은 수
complete() => 완전수를 찾는 함수
1~100 사이의 완전수는 6, 28 두 개
#include <stdio.h>
int f(int n) {
if(n <= 1) return 1;
else return n*f(n-1);
}
int main() {
printf("%d", f(7));
}
정답 : 5040
재귀함수 팩토리얼 문제
답 → 7! = 5040
'정보처리기사[실기]' 카테고리의 다른 글
[JAVA] 20년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.10.07 |
---|---|
[C언어] 24년 기출 문제 풀이 (1회, 2회) (1) | 2024.10.01 |
[C언어] 22년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.09.19 |
[6과목_프로그래밍 언어 활용] 아스키코드 ASCII (0) | 2024.09.12 |
[C언어] 21년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.09.12 |