☆ scanf문에서 숫자 변수를 다룰 때에는 번지로 다루기 때문에 항상 숫자 변수 앞에 & 기호를 붙여야함
  - scanf("%d",&val);

☆ if, for, while, switch 등 제어문의 조건식 뒤에는 세미콜론을 붙이지 않는다
  - if(x == 0)
  - for(i=1;i<=100;i++)
  - while(x == 1)
  - switch(year % 12)
  - 붙일 시에는 결과가 달라지거나 오류가 발생한다

☆ 수식에서 나눗셈을 할 경우는 / 연산자를 사용한다. (% 연산자는 나눗셈을 하고 난 나머지를 구한다)

☆ 수식에서 "같다"를 판단할 때에는 = 연산자가 아니라 == 연산자를 사용한다.

☆ char을 이용해 문자열을 선언할 경우는 배열을 이용한다.
  - char ddi[10];  <-- 최대 10글자짜리 문자열변수 ddi를 선언
  - 선언된 문자열 변수에 문자열을 넣을 경우 = 연산자를 사용해 바로 넣을 수는 없다
    ( ddi = "원숭이"; <-- 이런 식으로는 불가능함. strcpy(ddi,"원숭이"); 와 같은 식으로 넣어야 한다)

☆ 함수의 선언에 대해 다시 한번 기억해 둘 것

void init()
{
puts("Shopping List: ");
puts("1. 사과");
        //return;
puts("2. 바나나");
puts("3. 수박");
}


void main()
{
init(); // 위에서 선언한 함수 init를 호출하여 실행
}

  - 함수의 종류
call by name : 매개변수 없이 호출
call by value : 값을 전달하는 함수
call by address : 주소를 전달하는 함수
call by reference : reference를 전달하는 함수(c++)
 ※ 레퍼런스 함수는 c++에만 있음

  - 함수의 문법
리턴타입, 함수명(매개변수1, 매개변수2...)

  - 리턴타입이 void일 경우는 매개변수 필요없음, 리턴값도 필요없음(함수 내에서 return을 써줄 때에도 값이 필요없다)

  - 리턴타입이 void가 아닐 경우는 매개변수가 필요해지며, return을 사용할 때에도 리턴값을 붙여 줘야 한다

  - C는 순차실행이므로, 위 예제에서 init 함수를 main() 다음에 선언해 버리면 에러가 발생한다(선언되지 않은 함수를 main() 내에서 호출했기 때문에). 이 경우는 다음과 같이 할 수 있다.

#include <stdio.h>

void init(); // 아래쪽에 정의된 함수 init를 먼저 선언한다   <-- ※ 중요!
char getalpha(); // 마찬가지로 아래쪽에 정의된 함수 getalpha를 먼저 선언한다

void main()
{
init(); // 위에서 선언한 함수 init를 호출하여 실행
printf("main함수에서 호출 : %c\n",getalpha());
putchar(getalpha());
printf("\n");
}

void init()
{
char s;
s=getalpha();
printf("init에서 호출 : %c\n",s);
puts("Shopping List: ");
puts("1. 사과");
puts("2. 바나나");
puts("3. 수박");
}

char getalpha()
{
puts("알파벳을 보내주마!!");
return 'A';
}

☆ 함수의 선언, 정의, 호출

char getgrade();

void main()
{
int sc;
char gr;
printf("점수?");
scanf("%d",&sc);
gr=getgrade(sc);
printf("%d 점은 %c 학점입니다.\n",sc,gr);
}

char getgrade(int s)
{
char gr;
gr = s <= 100 && s > 90 ? 'A' : s > 80 ? 'B' : s > 70 ? 'C' : s > 60 ? 'D' : 'F';
return gr;
}

 - 함수의 정의내용 중에서 return으로 돌려지는 값의 형태에 따라, 함수의 선언타입을 바꾼다. 위 예제에서는 getgrade의 결과로 돌려지는 gr값이 문자이므로, char로 선언하고 아래쪽 정의의 매개변수에서 (int s)로 정해준다. (색깔에 맞춰서 참조)

 - 사용자 함수가 정의되었을 때에 내부적으로 사용되는 변수는 타입만 같으면 이름은 달라도 상관없다. 값을 넘겨받고 넘겨주기 때문에.


+ Recent posts