C++

4-1 함수(funtion)

리버윤 2023. 9. 27. 11:37
728x90

 아래 코드에서 에러가 발생하는 이유는?

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}
int main()
{
    std::cout << "Hello World!\n";
}

->  main 함수의 중복 : C++ 프로그램은 하나의 `main()` 함수만을 가질 수 있다. 여기서는 두 번 `main()` 함수를 정의하였으므로, 이것은 컴파일 오류를 발생시킨다.

#include <iostream>

void main1()
{
    std::cout << "Hello World!!\n";
}
int main()
{
    main1(); //함수 호출,call
    std::cout << "Hello World!\n";
}

 

  • 매개변수, 인자, 리턴값

 

  • 함수의 입력과 출력

 

  • 1부터 9까지 랜덤한 값을 출력하기
#include <stdio.h>  // 표준 입출력 함수를 위한 헤더 파일
#include <stdlib.h> // rand(), srand() 등을 위한 헤더 파일
#include <time.h>   // time() 함수를 위한 헤더 파일

int main() {
    srand(time(0));  // 현재 시간을 기반으로 난수 생성기 초기화

    int randomValue = rand() % 9 + 1;  // rand()로 생성된 난수에 대해 modulo 연산 수행 후, 결과에 1을 더함으로써 범위가 [1,9]가 되게 함

    printf("Random value: %d\n", randomValue);  // 생성된 랜덤값 출력

    return 0;
}
  • srand(time(0)): srand() 함수는 난수 생성기의 초기값(시드 값)을 설정하는 역할을 한다. 이때 시드 값으로 현재 시간(time(0))을 사용하면 프로그램이 실행될 때마다 다른 난수들이 생성된다.
  • rand() % 9 + 1: rand() 함수는 임의의 정수를 반환한다. 여기서 % 연산자는 나눗셈의 나머지를 반환하므로, rand() % n은 [0, n-1] 범위의 임의의 정수를 반환한다. 그래서 여기에 +1을 하여 [1, n] 범위로 만든다.

 

  • 함수 명
    • lower camel case (동사, 의미가 바뀌는 부분은 대문자, 나머지는 소문자)
    • upper camel case ( 동사, 첫 글자와 의미가 바뀌는 부분은 대문자, 나머지는 소문자)

 

  • 함수 정의, 호출. 선언
    • 함수 정의
      • 함수 만들기
      • 이름, 매개변수, 리턴형, 기능
    • 함수 호출
      • 함수 사용하기
      • 이름, 매개변수
    • 함수 선언
      • 함수의 사용법
      • 이름, 매개변수, 리턴형
      • 컴파일러에게 함수에 대한 정보를 미리 줌
#include <iostream>
void display(void)  //정의
{
	std::cout << "강윤서\n";
}
int main()
{
	display();  //호출, call
	std::cout << "Hello world!\n";
}

 

  • 함수 선언

오류 발생함

 

선언을 해주어 오류 해결

 

이렇게 display1도 만들고 이런식으로 활용 가능

 

  • 두배해서 출력하는 함수 (숫자 출력)
#include <iostream>
void display(void);  //선언, 프로토타입(prototype), 원형
void firstNum(int x);  //선언
int main()
{
	display();  //호출, call
	std::cout << "Hello world!\n";
	firstNum(10); //호출, call - 여기에선 firstNum()괄호 안에 숫자 넣어야함
}
void firstNum(int x) //정의
{
	std::cout << x * 2;
}
void display(void)  //정의
{
	std::cout << "강윤서\n";
}

 

  • 두배해서 리턴 하는 함수
#include <iostream>
void display(void);  //선언, 프로토타입(prototype), 원형
void doubleNum(int x);
int doubleNumReturn(int x);  //리턴 선언
int main()
{
	display();  //호출, call
	doubleNum(10);
	std::cout << doubleNumReturn(20);  //리턴 호출
}
void doubleNum(int x)
{
	std::cout << x * 2;
}
int doubleNumReturn(int x)  //리턴하기
{
	return x * 2;
}
void display(void)  //정의
{
	std::cout << "강윤서\n";
}

 

  • 두 수룰 받아 더해서 리턴하는 함수
#include <iostream>
void display(void);  //선언, 프로토타입(prototype), 원형
void doubleNum(int x);
int doubleNumReturn(int x);
int add(int x, int y);  //add함수 선언
int main()
{
	display();  //호출, call
	doubleNum(10);
	std::cout << doubleNumReturn(20);  //std::cout는 화면에 나타나도록 
	std::cout << add(2, 3);  //add함수 호출
}
void doubleNum(int x)
{
	std::cout << x * 2;
}
int doubleNumReturn(int x)
{
	return x * 2;
}
int add(int x, int y)  //add함수 정의
{
	return x + y;
}
void display(void)  //정의
{
	std::cout << "강윤서\n";
}

 

crtl m+o : 함수 작게보기 

ctrl m+l : 함수 크게보기

 

  • 자판기 함수
#include <iostream>
void display(void);  //선언, 프로토타입(prototype), 원형
void doubleNum(int x);
int doubleNumReturn(int x);
int add(int x, int y); 
char vending(int x); //벤딩함수 선언
int main()
{
	display();  //호출, call
	doubleNum(10);
	std::cout << doubleNumReturn(20);
	std::cout << add(2, 3);
	std::cout << vending(1); //벤딩함수 호출
}
void doubleNum(int x)
{
	std::cout << x * 2;
}
int doubleNumReturn(int x)
{
	return x * 2;
}
int add(int x, int y)
{
	return x + y;
}
char vending(int x) //정의, A와 B를 나타내기위해 char 쓴거임
{
	if (x == 1) return 'A';
	else return 'B';
}
void display(void)  //정의
{
	std::cout << "강윤서\n";
}

 

  • 문자열 
#include <iostream>
void display(void);  //선언, 프로토타입(prototype), 원형
void doubleNum(int x);
int doubleNumReturn(int x);
int add(int x, int y); 
char vending(int x);
const char* vending1(int x); //vending1함수 선언
int main()
{
	display();  //호출, call
	doubleNum(10);
	std::cout << doubleNumReturn(20);
	std::cout << add(2, 3);
	std::cout << vending(1); 
	std::cout << vending1(0); //벤딩1함수 호출
}
void doubleNum(int x)
{
	std::cout << x * 2;
}
int doubleNumReturn(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';
}
const char* vending1(int x) //커피, 코코아는 문자열이기때문에 const char*을 사용해야함
{
	if (x == 1) return "커피";
	else return "코코아";
}
void display(void)  //정의
{
	std::cout << "강윤서\n";
}

 

 

728x90