함수(Function)(1)


 함수는 입력된 값을 이용해 결과를 반환해 주는 프로그램 코드로, 앞에서 공부할때 썼던 main함수, scanf, printf 등도 함수에 속합니다. 함수의 종류는 시스템 정의 함수

(시스템 라이브러리)와 사용자 정의 함수가 있습니다.


- 반환값, 매개 변수

 반환값은 리턴값이라고 말하기도 하는데, 리턴할 값을 말합니다. 앞에서 공부하면서 거의 사용하지는 않았는데, 아래 처럼 int형으로 main함수를 사용했을때, "return 0;"이 함수 종료 후 0을 반환하겠다는 뜻입니다. 반환값이 필요없을때는 void로 써주면 됩니다.

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

int main() // 매개변수가 필요하지 않을때는 main 함수처럼 ()로 써주면 됩니다.
{
printf("hello \n");

return 0; // 함수 종료 후 0을 반환
}

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

 매개변수는 함수에서 사용할 인자값으로 쉽게 말해 형식이라고 생각하면 이해하기 쉽습니다. 아래 사용자 정의 함수의 코드에서 plus 함수와 multi 함수의 int a, int b가 매개변수입니다.

시스템 정의 함수 

 C언어에서 미리 정의해 놓은 함수로 scanf, printf 등이 있습니다. 헤더파일을 include하면 사용할 수 있습니다.


- 사용자 정의 함수

 사용자가 직접 정의하는 함수입니다. 함수의 모양을 선언하는 과정인 함수원형 선언과,  함수 구현 과정이 있습니다. 함수 원형 선언은 헤더파일 밑에, 함수 구현은 main 함수 밑에 하면됩니다. 아래 코드는 덧셈과 곱셈을 하는 함수 2개를 직접 정의해 구현해서 사용하는 코드입니다.

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

#include <stdio.h>
#pragma warning(disable:4996)

int a, b; // plus함수와 multi함수에서 쓸 a,b를 선언
int plus(int a, int b); // plus 함수 원형 선언
int multi(int a, int b); // multi 함수 원형 선언

int main()
{
int x, y; // 위에 a,b를 선언하지 않고 여기서 a,b로 선언해서 사용해도 무관
  int result; // 함수를 호출해 리턴값을 저장할 변수 선언

printf("x,y를 입력하시면 합과 곱이 출력됩니다. \n");
printf("x를 입력하세요 : ");
scanf("%d", &x);
printf("y를 입력하세요 : ");
scanf("%d", &y);
result = plus(x, y); // plus함수 호출 후 리턴값 저장
printf("%d + %d = %d \n", x, y, result);
result = multi(x, y); // multi함수 호출 후 리턴값 저장
printf("%d * %d = %d \n", x, y, result);

return 0;
} //close main()

int plus(int a, int b) // multi 함수 구현
{
return a + b; // 리턴값으로 a+b를 리턴
}

int multi(int a, int b) // multi 함수 구현
{
return a * b; // 리턴값으로 a*b를 리턴
}
------------------------------------------------------------------------------------------
 아래 그림이 위 코드의 결과입니다. 사실 아래 처럼 간단한 연산은 굳이 함수를 정의해서 사용할 필요가 없지만, 복잡한 연산이나 복잡한 처리는 사용자 정의 함수를 이용하면 좀 더 실용적인 코딩을 할 수 있을 것입니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




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

[C] 매개변수 전달 방식  (0) 2016.12.20
[C] 함수(2)  (0) 2016.12.20
[C] 기타 제어문  (0) 2016.12.19
[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17

기타 제어문

 

 기타 제어문은 주로 반복문에서 사용하는 제어문으로 break와 continue가 있습니다.


- break

 break문은 동작을 멈추고 끝내는 제어문으로, 앞에서 공부할 때 이미 사용한 적이 몇 번 있습니다.  break문은 반복문 외에도 switch문에서도 사용합니다. 사용 형태는 다음과 같습니다.

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

반복문 또는 switch문{

(중략)

break;

(중략) // break문 밑에 코드는 실행되지 않고 종료

}

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


- continue

 continue문은 반복문에서  현재 반복을 중단하고, 다음 반복을 계속할 때 사용하는 제어문입니다. continue문을 사용하면 continue문 밑에 코드는 실행되지 않고, 다음 반복으로 넘어갑니다. 사용 형태는 다음과 같습니다.

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

반복문{

(중략)

continue;

(중략) // continue문 밑에 코드는 실행되지 않고 다음 반복으로 넘어감

}

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


지금 까지 배운 조건문과 기타 제어문을 이용해 업 다운 게임을 만들어 보았습니다.

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

#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
int okay; // 정답으로 설정할 변수 선언
int input; // 정답을 맞힐 변수 선언
int i; // 줄바꿈 문자에 사용할 변수를 선언
int count = 0; // 몇번만에 맞혔는지를 기록할 변수를 선언하고 초기화

printf("정답을 설정하세요 : "); 
scanf("%d", &okay);   // 정답(문제)을 입력
for (i = 0; i < 50; i++) // 정답을 입력받은 후 보이지않게 50번 줄바꿈 문자를 삽입
{
printf("\n"); 
}

while (1)
{
printf("정답을 입력하세요 : ");
scanf("%d", &input); // 답을 맞힙니다.
if (input == okay){ // 답을 맞힐경우 실행
count++; // count에 1을 더하지않으면, 정답을 맞힐경우 횟수가 증가하지 않기때문에 맞힐경우에도 1을 증가시킵니다.
printf("%d번만에 정답을 맞히셨습니다. \n", count);
break; // 종료
}
else if (input > okay)  // 정답보다 작을 경우 실행
{
printf("입력한 숫자보다 작습니다!\n");
count++; // 틀린 답을 입력할 경우 count를 1증가
}
else if (input < okay)  // 정답보다 클 경우 실행
{
printf("입력한 숫자보다 큽니다!\n");
count++; // 틀린 답을 입력할 경우 count를 1증가
}
}// close while
}

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

위의 코드를 실행하면 정답을 설정하라는 문자열이 출력되고 설정할 정답을 입력합니다.

정답을 설정하고나면, 50번 반복을 통해 출력된 줄바꿈 문자에의해 아래에 문자열이 출력됩니다.

정답을 입력하게되면 값을 비교해 큰지, 작은지 출력하고 정답을 맞히면 몇번만에 맞혔는지 출력하고 프로그램이 종료됩니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook



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

[C] 함수(2)  (0) 2016.12.20
[C] 함수(1)  (0) 2016.12.20
[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16

반복문


 반복문은 쉽게 말해 반복을 하기위해 사용하는 문장입니다. 예를들어 printf 함수로 같은문장 또는 1씩 증가하는 문장 10줄을 출력하고싶을 때 일일이 10번을 다 입력해줘야 하지만, 반복문을 이용하면 반복문안에 한번만 입력하면 됩니다. 반복문은 문자열 출력 뿐만아니라, 사용에 따라 다양하게 활용할 수 있습니다. C에서 사용하는 반복문은 for문 while문 do-while문 세 가지가 있습니다.


- for문

 for문은 일정 횟수를 반복하는 경우에 많이 사용합니다. 사용 형태는 다음과 같습니다.

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

for(초기화; 반복조건; 증감연산)
{
반복하면서 처리할 내용
}

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

사용 예)
int i; // for문에서 초기화를 하기때문에 변수 선언만 해줍니다.
for(i=0; i<9; i++)
{
printf("%d의 값 \n",i);
}

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


- while문

 while문은 어떤 조건이 만족하는 동안 반복하는 반복문입니다. while문은 증감연산을 while문 안에 써줘야하고, 반복할 상수를 선언과 동시에 초기화를 해줘야합니다.  사용 형태는 다음과 같습니다.

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

while(조건식)

{
반복하면서 처리할 내용

}

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

사용 예)

int i=0; // for문과 다르게 반복에 이용할 변수 선언과 동시에 초기화

while ( i<10 ) // 조건

{

printf(“Hello World! \n”);

i++; // while문 내부에 써주는 증감연산자

}

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


- do-while문

  do-while문은 실행 후 while문을 실행하는 형태라고 생각하시면 됩니다. 조건에 상관없이 do에 있는 문장을 무조건 실행 한 뒤, 뒤에 있는 while문의 조건에 따라 반복합니다. 사용 형태는 다음과 같습니다. 이때, 주의할점은 while문 뒤에 세미콜론(;)이 붙는다는 겁니다. 세미콜론을 쓰지않을경우 구문 오류가 발생합니다.
------------------------------------------------------------------------------------------
do{
반복하면서 처리하거나 한번만 실행할 내용

}while(조건식);
------------------------------------------------------------------------------------------
사용 예)
int input;
do
{
printf(“Hello World!\n”);
printf(“종료를 원하시면 0을 입력하세요 : ”);
scanf(“%d”, &input);
}while(input!=0); // 0이 아닌경우만 반복
------------------------------------------------------------------------------------------

 지금까지 공부한 내용들을 바탕으로 원하는 구구단을 출력하는 코드를 간단하게 작성해보았습니다. scanf로 원하는 단을 입력받고, 0을 입력했을때 종료하는 코드입니다.
------------------------------------------------------------------------------------------
#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
int num=1; // 구구단은 1단부터 시작해서 1로 초기화
int i;         // for문에서 사용할 변수
while (num != 0) // 0이 아닐경우 반복
{
printf("출력하고싶은 단을 입력하세요(0은 종료) : ");
scanf("%d", &num);
if (num == 0){ // 0을 입력했을경우 실행
printf("0을 입력하셔서 종료됩니다. \n");
break; // 종료
// close if
else{
printf("*****%d단*****\n", num);
for (i = 1; i < 10; i++){ // 1부터 1씩 증가하면서 9까지 반복
printf("%d * %d = %d\n", num, i, num*i);
} // close for
// close else
// close while
} // close main
------------------------------------------------------------------------------------------
 추가로 함수나 반복문 뒤에 주석으로 // close를 일일이 써준 이유는 코드가 복잡해지면 어디가 끝인 지, 어디가 무슨 함수까지인지 등등 헷갈릴 수 있기 때문입니다. 프로그래밍을 처음 시작하시는분들은 추천하는 방법입니다. 주석으로 끝을 표시해주는 게 코드를 보기도 좋고, 괄호를 빼먹는 실수도 줄어들 것입니다.

 아래 그림은 위 코드를 실행 했을때의 결과입니다. 0을 입력하기 전까지는 계속 입력하는 단을 출력하다가, 0을 입력하면 0을 입력했다는 문자열을 출력하고 종료됩니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




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

[C] 함수(1)  (0) 2016.12.20
[C] 기타 제어문  (0) 2016.12.19
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16
[C] 입출력함수, 기본자료형, 형변환  (0) 2016.12.15

조건문

 조건문은 조건에 따라서 동작이 달라지는 문장으로, if-else문과 switch-case문이 있습니다. 상황에 따라서 두 조건문을 이용하면 여러가지를 구현할 수 있습니다.


- if-else문

 if의 뜻은 만일에,만약에 라는 뜻이잖아요? 그 "만일,만약"이라는 조건에 맞으면 실행하는 조건문입니다. if문은 if절과 else절, else if절로 구성됩니다. else if절은 다른 조건의 if라고 보시면 됩니다. 그리고 if절만 사용할 수 있고, else절과 else if절은 무조건 사용해야만 하는건 아닙니다. if괄호안에 조건이 참일 때 if문을 수행하고, else 절은 조건이 거짓일때 수행합니다.

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

if(조건){
조건이 참일 때 할 동작들
}

else if(if와는 다른 조건){

조건이 참일 때 할 동작들

}
else{
if의 조건도 else if들의 조건이 모두 거짓일 때 할 동작들
}

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


 저번에 했던 알파벳 출력을 if-else문을 이용 해 구성해보았습니다. 아래코드는 if문은 대문자를 소문자로 변환, else if문은 소문자를 대문자로 변환, else는 영문이 아닌 문자를 입력했다고 출력해주는 코드입니다.

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

#include <stdio.h>

#pragma warning(disable:4996) // viusal studio에서 scanf 함수를 사용하기위해 사용


int main()

{

char ch; //입력받을 변수선언

printf("영문 대문자는 소문자로, 소문자로는 대문자로 변환합니다.\n문자를 입력하세요 : ");

scanf("%c", &ch); // 입력받는 함수 

if (ch >= 65 && ch <= 90) // 대문자를 입력했을 때

{

printf("소문자로 변환 : %c\n", ch + 32); 

}

else if (ch >= 97 && ch <= 122) // 소문자를 입력했을 때

{

printf("대문자로 변환 : %c\n", ch - 32);

}

else{ // 대문자도 소문자도 아닌 문자를 입력했을 때

printf("영문이 아닌 기타 문자를 입력하셨습니다. \n");

}

}

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

각각 문자를 입력했을 때, 출력되는 결과는 다음과 같습니다.


- switch-case문
switch문은 다중선택구조라고 불리는 조건문입니다. if-else문으로 여러 조건을 부여할 경우 코드가 복잡해지는데, switch문을 이용하면 보다 쉽게 구현할 수 있습니다. 정수식을 입력받아 동작하며, case문의 숫자에따라 실행이됩니다. default는 case문으로 정한 조건을 모두 벗어나는 경우 실행됩니다. 
-------------------------------------------------------------------------------------------
switch(정수식)
{
case <정수값1>:
  할일1;
  break;
case <정수값2>:
  할일2;
  break;
   …
default:
  할일n;
}

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


 break를 쓰지않으면 case를 여러개 묶어서 사용할 수 있습니다.

-------------------------------------------------------------------------------------------
switch(정수식)
{
case 1 :
  할일1;
case 2 : // case 2까지 실행
  할일2;
  break;
   …
default:
  할일n;
}

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


switch문을 활용해 두 수를 계산하는 간단한 계산기를 만들어봤습니다. 소수점 계산을 위해 계산할 두 수를 double형으로 선언하고 소수점 두자리까지만 출력되게 설정하였습니다. 마지막 default절에 main으로 return한 이유는 잘못입력했을 때 다시 처음으로 되돌아가기 위합입니다. 
-------------------------------------------------------------------------------------------
#include <stdio.h>

#pragma warning(disable:4996) // viusal studio에서 scanf 함수를 사용하기위해 사용


int main()

{

int num; // switch문에 사용할 정수값 변수선언

double x, y; // 계산에 사용할 dobule형 변수선언


printf("1)'+' 2)'-' 3)'*' 4)'/' \n계산하고싶은 항목의 번호를 입력해주세요 : ");

scanf("%d", &num); // switch문에 사용할 정수값을 입력받음


switch (num)

{

case 1:

printf("계산할 x,y를 입력하세요 : ");

scanf("%lf %lf", &x, &y); //계산할 x,y를 입력받음

printf("%.2lf + %.2lf = %.2lf \n", x, y, x + y); // 입력받은 x,y와 계산된 결과값 출력

break;

case 2:

printf("계산할 x,y를 입력하세요 : ");

scanf("%lf %lf", &x, &y); //계산할 x,y를 입력받음

printf("%.2lf - %.2lf = %.2lf. \n", x, y, x - y); // 입력받은 x,y와 계산된 결과값 출력

break;

case 3:

printf("계산할 x,y를 입력하세요 : ");

scanf("%lf %lf", &x, &y); //계산할 x,y를 입력받음

printf("%.2lf * %.2lf = %.2lf. \n", x, y, x*y); // 입력받은 x,y와 계산된 결과값 출력

break;

case 4:

printf("계산할 x,y를 입력하세요 : ");

scanf("%lf %lf", &x, &y); //계산할 x,y를 입력받음

printf("%.2lf / %.2lf = %.2lf \n", x, y, x / y); // 입력받은 x,y와 계산된 결과값 출력

break;

default:

printf("잘못된 값을 입력하셨습니다. 1~4번 항목을 선택해주세요. \n");

return main(); // main 함수로 return

}

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

아래 그림은 실행결과입니다 처음에 항목의 번호를 입력하면 switch문의 case 4가 실행이됩니다. x,y를 입력받고 계산을 마친뒤에 break에 의해 프로그램이 종료가 됩니다.

아래그림은 1~4가 아닌 다른값을 입력했을 때 default절이 실행이되고, 메인함수를 리턴해서 다시 처음부터 실행되는걸 확인할 수 있습니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




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

[C] 기타 제어문  (0) 2016.12.19
[C] 반복문  (0) 2016.12.18
[C] 연산자  (0) 2016.12.16
[C] 입출력함수, 기본자료형, 형변환  (0) 2016.12.15
[C] C 기본개념(2) 라이브러리와 변수  (0) 2016.12.12

연산자

 C에서 사용하는 연산자는 산술 연산자, 대입 연산자, 증감 연산자, 관계 연산자와 논리연산자, 비트 연산자가 있습니다.


- 산술 연산자

 산술연산자는 덧셈, 뺄셈, 곱셈, 나눗셈 등을 수행하는 연산자로 아래 표와 같은 연산자 들이 있습니다. 덧셈과 뺄셈은 동일하고 곱셈과 나눗셈은 컴퓨터 계산기에서 사용하는 것과 같이 각각 '*', '/'를 사용합니다.

수학

C언어 

사용 예 

 +

 +

 a+b

 -

 -

 a-b

 ×

 *

 a*b

 ÷

 /

 a/b

정수에서만 가능한 나머지 연산도 있습니다. '%' 기호를 사용하는데 4%3 을 할경우 나머지인 1이 출력됩니다. 추가로 %기호를 printf함수로 출력을 하려면 다음과 같이 %를 두개 써줘야합니다.

printf("%d %% %d");


- 대입 연산자

 대입연산자는 간단합니다. 변수에 값을 저장하거나, 변경할때 사용합니다.

변수=식; 과같이 사용하며, a=7; a=a+1; 과같이 사용합니다.


- 증감 연산자

 증감 연산자는 증가 연산자와 감소 연산자가 있습니다. 증가 연산자는 ++를 이용해 값을 1을 증가시키고 감소 연산자는 --를 이용해 값을 1 감소시킵니다. 주로 조건문이나, 반복문에서 많이 사용합니다. 증감 연산자는 전위 연산과 후위 연산이 있습니다. 아래 코드를 통해 살펴보겠습니다.

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

#include <stdio.h>

int main()
{
int a = 10, b = 10, c = 10, d = 10;
int x;

x = a++;
printf("x : %d a : %d\n", x, a);
x = ++b;
printf("x : %d b : %d\n", x, b);
x = c--;
printf("x : %d c : %d\n", x, c);
x = --d;
printf("x : %d d : %d\n", x, d);
}

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

++와 --를 앞에쓰면 전위연산 뒤에쓰면 후위연산이라고 부르는데, 전위연산은 계산을 먼저하고 값을 저장하고, 후위연산은 계산하기전에 값을 저장 한 후 연산합니다. 그래서 a에서의 후위연산이라 x=10 a=11 b에서는 전위연산이라 x=11 b=11이 저장된걸 확인 할 수 있습니다.



- 관계 연산자

 관계 연산자는 왼쪽과 오른쪽 항을 비교하는 연산자로 아래 표와 같습니다. a와 b가 같다고 할때 "=="으로 쓰는 이유는 대입연산자에서 "="기호를 사용하기 때문입니다. 관계연산자 에서 조건을 만족하면 True인 1을 거짓이면 Fasle인 0을 반환합니다.

 

 수학

 C 언어

 A가 B보다 작다

 A < B

A < B

 A가 B보다 크다

 A > B

A > B

 A와 B가 같다

 A = B

A == B

 A와 B가 같지 않다.

 A ≠ B

A != B

 A가 B보다 작거나 같다.

 A ≦ B

A <= B

 A가 B보다 크거나 같다.

 A ≧ B

A >= B 


- 논리 연산자

 논리 연산자에는 AND, OR, NOT 세가지가 있습니다. 아래와 같이 표기합니다. 관계 연산자와 같이 AND,OR연산자가 참일경우 1을 반환하고 거짓일 경우 0을 반환하며, NOT연산자는 A가 거짓일경우 1을 반환하고 참일경우 0을 반환 합니다.

 논리 연산자

 표기

 의미

 AND

 A && B

 A와 B 모두 참이다

 OR

 A || B

 A또는 B가 참이다

 NOT

 !A

 A는 거짓이다

 AND연산자는 왼쪽항이 거짓인 경우, 오른쪽 항을 계산하지 않으며, OR연산자 역시 왼쪽항이 참이면 오른쪽 항을 계산하지 않습니다.


- 비트 연산자

비트 연산자는 이진수의 계산에서 사용되며, 6가지가 있습니다.

 비트 연산자

표기 

 의미

비트 단위 AND 연산 

 비교하는 비트가 모두 1일경우 1

비트 단위 OR 연산

 비교하는 비트중 하나라도 1일경우 1

비트단위 XOR 연산

 비교하는 비트가 다를경우 1 같을경우 0

비트단위 NOT 연산 

 비트를 반전 1->0, 0->1

왼쪽으로 시프트

<< 

 왼쪽으로 시프트하면 시프트하는만큼 비트가 이동

오른쪽으로 시프트 

>> 

  왼쪽으로 시프트하면 시프트하는만큼 비트가 이동

 시프트 연산은 왼쪽으로 1번 시프트할경우 2배 증가되며 오른쪽은 2배 감소합니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




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

[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 입출력함수, 기본자료형, 형변환  (0) 2016.12.15
[C] C 기본개념(2) 라이브러리와 변수  (0) 2016.12.12
[C] C 기본개념 및 실습환경  (0) 2016.12.07

·출력함수


- 출력함수

 우선 출력함수는 저번에 사용한 printf가 있는데요, print안에 쓰는 포맷에대해 알아보겠습니다.

먼저 printf는 다음과 같은 형식으로 사용합니다. printf("포맷과 내용",변수명);

이때 포맷에는 각각의 자료형에 맞게 사용 해주면됩니다. int형일 경우 %d, double형일 경우 lf, float형일경우 f, 8진수와 16진수로 표현하고 싶을경우 %o,%x 문자 한글자일경우 %c, 문자열일경우 %s로 포맷을 지정해주면 됩니다.  그리고 굉장히 큰 수를 표현할 경우에는 수를 저장할때에 E를 활용하고 포맷도 %e로 써주면됩니다. 아래 코드를 보면서 확인해 보겠습니다. 

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

#include <stdio.h>


int main()

{

int a = 10; 

double b = 3.14;

float c = 3.15;

char d = 3;

char e = 'Q';

char *f = "문자열";

// 정수형 : %d, double형 : lf, float형 : f, 문자 : %c, 문자열 :%s

printf(" a : %d\n a2 : %05d\n b : %lf\n c : %f\n d : %d\n e : %c\n f : %s\n",a,a,b,c,d,e,f);

}

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



 

 결과 값을 확인해보면 정상적으로 출력이 된걸 확인 할 수 있습니다. 이때, d를보시면 char형임에도 불구하고 작은 범위의 숫자 표현도 가능했습니다. a2는 %05d로 포맷을 지정했는데 결과값을 보면 00010 으로 나오는데, 5자리 정수를 표현하고 앞에 빈자리는 0으로 채우라는 포맷입니다.


- 입력함수


입력함수에는 scanf가 있습니다. 형식은 printf와 비슷합니다. scanf("포맷",저장할주소); 아래 코드를 보면서 확인해보겠습니다.

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

#include <stdio.h>

#pragma warning(disable:4996)

int main()

{

int a, b;

printf("a:");

scanf("%d", &a); // 변수앞에 &사용

printf("b:");

scanf("%d", &b);

printf("a+b: %d\n",a+b);

}

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

Visual Studio 2013에서는 scanf를 쓰면 취약하다는 문구가 뜨면서 오류가 납니다.  scanf_s함수를 사용하거나, #pragma warning(disable:4996) 또는 #define _CRT_SECURE_NO_WARNINGS를 헤더파일 밑에 넣어주면 오류가 나지 않습니다. printf와 유사하지만 뒤에 변수앞에 &(엔퍼센트)를 붙여야 합니다. 저장할 주소를 입력 해야하기 때문에 &를 붙여줍니다. 문자를 입력받을때에는 &를 쓰지않습니다. 또한 scanf에서는 \n(줄바꿈문자)를 쓰지않습니다.



아래 코드처럼 따로따로 입력 받지 않고, 여러개를 한번에 입력 받을 수도 있습니다.

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

#include <stdio.h>

#pragma warning(disable:4996)

int main()

{

  int a, b;  

        printf("a와 b를입력하시면 합이 출력됩니다. \n");

scanf("%d %d", &a, &b);

printf("a+b: %d\n",a+b);

}

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





기본자료형(Basic Type)

1) 정수형

 - 위의 코드들 처럼 printf와 scanf에 %d 를사용합니다.

2) 부동소수형

 - 부동소수는 소수점이 움직인다는 말로, 부동소수 표기법은 근사치를 표기하기 위한 방법입니다. 큰 자료형 일수록 정밀도가 증가합니다. 정밀도는 숫자를 얼마나 정밀하게 표현하는가를 뜻합니다. printf 함수에 특별한 옵션이 없는 경우 기본적으로 소수점 6자리에서 반올림해서 출력합니다.

 - float과 double 비교

아래 코드는 x,y에 같은 소수점 16자리수를 넣고 16자리까지 출력하라는 코드입니다. 결과가 어떻게될까요?

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

#incldue <stdio.h>

int main()

{

float x;

double y;

x = 1.23455678901234567;

y = 1.23455678901234567;

printf("float형 : %.16f\n double형 : %.16lf\n", x, y);

}

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

둘 다 16자리까지 출력을 했지만, float형은 값을 정확하게 저장하지 못했습니다. double형이 float형보다 더 정밀하게 표현합니다.


3) 문자형 

위에서도 언급하였듯 char는 문자형 자료형과 정수형 자료형 둘 다 간주합니다. 정수형에서 char의 범위는 -128~127인데, 총 256개의 숫자와 문자가 표현 가능합니다. 문자는 하나하나 숫자가 정해져있습니다.

- ascii code(아스키 코드) : 숫자 값에 문자를 하나씩 대응시켜 놓은 코드입니다.

아스키표를 정리해놓은 사이트입니다. http://www.asciitable.com/


아래 코드는 char형으로 65를 선언하고 정수와 문자로 출력하는 코드입니다.

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

#include <stdio.h>

int main()

{

char a = 65;

printf("정수 : %d\n문자 : %c\n", a,a);

}

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

이처럼 정수로 출력할 때는 65가 나오지면 문자로 출력했을때는 알파벳 대문자 A가 출력됩니다.


아스키 코드표를 이용하면 영문 소문자를 대문자로 변환하거나 반대로 대문자를 소문자로 변환할 수 있습니다. 아스키 코드표를 보면 대문자 'A'가 65 소문자 'a'가97입니다. 32가 차이나는점을 이용해 소문자를 대문자로 바꾸는 코드를 짜봤습니다. 아래 코드는 영문 소문자를 입력하면 대문자로 변환하는 코드입니다. 

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

#include <stdio.h>

#pragma warning(disable:4996)


int main()

{

char ch;

printf("영문 소문자를 입력하면 대문자로 변환됩니다 : ");

scanf("%c", &ch); // 숫자 계산을 해야하므로 &를 붙여줍니다.

printf("영문 대문자 : %c\n",ch-32); // 숫자 계산을하고난 후 출력은 문자로 해줍니다.

}

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


- 배열 : 기본 자료형의 연속을 한번에 다루는 자료형으로 문자를 여러 개 묶어서 사용합니다.

char x[5]로 선언하게되면 char형이 char[0],char[1],char[2],char[3],char[4] 5개가 선언이됩니다. "LOVE"라는 문자열을 넣고싶다면 배열의 순서대로 넣어주면됩니다. 배열의 끝에는 널문자라고 불리는 '\0' 를 넣어줘야합니다. 문자열의 끝을 표시해주지 않으면 않으면 남는 배열의 크기만큼 쓰레기값이 뒤에 붙게됩니다. 아래 코드는 배열의 크기를 넉넉하게 선언하고, 널값을 주석처리 했을때의 코드입니다.

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

#include <stdio.h>

int main()

{

char x[8]; // 배열을 8로 넉넉하게 선언

x[0] = 'L';
x[1] = 'O';
x[2] = 'V';
x[3] = 'E';
// x[4] = '\0'; // 널값을 주석처리
printf(x);
}

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


위에 방법처럼 배열에 직접 한글자씩 넣어줄수도있지만, 번거롭다면 변수를 선언하면서 동시에 "="를 써서 초기값을 설정 하거나, String Copy의 줄임말인 strcpy함수를 쓰면 간편하게 배열에 문자열을 저장할 수 있습니다. 이때 strcpy함수를 사용하기 위해서는 <string.h> 헤더파일을 포함시켜야합니다.

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

#include <stdio.h>

int main()

{

char x[5]="LOVE"; 

printf("%s\n",x);

}
-------------------------------------------------------------------------------------------

#include <stdio.h>

#include <string.h>

int main()

{

char x[5]; 

strcpy(x,"LOVE");

printf("%s\n",x);

}

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


형 변환 혹은 타입캐스팅(Type Casting)

 계산을 할 때, 타입이 다를경우 형변환을 해줘야 합니다.

- 묵시적 형 변환 (implicit type conversion) : c언어 스스로 형 변환 수행하는 경우입니다. 아래와 같은 계산이 있을경우, 3은 정수이므로 float형으로 형변환 되어 계산됩니다.

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

float x;

x = 3.14 + 3 ;

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

- 명시적 형 변환 (explicit type conversion) : 사용자가 직접 형 변환을 붙여 직접 형 변환 수행하는 경우 입니다. 아래코드는 계산은 double형으로 하고 결과를 int형으로변환 하는 경우 입니다. 형변환 하면 소수점은 반올림하지 않고 버림하게됩니다.

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

double x=1.2;
double y=3.9

int result = (int)x+y;

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

- 형넓히기 : 작은자료형->더큰 자료형으로 확장되며 형변환

- 형좁히기 : 큰자료형->작은자료형 정보손실 발생->컴파일러에서 경고


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

   스타일 C프로그래밍 저.김종훈,김종진 출.WellBook

   http://www.asciitable.com/




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

[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16
[C] C 기본개념(2) 라이브러리와 변수  (0) 2016.12.12
[C] C 기본개념 및 실습환경  (0) 2016.12.07

C++언어란 ? 

 AT&T 벨연구소의 컴퓨터 과학자 비야네 스트롭스트룹(Bjarne Stroustrup)이 개발한 언어로 C언어를 유지, 확장한 언어입니다. 쉽게 말해 C언어가 더욱(+) 더(+) 좋아진 언어라고 말할 수 있습니다. C++언어의 특징으로는 C언어에 클래스 개념을 추가하고 가상함수, 연산자 중복정의,다중상속, 템플릿, 예외처리, 엄격한 타입검사, 범용언어, 이식성 등이 있습니다.


비야네 스트롭스트룹(Bjarne Stroustrup)



C++ 프로그래밍 작성단계

소스파일(.cpp) -> 오브텍트파일(.obj) ->실행파일(.exe)



객체지향의 개념

 C++언어는 Java와 같은 객체지향 언어입니다. 객체지향 언어에서는 객체지향의 개념을 아는것이 가장 중요합니다. 객체지향은 데이터와 알고리즘을 하나로 묶는개념에서 시작되었습니다. 아래 4가지 개념이 객체지향의 중요한 개념입니다.



- 정보은닉(Information Hiding) : 데이터에 대한 불필요한 접근을 차단하여서 데이터를 보호하는 것

- 캡슐화(encapsulation) : 데이터와 알고리즘을 하나의 단위(클래스)로 묶고, 정보를 은닉 하는것으로, 우리가 먹는 캡슐약을 생각하면 이해하기 쉽습니다. 캡슐안에 여러 약이 들어있고 캡슐로 감싸서 안에 약들이 보이지 않는 것과 같습니다.

- 상속 : 비슷한 클래스가 이미 있다면 그 클래스를 가져다 사용하는 것

- 다형성(polymorphism) : 같은 이름의 함수나 연산자를 중복 정의해 상황에 맞게 적절한 함수나 연산자를 프로그램이 자동적으로 선택하는 것


객체지향의 프로그래밍의 최종 목표 : 기존의 코드를 재사용 하는 것


* 출처 : 한국기술교육대학교 온라인평생교육원 비쥬얼 C++ 프로그래밍



파이썬 개발환경 구축(설치)


 파이썬을 개발하는 여러 환경중에 제가 구축한 환경은 두 가지가 있습니다. Python 전용 통합개발환경(IDE) Enthought Canopy를 설치하는방법과 이클립스에서 설치하는 방법입니다. Canopy를 설치하면 환경설정 관련된 것들이 자동적으로 설정되있어서 그냥 Pyton을 설치하는 것보다 간편하다고 합니다. 하지만, IDE가 부족한 면이있어 이클립스도 같이 활용하는것이 좋다고 합니다.


Enthought Canopy 설치


 첫번째는 Enthought Canopy 설치 방법입니다. Enthought Canopy는 별도의 파이썬 설치 없이 아래 통합개발환경 링크에서 설치를 하면 자동으로 파이썬이 설치됩니다

https://www.enthought.com/products/canopy/


사이트에 들어가서 중앙하단에 보이는 Get Canopy 초록색버튼을 클릭한 후에 free버전을 다운로드 합니다.


기본적으로 설치를 마치고 나면 다음과같은 두 아이콘이 생성됩니다.  


 윈도우 커맨드 창에서 정상적으로 설치가 되었는지 확인을 해보았습니다. 기본적으로 python이라고 입력하면 실행이되며, 대화식으로 print 1+2라는 구문을 입력했을 때 3이 실행되는걸 확인 할 수 있습니다. 종료하는 명령은 exit가 아닌 exit()나 Ctrl+Z를 누르게 되면 종료가 됐습니다. 다음은 ipython을 실행했을때 python과 비슷하지만 색 효과가 있어 좀더 깔끔한 대화환경을 제공할 것 같습니다. 아래 그림은 python과 ipython의 비교 입니다.




- 이클립스에서 파이썬 설치


 두번째 방법은 이클립스에서 설치하는 방법입니다. 저는 이클립스를 기존에 사용해서 바로 설치했는데 없으신 분들은 이클립스를 설치하신 이후에 설치하셔야 합니다.

 설치과정은 아래와 같습니다. 이클립스를 써보신분들은 아실수도 있는 방법입니다. 가장먼저, Help탭에서 Eclipse Marketplace를 클릭합니다.


Eclipse Marketplace 창이뜨면 왼쪽 노란색 부분에 python이라고 입력하고 오른쪽 노란색 Go를 눌러주면 아래와 같은 창이뜨는데 빨간색 부분에있는 PyDev-Python IDE for Eclipse 를 Install 버튼을 눌러 설치해주시면됩니다. 


아래 그림과 같이 기본적으로 체크되어있는대로 설치하시면 됩니다.


설치 도중에 이런 창이뜨는데 체크를 꼭 해주시고 ok 버튼을 눌러야합니다.


아래 두번째 창 역시 Yes를 눌러줘야합니다. 저같은 경우, 재시작이 안되서 이클립스 File탭에서 직접 재시작을 해줬습니다.


설치가 끝나게되면 아래 그림과같이 이클립스 우측 상단에있는 빨간색 부분 아이콘 을 눌러서 PyDev로 바꿔줍니다. 아래 그림처럼 PyDev가 없다면 설치가 정상적으로 이루어지지 않은 것입니다.


PyDev로 바꿔주고 나면 시스템 내 파이썬 인터프리터 검색을 설정해줘야 합니다. 이클립스 Window탭에서 Preferences를 클릭합니다. 


 Preferences창에서 PyDev-Interpreters-Python Interpreter에 들어가서 Quick Auto-Config 버튼을 눌러줍니다. 눌러주면 아래 그림과같이 자동으로 라이브러리 들이 추가가 됩니다.


설치가 끝난 후 예제소스를 실행해보기 위해 프로젝트를 만들고 그안에 디렉토리를 만든후 test.py라는 소스파일을 추가합니다.


간단한 예제 소스를 작성해보았습니다. 소스코드를 작성한뒤 초록색버튼으로 run을 하게되면 실행이되고 아래 콘솔창에 결과가 나옵니다.

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

# -*- coding: utf-8 -*-

print 1+2

print "안녕하세요"

print 9/5

print 12-32

print 9.0/5.0

print 9/5.0

print 9/5 #정수/정수 = 정수로 출력

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

# -*- coding: utf-8 -*- 를위에쓰는 이유는 한글을 사용하기위해서 라고합니다. 다른 언어들과는 다르게 print 함수 하나만으로 정수,실수 계산 및 문자열을 출력했습니다. Python에서 주석은 #입니다.


아래는 콘솔창의 결과입니다. 

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

3

안녕하세요

1

-20

1.8

1.8

1

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

정수/실수를 했을때는 실수로 계산이되지만, 정수/정수는 1.8임에도 불구하고 정수인 1로 결과가 나왔습니다.


다음 소스는 문자열을 합치는 소스입니다. a와 b에 각각 문자열을 넣고 합칠때에는 "+"를 사용해 합쳤습니다.

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

a='park'

b='hyeung'

print a+b

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


아래 소스는 파이썬 버전을 알아보는 소스입니다. sys라는 모듈을 활용해 버전을 확인해 보았습니다. 

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

import sys

print sys.version

print

print sys.version_info

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


아래와 같이 2.7.11버전이 설치되있는 걸 확인할 수 있습니다. print함수를 그냥 사용했을때는 아래와같이 한줄 공백이 출력됩니다.

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

2.7.11 | 64-bit | (default, Jun 11 2016, 11:33:47) [MSC v.1500 64 bit (AMD64)]


sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)

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


마지막으로 cal.py라는 소스를 작성해 저장하고 윈도우 커맨드창에서 실행을 해봤습니다. 먼저 아래 소스는 달력을 출력하는 소스입니다. 

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

import calendar

calendar.prmonth(2016, 12)

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

실행을 했을때, 콘솔창에 다음과같이 2016년 12월 달력이 출력됐습니다.


저는 D:\PythonProject\Python\01 이경로에 소스파일을 작성해서 커맨드 창에서 경로로 이동을 한뒤에 실행을 했습니다. ipython cal.py로 실행을 하게되면 커맨드 창에서도 똑같이 달력이 출력되는걸 확인할 수 있습니다.



* 출처 : 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍



라이브러리 


 다른 프로그래밍 언어에서도 쓰이는 용어인 라이브러리는 함수나 변수들의 집합으로 구성되며, 컴파일 과정에서 참조되는 프로그램 모듈을 뜻합니다.


 아래 코드는 "안녕하세요" 라는 문자열을 출력 하는 코드입니다. 이때, "#include <stdio.h>"가 표준 입출력 라이브러리(Standard Input/Output)의 헤더파일입니다.


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

#include <stdio.h> // 표준입출력 라이브러리 헤더파일을 include


int main() // main()함수

{

printf("안녕하세요 \n"); // 문자열 출력함수

}

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


 헤더파일 : 라이브러리를 사용하기위해 코드의 포함시키는 파일로, 코드의 가장위쪽에 씁니다. 가장 위쪽에 쓰는 이유는 헤더파일 밑에만 그 라이브러리가 적용되기때문에, 코드 가장위에 사용해야합니다. 헤더파일은 위 코드처럼 헤더파일은 .h 확장자를 가집니다. 


 자료형(Type) : 특정한 의미를 부여해서 묶어놓은 것으로 기본자료형과 유도자료형이 있습니다.

⊙ 기본자료형(Basic Type)

1) 정수형(Integer) : 정수를 표현하는 자료형

 - 부호가 있느냐 없느냐에 따라서 Signed/Unsigned로 구분됩니다.

 - short, long, int 타입이 있으며, 각각 2,4,2또는4 바이트의 크기를 가집니다.

2) 부동소수형 : 실수를 표현하기위한 자료형

 - float, double, long double 타입이 있으며, 각각 4,8,8 바이트의 크기를 가집니다.

3) 문자형 : 문자를 표현하기 위한 자료형

 - Signed Char/Unsigned Char로 구분됩니다.

⊙ 유도자료형(Derived Type) : 사용자에 의해 만들어지는 자료형으로 뒤에서 공부할 배열, 포인터, 구조체, 공용체가 있습니다.


 변수 

 메모리공간에 이름을 정하는 것으로, 함수등에서 사용하기위한 이름을 정의하는것을 뜻합니다.

 수학시간에 배웠던 함수 f(x)를 생각하면 쉽게 이해할 수 있습니다. f는 함수를 뜻하며 x는 변수를 뜻합니다. 아래 코드는 위에서 했던 문자열 출력을 변수를 사용해 한것입니다.

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

#include <stdio.h> 


int main()

{

char *a = "안녕하세요 \n";

printf(a);

}

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


 추가로 프로젝트에서 전에했던 소스파일이나 빌드를 원하지 않는 소스파일은 다음과 같이 "빌드에서 제외" 속성 예로 바꿔주면 빌드에서 제외하고 빌드를 진행 할 수 있습니다.





* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook



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

[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16
[C] 입출력함수, 기본자료형, 형변환  (0) 2016.12.15
[C] C 기본개념 및 실습환경  (0) 2016.12.07

 2012년에 C언어를 배웠었는데, 군대도 다녀오고 시간이 흐르면서 기억이 희미해져서 다시 처음부터 공부하려고 합니다. 한국기술교육대학교 온라인평생교육원 강의와 저자 김종훈, 김종진의 스타일 C프로그래밍 책을 참고하면서 공부를 시작하려고 합니다. 강의 내용과 책의내용에 제 생각을 더해 글을 작성할 계획입니다.


C언어란? 

- 가장 보편적이고 기본적인 프로그래밍 언어


기본적인 용어

- 컴파일 : 사람이 알아보기 쉬운 프로그래밍 언어를 기계어로 바꾸는 작업

- 컴파일러 : 컴파일 해주는 프로그램

- 원시프로그램(소스코드) : 프로그래밍 언어로 작성한 프로그램

- 목적프로그램 : 컴파일 과정을 거쳐서 생성한 기계어 코드



실습환경


 리눅스에서도 개발을 할 수 있지만, 저는 윈도우에서 편하게 하기 위해, 실습 환경을 Visual Studio 2013 Professional 버전으로 골랐습니다. 2015버전도 나왔지만, 2015버전보다는 써본 경험도 있는 2013버전을 사용하게 되었습니다.

 비쥬얼 스튜디오는  아래 링크에서 다운받을 수 있습니다. 한글판을 원하시는분은 별도의 한글언어팩을 설치하시면 됩니다.

https://www.visualstudio.com/ko/vs/community

 소스코드를 작성하고 실행하기위해서는 가장 처음 프로젝트를 만들어야합니다. 아래 <그림1>과 같이 [파일]탭의 새로만들기에서 프로젝트를 클릭합니다.

<그림 1> 프로젝트 만들기 1


 Visual c++ 탭에서 Win32 콘솔 응용 프로그램을 선택하고 원하는 프로젝트 명을 입력하고 확인 버튼을 누릅니다.

<그림 2> 프로젝트 만들기 2


 확인 버튼을 누르면 아래 그림과 같이 Win32 응용 프로그램 마법사가 실행이되는데, 주의 할 점은 빈 프로젝트를 선택하는 것입니다. 미리 컴파일된 헤더 파일을 골라도 상관은 없지만, 굳이 테스트 코드를 실행하기위해서는 필요하지 않기때문에, 빈 프로젝트를 선택합니다.

<그림 3> Win32 응용 프로그램 마법사


 프로젝트를 만든 후에 소스파일 디렉토리를 클릭해서 추가-새항목을 누른뒤 .cpp 파일을 추가합니다. 이때, .cpp 파일을 추가하지만 확장자는 .c로 바꿔줍니다. 그리고 나중에, 헤더파일을 작성할때에는 소스파일 밑에있는 헤더파일 디렉토리에 추가 하면됩니다.

<그림4> .cpp파일 추가


 .c 파일을 추가한 후 간단 한 소스코드를 작성하고 디버그 메뉴에서 "디버깅하지않고 컴파일"을 선택하거나 Ctrl+F5 키를 이용해 디버깅하지 않고, 바로 실행을 하였습니다. 도스창에 입력한 문자열이 출력되고, 아래 출력 탭에서 test.c 파일이 .o 파일을 거쳐 .exe 파일로 생성이 되는걸 확인 할 수 있습니다.

 +@ \n은 출력하는 문자열 뒤에 한줄을 내릴때 사용하는 줄바꿈 문자인데 "\"를 출력하고싶을때는 \\를 사용하면 "\를"출력할 수 있다.

<그림 5> 문자열 출력 테스트



* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook



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

[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16
[C] 입출력함수, 기본자료형, 형변환  (0) 2016.12.15
[C] C 기본개념(2) 라이브러리와 변수  (0) 2016.12.12

+ Recent posts