1. C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
풀이 :
char로 문자열 저장 *p 에 K(0) O(1) R(2) E(3) A(4) \0 을 저장한다. (여기서 문자열을 저장하면 마지막은 0이 들어간다고한다.)
하지만 출력하면 \0은 출력 안된다고함
이제 %s\n < 얘는 그냥 출력하고 다음줄로 넘어간다고 보면된다.
p = KOREA를 출력
p + 3 = KOREA에서 문자열 위치 3부터 마지막까지 출력 = EA
*p는 *가 붙으면 문자 1개만 출력하고 *p 처럼 조건이 없으면 문자열 0번의 위치를 출력한다고함 = K
*(p+3)은 *가 붙었으므로 문자열 1개를 출력함 p+3위치는 E이므로 E만 출력
*p + 2는 ( ) 가 없는 점을 유의해야한다. *p 는 문자 K인데 메모리에 저장될 때 문자가 아닌 해당 문자의 아스키 코드값 이 저장된다. K의 아스키 코드는 75 여기서 + 2를 하게 되면 M이 된다. 즉 값은 : M
KOREA
EA
K
E
M
이 정답이 된다.
2. C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
1번을 풀면 간단하다.
여기서 헷갈리는 곳은 ary[2] = *ary + 3;
*ary + 3이라고 해서 아스키 코드 값을 넣어야되나? 생각했지만 1번은 문자열 값이여서 아스키코드가 사용되고 2번은 int형 정수형이여서 아스키코드 값은 사용되지 않는다!
ary[3] = 3자리의 빈 공간 생성
s= 0
*(ary+0) = 1 이건 ary빈공간 + 0 즉, 0번째 *(주소)에는 1을 넣는다. ary[0] = 1
ary[1] = *(ary+0) + 2 이건 ary에서 1번째 주소에 *(ary+0) 얘는 ary의 0번째 주소 즉 1 에다가 +2를 해서 [1]주소는 3를 갖게된다. ary[1] = 3
ary[2] = *ary + 3 이건 [2]에는 *ary [0]번째 주소 1에다가 +3을해서 [2]는 4를 갖게된다. ary[2] = 4
이제 반복문 i = 0 i<3 (0 , 1 , 2 반복) i++ 끝나면 i가 1개씩 올라감.
s = 0 이므로
i가 0 일때,
s = 0 + ary[0] s는 1이 된다.
i=1
s = 1 + ary[1] s는 4가 된다.
i=2
s = 3 + ary[2] s는 8이 된다.
정답 : 8
구조체
자료의 종류가 다른 변수의 모임이라고 할 수 있다. 이름, 직위 , 급여 등의 필드가 필요한 사원 자료를 하나의 단위로 관리하려면 문자와 숫자가 횬용되므로 배열로는 처리할 수 없다. 이럴때 구조체를 사용한다.
구조체의 정의
struct sawon{
char name[10];
char jikwi[10];
int pay;
};
로 사원 이라는 자료형에 name jikwi 멤버를 넣었다.
구조체 변수의 선언
struct sawon ansan, *seoul;
구조체 멤버의 지정
ansan.name = "감한국"
ansan.jikwi = "대리"
ansan.pay = 40000;
" . " 의 의한 지정 : 구조체 일반 변수를 이용해 구조체 멤버를 지정한다.
seoul -> name ="홍길동"
seoul->jikwi = "과장"
"->" : 구조체 포인터 변수를 이용해 구조체 멤버 지동
(*seoul).name = "홍길동"
(*ansan).jikwi = "과장"
구조체의 포인터 변수는 일반 포인터 변수처럼 *를 사용하여 멤버를 지정할 수 있다.
3. C언어로 구현된 프로그램의 실행 결과를 확인하시오.
이렇게 표가 된다.
nae[12]
정수형 os, db, hab, hhab을 지정
jsu st[3]을 지정하고 {"데이터 1" , 95 , 88},{"데이터 2" , 84 , 91}, {"데이터 3", 86 , 75} 값을 넣음
데이터 1 ~ : st[0]
데이터 2 ~ : st[1]
데이터 3 ~ : st[2] 로 이해하면된다.
jsu* p로 p를 지정해준다.
p = &st[0];
p는 st[0]번의 주소로 저장된다.
(p + 1)->hab = (p+1)->os + (p+2)-> db;
p가 st[0]이니까 (p+1)은 st[1]번 즉, 데이터 2에서 hab 부분은 st[1] os + st[2] db가 된다.
그럼 hab = os + db가 되는데 여기서 표를 정리해줘야 이해가 된다.
이렇게 hab = 84 + 75를 해주면 159가 된다.
(p + 1)->hhab = (p+1)->hab + p->os + p->db;
여기는 st[1] hhab = st[1] hab + st[0] os + st[0] db 가 된다.
hhab = 159 + 95 + 88 즉, 342가 된다.
마지막, printf("%d" , (p+1)->hab + (p+1)->hhab);
st[1] hab + st[1] hhab를 덧셈하면 된다.
159 + 342 즉 501이 정답이된다.
문제만 보면 이해가 안되서 문제의 내용을 머리로 정리하고 위의 표를 그려야 차근차근 풀 수 있다.
문자열 데이터 1 ~3 은 nae로 저장,
정수형 95, 88 , 84 ... 는 os db hab hhab으로 저장된다.
*TMI
주소값 p ++ 로 되어있으면 p = p +1 과 동일하다.
'📜✏️노트 자리없어서 적는 IT 지식📜✏️' 카테고리의 다른 글
SQL (명령어, 정의 등등 알아보기!) (2) | 2025.04.09 |
---|---|
정처산기 자주 틀리는 문제. (2) | 2025.04.08 |
정처산기 프로그래밍 언어 문제 풀이. (2) | 2025.03.27 |
정처산기 문제 기준 학습하기 : HW 관련 기술 (0) | 2025.03.24 |
정처산기 서버개발 ~ SW 관련 신기술 (4) | 2025.03.22 |