달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Programming Language/C언어 공부 기록 '에 해당되는 글 3

  1. 2017.11.22 c언어 함수
  2. 2017.11.22 c언어 1~2주차
  3. 2017.11.21 상수와 기본 자료형과 그외 등등등
2017. 11. 22. 17:25

c언어 함수 Programming Language/C언어 공부 기록 2017. 11. 22. 17:25

함수는 독립적으로 수행하는 프로그램 단위를 말한다


C언어는 여러 개의 함수들로 이루어지고 

프로그램에서 반복적으로 수행되는 기능을 함수로 만들어서 호출한다 .


C언어에서 자료형과 함수는 짱짱 중요하다고 생각한다.


함수는 문제 해결의 방법이다 --> 주어진 문제를 작은 문제, 즉 여러 함수로 나누어서 생각할 수 있으므로 함수를 만드는 것은

   문제 해결의 하나의 방법이다 .


함수 이용의 장점 

함수로 구성된 프로그램은 함수 단위로 구성되어 있어, 읽기 쉽고, 이해하기 쉽다. 

이미 정의된 함수는 여러번 호출이 가능하므로 소스의 중복을 최소화해서 프로그램 양을 줄이는 효과가있다 .



C프로그램 함수의 종류에는...


1)주(main)함수 

프로그램의 시작과 종료를 나타내는 함수로, 프로그램에 main()함수는 꼭 있어야 한ㄴ 함수이며, 사용자 정의 함수라 할 수 있다.


2)사용자 정의 함수: 사용자(프로그래머)가 문제를 분석하여 필요한 기능으로 분류하여 기능열로 코딩하고자 할 때 만드는 함수다

 ex)) add(), swap()


3)시스템 라이브러리 함수: 많이 사용하는 기능의 함수들을 시스템에서 미리 만들어 놓고 사용자가 사용할 수 있도록 제공하는 함수다 


 

가장 중요한건 내가..함수를 작성할줄 알아야..내가 만들수있는 능력이 있어야 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 가져다

쓸수있다는거.. 



매개 변수라는건 함수와 함수사이의 서로 주고받는 데이터가있다면 그런 변수 그런거를 매개변수라고 한다 

&(앤퍼센트~)


함수(function, 모듈, 메소드(c++,Java))


매개변수 없는 함수 만들기

print만하고 돌아오거나.. 그런식 


void hello(void) 

void main()

{

hello();//함수 소출

}

//함수 정의 

void hello()

{

printf("Hello c!");

return;


}

add는부를때만생성되서만들고 다쓰면 돌아가서 없어지는 효율성..그래서 call by value 

 


매개변수(parameter, 인자, argument)

함수와 함수 사이에 주고 받는 값(예: 변수값, 상수값)


변수(variable)

프로그램에서 데이터를 저장하는 공간

지역변수: 함수 지역 안에서 선언된 변수는 다른 변수에서 그 내용을 보거나 수정 할 수 없음 


매개변수없는함수 

매개변수 있는 함수 만들기 

지역변수

함수 호출 방법: call by value


return값은 1개만 가지고올수있으음?~main 이라는 명령어.. 




[함수 호출 방법]

값에 의한 호출

주소에 의한 호출 (call by addres)

해결방법 

main 함수에 있는 변수의 주소값을 가지고

 swqp()함수를 호출하면 swap()함수에서 main함수의 변수값을 바꿀 수 있음

(포인터 변수 사용)

바꾸기 위해서는 역참조 연산자를 사용해야함 ..


*두가지용법

1)포인터 변수 선언

2)역참조 연산자

포인터 변수: 주소를 값으로 가지는 변수 

주소값을 저장하기 위해서는 포인터 변수가 필요함 


포인터 변수는 주소값만 값으로 가질 수 있음 

int *p = &a 

p = &a 

역참조 연산자: 포인터 변수 선언 후에 문장중에 포인터 변수 앞에 *가 오면

 (*p)포인터 변수가 가리키는 main변수의 값을 변경할 수 있음 

'Programming Language > C언어 공부 기록 ' 카테고리의 다른 글

c언어 1~2주차  (0) 2017.11.22
상수와 기본 자료형과 그외 등등등  (0) 2017.11.21
:
Posted by Gongdile
2017. 11. 22. 14:34

c언어 1~2주차 Programming Language/C언어 공부 기록 2017. 11. 22. 14:34

내용이 좀 두서가없다. 추후에 더 정리할 예정 

c언어 


일반적인 프로그램 구조(모듈화)


모듈 --큰문제를 기능별 작은 단위로 나눈 것 

 독립적으로 수행할 수 있는 프로그램의 단  위 


C언어 구조 : C프로그램은 여러 개의 함수로 구성됨 


함수 = 모듈 

독립적으로 수행할 수 있는 프로그램 단위 



주석(comment)


상수 constant  프로그램내에서 항상 고정된 값을 의미

변수 variable 변할 수 있는 수를 의미함 


숫자 상수 

정수 실수 

문자 상수

문자 문자열 


변수 c언어에서 변수란  데이터를 메모리에 저장하는 공간

   데이터를 처리하기 위해서 데이터 타입을 이용해 변수를 선언 


데이터타입이란?


데이터 처리를위해서 데이터를 저장해야함 

데이터를 종류에 따라 분류하여 적절한 크기의 공간에 저장하기 위해서 데이터 타입이 필요하다.

변수에 저장되는 값의 종류를 데이터타입 또는 간단히 자료형 


기본 자료형(basic type) int char float 


유도 자료형 (derived type) 배열 구조체 공용체 


변수 선언 

변수 프로그램에서 자료 값을 임시로 기억할 수 있는 저장 공간

컴퓨터의 메모리인 RAM에 저장 

변수명은 자료값을 저장하는 저장 장소의 이름 

같은 데이터 타입 변수 여러 개 선언 시 콤마(,)사용 


정수형

정수형은 큰 의미에서 문자형 포함 

좁은 의미에서는 문자형 제외한 순수하게 정수 저장하는 자료형 

 

문자형은 아스키코드로 저장되는 문자는 정수값으로 연산이 가능하기 때문에 


char c1='a';

c1= c1+1;

printf("%c",c1); //b 

printf("%d",c1); //98   %d 10진수로 찍어라~ 


부동소수형


float double long double 


float 은 4바이트 32비트 

double은 8바이트 64비트 


long double은 double보다 더 큰 저장공간을 할당하려는 의도에서 만들어졌으나 컴파일러마다 다름


sizeof연산자 


저장공간의 크기를 알 수 있는 연산자로sizeof를 이용 

연산다 sizeof 다음의 변수 이름으로 둘러싸는 괄호는 생략 가능 

결과 값은 같은 크기의 바이트 값 

 sizeof 이용법

sizeof(변수)

sizeof 변수 

sizeof(자료형 키워드) 


전처리기(preprocessor)

전처리는 컴파일러가 프로그래밍 언어를 기계어로 바꾸기 전에 처리해야할 명령을 먼저 수행하는것~ 

다양한 라이브러리를 작업중인 소스파일에서 사용할 수 있도록 헤더파일을 포함


#include<stdio.h> 이렇게..!  


전처리기중 #define이라는애가있음 

#define 문자열1 문자열2 

컴파일 전에 소스파일의 문자열1을 문자열2로 치환 


printf함수 여러개의 데이터타입을 형식화 시켜서 출력하는 함수다 

%d --> 정수를 10진수로 출력 1 -2 10

%f --> 소수점이 있는 실수로 출력 

%c --> 문자 형태로 출력 

%s --> 문자열 형태로 출력 


scanf 함수 여러 개의 다양한 데이터타입을 한 번에 입력 받을수 있는 함수 


double형은 %lf로 받음

 예제 마일을 킬로미터로 변환     


'Programming Language > C언어 공부 기록 ' 카테고리의 다른 글

c언어 함수  (0) 2017.11.22
상수와 기본 자료형과 그외 등등등  (0) 2017.11.21
:
Posted by Gongdile

꾸준히 C를 공부해 보겠다 !! 

근데 꾸준히라는 말이 제일 어려운것같다..ㅠㅠ 


지금 보고 있는 책은 알고리즘이 보이는 그림책인데 

그림으로 쉽게 나와있어서 개념부분을 간단간단 확인할 수 있어서 참고하는 중이다.



캐스트 연산자 

'(int)'와 같이 형 이름을 괄호() 로 둘러싼 것을 값이나 변수 앞에 쓰면 

그 변수를 특정형으로 변환할 수 있다.

 이런 조작을 형 캐스트라고 한다.  괄호 ()를 캐스트 연사자라고 한다. 


형을 특정형으로 바꾸는거를 형 캐스트라고 하는것이고 그때 괄호 ()를 캐스트 연산자라고 하는거다.



배열 


동일한 형으로 된 변수들을 하나로 묶은 것을 배열이라고 함 


배열은 여러 개의 동일한 형으로 된 변수를 하나로 묶은거다 


배열 선언은 


int a[4]; 이런식으로 하는데 여기서 int는 형을 말하고 a는 배열명 4는 배열의 크기(요소의 수 ) 를 말한다.


여기서 첨자와 요소에 대해 알아야 하는데


첨자--> 0부터 시작하는 배열의 인덱스 번호를 만든다 

요소-->하나하나의 상자를 a[0],a[1],a[2],a[3]로 나타낸다 


==> 첨자는 0부터 시작하기 때문에 요소 개수보다 하나 작은 값이 된다.


그래서 int a[4];를 실행하면 배열의 크기가 4인 a라는 이름의 int형 배열을 만들어~ 하고 4개의 공간을 만드는데 

인덱스 번호가 0부터 시작해서 

4개의 방 이름이 a[1] a[2] a[3] a[4] 가 아니라 

    a[0] a[1] a[2] a[3]로 시작한다. 

첨자에 '0' ~ '요소 개수-1' 이외의 값을 지정하면 실행시 오류가 발생하므로 주의해야한다.



---------------------------------------------------------------------------------------------

포인터 변수에 대해 정리해보기! 


데이터가 있는 장소를 기억하는 놈이 포인터 변수다 


변수 등이 저장되어 있는 위치(주소)를 값으로 값으로 가지는 변수를 포인터 변수라고 한다.

포인터 변수에도 형이 구별되어 있다.


책에 나와있는 예시를 보자 

 char형의 포인터 변수p를 사용하려면.. 일단 선언해줘야겠지?

1.포인터 변수 p의 선언 

char *p; 또는 char* p;

모두 같은 뜻이다 


2. 포인터 변수 p에 변수 a의 주소를 대입 

char a; 

char *p;

p = &a; -->여기서 &a는 변수 a의 주소를 의미한다. 


3.포인터 변수 p가 가리키는 변수 a의 값을 참조 


포인터 변수명 앞에 *를 붙이면 그 포인터 변수가 가리키는 곳의 데이터를 참조할 수 있다. 

char a = 3;

char  *p;

p = &a;


여기서 예를 들어서 

char b = *p;라고 한다면 

char b 안에 포인터 변수 p가 가리키는 변수a의 값이 들어간다고 생각하면 된다.

왜????? p =&a; 라는건 포인터 변수 p에 변수 a의 주소를 대입한거라 


포인터 변수 p를 사용하여 변수 a의 값을 변수 b에 대입한거라고 보면 된다 .


<포인터와 배열>

배열의 이름 자체에는 배열의 첫 번째 요소를 가리키는 포인터 역할을 한다. 

그래서 &(주소를 구하는 기호)를 사용할 필요가 없다.


int a[4]; 에서 a는 a[0]에 대한 포인터로 사용할 수 있다. 


이거 꼭 기억해 두기 !! 


<포인터를 사용한 배열의 참조>

예를 들어서 int a[4];를 선언했다고 하자. 

int a[4] = {10, 20, 30, 40};


  10

    20

 30

 40

a[0]                                            a[1]                                             a[2]                                           a[3]


여기서 배열 a[]가 있을때 a자체는 --> a[0]에 대한 포인터 이므로 => *a는 a가 저장되어 있는 장소의 값 a[0]이 된다.!! 


그래서... a[1]을 *(a+1), a[2]는 *(a+2)라고 쓸 수 있다. 


==> 위에 배열 예시를 들면 *(a+3)은 40이다.. 

   *a+3은  13이다.


<문자와 문자열>


프로그램상에서 문자표현에는 작은 따옴표가 사용된다.

문자열은 ""로 둘러싼다. 


고정 문자열은 이런 구조로 되어있다 

"Hello"

 ' H '

' e '

' l ' 

 ' l ' 

' o '  

' \0 ' 


\0은 문자열이 여기서 끝난다는 것을 나타낸다. 화면에는 표시안됨 \0을 한 문자로 취급함 

\0이 NULL문자를 의미하는 기능을 가짐

문자열을 저장하는 변수를 준비하려면 다음과 같이 선언한다.


char s[6];

 변수s에 문자열의 길이에 null문자 하나를 더한 수 이상으로 지정한다.


문자열을 초기화하려면 다음과 같이 한다 .

char s[6]= "Hello";

[]안을 생략하면 문자수+1 (6개)만큼의 상자가 자동으로 만들어집니다.


char s[] = "Hello"; 


문자열 변수에 값을 넣을때 =를 사용할 수 있는 경우는 초기화할때뿐임 

그외의 경우에 대입할때는 strcpy()함수를 사용한다.


char s[10];

strcpy(s, "Hello");

여기서 s는 위에서 선언한 s[10]의 첫 번째 주소를 가리킨다.



<키보드 입력>

키보드로 입력한 데이터를 변수나 문자열 배열에 저장하는 방법을 알아보는거임 


1. scanf() 함수 


scanf() 함수는 키보드에서 입력한 데이터를 지정한 서식으로 변환해서 변수나    배열에 저장하는 거임 


int a;

scanf("%d", &a); 

 근데 문자열의 경우에는 배열명은 배열의 첫번째 요소의 주소가 되기 때문에 &을 붙일 필요 없다.

char s[30];

scanf("%s",s);


여러 데이터를 한번에 입력할 수도 있다.(입력 문자는 스페이스로 구분한다.)

그래서 스페이스를 포함하는 문자열은 제대로 읽을 수 없고, 또 입력문자와 지정한 서식이 맞는다는 보장이 없다.


2.gets() 함수 

gets()함수는 키보드에서 입력한 한주르이 문자열을 문자 배열로 저장한다. 

스페이스도 읽을 수 있다.  


char s[30];

gets(s);


3.getchar() 함수 

getchar() 함수는 키보드에서 입력한 문자 중 한 문자만 변수에 저장한다.


int c;

c = getchar();


 









 


'Programming Language > C언어 공부 기록 ' 카테고리의 다른 글

c언어 함수  (0) 2017.11.22
c언어 1~2주차  (0) 2017.11.22
:
Posted by Gongdile