티스토리 뷰
[37강] 함수
* 함수란? 반복적인 수행을 정의해 놓은 작은 프로그램 단위(하나의 프로그램 단위)
모듈의 독립성을 높이기 위해 응집도를 높이고 결합도를 낮춘다.
반환함수 | 함수 선언과 사용 |
반환타입 함수명(인자들...){ 수행할 작업1 수행할 작업2 } |
int sum(int a, int b) { int c = a+b; return c; } int data = sum(10,20); // 30을 return 시킴 printf("%d", data); // 30 출력 |
*반환하지 않는거는 void 타입이라고 함.
문제 | 풀이 |
#include<stdio.h> void swap(int a, int b){ int temp; temp = a; a = b; b = temp; } int main(void) { int k,j; k=3; j=2; swap(k,j); printf("k = %d, j=%d",k ,j); return 0; } |
*void는 return하지 않는 함수 k = 3; j = 2; swap(3,2) { tem = 3 a = 2 b = 3 } return하지 않았기 때문에 tem,a,b의 값은 다 사라짐. 따라서 k=3, j=2 |
[38강] 함수와 반복문
문제 | 풀이 |
#include<stdio.h> int func(int n); int main(void) { int num; printf("%d\n", func(5)); return 0; } int func(int n) { if(n<2) return n; else { int i,temp, curent =1, last = 0; for(i=2; i<=n; i++){ tmp = curent; curent += last; last = tem; } return curent; } } |
func(5) { 5<2 거짓이므로 else로 감 for { i=2<=5 참, tmp = 1; curent = 1 + 0 = 1; last = 1; i++ i=3<=5참, tmp = 1; curent = 1+1=2; last = 1; i++ i=4<=5참; tem = 2; curent = 2+1=3; last = 2; i++ i=5<=5참; tem = 3; curent = 3+2=5; last = 3; i++ i=6<= 거짓, for문 빠져나옴 return curent = 5; } printf("%d\n", func(5))는 5를 출력 |
[39,41,42,44,45,46,47,48강] 함수에 주소 전달
* call by value 값을 전달해서 함수를 호출
* call by reference 주소값 전달 (포인터, 객체, 오브젝트, 배열 전달)
문제1 | 풀이 |
#include<studio.h> int main(void) { int x = 10, y = 20; printf("%d", f(&x, y)); &는 주소값임 printf("%d %d\n", x, y); } * main 앞의 int는 출력값의 자료형, main뒤의 void 자리는 입력받는 자료의 자료형, void는 기본값. int f(int *i, int j){ *i += 5; return (2 * *i+ ++j); } 실행결과는? |
x = y = 20 (200번지) f(100번지의 값, 20) { ++j가 우선순위 가장 높으므로 j = 20+1 = 21 100번지의 값 = 100번지의 값10+5=15; return 2 * (100번지의 값 15) + (j=20+1=21) 즉, 2*15+21=51 } return 후 함수 안에 내용은 초기화됨 printf("%d", f(&x, y));는 51을 출력 printf("%d %d\n", x, y);는 15, 20 출력 개행없으므로 51 15 20 |
문제2 | 풀이 |
int value = 3, list[4] = {1,3,5,7}; int i; swap(value, &list[0]); swap(list[2] , &list[3]); swap(value, &list[value]); for (i=0l i<4, i++) print("%d", list[i]); void swap(int a, int *b){ int temp; temp = a; a = *b; *b = temp; } |
value = 3, list = { swap (3,100번지(1이 있는 주소)){ temp = 3; a= 100번지의 값 1 *b = 100번지(list[0])의 값은 temp 3 } return 값은 없음. 변수 초기화 swap (5, 103번지(7의 주소)) { temp = 5 a = 7 *b = 5 } swap (3, list[3]의 주소값){ temp = 3 a = 5 *b = 3 } for i=0, 0<4참 list[0] i<4까지 list출력 3353 |
[40강] 함수와 변수의 유효범위
* 함수에서 변수를 참조할 때 나랑 가장 가까이있는 변수를 참조한다.
문제 | 풀이 |
#include<stdio.h> int a=1, b=2, c=3; → *전역변수 (모든 프로그램에 영향을 미칠 수 있는변수) int f(void); // 니 밑에 f라는 함수가 있어 int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a,b,c); return 0; } int f(void){ int b,c; a=b=c=4; return (a+b+c); } |
a= printf("%3d\n", f()); %3d는 3개의 공간 ___ 뒤에서부터 채움 f() { 지역변수 b,c 존재 a=b=c=4; 전역변수 a=4할당 지역변수 b와 c에 4 할당 return a+b+c=4+4+4=12 반환 } f()안에있던 변수들 초기화 printf("%3d\n", f()); " 12" 공백포함 출력 후 개행 printf("%3d%3d%3d\n", a,b,c);전역변수 a,b,c 출력" 4 2 3 " |
[43강] 함수가 주소를 리턴
문제 | 풀이 |
#include<stdio.h> int main() { int i; int x = 10; int *p; int a[100]; for(i=0; i<100; i++) a[i] = i*10; p = func(x,a); printf("sum=%d",x + a[0] + a[1] + p[0] + p[1]); } int *func (int a, int *x){ a = a+10; x = x+1; *x = *x * 2; return x; } |
i x=10 p포인터함수 = func(x,a)의 주소값 101번지 a={0, func(10,a의주소값) { 지역변수 a=10+10=20; x = x+1 = 101번지 10 *x = *x * 2 101번지에 10*2 = 20 x를 리턴하므로 101번지 주소값리턴 } printf("sum=%d", x + a[0] + a[1] + p[0] + p[1]); 10 + 0 + 20 + 20(101번지) + 20 = 70 sum = 70 |
※ 출처 : 흥달쌤 C언어 37강~48강 https://youtu.be/1-VH1ZGgVG0?si=L-sHN-mTwfpNI4gb
※ 컴파일 사이트 : http://ideone.com
반응형
'AI > 정보처리기사(C언어)' 카테고리의 다른 글
[정보처리기사 실기] C언어 총 정리(7) print 출력순서, 단항연산자, fork (0) | 2024.05.21 |
---|---|
[정보처리기사 실기] C언어 총 정리(6) static 변수, 재귀함수, 중복 재귀함수 (0) | 2024.05.21 |
[정보처리기사 실기] C언어 총 정리(4) - 2차원 배열과 포인터, 포인터 배열, 배열 포인터, 구조체 (0) | 2024.05.19 |
[정보처리기사 실기] C언어 총 정리(3) 배열과 포인터 (0) | 2024.05.18 |
[정보처리기사 실기] C언어 총 정리(2) 조건문, 반복문 (0) | 2024.05.17 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스
- 미라클모닝
- SQL
- 아침
- 운동
- 습관
- 다이어트
- 오블완
- 기초
- 티스토리챌린지
- 뉴스
- C언어
- ChatGPT
- 30분
- 스크랩
- llm
- 오픽
- 영어회화
- 루틴
- 고득점 Kit
- 줄넘기
- 갓생
- opic
- 실기
- Ai
- 빅데이터 분석기사
- 아침운동
- 경제
- IH
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함