자격증 연습/정보처리기사 실기 대비 - 문제풀이
정보처리 기사 24년 1회 4번 문제
jaco쨩
2024. 7. 9. 11:51
#include <stdio.h>
#include <string.h>
// reverse 함수 선언
void reverse(char *str);
int main(int argc, char *argv[]) {
char str[100] = "ABCDEFGH"; // 배열 str 선언 및 초기화
// reverse 함수 호출
reverse(str);
int len = strlen(str); //strlen 함수 문자열 길이만큼 -> 8
// 2씩 증가하면서 출력
for (int i = 1; i < len; i += 2) { // i는 2씩 증감 i는 1부터 7까지-> 1, 3, 5, 7 인덱스 만 출력
//str[] = {G, E, C, A} 출력
printf("%c", str[i]);
}
printf("\n");
return 0;
}
// reverse 함수 정의
void reverse(char *str) {
int len = strlen(str); //strlen 함수 -> str의 문자열 길이만큼 반환 8개
char *p1 = str; //포인터 str의 주소 -> 포인터는 배열의 첫번째 주소를 가리킴으로 str[0]의 주소를 가짐
char *p2 = str + len - 1; // 포인터 str[0]+ 8 -1 -> str[7] 이므로 배열의 마지막 인덱스 주소
while (p1 < p2) { //while 반복문
char t = *p1; // temp 변수 선언 , p1과 p2를 교환하는 알고리즘
*p1 = *p2;
*p2 = t;
p1++; // 일련의 작업이 진행된후 p1 후위증감
p2--; // p2 후위증감
}
}
/*
리버스 함수내 while 반복문 과정
p1 ->str[0] -> A
p2 ->str[7] -> H
반복문 1회 실행후
p1 -> str[1]
str[0] -> H
p2 ->str[6]
>str[7] -> A
반복문 2회 실행후
p1 -> str[1]
str[0] -> H
str[1] -> G
p2 ->str[6]
str[7] -> A
str[6] -> B
대략 4회 반복문 이후 나오는 str 배열은
str[100] ->HGFEDCBA
*/
출력 결과 GECA