728x90
r
#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는 생략 불기
1. 전광판 함수
#include <stdio.h>
int display()
{
printf("안녕");
}
//함수 정의
int main()
{
printf("Hi");
display(); // 함수 호출
return 0;
}
// 결과 : Hi안녕
2. 두배 해서 출력하는 함수
#include <stdio.h>
int double_number(int x)
{
return x * 2;
}
int main()
{
int x;
x = double_number(3); //리턴값을 보관하고 다음에 사용하는 것을 권장
printf("%d", x);
return 0;
}
- C++에서 문자열 : const char* vs string
▷ const char*
#include <iostream>
using namespace std;
const char* vending(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
int main()
{
cout << vending(1);
return 0;
}
▷ string
#include <iostream>
using namespace std;
string vending(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
int main()
{
cout << vending(1);
return 0;
}
- 함수의 정의와 선언
▷ 오류 고치기 (함수 선언)
#include <stdio.h>
int main(void)
{
printf("메인함수 : view 호출 전\n");
view();
printf("메인함수 : view 호출 후\n");
return 0;
}
void view(void)
{
printf("view함수\n");
}
//오류 발생
↓
#include <stdio.h>
void view(void); //함수선언
int main(void)
{
printf("메인함수 : view 호출 전\n");
view(); //함수호출
printf("메인함수 : view 호출 후\n");
return 0;
}
void view(void) //함수정의
{
printf("view함수\n");
}
- 함수 선언 연습
#include <stdio.h>
void display();
int main()
{
display();
return 0;
}
void display()
{
printf("안녕");
}
#include <stdio.h>
void print_double_number(int x); //함수선언
int main()
{
print_double_number(3);
return 0;
}
void print_double_number(int x)
{
printf("%d", x * 2);
}
c++스타일로 작성
#include <iostream>
using namespace std;
void print_double_number(int x); //함수선언
int main()
{
print_double_number(3);
return 0;
}
void print_double_number(int x)
{
cout << (x * 2) << endl; // 결과 출력
}
#include <stdio.h>
#include <iostream>
using namespace std;
int double_number(int x); //함수선언
int main()
{
int x;
x = double_number(3);
printf("%d\n", x);
printf("%d\n", double_number(3));
return 0;
}
int double_number(int x)
{
return x * 2;
}
#include <iostream>
using namespace std;
int double_number(int x); // 함수 선언
int main()
{
int x;
x = double_number(3);
cout << x << endl; // 결과 출력
cout << double_number(3) << endl; // 결과 출력
return 0;
}
int double_number(int x)
{
return x * 2;
}
#include <iostream>
using namespace std;
const char* vending(int x)
{
if (x == 1) return "커피";
else return "유자차";
}
int main()
{
cout << vending(1);
return 0;
}
- 매개변수
#include <stdio.h>
int add(int x, int y);
int main(void)
{
int sum;
sum = add(5, 10);
//함수를 호출할 때 사용하는 매개변수인 5와 10은 실매개변수, argument
}
int add(int x, int y) //함수 정의시 사용하는 x와 y는 형식매개변수, parameter
{ //x에 5, y에 10이 전달됨
return(x + y);
}
cinclude <stdio.h>
int sum(int a, int b); //함수 선언
int main(void)
{
int a = 2, b = 5, result;
double da = 2.5, db = 5.2;
result = sum(2, 5);
printf("%d\n", result);
result = sum(a, b); //2와 5가 넘어감
printf("%d\n", result);
result = sum(2.5, 5.2);
printf("%d\n", result);
result = sum(da, db);
printf("%d\n", result);
return 0;
}
int sum(int a, int b)
{
return(a + b);
}
기본은 call by value임
#include <stdio.h>
int sum(int x, int y);
int main(void)
{
int a = 2, b = 5, c = 0;
printf("sum()호출 전 a=%d b=%d c=%d\n", a, b, c);
c = sum(a, b);
printf("sum()호출 후 a=%d b=%d c=%d\n", a, b, c); //2,5,14 변수가 넘어가는게 아닌 값만 넘어가는 것이기 때문에
return 0;
}
int sum(int a, int b) //각 값인 2와 5가 넘어감
{
a = a + 2; //4
b = b + 5; //10
printf("sum()함수 내 a=%d b=%d a+b=%d\n", a, b, a + b); //4, 10, 14
return(a + b);
}
#include <stdio.h>
int sum(int* pa, int* pb);
int main(void)
{
int a = 2, b = 5, c = 0;
printf("sum()호출 전 a=%d b=%d c=%d\n", a, b, c);
c = sum(&a, &b); //앞에 주소연산자 &를 사용하여 주소를 이용해 호출
printf("sum()호출 후 a=%d b=%d c=%d\n", a, b, c);
//4,10,14
return 0;
}
int sum(int* pa, int* pb) //*
{//a의 주소가 포인터 pa로 전달됨
*pa = *pa + 2;
*pb = *pb + 5;
return(*pa + *pb);
}
- 구조적 프로그래밍
#include <stdio.h>
void add(int x, int y); //함수 선언
int main(void)
{
int num1 = 1, num2 = 2, num3 = 3;
int num4 = 4, num5 = 5, num6 = 6;
add(num1, num2);
add(num3, num4);
add(num5, num6); //함수 호출
return 0;
}
void add(int x, int y) //함수 정의
{
printf("두 수 %d과 %d를 더한 결과는 %d입니다.\n", x, y, x + y);
}
- 모듈화
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h> //INT_MIN, INT_MAX가 정의되어 있음
int main(void)
{
int i, num, sum = 0, total, max = INT_MIN, min = INT_MAX;
// max는 int형으로 표현할수 있는 가장 작은값 INT_MIN으로 초기화
// min은 int형으로 표현할수 있는 가장큰값 INT_MAX로 초기화
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 임의의 개수의 수의합, 평균, 최대값, 최소값을 구하는 프로그램┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("계산하려는 수는몇 개입니까 = > ");
scanf("%d", &total);
for (i = 1; i <= total; i++) {
printf("%d번째 수를 입력하세요=",i);
scanf("%d", &num);
sum += num;
max = (num > max) ? num : max;
min = (num < min) ? num : min;
}
printf("합: % d 평균 : % .2f 최댓값 : % d 최솟값 : % d\n", sum, (double)sum / total, max, min);
return 0;
}
//소스파일 -> 새항목추가 -> 헤더파일
#include "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);
}
//score.h 헤더파일 내용
#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); //함수
- 지역(local)변수, 전역(global)변수
: 변수의 유효범위란 프로그램 내에서 변수가 사용될 수 있는 범위
변수의 선언 위치에 따라서 결정됨
지역변수 - 해당함수나 블록{}내에서만 사용할 수 있음
전역변수 - 소스 전체에서 사용할 수 있음
#include <stdio.h>
int main(void)
{
int k = 10; //지역 변수
printf("%d ", k); //10
{
int k = 20; //지역 변수
k += 10;
printf("%d ", k); //30
}
k += 5;
printf("%d ", k); //15
return 0;
}
#include <stdio.h>
int add(int x, int y); //함수 선언
int main(void)
{
int x = 5, y = 10, sum;
printf("add()함수 호출 전 메인 함수 x=%d, y=%d\n", x, y);
sum = add(x, y); //함수 호출(call by value), 리턴된 25를 sum에 저장
printf("sum=%d\n", sum);
printf("add()함수 호출 후 메인 함수 x=%d, y=%d\n", x, y);
return 0;
}
int add(int x, int y) //함수 정의 5, 10
{
printf("add()함수 내부 1 x=%d, y=%d\n", x, y);
x = x + 5;
y = y + 5;
printf("add()함수 내부 2 x=%d, y=%d\n", x, y);
return (x + y);
}
- 자료형과 기억 클래스
- 자동(auto) : 가장 많이 사용하는 기억 클래스
auto는 생략 가능해서 평소에 쓰던 int a;와 같은 문장
#include <stdio.h>
int main(void)
{
auto int a = 1; //여기서 auto는 생략가능
{
int a = 2; //auto 변수
{
int a = 3; //auto 변수
printf("%d ", a);
}
printf("%d ", a);
}
printf("%d ", a);
return 0;
}
- 정적(static) 변수
#include <stdio.h>
void sub(void);
int main(void)
{
sub();
sub();
sub();
return 0;
}
void sub(void)
{
auto int x = 10; //auto는 생략가능
static int y = 10; //실행시 이 문장은 실행하지 않음, 컴파일시 이미 결정됨
printf("x=%d, y=%d\n", x, y);
x++;
y++;
}
// c++ 스타일
#include <iostream>
using namespace std;
void sub(); // 함수 선언
int main()
{
sub();
sub();
sub();
return 0;
}
void sub()
{
int x = 10; // c++에선 auto는 생략해야함
static int y = 10; // static 변수, 프로그램 실행 시 단 한 번만 초기화됨
cout << "x=" << x << ", y=" << y << endl; // 결과 출력
x++;
y++;
}
#include <stdio.h>
int gx = 12, gy = 24; // 전역 변수, 데이터 영역에
int main(void)
{
int ax = 15, ay = 25; // auto변수, 스택에
static int sx = 10, sy = 20; // static변수, 데이터 영역에
printf("ax=%d 주소=%p, ay=%d 주소=%p\n", ax, &ax, ay, &ay);
printf("gx=%d 주소=%p, gy=%d 주소=%p\n", gx, &gx, gy, &gy);
printf("sx=%d 주소=%p, sy=%d 주소=%p\n", sx, &sx, sy, &sy);
return 0;
}
- 기억 클래스 정리
- 구조체(struct)
struct Man{
char name[7];
int age;//멤버변수
};
struct Man han; //C
Man han; //C++
class Man{
private:
int age; //멤버변수
public:
int getAge() {return age;}//멤버함수
void setAge(int age) {age=a;}
};
Man han; //C++
#include <stdio.h>
struct Man { //구조체 선언
int age;
double weight;
};
int main(void)
{
int x;
x = 10;
struct Man River;
River.age = 22;
River.weight = 55.3;
printf("%f\n", River.weight);
return 0;
}
#include <stdio.h>
struct Man { //구조체 선언
int age;
double weight;
};
int main(void)
{
Man River; //c++스타일
River.age = 22;
River.weight = 55.3;
printf("%f\n", River.weight);
return 0;
}
728x90