C++ 4주차
C언어 문법 정리 2-2
C, C++, Java, python, javascript, c#에 대한 함수 만드는 방법
1. C 언어: C 언어에서 함수를 만들려면 다음과 같은 형식을 따릅니다:
반환_타입 함수_이름(매개변수_타입 매개변수) {
// 함수 내용
return 반환값;
}
2. C++: C++에서도 C와 유사한 방식으로 함수를 작성할 수 있으며, 클래스 내부에 멤버 함수로 정의할 수도 있습니다:
반환_타입 클래스_이름::함수_이름(매개변수_타입 매개변수) {
// 함수 내용
return 반환값;
}
3. Java: Java에서는 메서드라고 불리는 함수를 클래스 내에 정의합니다:
접근제한자 반환_타입 메서드_이름(매개변수_타입 매개변수) {
// 메서드 내용
return 반환값;
}
4. Python: Python은 동적 타이핑 언어로서, 반환 타입을 명시하지 않아도 됩니다:
def 함수_이름(매개변수):
# 함수 내용
return 반환값
5. JavaScript: JavaScript에서도 동적 타이핑 언어로서, 반환 타입을 명시하지 않아도 됩니다:
function 함수_이름(매개변수) {
// 함수 내용
return 반환값;
}
6. C#: C#에서는 다음과 같은 형식으로 함수를 작성합니다:
반환_타입 함수_이름(매개변수_타입 매개변수) {
//함수 내용
return 반환값;
}
에러가 나는 이유
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
int main()
{
std::cout << "Hello World!\n";
}
-> 'int main(void)' 함수가 이미 본문이 있기 때문에
#include <iostream>
void main1()
{
std::cout << "Hello World!!!!!!\n";
}
int main()
{
main1();
std::cout << "Hello World!\n";
}
main1() 함수 호출
매개변수, 인자(argument), 리턴값
함수의 입력과 출력
1부터 6까지 랜덤한 값을 발생시켜주는 C언어 소스
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 현재 시간을 기반으로 시드(seed) 설정
srand(time(NULL));
// 1부터 6까지의 랜덤한 값을 발생시킴
int randomValue = rand() % 6 + 1;
// 발생한 랜덤 값 출력
printf("랜덤 값: %d\n", randomValue);
return 0;
}
srand()함수 사용 이유
-> srand() 함수는 난수 생성기의 초기화를 위해 사용됩니다. 이 함수는 인자로 주어진 값을 시드(seed) 값으로 설정하며, 이 시드 값은 난수 생성 알고리즘의 시작점을 결정합니다.
만약 srand() 함수를 호출하지 않고 rand() 함수만을 사용한다면, 프로그램이 실행될 때마다 동일한 순서의 난수가 생성됩니다. 이는 rand() 함수가 내부적으로 초기 시드 값을 가지고 있기 때문입니다.
따라서 매번 다른 순서의 난수를 얻기 위해, 프로그램이 시작할 때 srand() 함수를 통해 다른 시드 값을 설정합니다. 일반적으로 현재 시간을 반환하는 time(NULL) 을 많이 사용하는데, 이는 프로그램이 실행되는 각각의 순간에 대해 고유한 값(현재 초 단위의 시간)을 제공하기 때문입니다.
결론적으로, srand(time(NULL)) 을 호출함으로써 매번 다른 랜덤한 수열을 얻게 됩니다.
함수명
lower camel case: 동사, 의미가 바뀌는 부분은 대문자, 나머지는 소문자
ex) add(), addNumber(), deleteName()
함수 정의, 호출, 선언
함수를 만드는 것-> 함수를 정의(definition)
함수를 만든(정의) 후 함수를 사용(호출)
함수를 호출할 때는 함수 이름과 괄호 안에 argument를 개수만큼 써야 함
함수만들기
#include <iostream>
int main()
{
display(); //호출, call
std::cout << "Hello World!\n";
}
void display(void) //정의
{
std::cout << "박성아\n";
}
=> error C3861: 'display': 식별자를 찾을 수 없습니다.
#include <iostream>
void display(void); //선언, 프로토타입(prototype), 원형
int main()
{
display(); //호출, call
std::cout << "Hello World!\n";
}
void display(void) //정의
{
std::cout << "박성아\n";
}
#include <iostream>
void display(void); //선언, 프로토타입(prototype), 원형
void display1(void);
int main()
{
display(); //호출, call
std::cout << "Hello World!\n";
display1();
}
void display1(void) //정의
{
std::cout << "gggg\n";
}
void display(void) //정의
{
std::cout << "박성아\n";
}
#include <iostream>
void display(void); //선언, 프로토타입(prototype), 원형
void doubleNum(int x);
int main()
{
display(); //호출, call
std::cout << "Hello World!\n";
doubleNum(10);
}
void doubleNum(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
std::cout << "Hello World!\n";
doubleNum(10);
std::cout << doubleNumReturn(20);
}
int doubleNumReturn(int x)
{
return x * 2;
}
void doubleNum(int x)
{
std::cout << x * 2;
}
void display(void) //정의
{
std::cout << "박성아\n";
}
return문의 용도와 return문을 사용하는 프로그래밍 언어
return 문은 함수에서 두 가지 주요한 역할을 합니다:
1. 값 반환: return 문은 함수의 결과를 호출자에게 반환하는데 사용됩니다. 예를 들어, 두 수의 합을 계산하는 함수는 두 수를 더한 결과를 return 문을 통해 반환합니다.
2. 함수 종료: return 문은 실행 중인 함수의 즉시 종료를 위해 사용될 수 있습니다. 이는 반환 값이 필요하지 않은 경우나 특정 조건에서 함수를 바로 종료하고 싶을 때 유용합니다.
대부분의 프로그래밍 언어에서 return 문이 지원되며, 아래는 그중 일부입니다:
1. C
2. C++
3. Java
4. Python
5. JavaScript
6. C#
7. PHP
8. Swift
9. Go
10.Ruby
단축키
함수 접기: Ctrl 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);
}
char vending(int x)
{
if (x == 1) return 'A';
else return 'B';
}
int add(int x, int y)
{
return x + y;
}
int doubleNumReturn(int x)
{
return x * 2;
}
void doubleNum(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 add(int x, int y);
char vending(int x);
const char* vending1(int x);
int main()
{
display(); //호출, call
doubleNum(10);
std::cout << doubleNumReturn(20);
std::cout << add(2, 3);
std::cout << vending(1);
std::cout << vending1(1);
}
const char* vending1(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
char vending(int x)
{
if (x == 1) return 'A';
else return 'B';
}
int add(int x, int y)
{
return x + y;
}
int doubleNumReturn(int x)
{
return x * 2;
}
void doubleNum(int x)
{
std::cout << x * 2;
}
void display(void) //정의
{
std::cout << "박성아\n";
}
함수의 정의와 선언(원형, prototype)
Online Python Tutor: Online Compiler and Visual Debugger for Python, Java, C, C++, and JavaScript
Online Compiler and Visual Debugger for Python, Java, C, C++, and JavaScript This online compiler and debugger helps you learn Python, Java, C, C++, and JavaScript by visualizing code execution and getting help from AI such as ChatGPT. You can use it to de
pythontutor.com
코드를 시각화 할 수 있는 사이트
#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);
std::string vending2(int x);
int main()
{
display(); //호출, call
doubleNum(10);
std::cout << doubleNumReturn(20);
std::cout << add(2, 3);
std::cout << vending(1);
std::cout << vending1(1);
std::cout << vending2(1);
}
std::string vending2(int x)
{
if (x == 1) return "aaa";
else return "bbb";
}
const char* vending1(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
char vending(int x)
{
if (x == 1) return 'A';
else return 'B';
}
int add(int x, int y)
{
return x + y;
}
int doubleNumReturn(int x)
{
return x * 2;
}
void doubleNum(int x)
{
std::cout << x * 2;
}
void display(void) //정의
{
std::cout << "박성아\n";
}
구조체
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
};
int main()
{
int x = 10;
std::cout << x << std::endl;
struct Man park; //C++은 struct 생략 가능, C언어는 불가능
park.age = 10;
std::cout << park.age << std::endl;
park.weight = 20.5;
std::cout << park.weight << std::endl;
}
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
};
int main()
{
Man park = { 1, 3.5 };
std::cout << park.age << " " << park.weight << std::endl;
park.age = 10;
park.weight = 20.5;
std::cout << park.age << " " << park.weight << std::endl;
}
#include <iostream>
struct Man {
int age; //멤버
double weight; //멤버
std::string name;
};
int main()
{
Man park = { 1, 3.5, "aaaa"}; //멤버 순서대로 초기화
std::cout << park.name << " " << park.age << " " << park.weight << std::endl;
park.age = 10;
park.weight = 20.5;
park.name = "박";
std::cout << park.name << " " << park.age << " " << park.weight << std::endl;
//비슷한문제중간고사30점
}
C struct vs C++ class
C언어 구조체는 멤버 변수만 가능한데, 확장자를 cpp로 바꾸면 C언어 구조체도 함수를 넣을 수 있다.(시험자주나옴)
구조체 예제
#include <iostream>
#include <vector>
// 도서 정보를 저장하는 구조체
struct Book {
std::string title; // 책 제목
std::string author; // 저자 이름
int publicationYear; // 출판년도
};
// 도서관 정보를 저장하는 구조체 (도서 컬렉션 포함)
struct Library {
std::string name; // 도서관 이름
std::vector<Book> bookCollection; // 도서 컬렉션 벡터
};
int main() {
// 개별적인 책 객체 생성 및 초기화
Book book1 = {"1984", "George Orwell", 1949};
Book book2 = {"To Kill a Mockingbird", "Harper Lee", 1960};
// 라이브러리 객체 생성 및 초기화
Library myLibrary;
myLibrary.name = "My Local Library";
// 책들을 라이브러리의 컬렉션에 추가
myLibrary.bookCollection.push_back(book1);
myLibrary.bookCollection.push_back(book2);
// 라이브러리와 그 안의 책들의 정보 출력
std::cout << "도서관 이름: " << myLibrary.name << "\n";
for(int i=0;i<myLibrary.bookCollection.size();i++)
{
std::cout << "\n책 제목: "<<myLibrary.bookCollection[i].title<<"\n";
std::cout << "저자: "<<myLibrary.bookCollection[i].author<<"\n";
std::cout << "출판년도: "<<myLibrary.bookCollection[i].publicationYear<<"\n";
}
return 0;
}
출처: C++프로그래밍 수업 자료