2024년 1회 정보처리기사 11번 문제 풀이

2024. 7. 19. 18:50자격증 연습/정보처리기사 실기 대비 - 문제풀이

출제자 실수로 return문 누락으로 인해 전원 정답 처리된 문제입니다만 알고리즘적으로 접근해서 풀겟습니다.

 

 코드를 분석하면

 

구조체 형식 1개 

 

함수 4개 

 

그리고 메인함수로 이루어진 코드입니다.

 

모든것은 메인함수부터 시작되지만 먼저 구조체 선언부 부터 보겟습니다.

 

구조체 BankAcc

 

구조화된 하나의 이상의 변수를 묶어서 새로운 타입(자료형으로) 지정하는 것입니다.

결이 다르긴하나 객체지향 언어를 사용하신 분들은 클래스와 비슷한 개념으로 받아들이셔도 됩니다.

 

typedef struct (구조체이름)

{

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

} 구조체의새로운이름;

 

형태로 typedef  선언을하면 struct 키워드로 사용하지 않아도 됩니다. 

출저:https://www.tcpschool.com/c/c_struct_intro

 

 

구조체 BankAcc 는 

 

형태로 구성되어 있다고 보시면 됩니다.

그다음 메인함수로 보시면 

 

구조체 변수 myAcc를 선언하고 

 

myAcc, 9981과 2200.0 을 인자로 가지는 inintAcc 함수를 호출했습니다.

 

initAcc 함수는 

 

구조체 뱅크의 myAcc의 주소 에 접근하여 

 

구조체 맴버 accNum와 bal 의 값을 인수 x(9981)와 , y(2200.0)로 초기화 해줍니다.

 

 

그다음 실수형 변수 amount 을 선언과 값을 초기화해준다음 

 

myAcc와 amount를 매개변수로 가지는  xxx 함수를 호출합니다.

 

 

함수 xxx 에서 

myAcc와 amount 의 주소(포인터)를 매개변수로 받아 함수를 실행합니다.

 

if문의 조건 

if (*en > 0 && *en < acc -> bal)

은 다음과 같습니다.

 

*amount > 0 &&(이고)  *amount< myacc의 멤버 bal(2200.0) 이면

myacc의 멤버 bal = amount< myacc의 멤버 bal(2200.) - *amount(100)

 

100.0 > 0 && 100<2200.0 이므로 

if문의 조건을 만족하므로

 

의값이 초기회됩니다.

 

그다음 myAcc의 주소를 인자로 가지는 함수 yyy를 호출합니다.

 

함수 yyy는 

구조체 

myacc 의 멤버 bal = bal * sim_pow((1.1),3);으로 초기화 합니다.

 

sim_pow 함수는 

 

실수형 변수 (1.1 과 3을) 인자로 받아 반복문을 시행합니다.

 

반복문은 i=0 부터 i<year(3) 까지 반복하고 

r값을 r*base로 초기화줍니다.

 

i=0 일떄

r = 1.0*1.1 = 1.1

 

i=1 일때

r = 1.1 * 1.1 = 1.21

 

i=2 일때 

r = 1.21 * 1.1 =  1.331

 

이되고 실수형 변수 r을 반환합니다.

다시 함수 yyy로 돌아가서

 

myacc 의 멤버 bal = bal(2100.0) * 1.331  = 2795.10 으로 초기화 합니다

 

이시점에서 구조체 변수 myAcc는 다음과 같습니다.

함수 yyy가 종료되고

 

출력문이 시행됩니다.

myacc의 맴버 accNum and myacc의 맴버 bal(소수둘째 자리까지)를 출력합니다.

 

9981 and 2795.10 

이 출력됩니다.