티스토리 뷰
[특강 1] print 출력순서
문제1 | 풀이 |
#include<stdio.h> int main() { int i=5; printf("%d, %d, %d, %d", i++, ++i, i++, ++i); } |
i++ 5출력 후 i=6, ++1 후 출력7, 7출력후 i=8, +1후출력9 *** print는 뒤에서 부터 출력.... 충격적..ㅋㅋ *** ++나--가 앞에 오면 연산을 할 당시의 i값을 참조, 현재는 연산을 하지 않아서 i최종을 기다려야함 3차풀이) ++i, i+1=6연산, i를 확정짓지 않음 => i = 9 i++, 현재 i=6를 참조 i=i+1=7 =>6 ++i, i+1=8연산, i를 확정짓지 않음=> i = 9 i++, 현재 i=8를 참조 i= i+1=9 =>8 최종적으로 i=9를 참조함 printf의 순서에 맞게 8,9,8,9 출력 |
문제2 | 풀이 |
#include<stdio.h> int main() { int i = 5; printf("%d, %d, %d, %d", --i,i--,i--,--i, i); } |
뒤에서 부터 진행 i, 뭐가 나올지 모름 → 1 --i, 연산만 진행 i=5-1=4 → 1 i--, 현재 i=4 참조 후 i=i-1=4-1=3 → 4 i--, 현재 i=3 참조 후 i=i-1=3-1=2 → 3 --i, 연산만 진행 i=2-1=1 → 1 연산만 진행했던 i들은 1을 최종적으로 참조함 printf의 순서에 따라 1,3,4,1,1 |
[특강 2] ++중복
문제1 (++가 뒤에올때) | 풀이 |
#include<stdio.h> int main() { int i = 5; int z = i++ + i++ + i++; printf("%d, %d, i, z) } |
i++, 현재i값 참조→5, i=i+1=6 i++, 현재i값 참조→6, i=i+1=7 i++, 현재i값 참조→7, i=i+1=8 i=8 z = 5+6+7=18 8,18 출력 |
문제2 (++가 앞에올때,연산 시점의 값을 참조***) | 풀이 |
#include<studio.h> int main() { int i = 5; int z = ++ i + ++ i + ++ i ; printf("%d, %d, i, z) } |
* ++나--가 앞에 오면 연산을 할 당시의 i값을 참조, ++i , i+1연산만 함 i=5+1=6 ++i , i+1연산만 함 i=6+1=7 연산자를 만나 현재 i값을 참조해서 계산한다.7+7 = 14 *** 앞에꺼부터 연산시작하니까 뒤에 ++i까지 기다리는거 아님, 앞에꺼부터 연산시작하니까 14 + ++i에서 현재 i=7, i=7+1=8하고 연산자+를 만나 i=8을 참조하여 z=14+8= 22, i=8 |
문제3 | 풀이 |
#include<studio.h> int main() { int i= 5; int z = ++i + i ++ + ++i; printf("%d, %d", i, z); } |
++i, 연산만 i=5+1=6 i++, 현재 i값 참조6, i=i+1=7 +연산 => 현재 i=7 + 6 =13 ++i, 선증가 i=i+1=8 13+연산만나 현재i=8참조=21 i=8, z=21 |
[특강 3] fork 함수 (***순서가 중요)
* 리눅스에서 자식 프로세스를 생성할 때 쓰는 것
- fork()실행시 리턴 값 : 실패 -1, 자식 0, 부모 0보다 큰 값 ex.200 (자식프로세스의 프로세스 ID를 받음)
-순서 : 부모 실행(ex.200) > 자식실행(0) (총 2번 실행됨)
*부모가 wait을 만나면 자식이 끝날때까지 기다려야함(자식이 다 돌면 부모가 함, wait이 없으면 부모 먼저 실행)
문제 | 풀이 |
int i=0, v=1, n=5; pid_tpid; pid= fork(); if(pid<0) { for(i=0; i<n; i++) v += (i+1); printf("c = %d", v); } else if(pid ==0){ for(i=0; i<n; i++) v *= (i+1); printf("b= %d,",v); } else { wait(NULL); for (i=0; i<n; i++) v+=1; printf("a =%d", v); } |
pid=fork()실행; 부모 먼저 실행, pid(부모)>0 → else wait 만남: 자식먼저 실행 pid(자식)==0 → else if의 for문 수행 i=0, 0<5, v= 1*(0+1)=1 i=1. i<5, v=1*(2)=2 i=2, 2<5 v=2*3=6 i=3, 3<5 v=6*4=24 i=4, 4<5 v=24*5=120 i=5, 5<5거짓, for문 빠져나옴 b=120 출력 wait에 걸렸던 부모의 for문 실행 * pid가 리턴을 부모, 자식 각각 받아 if문을 각각 실행하므로 v=120에서 시작하는 것이 아닌 v=1을 적용 i=0, 0<5, v=1+1=2 i=1, 1<5, v=2+1=3 i=2, 2<5, v=3+1=4 i=3, 3<5, v=4+1=5 i=4, 4<5, v=5+1=6 i=5, for문 빠져나옴 a=6 출력 |
※ 출처 : 흥달쌤 C언어 특강 1~3강 https://youtu.be/G_SIfsm00TU?si=XJSTDGBQYWpEyuDb
※ 컴파일 사이트 : http://ideone.com
반응형
'AI > 정보처리기사(C언어)' 카테고리의 다른 글
[정보처리기사 실기] C언어 총 정리(6) static 변수, 재귀함수, 중복 재귀함수 (0) | 2024.05.21 |
---|---|
[정보처리기사 실기] C언어 총 정리(5) 함수와 변수의 유효범위 (0) | 2024.05.20 |
[정보처리기사 실기] C언어 총 정리(4) - 2차원 배열과 포인터, 포인터 배열, 배열 포인터, 구조체 (0) | 2024.05.19 |
[정보처리기사 실기] C언어 총 정리(3) 배열과 포인터 (0) | 2024.05.18 |
[정보처리기사 실기] C언어 총 정리(2) 조건문, 반복문 (0) | 2024.05.17 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 운동
- Ai
- C언어
- 오픽
- IH
- 티스토리챌린지
- 아침
- 고득점 Kit
- 미라클모닝
- 뉴스
- 줄넘기
- SQL
- 갓생
- ChatGPT
- 경제
- llm
- 빅데이터 분석기사
- 아침운동
- 프로그래머스
- 습관
- 기초
- 다이어트
- 루틴
- 30분
- 오블완
- Python
- 영어회화
- 실기
- 스크랩
- opic
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함