내 동전은 전달인자(argument), 자판기 안에 있는 동전은 매개변수(parameter), 출력값 = 반환값
기말 기출 확정문제
리턴값이 없으면 그 자리에 void를 써준다 말 그대로 비어있는 자리이기 때문.
기사시험에도 나오는 아주 중요한 부분이다.
gpt4가 답한 C 표준 라이브러리에서 가장 많이 사용되는 함수 20개 이다.
최근에는 lower camel case부분을 제일 많이 쓴다고 한다.
함수 정의 - 수식을직접 짜서 함수를 정의함.
함수 호출 - 함수 정의된 함수를 호출해서 사용함.
함수 선언 - 함수 정의에서 윗줄만 가져와서 세미콜론만 붙이면 선언이 완성됨.
pythontutor라는 C, C++, Java, python 등 실행 결과들을 한눈에 알아 볼 수 있게 시각화해주는 사이트다.
https://pythontutor.com
Online Python Tutor - visualize, debug, get AI help for Python, Java, C, C++, and JavaScript
Online Compiler, Visual Debugger, and AI Tutor for Python, Java, C, C++, and JavaScript Python Tutor helps you do programming homework assignments in Python, Java, C, C++, and JavaScript. It contains a unique step-by-step visual debugger and AI tutor to he
pythontutor.com
#include <stdio.h>
int display(void); // 선언, 사용법
int main(void)
{
printf("메인함수\n");
display(); //호출, call
return 0;
}
int display(void) //정의, 만들기
{
printf("Display함수\n");
return 0;
}
이렇게 써도 상관은 없지만 return값이 필요가 없기때문에 아래 수식으로 써야한다.
#include <stdio.h>
void display(void); // 선언, 사용법
int main(void)
{
printf("메인함수\n");
display(); //호출, call
return 0;
}
void display(void) //정의, 만들기
{
printf("Display함수\n");
}
정의 부분에서 리턴값이 필요가 없으므로 int display가 아닌 void형으로 써줘야한다.
#include <stdio.h>
void printDoubleNumber(int x)
{
printf("%d", x * 2);
}
int main(void)
{
printDoubleNumber(3);
return 0;
}
앞부분 (int x) 부분 매개변수에는 꼭 앞에 자료형이나 정수형 등을 꼭 써줘야한다.
리턴문은 결과 값을 호출한 함수로 변환하고 특수한 함수가 들어갈 수도 있다.
#include <stdio.h>
void printDoubleNumber(int a);
int doubleNumber(int x);
int main(void)
{
int x;
printDoubleNumber(3);
x = doubleNumber(5);
printf("%d\n", x);
printf("%d\n", doubleNumber(5));
return 0;
}
int doubleNumber(int x)
{
return x * 2;
}
void printDoubleNumber(int x)
{
printf("%d\n", x * 2);
}
doubleNumber를 사용해 int x에 들어간 값을 2배로 만들어 프린트로 출력하고 x에 저장할 수 있지만 printf에서 바로 불러 올 수도 있다.
#include <stdio.h> // 표준 입력 출력 라이브러리를 포함합니다.
// 'vending' 함수는 정수를 입력받아 문자 'A' 또는 'B'를 반환합니다.
char vending(int x) {
if (x == 1) // 입력 값이 1이면
return 'A'; // 'A'를 반환합니다.
else // 그렇지 않으면
return 'B'; // 'B'를 반환합니다.
}
// 'vending1' 함수는 정수를 입력받아 문자열 "콜라" 또는 "사이다"를 반환합니다.
const char* vending1(int x) {
if (x == 1) // 입력 값이 1이면
return "콜라"; // "콜라"를 반환합니다.
else // 그렇지 않으면
return "사이다"; // "사이다"를 반환합니다.
}
int main(void) {
char x; // 문자를 저장할 변수 'x'를 선언합니다.
x = vending(2); // 'vending' 함수에 2를 입력하여 반환된 값을 'x'에 저장합니다.
printf("%c\n", x); // 'x'의 값을 출력합니다. (이 경우 'B'가 출력됩니다.)
printf("%s\n", vending1(1)); // 'vending1' 함수에 1을 입력하여 반환된 문자열을 출력합니다. (이 경우 "콜라"가 출력됩니다.)
return 0; // 프로그램을 정상 종료합니다.
}
gpt4를 사용해 자판기 함수를 주석을 추가해서 출력한 모습이다.
vending 함수에서 1과 그것이 아닐때의 수를 반환해 서로 다른값이 나오게 출력했다.
함수 호출을 하려면 먼저 정의를 한 후에 함수이름과 같이 괄호안에 argument를 갯수만큼 쓰고 없다면 빈 괄호를 써주면 된다.
함수를 선언할때는 int,double 등 헤더에서 세미콜론을 더하면 int add(int x,int y)처럼 이러한 것을 함수 선언이라고 또는 "함수 원형(prototype)"이라고 부른다.
함수 선언이 귀찮다면 위로 올려보낼 순 있지만 위에있는것을 아래에서 가져올 순 있지만 아래있는것을 위로 가져올 순 없기때문에 순서를 맞춰 쓰는것이 좋다.
선언하고 저장하고 호출을 귀찮지만 따로따로 해야지 오류가 발생하지 않는다.
main함수에서 정상적으로 종료된다면 0이 출력되지만 1이 출력된다면 비정상적으로 출력된다고 생각하면 된다.
실매개변수는 argument, 형식매개변수는 parameter라고 함.
#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 aa, int ba)
{
aa += 2; //a=a+2;
ba += 5; //b=b+5;
printf("sum()함수 내 a=%d b=%d a+b=%d\n", aa, ba, aa + ba);
return(aa + ba);
}
위와 아래는 엄연히 다른 변수고 잠시 값을 빌려준다고 생각하면 된다 call by Value에 예시이다.
임의의 개수의 수를 입력받아 합,평균,최대값,최소값을 출력하는 프로그램이다.
#include "score.h"
int main(void)
{
int i, num, sum = 0, total, max = INT_MIN, min = INT_MAX;
// max는 int형으로 표현할 수 있는 가장 작은 값 INT_MIN으로 초기화
// min은 int형으로 표현할 수 있는 가장 큰 값 INT_MAX로 초기화
start();
scanf("%d", &total);
for (i = 1; i <= total; i++) {
printf("%d번째 수를 입력하세요=", i);
scanf("%d", &num);
sum += num;
max = max_number(num, max);//함수 호출
min = min_number(num, min);//함수 호출
}
printf("합:%d 평균:%.2f 최댓값:%d 최솟값:%d\n",
sum, (double)sum / total, max, min);
return 0;
}
void start(void)
{
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 임의의 개수의 수의 합, 평균, 최대값, 최소값을 구하는 프로그램┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("계산하려는 수는 몇 개입니까=>");
}
int max_number(int a, int b)//함수 정의
{
return((a > b) ? a : b);
}
int min_number(int a, int b)//함수 정의
{
return((a < b) ? a : b);
}
모듈화를 score.h로 묶어서 작성한 프로그램이다.
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
return;
}
hanoi(n - 1, from_rod, aux_rod, to_rod);
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
int main() {
int n; // Number of disks
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
return 0;
}
하노이탑문제를 gpt4로 해결한 문제다.