1 / 31

Introduction to the C Language Structure of a C Program

C 프로그래밍 ( STS2008 ) C Programming. Introduction to the C Language Structure of a C Program. Identifier. ▪ Identifier ▫ Identifier 는 데이터나 객체에 부여하는 이름을 뜻함 ▪ Identifier 의 규칙 ▫ 첫 글자는 영문자나 언더스코어 (‘_’) 로 시작 ▫ 영문자 , 숫자 , 언더스코어로만 구성되어야 ▫ 처음 63 글자만 구별 가능

irish
Download Presentation

Introduction to the C Language Structure of a C Program

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C 프로그래밍 (STS2008)C Programming • Introduction to the C Language • Structure of a C Program

  2. Identifier ▪ Identifier ▫ Identifier는 데이터나 객체에 부여하는 이름을 뜻함 ▪ Identifier의 규칙 ▫ 첫 글자는 영문자나 언더스코어(‘_’) 로 시작 ▫ 영문자, 숫자, 언더스코어로만 구성되어야 ▫ 처음 63글자만 구별 가능 ▫ Keyword는 사용할 수 없음예) double, int, switch, if, else, return, static 등 ▪ Identifier의 예

  3. Types ▪ A set of values and a set of operations that can be applied on those values. ▫ Void : void 타입은 값을 갖고 있지 않으며, 연산 없음 ▫ Derived : 다른 타입들로 구성된 복잡한 구조 예) pointer, enumerated type, union, array, and structure

  4. Types ▪ Boolean Type ▫ Boolean Type은 true와 false 오직 2가지 값으로 나타냄 ▫ Boolean Type이 규정되기 전에도 integer값을 이용해 표현 ▫ True  0 이외의 수 (positive or negative) ▫ False  0 (zero) ▪ Character Type ▫ 1byte로 저장되며 하나의 문자 저장 ▫ 저장할 수 있는 문자는 alphabet문자에 한정된 것이 아니라 숫자와 기타기호도 포함 ▫ char형은 0~255의 값을 갖는 작은 int형으로 해석가능 그래서 C에서는 char형을 자주 int형과 같이 취급함 ▫ 예) char형 변수는 내부적으로는 정수형이므로 산술연산이 가능 ▫ 다음의 경우 문자 ‘A’의 다음 두 번째 문자인 ‘C’가 출력 char c = ‘A’; // c = 65 printf("%c", c+2); // c+2 = 67 => ‘C’

  5. Types ▪ Integer Type ▫ int형은 정수를 저장 ▫ short int, int, long int, long longint로구분됨 ▫ 각각의 integer size 들은 signed 혹은 unsigned 될 수 있음 ※ 위의 표는 일반적인 값을 나타내며 플랫폼에 따라 달라질 수 있다. ▪Floating-Point Type ▫ float 형은 실수를 저장 ▫ real, imaginary, complex 로 분류됨 ▫ real type 은 float, double, long double로만 구분됨

  6. Variables And Constants ▪ Variables ▫ 값을 저장할 수 있는 기억장소에 이름을 붙인 것으로 선언된 후 쓰여야 함 ▫ 변수를 선언할 때는 변수의 type과 변수의 이름을 나란히 써줌 ▫ 변수의 선언은 함수의 첫 부분에서만 가능 ▪ variable initialization(변수의 초기화) ▫ 변수를 초기화하지 않으면 어떤 값이 들어있는지 알 수 없음 초기화 이전에 저장되어 있는 값을 쓰레기 값(garbage)이라 함 ▪ Constants ▫ 프로그램이 실행되는 동안에 변하지 않는 데이터 값 const float pi = 3.14159

  7. Output Formatting : printf ▪ C에서 출력을 하는 방법은 여러가지가 있지만 가장 쉽게 쓸 수 있는 것은 printf(print formatted)이다. ▪ “ ” 안에 출력할 내용을 적는다. ▪ 변수의 값을 출력할 때는 “ ” 안의 해당 위치에 형식문자(%d, %c, etc..)를 적고, “ ” 뒤에 해당하는 변수를 순서대로 적는다. printf (“ … %d … %f …“, int형변수, float형변수);

  8. Output Formatting : printf 전체 폭은 8이며, 변환문자 f는 소수점 이하 6자리가 기본 전체 폭은 5이며, 정렬은 기본적으로 우측정렬 ▪ int형 변수 값의 출력 형식 ▫ %d 사이에 폭을 나타내는 정수를 기술 ▫ 필드 폭을 지정하면 자동적으로 우측정렬이 된다. 좌측정렬을 위해서는 필드 폭 앞에 ‘-’ 를 붙임 ▪ float형 변수값의 출력 형식 ▫ 필드 폭을 지정하려면 %f 사이에 폭을 기술 ▫ %10f 라고 기술하면 전체 폭은 10, 소수점 이하 자리수 폭은 기본 6으로 지정 ▫ %10.5f 이면 전체 폭은 10, 5는 소수점 이하 자리수의 폭을 의미 ▫ 지정한 전체 폭이 출력 값의 전체 폭보다 작으면, 지정된 작은 폭은 무시하고 원래의 출력 값의 폭으로 출력 printf(“%f”, 3.1); 전체 폭은 5이며, 정렬은 기본적으로 우측정렬, + 의미는 값의 부호 출력 3 . 1 + 0 3 3 0 0 printf(“%5d”, 30); printf(“%+5d”, 30); 3 . 1 0 0 0 0 0 전체 폭은 5이며, 소수점 이하 2자리, 정렬은 – 부호에 의해 좌측정렬 printf(“%-5.2f”, 3.1);

  9. Output Formatting : printf ▪ 오류가 있는 output의 예 ▫Threeconversion specifications, but only two values ▫ Twoconversion specifications, with three values ▫ Format specification does not match the data type printf(“%d %d %d\n”, 44, 55); 44, 55, 134513316 (세 개의 값이 출력된다, 이때 뒤에 오는 argument의 수가 달라 match되는 값이 없어 쓰레기 값 이 출력 된다.) printf(“%d %d\n”, 44, 55, 66); 44, 55 (세 번째 값은 무시된다.) float x = 123.45; printf(“The Data are : %d\n”, x); The Data are : -1073741824 (float type에 변수를 int type으로 출력하여 잘못된 결과 값이 나온다.)

  10. ▪ C에서 입력을 받는 방법 중가장 쉽게 쓸 수 있는 것은 scanf()이다. ▫ scanf()는 도스창인 표준 입력으로부터 여러 종류의 자료 값을 입력 받을 수 있음 ▫ 사용법은 printf()와 유사 ▫ 단, 입력 값을 저장할 변수의 이름 앞에 ‘&’를 반드시 붙여줘야 한다. (&은 해당 변수의 주소를 의미하는 연산자) Input Formatting: scanf scanf(“ %d %f ”, &age, &weight);

  11. C Programs - Comment ▪ comment는 reader가 프로그램을 이해하는데 도움을 줌 ▪ opening token: /* ▪ closing token: */ ▪ 컴파일러는 /* …… */사이의 모든 내용을 무시 ▪ 컴파일러는 // …… 다음의 한 라인의 내용을 무시 ▪ 주석 내부에 주석을 중복하여 사용하는 경우 일부는 주석처리가 되지 않는다. 이 부분만 주석으로 처리 주석처리 되지 않은 부분

  12. Number Bases ▪ Decimal Integer ▫ 0, 237, 18567, -789 ▪ Octal Integer (0으로 시작) ▫ 017, 05643, 0234 ▪ Hexadecimal Integer (0x로 시작) ▫ 0x12FF, 0x56ABC, 0x89A345 예) unsigned int A = 0347; /*octal number 347*/ unsigned int B = 0x56A7C; /*hexadecimal number56A7C*/

  13. 0 x 3 2 F C 0 7 1 4 3 6 7 3 1 E 0 6 5 0 4 Number Conversion ▪ 2진수, 8진수, 16진수 사이의 변환 ▫ 2진수를 오른쪽에서부터 3bits로 묶어서 8진수로 변환. ex) 0111001100011110 ▫ 2진수를 오른쪽에서부터 4bits로 묶어서 16진수로 변환 ex) 0111001100011110 ▫ 8진수 하나의 숫자는 2진수의 3자리로 변환 ▫ 16진수 하나의 숫자는 2진수의 4자리로 변환 ▫ 16진수  8진수는 2진수로 변환하여 변환

  14. Expressions ▪ 프로그램 언어에서 변수나 상수, 연산자로 구성된 식 ▪표현식은 항상 결과(반환) 값을 갖음 ▫ Operator(연산자) : +, -, *, / 등 ▫ Operand (피연산자): operator를 가지고 계산되는 상수 또는 변수

  15. Expressions ▪ Primary expression : operator가 없이 오직 하나의 operand로 이루어진 가장 기본적인 형태 ▫ 식별자( Identifier ) ▫ 식별자 예 : a, b12, price, calc, INT_MAX 등 ▫ 상수 ( Constants ) ▫ Constants 예 : 5, 123.45, ‘A’, “Welcome” 등 ▫ 괄호식( Parenthetical Expression ) ▫ 괄호식 예 : (2*3)+4, (a=23+b*6) 등

  16. Expressions ▪ Prefix expression ▫ 형식 : operator가 operand 앞에 나옴 ▪ Postfix expression ▫ 형식 : operator가 operand 뒤에 나옴

  17. Expressions ▪ ++a 과 a++의 차이 ▫ prefix와 postfix는 증가/감소 연산을 수행하는 시점이 다름 ▫ prefix의 경우, 변수의 참조보다 먼저 연산을 수행 ▫ postfix의 경우, 변수의 참조 후에 연산을 수행 <prefix> <postfix> int x, a=1; x = ++a; a에 1을 더한 후, x에 그 값을 대입한다.  x의값은 2가 된다. int x, a=1; x = a++; x에 값을 대입한 후, a에 1을 더한다.  x의값은 여전히 1이다.

  18. Expressions ▪ 증가연산(prefix, postfix)과 일반산술연산(infix)의 비교

  19. Expressions ▪ 증감연산 사용 이유 ▫ 증감연산자를 이용하면 프로그램 형태가 간결 ▫ 기계어 코드와 일대일 대응되므로 실행속도가 개선 ▪ 주의점 ▫ 연산자의 위치에 따라 evaluation value가 다르므로 주의 요구 ▫ 증감연산자는 ++, --자체가 연산자 기호  중간에 공백이 들어가면 안됨 ▫ 산술연산이나 관계, 논리연산보다 그 평가를 먼저 한다. ▫ 증감연산자는 피연산자로 변수를 사용할 수 있지만, 상수나 일반 수식을 피연산자로 사용 불가능 ▫ 다음과 같은 수식은 잘못된 수식 int a = 10; ++300; /* 상수에는 증가 연산자를 사용할 수 없다 */ (a+1)--; /* 일반 수식에는 증가 연산자를 사용할 수 없다 */

  20. Binary expression ▪ Binary expression ▫ 형식 : 피연산자– 연산자 – 피연산자(operand – operator - operand) ▫ Operator가 operand사이에 있음 ▫ Binary expression 예 ▫ a+7, 3+4, b-11 등  additive expression (+, -) ▫ 10*12, a /4, 5%2 등  multiplicative expression (*, /, %) ▫ %(modulo)는 나머지를 구하는 연산자

  21. Assignment expression ▪ Assignment expression ▫ 수학에서는 “우측의 값과 좌측의 값이 같다”라는 의미이나, C 언어에서는 “우측의 값을 좌측의 저장 장소에 저장하라”라는 의미 ▫ 분류 ▫ simple assignment  ▫ 예) a=5, b=x+1, i=i+1등 ▫ Compound assignment ▫ 예) x+=y, x*=y, x/=y 등 

  22. 3 20 4 counter counter counter Assignment expression ▪ Destination of an assignment ▫ 대입 명령은 항상 대입 연산자의 오른쪽에서 왼쪽으로 Ex) A = 9; : 변수(variable) A에 값(value) 9를 대입 9 = A; : 9는 올바른 변수 이름이 아니므로 잘못된 표현 Ex) X = Y * Z; : 변수 Y와 Z를 곱한 결과값을 변수 X에 대입 X * Y = Z; : X * Y는 식별자, 즉 하나의 변수가 아닌 표현식 이므로 C 문법에 어긋난 잘못된 표현 Ex) A = B; : 변수 B가 갖는 값을 변수 A에 대입 B = A; : 변수 A가 갖는 값을 변수 B에 대입 따라서 위의 두 대입 명령문은 다른 의미를 갖는다. 같다는 표현을 하기 위해서는 “= =“ 연산자 이용! Ex) A = B = C = 0; or A = ( B = ( C = 0 )); 대입 명령은 항상 연산자의 오른쪽에서 왼쪽으로 대입되므로 위의 두 명령은 같은 의미를 갖는다. Ex) counter = 3; counter = counter + 1; counter = 5 * counter;

  23. Precedence & Associativity ▪ Precedence : 다른 연산자들 사이의 우선 순위 ▫ 수학에서도 곱하기나 나누기 연산자가 더하기나 빼기 연산자보다도 우선 순위가 더 높은 것처럼 C언어에서도 연산자 사이에 우선순위가 있다. ▫ Precedence의 예 ▫ 2 + 3 * 4  ( 2 + ( 3 * 4 ) ) ▫ - b ++  ( - ( b++ ) ) ▪ Associativity : 같은 순위의 연산자들 사이의 우선 순위 ▫ Associativity의 예 ▫ Left-to-Right (Simple Assignment) ▫ 3 * 8 / 4 % 4 * 5  ( ( ( ( 3 * 8 ) / 4 ) % 4 ) * 5 ) ▫ Right-to-Left (Compound Assignment) ▫ a += b *=c -= 5  ( a += ( b *= ( c -= 5 ) ) )  ( a = a + ( b = b * ( c = c – 5 ) ) )

  24. Precedence tale for C expression

  25. Type Conversion ▪ Type Conversion ▫ 일반적으로 C 언어의 연산식에서 여러 피연산자의자료형이 서로 다른 경우, 하나의 통일된 자료형으로 자동 변환하여 연산을 수행 ▫ Implicit type conversion (coercion) : C 컴파일러가 판단하여 자동으로 데이터형을 변형하는 경우 ▫ 다음과 같은 경우 C 컴파일러가 판단하여 자동 형 변환을 수행한다. ▫ 수식에서 데이터형이 혼합되어 사용되었을 때 값을 변환 ▫ 특정한 데이터형의 변수에 다른 데이터형의 값을 대입할 때, 값을 변환 ▫ Explicit type conversion (cast) : 프로그래머가 형 변환자(cast)를 사용하여 강제적으로 변형하는 경우

  26. Implicit type conversion ▪ 서로 다른 데이터 형이 혼합하여 사용될 때 ▫ 수식에서 형 변환은 보통 범위가 큰 데이터형으로 변환 ▫ Conversion Rank ▫ 각각의 타입들에 대해 계급을 할당 ▫ Ex) long double 타입의 실수는long타입의 정수보다 높은 계급을 갖고 있다. “모든 문자들은 숫자 값을 가지고 있기 때문에 문자를 정수와 부동소수점 값에 더할 수 있다”

  27. Implicit type conversion ▪ 형 확장(Promotion) ▫ 하나 이상의 데이터 형이 혼합식을 구성할 때 ▫ 가장 큰 데이터 형에 맞춰 자동으로 형 변환이 이루어지는 규칙을 적용 ch* i ch는 int형으로 확장되어 i과 계산 수행된다. 여기서 ch는 대문자 A 인데 이는 ASCII 코드값65 로 계산된다. 2) * f  1)에서계산된 결과는 float형으로 확장되어 f와 계산 수행된다. 3) + 300  300도 float형으로 확장되어 2)의 결과에 더해진다. 4) 계산의 결과는 double형으로 확장되어 d에 대입된다. <실행결과>

  28. Implicit type conversion ▪ 범위가 큰 데이터 형에서 작은 데이터 형으로의 변환은 문제 발생

  29. Explicit type conversion ▪ Explicit conversion ( casting, cast operation ) ▫ 프로그래머가 강제적으로 변수의 데이터형 변환 가능 ▫ 피연산자의 값을 앞 위치의 괄호 안에서 지정한 자료형으로 변환하는 연산 ( type ) expression  expression의 값을 type의 데이터형으로 강제로 변환 치환문에 의한 형변환 캐스트 연산자에 의한 강제 형변환 <실행결과>

  30. Explicit type conversion ▪ 시스템, OS (운영체제), 컴파일러의 종류에 따라 각 데이터형의 메모리 저장 크기가 다를 수 있음 ▪ 프로그램이 사용하는 데이터형의 크기를 알 수 있는 방법으로 sizeof연산자를 사용할 수 있음 (unary expression) ▫ sizeof ( type ) ▫ 위의 연산자를 사용하면 해당 데이터형의 크기를 byte 단위로 알려줌 Ex) sizeof(int); sizeof(float); cf)시스템에 따라 데이터형의 크기가 다를 수 있다는 점은, 한 환경에서 다른 환경으로 프로그램을 가져갈 때 문제를 일으킬 수 있다. sizeof() 연산자는 데이터형의 크기가 중요시 되는 프로그램에서 유용하게 사용될 수 있다.

  31. Statements ▪ 프로그램에 의해서 수행되는 하나의 동작(action) ▪ 직접적으로 하나 또는 그 이상의 실행 가능한 컴퓨터 명령어로 변환됨 ▪Statement의 종류 ▫ Null statement ▫ ;  statement가 있어야 하지만 아무런 동작도 필요하지 않을 경우 사용 ▫ loop등에서 유용하게 사용 예) for( ; ; ) ▫ Expression statements ▫ 표현식 뒤에 세미콜론(;)을 붙여 statement로 변환 ▫ ‘;’는 컴퓨터에게 statement의 끝임을 나타냄 ▫ Compound statements ▫ 0 (zero) 또는 그 이상의 문장으로 구성되는 코드 단위 : Block ▫ main 함수를 만들 때도 compound statements 사용 ▫ 세미콜론(;)이 필요하지 않음

More Related