반응형
int main() {
int itemCnt = 0;
int money = 100;
//아이템을 산다.
itemCnt++;
money -= 10;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
//아이템을 산다.
itemCnt++;
money -= 10;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
}
1) 전역변수, 지역변수
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//전역변수
int itemCnt = 0;
int money = 100;
void buyItem() {
itemCnt++;
money -= 10;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
}
int main() {
//아이템을 산다.
//지역변수
buyItem();
buyItem();
}
2) 함수에 매개변수 넣기
int itemCnt = 0;
int money = 100;
void buyItem(int cost) {
itemCnt++;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
}
int main() {
buyItem(30);
buyItem(50);
}
결과 :
3) 매개변수 두개 넣기
int itemCnt = 0;
int money = 100;
void buyItem(int cost,int cnt) {
itemCnt += cnt;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
}
int main() {
//아이템을 산다.
//지역변수
buyItem(30, 5);
buyItem(50, 7);
}
결과 :
int itemCnt = 0;
int money = 100;
void buyItem(int cost, int cnt) {
if (money >= cost) {
itemCnt += cnt;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
}
else {
printf("잔액이 부족합니다.\n");
}
}
int main() {
//아이템을 산다.
//지역변수
buyItem(3000, 5);
buyItem(50, 7);
}
결과 :
int itemCnt = 0;
int money = 100;
int result;
void buyItem(int cost, int cnt) {
if (money >= cost) {
itemCnt += cnt;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
result = 0;
}
else {
printf("잔액이 부족합니다.\n");
result = -1;
}
}
int main() {
//아이템을 산다.
//지역변수
buyItem(3000, 5);
if (result == -1) {
printf("돈이 부족하시군여..\n");
}
buyItem(50, 7);
}
결과 :
int itemCnt = 0;
int money = 100;
int buyItem(int cost, int cnt) {
if (money >= cost) {
itemCnt += cnt;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
return 0;
}
else {
printf("잔액이 부족합니다.\n");
return -1;
}
}
int main() {
int result;
result = buyItem(3000, 5);
if (result == -1) {
printf("돈이 부족하시군여..\n");
}
result = buyItem(50, 7);
}
결과 :
int itemCnt = 0;
int money = 100;
int buyItem(int cost, int cnt) {
if (money < cost) {
printf("잔액이 부족합니다.\n");
return -1;
}
itemCnt += cnt;
money -= cost;
printf("아이템을 구매했습니다\n");
printf(" 아이템의 개수 : %d\n", itemCnt);
printf(" 잔액 : %d\n", money);
return 0;
}
int main() {
int result;
result = buyItem(3000, 5);
if (result == -1) {
printf("돈이 부족하시군여..\n");
}
result = buyItem(50, 7);
}
결과 :
32강. 함수의 반환
1) return : 반환
#include <stdio.h>
int plus(int a, int b) {
return a + b;
}
int main() {
int sum = plus(3, 5);
printf("%d\n", sum);
}
2) main 함수에는 return 0; 을 안적어도 자동으로 들어간다.
근데 plus 함수에는 return 값을 꼭 적어야 한다.
int noMeaning(){
printf("first\n");
return 1;
printf("second\n");
return 2;
}
int main() {
int a;
a = noMeaning();
printf("반환된 값 : %d\n", a);
}
return을 만나면 그 즉시 함수가 종료되어 버려서 첫번째 리턴 밑에 있는애들은 실행이 안된다.
3) void 함수에서 리턴을 만나면 어떻게 되나?
void noMeaning(){
printf("first\n");
return;
printf("second\n");
return;
}
int main() {
noMeaning();
}
void 함수는 리턴값이 필요 없기 때문에 return 뒤에 숫자를 지운다.
33강. call by value, call by reference
1) a 와 b 의 값을 맞바꾸기
int main() {
int a, b;
scanf("%d%d", &a, &b);
int tmp;
tmp = a;
a = b;
b = tmp;
printf("%d %d", a, b);
}
결과 :
2) a 와 b를 맞바꾸는 함수 만들기
void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
swap(a, b);
printf("%d %d", a, b);
}
결과 :
왜 안바뀌었을까? - a ,b와 x, y 가 따로 놀고 있기 때문에
해결책 : 포인터로 바꾼다. = call by reference
void swap(int *x, int *y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
swap(&a, &b);
printf("%d %d", a, b);
}
결과 :
call by reference C++
void swap(int &x, int &y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
swap(a, b);
printf("%d %d", a, b);
}
34강. 프로토 타입 prototype
prototype : 원형, 시제품
함수의 원형을 적어놓고 정의 는 나중에
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void walk(int distance) {
printf("%dcm를 걸었습니다.\n",distance);
}
void rotate(int angle) {
printf("%d도 회전했습니다.\n", angle);
}
void drawSquare() {
for (int i = 1; i <= 4; i++) {
walk(10);
rotate(90);
}
}
int main() {
drawSquare();
}
결과 :
void walk(int distance) {
printf("%dcm를 걸었습니다.\n",distance);
}
void rotate(int angle) {
printf("%d도 회전했습니다.\n", angle);
}
int main() {
drawSquare();
}
void drawSquare() {
for (int i = 1; i <= 4; i++) {
walk(10);
rotate(90);
}
}
오류. 함수를 밑에 적으면 실행이 안됨
void walk(int distance);
void rotate(int angle);
void drawSquare();
int main() {
drawSquare();
}
void walk(int distance) {
printf("%dcm를 걸었습니다.\n", distance);
}
void rotate(int angle) {
printf("%d도 회전했습니다.\n", angle);
}
void drawSquare() {
for (int i = 1; i <= 4; i++) {
walk(10);
rotate(90);
}
}
void walk(int);
void rotate(int);
void drawSquare();
int main() {
drawSquare();
}
void walk(int distance) {
printf("%dcm를 걸었습니다.\n", distance);
}
void rotate(int angle) {
printf("%d도 회전했습니다.\n", angle);
}
void drawSquare() {
for (int i = 1; i <= 4; i++) {
walk(10);
rotate(90);
}
}
프로토 타입의 장점 :
1) 함수 순서를 신경쓸 필요 없음
2) 어떤 함수가 있는지 한눈에 볼 수 있음
35강. 재귀 함수
void rec() {
printf("***\n");
rec();
}
int main() {
rec();
}
무한반복
void rec(int n) {
printf("n = %d\n",n);
rec(n + 1);
}
int main() {
rec(1);
}
1) 재귀함수에 종료조건 넣기
void rec(int n) {
if (n > 5) return;
printf("n = %d\n",n);
rec(n + 1);
}
int main() {
rec(1);
}
결과 :
2) 팩토리얼
5! = 5 * 4 * 3 * 2 * 1 =120
int factorial(int n) {
if (n == 1) return 1;
return n * factorial(n - 1);
}
int main() {
printf("%d\n", factorial(5));
}
반응형
'개발자' 카테고리의 다른 글
두들낙서 C/C++ 38 ~ 41강 typedef, 구조체 만들기, 구조체와 메모리, 구조체 가리키기(구조체 포인터) (0) | 2022.08.11 |
---|---|
두들낙서 C/C++ 36강, 37강 배열을 매개변수로 넘기기, 종합문제 (0) | 2022.08.11 |
두들낙서 C/C++ 24강~30강 포인터, 배열 포인터 , 포인터 배열 종합문제 (0) | 2022.06.17 |
두들낙서 C/C ++ 22강, 23강 2차원 배열, 문자열 함수 strlen, strcpy, strcat, strcmp (0) | 2022.06.17 |
두들낙서 20강, 21강 정리 - 배열 (거꾸로 출력, 최대 최소, 짝수의 개수) (0) | 2022.06.16 |
댓글