











#include <stdio.h>
void display(void) //정의
{
printf("Hi~\n");
}
int main()
{
display(); //호출, call
display();
return 0;
}
//함수 만들기 (1) : 전광판 함수-기말고사 1번!!!
#include <stdio.h>
void display(void) //정의
{
printf("Hi~\n");
}
void doubleNumber(int x)
{
printf("%d\n", x * 2);
}
int main()
{
display(); //호출, call
doubleNumber(5);
doubleNumber(3);
return 0;
}
//함수를 만드는 것: 함수를 정의하는 것, 함수 호출해야 함(함수이름, 매개변수 있으면()), 매개변수 x의
//자료형도 함께 써야 함, 함수 만들기(2)
#include <stdio.h>
// 1. 매개변수(입력)와 반환값(출력)이 모두 없는 함수
void display(void)
{
// void는 '비어있다'는 뜻으로, 입력받는 값도 없고 반환하는 값도 없음을 의미합니다.
printf("Hi~\n");
}
// 2. 매개변수는 있고 반환값은 없는 함수
void doubleNumber(int x)
{
// 정수 하나(x)를 입력받아서, 함수 내부에서 바로 2를 곱해 출력합니다.
// 반환타입이 void이므로 값을 호출한 곳으로 돌려주지(return) 않습니다.
printf("%d\n", x * 2);
}
// 3. 매개변수와 반환값이 모두 있는 함수
int doubleNumber1(int x)
{
// 정수 하나(x)를 입력받아서, 2를 곱한 결과값을 호출한 곳으로 돌려줍니다.
// 값을 돌려주기 때문에 함수의 맨 앞에 반환할 데이터 타입인 'int'를 적어줍니다.
return x * 2;
}
int main()
{
int a; // 정수형 변수 a 선언 (현재 초기화되지 않아 쓰레기 값이 들어있음)
// [함수 호출 1] display 함수를 실행합니다. "Hi~"가 출력됩니다.
display();
// [함수 호출 2] doubleNumber 함수에 인자값 5를 전달합니다.
// 함수 내부에서 5 * 2가 계산되어 "10"이 출력됩니다.
doubleNumber(5);
// [함수 호출 3] doubleNumber1 함수에 인자값 3을 전달합니다.
// 함수가 계산 결과인 6을 'return(반환)'하므로, printf("%d\n", 6); 과 같은 효과가 되어 "6"이 출력됩니다.
printf("%d\n", doubleNumber1(3));
// [중요] printf 함수의 반환값 활용
// 1단계: 먼저 printf("%d\n", a)가 실행됩니다. (a는 초기화되지 않은 임의의 숫자가 출력됨)
// 2단계: printf 함수는 '화면에 출력한 문자열의 총 개수(글자 수)'를 반환(return)하는 특징이 있습니다.
// 3단계: 출력된 글자 수가 변수 a에 저장됩니다. (출력된 숫자 길이 + 줄바꿈 문자'\n' 1글자 포함)
a = printf("%d\n", a);
return 0; // 프로그램이 성공적으로 종료되었음을 운영체제에 알림
}
//함수 만들기(3)
#include <stdio.h>void display(void) //정의
{
printf("Hi~\n");
}void doubleNumber(int x)
{
printf("%d\n", x * 2);
}int doubleNumber1(int x)
{
return x * 2;
}
int add(int x,int y)
{
return x + y;
}
int main()
{
int a;
a = add(7, 3);
printf("%d\n", a);
display(); //호출, call
doubleNumber(5);
printf("%d\n", doubleNumber1(3));
a = doubleNumber1(4);
printf("%d\n", a);
return 0;
}
//함수 만들기(4)
#include <stdio.h>
int add(int x, int y, int z)
{
return x + y + z;
}
int main(void)
{
int x;
x = add(2, 3, 4);
printf("%d", x);
return 0;
}
#include <stdio.h>
int add(int x, int y, int z)
{
return x + y + z;
}
int main(void)
{
int x;
double avg3;
x = add(8, 3, 2);
avg3 = (double)x / 3;
printf("%f\n", avg3);
return 0;
}
//시험 가능성 있음
#include <stdio.h>
void display(void)
{
printf("Hi~\n");
}
void doubleNumber(int x)
{
printf("%d\n", x * 2);
}
int doubleNumber1(int x)
{
return x * 2;
}
int add(int x, int y)
{
return x + y;
}
char vending(int x)
{
if (x == 1) return 'A';
else return 'B';
}
int main()
{
int a;
char c;
printf("%c\n", vending(2));
c = vending(1);
printf("%c\n", c);
a = add(7, 3);
printf("%d\n", a);
display();
doubleNumber(5);
printf("%d\n", doubleNumber1(3));
a = doubleNumber1(4);
printf("%d\n", a);
return 0;
} //함수 만들기(5)-자판기 함수
#include <stdio.h>
void display(void)
{
printf("Hi~\n");
}
void doubleNumber(int x)
{
printf("%d\n", x * 2);
}
int doubleNumber1(int x)
{
return x * 2;
}
int add(int x, int y)
{
return x + y;
}
const char* vending(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
int main()
{
int a;
char c;
printf("%s\n", vending(1));
//c = vending(1);
//printf("%c\n", c);
a = add(7, 3);
printf("%d\n", a);
display();
doubleNumber(5);
printf("%d\n", doubleNumber1(3));
a = doubleNumber1(4);
printf("%d\n", a);
return 0;
} //함수 만들기(6)-자판기 함수 2, 문자열의 경우 %s를 사용, const char* 시험 가능성 있음

#include <stdio.h>
void display(void);//선언
int main()
{
display(); //호출, call
return 0;
}
void display(void) //정의
{
printf("Hi~\n");
}
//진짜 시험 1번 문제


















#include <stdio.h>
int sum(int a, int b); //함수 선언
int main(void)
{
int a = 2, b = 5, c = 0;
printf("sum()호출 전 a=%d b=%d c=%d\n", a, b, c);
c = sum(a, b); //함수 호출
printf("sum()호출 후 a=%d b=%d c=%d\n", a, b, c); //2,5,14
return 0;
}
int sum(int a, int b) //함수 정의, 형식매개변수(paramenter)
{
a += 2;
b=b+5
printf("sum()함수 내 a=%d b=%d a+b=%d\n", a, b, a + b);
return(a + b);
}
-위에서 call by value(값에 의한 호출)에 대한 설
제시해주신 C언어 코드는 값에 의한 호출(Call by Value)의 특징을 아주 잘 보여주는 예시입니다.
코드에 누락된 세미콜론(`;`) 등 오타를 수정하고, **Call by Value의 핵심 개념 설명**과 함께 각 라인별로 상세한 **설명 주석**을 추가했습니다.
---
## 1. Call by Value(값에 의한 호출)란?
C언어에서 함수를 호출할 때 인자(Argument)를 전달하는 기본 방식입니다.
* **핵심 개념:** 함수를 호출할 때 원래 변수가 가진 **'값'만 복사**해서 함수의 매개변수에 전달합니다.
* **특징:** 함수 내부에서 매개변수의 값을 아무리 변경해도, 함수 외부(호출한 곳)의 **원래 변수(실제 인자)에는 아무런 영향을 주지 않습니다.** 복사본을 수정했을 뿐, 원본은 그대로 유지되기 때문입니다.
---
## 2. 주석을 포함한 코드 분석
실행이 가능하도록 `b=b+5` 뒤에 세미콜론(`;`)을 추가하고, 실행 흐름과 Call by Value의 특징을 주석으로 상세히 적었습니다.
```c
#include <stdio.h>
int sum(int a, int b); // 함수 선언 (컴파일러에게 sum 함수의 형태를 알림)
int main(void)
{
// [main 함수 영역의 지역 변수]
int a = 2, b = 5, c = 0;
// 출력 결과: a=2 b=5 c=0
printf("sum()호출 전 a=%d b=%d c=%d\n", a, b, c);
// [함수 호출: Call by Value]
// main의 변수 a(2)와 b(5)의 '값'만 복사해서 sum 함수로 보냅니다.
// main의 a, b와 sum의 a, b는 이름만 같을 뿐 메모리 상에서 전혀 다른 변수입니다.
c = sum(a, b);
// [출력 결과 확인]
// sum 함수 안에서 a와 b를 변경했음에도, main의 a와 b는 그대로 2와 5 유지!
// c는 sum 함수가 리턴한 결과값(14)을 받았습니다.
// 출력 결과: a=2 b=5 c=14
printf("sum()호출 후 a=%d b=%d c=%d\n", a, b, c);
return 0;
}
// 함수 정의 (형식 매개변수 a, b)
// 호출될 때 main으로부터 2와 5라는 값만 복사받아 새로운 메모리 공간에 저장합니다.
int sum(int a, int b)
{
a += 2; // sum 함수의 지역변수 a가 4가 됨 (main의 a는 영향 없음)
b = b + 5; // sum 함수의 지역변수 b가 10이 됨 (main의 b는 영향 없음)
// 출력 결과: a=4 b=10 a+b=14
printf("sum()함수 내 a=%d b=%d a+b=%d\n", a, b, a + b);
return (a + b); // 4 + 10 = 14를 반환하고 함수 종료 (이때 sum의 a, b는 메모리에서 소멸)
}
```
---
## 3. 실행 결과 흐름 한눈에 보기
코드가 실행되면 콘솔 창에는 다음과 같이 출력됩니다.
```text
sum()호출 전 a=2 b=5 c=0
sum()함수 내 a=4 b=10 a+b=14
sum()호출 후 a=2 b=5 c=14
```
> **요약하자면!**
> `sum()` 함수 내부에서 `a`와 `b`를 아무리 더하고 바꾸어도, 그것은 `sum()` 함수가 가졌던 **복사본 변수**일 뿐입니다. 따라서 함수가 끝난 후 `main()` 함수로 돌아왔을 때 원본 `a`와 `b`는 변함없이 `2`와 `5`로 유지되는 것, 이것이 바로 **Call by Value**의 성질입니다.
#include <stdio.h>
int sum(int a, int b); //함수 선언
int main(void)
{
int a = 2, b = 5, c = 0;
printf("sum()호출 전 a=%d b=%d c=%d\n", a, b, c);
// [Call by Value] main의 a(2), b(5) 변수 자체가 아니라, 그 '값'만 복사해서 전달합니다.
c = sum(a, b); //함수 호출
// [Call by Value 결과] sum 함수 내부에서 값이 변경되었어도 원본 a, b는 그대로 유지됩니다.
printf("sum()호출 후 a=%d b=%d c=%d\n", a, b, c); //2,5,14
return 0;
}
// 형식매개변수 a, b는 main의 변수와 이름만 같을 뿐, 값을 복사받은 전혀 다른 메모리 공간입니다.
int sum(int a, int b) //함수 정의, 형식매개변수(parameter)
{
a += 2; // 복사본 a의 값이 변경됨 (main의 a에는 영향 없음)
b = b + 5; // 복사본 b의 값이 변경됨 (main의 b에는 영향 없음)
printf("sum()함수 내 a=%d b=%d a+b=%d\n", a, b, a + b);
return(a + b);
}