C++

C++ 5주차 강의 내용

wlsn 2024. 10. 1. 20:23

void는 return이 없을때 쓰고, 함수 정의는 3~6줄, 함수 호출은 9줄, 함수 선언은 7번째 줄이다.

더블 넘버로 3을 정의한 후 *2를 해서 6이 나오는 모습.

void에서 double_number int x를 정의, main에서 3이라는 값을 저장하고 *2를 해서 6을 출력한 모습.

 

위에서 리턴하고 아래서 다시 불러와 프린트를 한 결과.

 

int add로 x와 y를 정의 한 후 return에서 x+y를 더해서 리턴을 하고 main에서 add를 호출해 x=5가 된다.

 

x가 1이라면 A를 반환하고, 그렇지 않다면 B를 반환한다. char x로 정의한 후 vending에 1을 저장하고 출력한다면 A가 나온다.

 

이 수식도 전과같이 1이 아닐경우 유자차로 반환한다. const char*로 하고 %s로 출력할 수도 있다.

 

string으로 바꾸고 변형해서 쓰는게 좋다.

 

그저 이렇게 쓴다면 오류가 난다.

void view(void)를 메인함수 위쪽에 미리 선언을 한다면 오류가 나지 않는다.

 

이렇게 위쪽에다가 미리 입력을 해야 메인부분에 영향이 안가고 출력이 된다. 만약에 메인부분에 미리 쓰지않는다면 에러가 남.

위 사진은 C++로 작성된 두 배 해서 출력하는 함수 선언을 해본 소스다.

 

위 사진은 C++로 작성된 두 배 해서 리턴하는 함수 선언을 해본 소스다.

 

위 사진은 C++로 작성된 두 수를 더해서 리턴하는 함수 선언을 해본 소스다.

 

위 사진은 C++로 작성된 자판기 함수 선언을 해본 소스다.

 

위 사진은 C++로 작성하고 const를 넣은 자판기 함수 선언을 해본 소스다.

 

함수의 리턴값을 보여주는 코드다.

int x와 y를 선언,정의,호출하고 add로 sum에 저장 후 printf로 불러온다.

 

재귀함수의 예시인 코드다. 맨 위에서 선언, 중간에서 호출하고 printf로 출력해주는 코드다.

 

재귀 호출의 스택 오버플로우 현상이다.

 

실매개변수와 형식매개변수 예시이다.

call by value 예시이다.

 

&연산자의 예시다.

 

call by reference의 예시다.

구조적 프로그래밍의 장점은 구분지어 코드를 작성하기 때문에 협업이 쉽다는것과 어느 부분이 틀렸는지 확인하기 쉽다.

 

반복되는 부분은 함수로 구현의 예시다. add로 2가지의 매개변수만 저장해놨기때문에 add부분에 3개 이상이 들어간다면 오류가 뜬다.

 

모듈화 프로그래밍 연습 : 모듈화를 하기 전의 모습이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h>
void start(void);//함수 선언
int max_number(int a, int b); //함수 선언
int min_number(int a, int b); //함수 선언
int main(void)
{
int i, num, sum = 0, total;
int max = INT_MIN, min = INT_MAX;
start();//함수 호출
printf("계산하려는 수는 몇 개입니까=>");
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");
}
int max_number(int a, int b)//함수 정의
{
return((a > b) ? a : b);
}
int min_number(int a, int b)//함수 정의
{
return((a < b) ? a : b);
}

모듈화 프로그래밍 연습 : 모듈화를 하기 후의 모습이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h>
void start(void);//함수 선언
int max_number(int a, int b); //함수 선언
int min_number(int a, int b); //함수 선언

(여기까지는 score.h이라는 헤더파일에 저장)

int main(void)
{
int i, num, sum = 0, total;
int max = INT_MIN, min = INT_MAX;
start();//함수 호출
printf("계산하려는 수는 몇 개입니까=>");
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");
}
int max_number(int a, int b)//함수 정의
{
return((a > b) ? a : b);
}
int min_number(int a, int b)//함수 정의
{
return((a < b) ? a : b);
}
소스를 헤더 파일(.h)과 C 파일(.c)로 나누기

 

지역 변수는 스택에 일시적으로 저장되며 선언된 블록( { } ) 내에서만 접근 가능하고 유효함

 

main()함수와 add()함수의 x, y

위의 x,y와 아래의 x,y는 다른 변수이다. 지역변수와 전역변수의 차이

 

auto변수의 특징

1. 함수 또는 블록의 내부에서 선언

2. 해당 함수나 블록 내에서만 유효한 지역(local)변수

3. 기억 클래스가 명시되지 않고 선언된 변수는 모두 자동 변수 즉, auto는 생략이 가능 그래서 지금까지 기억 클래스를 쓰지 않고 사용한 모든 변수는 auto변수

4. 스택(stack) 공간을 일시적으로 사용

5. 함수나 블록을 진입하면 기억 영역이 확보되고, 벗어나면 기억 영역은 바로 소거됨 단, return문으로 리턴된 값은 스택에 복사되어 외부로 전달됨

6. 초기화는 실행시 이루어지며, 초기화하지 않으면 임의의 값(쓰레기 값, garbage value)을 가짐

 

auto는 생략이 가능하다. 4번째 줄에서 auto를 쓸 순 있지만 오류가 나 생략.

 

static변수의 특징

1. 프로그램이 종료될 때까지 값을 유지

2. 처음 실행시 한번만 초기화되고 초기화 값이 없으면 0으로 초기화됨

3. 스택이 아닌 정적 데이터 영역을 사용

4. 지역 static변수는 해당 블록 내에서만 접근 가능

 

12번째 줄에 auto는 생략하고 x는 int x = 10으로 고정을 해놓고 y는 sub()로 계속 불러오기때문에 y++로 계속 1씩 늘어나는 모습이다.

 

변수와 메모리 영역이다. 주소는 컴파일러마다 다르고 static,auto를 사용함.

 

printf는 C고 std는 C++이다.

 

결괏값이 sunhee.weight부분이 다른데

" "중간에 공백부분에 00000으로 바꾼다면 

똑같이 출력되긴 한다. 하지만 이런 방식은 옳지 않고 다른 해결방법을 찾아야 한다.

'C++' 카테고리의 다른 글

C++ 6주차 강의 내용  (0) 2024.10.08
C++ 6주차 예습과제  (0) 2024.10.07
C++ 4주차 강의 내용  (0) 2024.09.24
C++ 4주차 예습과제  (0) 2024.09.23
C++ 2주차 강의 내용  (0) 2024.09.10