1. getchar() 함수 

- 키보드로부터 하나의 문자를 입력받는 함수.


#include <stdio.h>

int getchar(void);  


2. fgetc() 함수 

- 키보드로부터 하나의 문자를 입력받는 함수.

- 파일을 통해서도 문자를 입력받을 수 있음.


#include <stdio.h>

int fgetc(FILE *stream);  


3. putchar() 함수

- 모니터에 하나의 문자를 출력하는 함수. 


#include <stdio.h>

int putchar(int c);  


4. fputc() 함수

- 모니터에 하나의 문자를 출력하는 함수.

- 파일을 통해서도 문자를 출력(저장) 가능. 


#include <stdio.h>

int fputc(int cFILE *stream);


예제>단일 문자 입출력 함수를 사용하여, 'x'문자가 입력될 때까지 계속해서 영문자를 입력받고 출력하는 예제.


#include <stdio.h>

int main(void)

{

char ch;

printf(" x가 입력될 때까지 영문자를 계속 입력받습니다 : \n");


while((ch=putchar())!='x')

{

putchar(ch);

}

printf("x를 입력하셨습니다. \n");

return 0;

}








'언어 > C' 카테고리의 다른 글

C언어 포인터  (0) 2018.11.07
C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02

1. 포인터란?

- 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 함. 

- 포인터는 주소값을 저장.


ex)  int n=100; // 변수의 선언

      int *ptr=&n; // 포인터의 선언 



2. 포인터 연산자

- 주소 연산자(&) // 변수 이름 앞에 사용, 해당 변수의 주소값을 반환, 번지 연산자

- 참조 연산자(*) // 포인터의 이름이나 주소 앞에 사용, 포인터에 가리키는 주소에 저장된 값을 반환. 



3. 포인터 선언

- 타입 *포인터 이름 = &변수이름;

- 타입 *포인터 이름= 주소값;


ex)

int num01 = 1234;

double num02 = 3.14;  

int* ptr_num01 = &num01;

double* ptr_num02 = &num02;  

 

② printf("포인터 ptr_num01이 가리키고 있는 주소값은 %p입니다.\n", ptr_num01);

③ printf("포인터 ptr_num02가 가리키고 있는 주소값은 %p입니다.\n", ptr_num02);

printf("포인터 ptr_num01이 가리키고 있는 주소에 저장된 값은 %d입니다.\n", *ptr_num01);

printf("포인터 ptr_num02가 가리키고 있는 주소에 저장된 값은 %f입니다.\n", *ptr_num02);


실행결과

포인터 ptr_num01이 가리키고 있는 주소값은  0x7ffdfae4e27c입니다.

포인터 ptr_num02가 가리키고 있는 주소값은 0x7ffdfae4e270입니다.

포인터 ptr_num01이 가리키고 있는 주소에 저장된 값은 1234입니다.

포인터 ptr_num02가 가리키고 있는 주소에 저장된 값은 3.140000입니다.


4. 포인터 연산

// 0으로 초기화는 

=0 , =NULL , =0x00 

// int는 4byte씩 증가 

   char는 1byte씩 증가

   double은 8byte씩 증가 // 자료형에 따라 증가되는 byte수 달라.  


5. 인수 전달 방법

- 값에 의한 전달(call by value)

// 인수로 전달되는 변수가 가지고 있는 값을 함수 내의 매개변수에 복사하는 방밥, 복사된 겂으로 초기화된 매개변수는 인수로 전다로딘 변수와는 완전히 별개의 변수가 됨. 매개변수의 조작은 인수로 전달되는 변수에 아무런 영향을 미치지 않음. 


#include <stdio.h>  

void local(int);  

 

int main(void)

{

    int var = 10;

    printf("변수 var의 초깃값은 %d입니다.\n", var);  

 

    local(var);

    printf("local() 함수 호출 후 변수 var의 값은 %d입니다.\n", var);

    return 0;

}  

 

void local(int num)

{

    num += 10;

}


변수 var의 초기값은 10입니다.

local() 함수 호출 후 변수 var의 값은 10입니다.


- 참조에 의한 전달(call by reference)

// 변수의 값을 전달하는 것이 아닌, 해당 변수의 주소값을 전달함. 즉, 함수의 매개변수에 인수로 전다로딘 변수의 원래 주소겂을 저장. 인수로 전달된 변수의 값을 함수 내에서 변겅할 수 있게 됨. 


#include <stdio.h>  

void local(int*);

 

int main(void)

{

    int var = 10;

    printf("변수 var의 초깃값은 %d입니다.\n", var);  

 

    local(&var);

    printf("local() 함수 호출 후 변수 var의 값은 %d입니다.\n", var);

    return 0;

}  

 

void local(int* num)

{

    *num += 10;

}  


변수 var의 초기값은 10입니다.

local() 함수 호출 후 변수 var의 값은 20입니다.



6. 포인터의 포인터

- 이중 포인터


- void 포인터 // 주소값 저장 외 아무것도 할 수 없음. 명시적 타입 변환 작업 후 사용해야함. 

int num = 10;         // 변수 선언

void* ptr_num = &num; // void 포인터 선언  

 

*(int*)ptr_num = 20;  // void 포인터를 통한 메모리 접근  

printf("void 포인터 ptr_num가 가리키는 주소에 저장된 값은 %d입니다.\n", *(int*)ptr_num);


- 함수 포인터
void (*ptr_func(int, int);


* 구구단 
#include <stdio.h>

double add(double, double);
double sub(double, double);
double mul(double, double);
double div(double, double);
double calculator(double , double, double (*func)(double, double));

int main(void)
{
double (*calc)(double, double) = NULL; // 함수 포인터 선언 
double result = 0;
double num01 = 3, num02 = 5;
char oper = '*';

switch (oper)
{
case '+':
calc = add;
break;
case '-':
calc = sub;
break;
case '*':
calc = mul;
break;
case '/':
calc = div;
break;
default:
puts("사칙연산(+, -, *, /)만을 지원합니다.");
}

result = calculator(num01, num02, calc);
printf("사칙 연산의 결과는 %lf입니다.\n", result);
return 0;
}

double add(double num01, double num02)
{
return num01 + num02;
}

double sub(double num01, double num02)
{
return num01 - num02;
}

double mul(double num01, double num02)
{
return num01 * num02;
}

double div(double num01, double num02)
{
return num01 / num02;
}

double calculator(double num01, double num02, double (*func)(double, double))
{
return func(num01, num02);
}





 




'언어 > C' 카테고리의 다른 글

문자 입출력 함수  (0) 2018.11.12
C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02

1. 1차원 배열 

- 0부터 시작.

- 같은 타입의 변수들로 이루어진 집합.


ex) int greade[3]={50,70,40};

    int arr[]={1,2,3};


#include <stdio.h>


int main()

{

int grade[3]={50,70,40};

int hap=0;

for(int i=0; i<3; i++)

{

hap+=grade[i];

}

printf("합계는 %d, 평균은 %f", hap, (double)hap/3 );

}



2. 배열의 특징

- 배열의 길이를 선언할 때는 반드시 상수를 사용.

- 배열 요소의 인덱스는 언제나 0부터 시작.

- c컴파일러는 배열의 길이 신경x -> 선언 x는 초기화하면 값에 그대로 적용... -> 개발자가 신경쓰길!



3. 다차원 배열

- 2차원 배열

  int arr[2][3]={10, 20, 30, 40, 50, 60};

  int arr[2][3]= {

   {10, 20, 30},

   {40, 50, 60}

  }



'언어 > C' 카테고리의 다른 글

문자 입출력 함수  (0) 2018.11.12
C언어 포인터  (0) 2018.11.07
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02

1. C언어의 함수

- 표준 함수 

- 사용자 정의 함수


2. 함수를 사용하는 이유는?

- 반복적인 프로그래밍을 피할 수 있음.

- 모듈화로 인해 코드 가독성이 좋아짐.

- 유지보수에 용이.


3. 함수의 정의 


int sum(x,y)

{


}


=> 반환자료형 int // 함수가 모든 작업을 마치고 반환하는 데이터의 타입 명시.

     함수이름 sum // 함수 호출을 위한 이름 명시

     매개변수 목록 (x,y) // 함수 호출 시 전달되는 인수의 값을 저장할 변수들을 명시

     함수몸체 { } // 함수의 고유 기능을 수행하는 명령문의 집합.


// 함수 호출 시에는 여러 개의 인수를 전달할 수 있지만, 반환값은 1개를 넘지 못한다. 

   인수나 반환값이 하나도 없는 함수도 존재 가능. 


* 함수의 원형 선언

반환타입 함수이름 (매개변수타입);


 함수를 사용한 예시



#include <stdio.h>
int num(int,int); // 함수의 원형 선언
int main(void)
{
int result;
result=num(5,3); // 함수의 호출
printf("두 수 중 더 큰수는 %d입니다.\n", result);
result=num(3,1);
printf("두 수 중 더 큰수는 %d입니다.\n", result);
result=num(7,5);
printf("두 수 중 더 큰수는 %d입니다.\n", result);
return 0;
}
int num(int num1, int num2) // 함수의 정의
{
if(num1>=num2)
{
return num1;
}
else
{
return num2;
}
}



4. 변수의 유효 범위
- 지역 변수(local variable) // 블록 내에서 선언된 변수, 초기화 x시 쓰레기값.
- 전역 변수(global variable) // 외부에서 선언된 변수, 자동 0으로 초기화.
- 정적 변수(static variable) // 단 한 번만 초기화.
- 레지스터 변수(register variable)


5. 메모리의 구조
- 코드(code) 영역
- 데이터(data) 영역
- 스택(stack) 영역
- 힙(heap) 영역


6. 재귀 호출(recursive call)
- 함수 내부에서 함수가 자기 자신을 또다시 호출하는 행위.

int rSum(int n)

{

    if (== 1)           // n이 1이면, 그냥 1을 반환함.

    {

          return 1;

    }

    return n + rSum(n-1); // n이 1이 아니면, n을 1부터 (n-1)까지의 합과 더한 값을 반환함.

}




'언어 > C' 카테고리의 다른 글

C언어 포인터  (0) 2018.11.07
C언어 배열  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02
c언어 기본  (0) 2018.11.02

1. 조건문 

- if문

if (조건식) 

{

    조건식의 결과가 참일 때 실행하고자 하는 명령문;

}


- if / else문

if (조건식) 

{

    조건식의 결과가 참일 때 실행하고자 하는 명령문;

else 

{

    조건식의 결과가 거짓일 때 실행하고자 하는 명령문;

}


- if / else if / else문

if (조건식1) 

{

    조건식1의 결과가 참일 때 실행하고자 하는 명령문;

else if (조건식2) 

{

    조건식2의 결과가 참일 때 실행하고자 하는 명령문;

else 

{

    조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;

}


- 삼항 연산자에 의한 조건문

조건식 ? 반환값1 : 반환값2


- switch문 // case와 default뒤에 break중요!!

switch (조건 값

{

    case 값1:

        조건 값이 값1일 때 실행하고자 하는 명령문;

        break;

    case 값2:

        조건 값이 값2일 때 실행하고자 하는 명령문;

        break;

    ...

    default:

        조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;

        break;

}


ex1)

int num = 2;  

switch (num)

{

    case 1:

        printf("입력하신 수는 1입니다.\n");

        break;

    case 2:

        printf("입력하신 수는 2입니다.\n");

        break;

    case 3:

        printf("입력하신 수는 3입니다.\n");

        break;

    case 4:

        printf("입력하신 수는 4입니다.\n");

        break;

    case 5:

        printf("입력하신 수는 5입니다.\n");

        break;

    default:

        printf("1부터 5까지의 수만 입력해 주세요!");

        break;

}  


ex2)

char ch = 'a';  

switch (ch)

{

    case 'a':

    case 'A':

        printf("이 학생의 학점은 A입니다.\n");

        break;

    case 'b':

    case 'B':

        printf("이 학생의 학점은 B입니다.\n");

        break;

    case 'c':

    case 'C':

        printf("이 학생의 학점은 C입니다.\n");

        break;

    case 'd':

    case 'D':

        printf("이 학생의 학점은 D입니다.\n");

        break;

    case 'f':

    case 'F':

        printf("이 학생의 학점은 F입니다.\n");

        break;

    default:

        printf("학점을 정확히 입력해 주세요!(A, B, C, D, F)");

        break;

}



2. 반복문 

- while문 

while (조건식)

{

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;

}


- do / while문  

// 결과와 상관없이 무조건 1번은 루프 반복 

   why? 조건을 먼저 검사하기 때문.


do {

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;

while (조건식);


- for문

for (초기식; 조건식; 증감식) 

{

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;

}


3. 기타 제어문 

- continue문 

// 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뜀.

ex) 3의 배수를 제외하고 출력하는 것.

int i;

int except_num = 3;  

 

for (= 1; i <= 100; i++)

{

    if (% except_num == 0)

    {

        continue;

    }

    printf("%d ", i);

}  // if문에서 3의배수라면 continue를 만나서 if문뿐만 아니라 for까지 다 건너뛴다. 따라서 , 3의 배수는 화면에 출력되지 않는다. 


- break문

// 해당 반복문을 완전히 빠져나감. 

ex)

int start_num = 1;

int end_num = 10;

int sum = 0;  

 

while (1)

{

    sum += start_num;

    if (start_num == end_num)

    {

        break;

    }

    start_num++;

}




<참고 http://tcpschool.com/c/c_function_basic >

'언어 > C' 카테고리의 다른 글

C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 기본2  (0) 2018.11.02
c언어 기본  (0) 2018.11.02
C프로그래밍  (0) 2018.11.01

1.  논리 연산자 

- 주어진 논리식을 판단하여, true와 false로 결정하는 연산자.

 논리 연산자

설명 

&& 

논리식 모두 참이면 1반환 (and)

 ||

하나라도 참이면 1반환 (or) 

 !

결과가 참이면 0을 , 거짓이면 1반환 (not) 



2. 삼항 연산자

- 조건식? 반환값1: 반환값2

ex)  result=(num1>num2)? num1:num2;



3. 쉼표 연산자

- 두 연산식을 하나의 연산식으로 나타내고자 할 때

- 둘 이상의 인수를 함수로 전달하고자 할 때

ex) int num1=15, num2=8;

     printf("첫 번째 수는 %d이고, 두 번째 수는 %d입니다.\n", num1, num2);



4. sizeof 연산자

- 변수나 상수가 피연산자로 전달되면, 해당 변수나 상수에 해당하는 타입의 크기를 반환. 



5. 포인터 연산자

- 주소 연산자(&) // 변수 이름 앞에 사용, 해당 변수의 주소값을 반환 , 앰퍼샌드, 번지 연산자

- 참조 연산자(*) // 포인터의 이름이나 주소 앞에 사용, 포인터에 가리키는 주소에 저장된 값을 반환, 참조 연산자





'언어 > C' 카테고리의 다른 글

C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
c언어 기본  (0) 2018.11.02
C프로그래밍  (0) 2018.11.01

1. printf() 함수

- 데이터를 양식에 맞게 출력. 

// f는 formatted의 약자이며, 서식화된 출력을 지원한다는 의미.

// printf("나는 %d시에 일어나요",12);


2. escape sequence (이스케이프 시퀀스)

 시퀀스

 출력내용

\'

작은따옴표 

\" 

큰따옴표 

\n

줄바꿈(new line) 

\t

수평 탭(tab) 

\v

수직 탭(tab) 

\\

백슬래시(\) 

\a

경고음 발생  



3. 서식지정자 (format specifier)

 서식지정자

출력 데이터 형태 

 %c

하나의 문자

 %s

문자열

 %d

부호 있는 10진 정수 

 %f

고정 소수점으로 표현한 실수(소수점 이하 6자리까지)

 %o

부호 없는 8진 정수

 %u

부호 없는 10진 정수 

 %x

부호 없는 16진 정수 

 %e

부동 소수점으로 표현한 실수 



4. scanf() 함수

- 다양한 서식에 맞춰 입력받게 해주는 함수 

// printf("첫 번째 정수를 입력하세요:");

   scanf("%d", &num1); 



5. 변수(variable)

- 데이터를 저장할 수 있는 메모리 공간.



6. 비트(bit)와 바이트(byte)

- 8bit= 1byte = 한 문자를 표현할 수 있는 최소 단위.



7. 변수 선언

// int num01, num02;

이렇게 변수의 타입이 같으면, 동시에 선언 가능  



8. 상수(constant)

- 데이터를 저장할 수 있는 메모리 공간

- 프로그램이 실행되는 동안 저장된 데이터를 변경 못함. // 이것이 변수와의 차이점


 (1) 리터럴 함수(literal constant)

     - 저장된 메모리 공간을 가리키는 이름이 없음. 

        123 // 정수형 리터럴 상수

        'a' // 문자형 리터럴 상수 


 (2) 심볼릭 상수(symbolic constant)

      - 선언과 동시에 초기화 필수.

      - const 또는 매크로 이용 선언

          const int MAX=10; // const 키워드를 이용한 심볼릭 상수

          #define MAX 10; // #define 선행처리 지시자를 이용한 매크로 심볼릭 상수 



9. 타입 변환(type conversion)

- 하나의 타입을 다른 타입으로 바꾸는 행위


  (1) 묵시적 타입 변환(자동 타입 변환, implicit type conversion)

       


  (2) 명시적 타입 변환(강제 타입 변환, explicit type conversion)



'언어 > C' 카테고리의 다른 글

C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02
C프로그래밍  (0) 2018.11.01

<실행 파일 생성 순서>

<참고 http://tcpschool.com/c/c_intro_programming> 



1. 소스파일

- 파일의 확장자는 .c





2. 선행처리기 // 선행처리 문자(#)로 시작하는 선행처리 지시문 처리 작업

- 사용법 

  #include <stdio.h>

  #include "myStudio.h"

선행처리 지시자 

설명 

#include 

외부에 선언된 함수나 상수 등을 사용하기 위해 

 #define

함수나 상수를 단순화해주는 매크로를 정의 

#undef 

#define 지시자로 이미 정의된 매크로를 삭제 

#line

__LINE__매크로와 __FILE__ 매크로를 재정의 

#error

지정한 오류 메시지 출력, 컴파일 과정을 중단할때 사용. 

#pragma

os별로 달라지는 지시사항을 컴파일러에 전달할때 사용. 

#if, #ifdef, #ifndef, #elif, #else, #endif

조건부 컴파일 지시자  




3. 컴파일러 

- 컴퓨터가 알아볼 수 있는 기계어로 변환. 




4. 오브젝트 파일 

- 확장자는 .o나 .obj 



5. 링커(linker)에 의한 링크

- 하나 이상의 오브젝트 파일과 라이브러리 파일, 시동 코드 등을 합펴 하나의 파일로 만드는 작업을 링크(link)


6. 실행파일 생성.

- 확장자는 .exe




<C프로그래밍의 특징>

1. 기본 단위는 함수

- 반드시 main()함수 먼저 호출.


2. 함수 내의 각 명령문은 세미콜론으로 종결.


3. 대소문자 구분 


4. 주석 

- 한줄 : //

- 여러줄 : /* */


'언어 > C' 카테고리의 다른 글

C언어 배열  (0) 2018.11.06
C언어 함수  (0) 2018.11.06
C언어 제어문  (1) 2018.11.02
C언어 기본2  (0) 2018.11.02
c언어 기본  (0) 2018.11.02

+ Recent posts