(c언어) 함수는 영어로 Function
대충 인수값이 없으면 void 있으면 int 씀
#include <stdio.h>
/*void star() {
printf("*************************\n");
return;
}
void line() {
printf("------------------\n");
}
*/
int addNum(int a, int b) {
return a + b;
}
void star2(int type) {
if (type == 1) {
printf("*****************\n");
}
else if (type == 2) {
printf("-----------------\n");
}
else {
printf("그럼뭐임");
}
}
int main() {
printf("안녕하세요\n");
for (int i = 0; i < 3; i++) {
star2(1);
star2(2);
}
int a;
int b;
int c;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
c= addNum(a, b);
printf("a+b= %d\n",c);
star2(2);
}
대충 수를 받으면 돌려주는 코드
#include <stdio.h>
int star(int type) {
printf("main에서 전달받은 값은 %d임\n", type);
if (type >= 4) {
printf("이거 안됨");
exit(1);
}
else if (type == 1) {
return type;
}
else if (type == 2) {
return type;
}
else {
printf("choose either 1 or 2");
return type;
}
}
int main() {
int num;
printf("type to print:");
scanf_s("%d", &num);
int c;
c = star(num);
printf("%d",c);
}
1. 숫자를 스켄해서 num에 넣음
2. star라는 함수에 들어감 키라키라도키도키
3. num이 4보다 같거나 크면 나가지고 1이면 1 돌려주고 2면 2돌려주고 3이면 1이나 2중에 고르라는 말을 내보낼거임
4. 결과가 c에 들어감
5. c를 프린트함
계산을 해주는 함수를 만들어보자
극한의 비효율 코드의 예시
나도 이거 쓰면서 처음 코드에서 조금 바꾼건데 그게 비효율적이였던거임
근데 이미 많이 써놔서 그걸 바꿀바에야 딴걸 바꾸겠다 해서 이래적었는데
코드상으로는 극한의 비효율인거임 나도 쓰면서 아차싶었음ㅋㅋ 위에서 다 프린트 하고 밑에선 호출만 하면 될것을..
나누기할때 double인 이유는 값이 float로 나와서 int쓰면 안나옴ㅋㅋ
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
double div(double a, double b) {
return a / b;
}
int mult(int a, int b) {
return a * b;
}
int main() {
int a,b,c,d,e;
double f;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
c = add(a, b);
printf("a+b= %d\n", c);
d = sub(a, b);
printf("a-b= %d\n", d);
e = mult(a, b);
printf("a*b= %d\n", e);
f = div(a, b);
printf("a/b= %lf\n", f);
}
조금은 더 효율적인..코드
#include <stdio.h>
int add(int a, int b) {
printf("a+b= %d\n", a+b);
return;
}
int sub(int a, int b) {
printf("a-b= %d\n", a-b);
return;
}
double div(double a, double b) {
printf("a/b= %fl\n", a/b);
return;
}
int mult(int a, int b) {
printf("a*b= %d\n", a*b);
return;
}
int main() {
int a, b;
printf("함수\n");
printf("숫자 2개 입력\n");
printf("a=");
scanf_s("%d", &a);
printf("b=");
scanf_s("%d", &b);
add(a, b);
sub(a, b);
div(a, b);
mult(a, b);
}
지역변수가 뭐냐 (local variable)
함수 내에만 존재하고 접근이 가능함
중괄호 내에 선언됨
지역 내에서만 유효함
해당 지역을 벗어나면 소멸됨
지역이 다르면 이름이 같아도 됨
전역변수가 뭐냐 (global variable)
전역한 변수임
중괄호 내에 선언안됨
프로그램 어디서든 접근가능
종료할때까지 존재
초기화 안하면 0값
전역이랑 지역이랑 겹치면 지역이 먼저임
정적 지역 변수가 뭐냐 (static local variable)
static 이 붙어있으면 값이 고정되어서 사용됨
선언됨 함수 내에서만 접근가능
#include <stdio.h>
int a, b;//전역변수
int main() {
printf("입력:");
scanf_s("%d%d", &a, &b);
printf("결과 %d",add(a,b));
}
int add() {
static int a = 10;
return a + b;
}
a값을 입력 받아도 이미 10이 정적지역변수에 들어가있어서 계산은 10으로됨.
즉 20이랑 5가 스켄되더라도 10이랑 5로 계산되는거임
초를 시간으로 바꾸는걸 짜보자
#include <stdio.h>
const int H = 60 * 60;
const int M = 60;
void StoHMS(int sec);
int main(void) {
int sec;
printf("초:");
scanf_s("%d", &sec);
StoHMS(sec);
return 0;
}
void StoHMS(int sec) {
int h, m, s;
h = sec / H;
sec = sec % H;
m = sec / M;
sec = sec % M;
s = sec;
printf("[%d 시간],[%d 분],[%d 초]\n", h, m, s);
}
const int 는 선언할때 말고는 값을 더 못넣어서 특정한 값 하나를 지정해서 계속 쓰고 싶을때 쓰면 되는거임.
자 일단 1시간은 1초의 60*60배니까 저렇게 선언해놓고
M는 1초의 60배니까 저래 해 놨음
메인함수에는 함수만 호출하도록 할거임.
자 그럼 Second 를 M이랑 H로 바꾸는 함수를 만들어보자. 일단 sec를 H로 나누면 몇시간이 나오는지 보여주겠지?
그리고 남는 s값(나머지)를 sec에 다시 넣는거임. 이제 그 나머지로는 더이상 H가 안나오니까
나누기 M(60)해서 몇분인지를 구하는거임
그리고 또 남는값을 구해서 분으로도 못만드는 나머지들을 구해서 그걸 sec에 넣고 출력하면 되는거야 (사실 그래보면 s라는 변수선언 안해도 되긴 해 그냥 sec 프린트 하면 되지)
그래서 나온 값을 프린트하면 몇시간 몇분 몇초인지 나온답니다-
#include <stdio.h>
const int H = 60 * 60;
const int M = 60;
void StoHMS(int sec);
int main(void) {
int sec;
printf("초:");
scanf_s("%d", &sec);
StoHMS(sec);
return 0;
}
void StoHMS(int sec) {
int h, m;
h = sec / H;
sec = sec % H;
m = sec / M;
sec = sec % M;
printf("[%d 시간],[%d 분],[%d 초]\n", h, m, sec);
}
극한의 효율충...?
사실 저거 함수 배울려고 하는거라 코드 자체가 비효율적임 아ㅋㅋ