카테고리 없음

4-2. C언어 문법 (함수)

리버윤 2024. 9. 24. 13:47
728x90

#include <stdio.h>

int up(int x) {  //함수 정의, 여기서 x는 parameter
	return x+1;
}
int main(void) {
	up(3);  //함수 호출, 여기서 3은 argument
    return 0;
}

 

 

- 함수

 : 특정한 작업을 하도록 맏들어진 독립적인 단위 모듈

    큰 프로그램 하나를 여러개의 함수로 분할하여 구현하는 구조적 프로그래밍(structured programming) 방식의 가본

 

int main(void)
{
	코드 작성
	return 0;
}

리턴형 함수이름(매개변수 리스트)
{ // 함수의 시작
	코드 작성
	0을 리턴함. 문장 끝에는 “;”을 씀
} // 함수의 끝

리턴형에 쓰는 void는 생략 불기

 

● 날짜, 시간 함수

#define _CRT_SECURE_NO_WARNINGS // Visual Studio에서 보안 경고를 방지하기 위해 정의

#include <stdio.h> // 표준 입출력 라이브러리 포함
#include <time.h> // 시간 관련 기능을 위한 라이브러리 포함

int main(void) {
    time_t t = time(NULL); // 현재 시간을 초 단위로 반환하여 t에 저장
    struct tm tm = *localtime(&t); // t를 로컬 시간으로 변환하여 tm 구조체에 저장

    // 현재 날짜와 시간을 출력
    printf("현재: %d년 %d월 %d일 %d:%d:%d\n",
           tm.tm_year + 1900, // tm_year는 1900년 이후의 년도이므로 1900을 더함
           tm.tm_mon + 1,     // tm_mon은 0부터 시작하므로 1을 더함
           tm.tm_mday,        // 일
           tm.tm_hour,        // 시
           tm.tm_min,         // 분
           tm.tm_sec);        // 초

    // 컴파일 시간 정보를 출력
    printf("__TIMESTAMP__ : %s\n", __TIMESTAMP__);

    return 0; // 프로그램 종료
}

 

  유틸리티 함수

#include <stdio.h>   // 표준 입출력 라이브러리 포함
#include <stdlib.h>  // srand(), rand() 함수 사용을 위한 라이브러리 포함
#include <time.h>    // time() 함수 사용을 위한 라이브러리 포함

int main()
{
    srand((unsigned int)time(NULL)); // 현재 시간을 시드 값으로 사용하여 난수 생성기 초기화

    // 0부터 9까지의 난수를 100개 생성하여 출력
    for(int i = 0; i < 100; i++) {
        printf(" %d", rand() % 10); // rand()로 생성된 난수를 10으로 나눈 나머지를 출력
    }

    return 0; // 프로그램 종료
}

 

● 사용자 정의 함수

1) 함수명 

  • 동사, 모두 소문자와 단어 사이 언더스코어
  • 동사, 의미가 바뀌는 부분은 대문자, 나머지는 소문자 (lower camel case) - 주로 이 방식을 많이 사용함
  • 동사, 첫 글자와 의미가 바뀌는 부분은 대문자, 나머지는 소문자 (upper camel case)

2) 정의, 호출, 선언

  • 정의 - 함수 만들기
    void display(void)
    {
    	print("안녕");
    }
  • 호출 - 함수 사용하기
    display();
  • 선언 - 함수의 사용법
    void display(void);
#include <iostream>
void display(void); //함수 선언, 프로토타입(prototype). 순차적으로 코드를 읽기때문에 정의가 뒤에 있는 경우 앞에서 이렇게 선언해주는 거.

int main(void) {
	std::cout << "Hi!\n";
	display(); //함수 호출
	return 0;
}
void display(void) {  //함수 정의. 리턴값이 없기 때문에 void. 생략 불가능 꼭 써야함
	std::cout << "하이!\n";
}

 

 

#include <iostream>
void display(void); //함수 선언, 프로토타입(prototype).
void printDoubleNumber(int x);
int returnDoubleNumber(int x);

int main(void) 
{
	int x;

	printDoubleNumber(3);

	x = returnDoubleNumber(10);
	std::cout << x;  //리턴값을 보관했다가 사용하는것이 좋음

	//std::cout << returnDoubleNumber(7); //위와 같은 용도인데 위의 것은 더 많이 사용함

	display(); //함수 호출
	return 0;
}
void display(void)  //함수 정의. 리턴값이 없기 때문에 void. 생략 불가능 꼭 써야함
{
	std::cout << "하이!\n";
}
void printDoubleNumber(int x)
{
	std::cout << x * 2;
}
int returnDoubleNumber(int x)
{
	return x * 2;
}

 

 

  return문

리턴형 함수이름(매개변수리스트)
{
	코드 작성
}

 

 

#include <iostream>
void display(void); //함수 선언, 프로토타입(prototype).
void printDoubleNumber(int x);
int returnDoubleNumber(int x);
int add(int x, int y);
double divide(int x, int y); // 반환 타입을 double로 변경

int main(void) 
{
	int x;
	display(); //함수 호출

	printDoubleNumber(3);

	x = returnDoubleNumber(10);
	std::cout << x;  //리턴값을 보관했다가 사용하는것이 좋음

	//std::cout << returnDoubleNumber(7); //위와 같은 용도인데 위의 것은 더 많이 사용함

	x = add(3, 4);
	std::cout << x;

	double result = divide(3, 2); // 결과를 double 변수에 저장
	std::cout << result << std::endl; // 소수점까지 출력

	return 0;
}
void display(void)  //함수 정의. 리턴값이 없기 때문에 void. 생략 불가능 꼭 써야함
{
	std::cout << "하이!\n";
}
void printDoubleNumber(int x)
{
	std::cout << x * 2;
}
int returnDoubleNumber(int x)
{
	return x * 2;
}
int add(int x, int y)
{
	return x + y;
}
// divide 함수의 매개변수와 반환 타입을 double로 변경
double divide(int x, int y)
{
	return static_cast<double>(x) / y; // x를 double로 변환하여 나눗셈 수행
}
728x90