슬라이드 1

Download Report

Transcript 슬라이드 1

프로그래밍 기초와 실습
Chapter 1
Writing an ANSI C Program
담당교수 :
김인수 [email protected]
담당조교 :
21514 김경훈 [email protected]
22111 김두현 [email protected]
27419B 김성준 [email protected]
27419C 이건영 [email protected]
27422 장성환 [email protected]
27425 이강욱 [email protected]
Contents
 C 언어의 역사 및 특성
 Initialization
 C 언어의 장점 및 단점
 Use of #define and #include
 Programming Process
 Preprocessor
 Programming Tools
 Use of printf( ) and scanf( )
 Variable
 while statement
 Expressions
 Good coding style
 Assignment
 Constant
Chapter 1 Writing an ANSI C Programming
2
C언어의 역사
 1972년 Bell lab에서 개발
 System level의 programming
 Unix OS 구현
 원류는 BCPL  B language (Ken Thompson)
 C language
Chapter 1 Writing an ANSI C Programming
3
C언어의 특성
 High Level Language이면서 Low level 의 특성 소유.
– bit, byte, word단위의 조작 가능
 Small language
 다양한 응용 프로그램 구현 하는 언어
Chapter 1 Writing an ANSI C Programming
4
C언어의 장점
 Efficient
– machine level 의 개념으로 개발된 프로그래밍 언어로 신속한
수행가능
 Portability
– PC 에서 Supercomputer에 이르기까지 적용 가능
 Powerful
– 다양한 데이터 타입과 연산자를 제공
 Flexibility
– 시스템 프로그래밍으로부터 모든 응용 프로그래밍까지 적용
가능
 다양한 Standard Library제공
– Input/Output, String handling, Storage allocation등을 위한
수 많은 library functions을 제공
Chapter 1 Writing an ANSI C Programming
5
C언어의 단점
 Error Prone
– C 언어의 flexibility에 따른 Compiler에 의한
error감지 어려움
 Difficulty
– 다양한 기능의 포함으로 이해 또는 수정 하기
어려움
Chapter 1 Writing an ANSI C Programming
6
Programming Process
 Goal 설정
– 주어진 문제에서 요구하는 결과물에 대한 올바른 이해
 Algorithm 작성
– 문제 해결 방법을 “Pseudo Code”로 작성
 Program 생성
– 작성된 algorithm에 따라 Programming Language 사용하여
coding (C 언어)
 Testing
– 가능한 모든 경우에 예상하여 입력과 출력결과를 점검하여,
원하는 결과인지 확인하는 과정
 Debugging
– Testing단계에서 Error발생시, 작성 하였던 프로그램 내용을
수정
Chapter 1 Writing an ANSI C Programming
7
Programming Tools
 Editor
–
–
–
–
–
Program을 작성하여 보조기억장치에 저장
확장자명을 filename.c로 한다
unix상에서 vi 또는 emac editor를 사용
source file은 compile되기 전의 code
윈도우의 메모장, UltraEdit, EditPlus 등 다양
 Preprocessor
– Compiler의 일부로 compile시 자동 preprocessor의
작동
– Compile전에, program을 구성하는 line들 중 ‘#’로
시작되는 line들에 대한 처리
Chapter 1 Writing an ANSI C Programming
8
Programming Tools
 Compiler
– Source Program의 syntax error점검하여 program
을 machine language로 convert
source program
Executed File
Edit
(***.c)
compiler
Chapter 1 Writing an ANSI C Programming
(~.exe)
9
Programming Tools
 Linker
– object file과 library의 link
[Ex]
[san:/usr1/kmkim] cc hello.c
[san:/usr1/kmkim] a.out
hello! Everybody..
[san:/usr1/kmkim]
Chapter 1 Writing an ANSI C Programming
cc 명령어는 compile과 link의
과정이 한번에 이루어지고
결과로 a.out 의 파일이 생성된다.
10
실행 파일 생성 단계
Source
File
Preprocessed
Source
File
Preprocessing
Preprocessor
Object
File
Executable
File
Compile
Link
Compiler
Linker
Header File
Chapter 1 Writing an ANSI C Programming
Library
11
Programming Tools
 vi pgm.c
– UNIX os에서 지원하는 application program 중에
vi editor를 사용해서 source file을 만든다.
 cc pgm.c
– 만들어진 source file을 compile하고 link하는 과정
이다. 실행중에 오류가 발생하면 source file에 대한
오류정보를 출력하고 성공적으로 compile이 되면
a.out이란 file을 default로 생성한다.
 a.out
– cc 명령어로 compile이 에러 없이 끝나면 생성되는
파일로서 실행하면 프로그램의 결과가 출력된다.
Chapter 1 Writing an ANSI C Programming
12
Programming Tools
 vi pgm.c
– UNIX os에서 지원하는 application program 중에
vi editor를 사용해서 source file을 만든다.
 cc pgm.c
– 만들어진 source file을 compile하고 link하는 과정
이다. 실행중에 오류가 발생하면 source file에 대한
오류정보를 출력하고 성공적으로 compile이 되면
a.out이란 file을 default로 생성한다.
 a.out
– cc 명령어로 compile이 에러 없이 끝나면 생성되는
파일로서 실행하면 프로그램의 결과가 출력된다.
Chapter 1 Writing an ANSI C Programming
13
Hello Program
[Ex]
/* The traditional first program in honor of
Dennis Ritchie who invented C at Bell Labs in 1972 */
주석문은 /* ~ */ 를 사용
#include <stdio.h>
int main(void)
{
printf(“Hello, world!\n”);
return 0;
}
Chapter 1 Writing an ANSI C Programming
#로 시작하는 부분은
preprocessing directive라고 한다.
Hello, world!
14
Dissection of the hello Program
[Ex]
int main(void)
모든 프로그램은 프로그램이 시작할 때
main이라는 함수를 포함한다.
{
괄호는 각각 function의
block 시작함을 알려준다.
printf(“Hello, world!\n”);
return 0;
}
이 printf는 화면에 message를 표시할
수 있게 하는 function.
각 문장의 끝은 ; (semicolon)을 사용.
OS로 0의 값이 반환된다.
Chapter 1 Writing an ANSI C Programming
15
Variables, Expressions, and Assignments

Variables ( identifier )
– 변수 – 프로그램 실행 중에 발생할 수 있는 임의의 값(변동
되는 값)을 저장하기 위한 기억장소를 말한다.
– 할당된 memory 주소 대신 변수명에 의해 data저장,참조.
– 변수의 type에 따라 data가 저장되는 방식과 조작방식이 달
라짐으로 type의 설정 중요
C basic data types
int
Numbers
float
Single precision floating point
double
Double precision floating point
char
Characters
Chapter 1 Writing an ANSI C Programming
16
Variables, Expressions, and Assignments
 Variables Declare (변수 선언)
– 모든 변수는 expression과 statement 내에서 사용되기 전에
반드시 선언하여 compiler에게 필요한 정보 제공
[Ex]
int inches, feet, fathoms; /* int type으로 inches, feet,
fathoms라는 이름의 변수를 선언한다 */
float x, y;
/* float type의 변수 x, y 를 선언한다. */
char c;
/* character type의 변수 c 를 선언한다. */
Chapter 1 Writing an ANSI C Programming
17
Variables, Expressions, and Assignments
 Variables Naming Rule
– 의미 있는 이름을 부여하여 readability를 향상.
– 영문자 또는 _로 시작. letters, digits, _(underbar) 로 구성.
[Ex]
사용 가능한 변수명 : times10, get_next_char, _done
사용 불가능한 변수명 : 10times, get-next-char, int
– maximum 255자 까지 가능.
– 예약어는 사용할 수 없음.
예약어( Reserved Word )
auto, break, case, char, const, continue, double
else, enum, float, for, goto, if, int, return, short, signed,
sizeof, static, struct, switch, typedef, union, while……
Chapter 1 Writing an ANSI C Programming
18
Variables, Expressions, and Assignments
 Constants (상수)
– 프로그램 수행 중 변경되지 않는 data.
– 이름을 부여함으로써 readability향상.
[Ex]
#define PI 3.14159
/* 3.14159 대신 상수 명 ‘PI’사용*/
area = PI * radius * radius;
/*Preprocessor에 의해 PI대신 3.14159로 대체되어 compile됨*/
Chapter 1 Writing an ANSI C Programming
19
Variables, Expressions, and Assignments
 Assignment(할당)
– 할당 연산자는 = 이다.
– 변수들은 할당의 방법을 통해 어떠한 값을 가질 수 있다.
[Ex]
height = 8;
/* height is now 8 */
length = 12;
/* length is now 12 */
width = 10;
/* width is now 10 */
volume = height * length * width;
[Ex]
12 = i;
i + j = 0;
-i = j;
Chapter 1 Writing an ANSI C Programming
/* wrong */
/* wrong */
/* wrong */
20
Variables, Expressions, and Assignments
[Ex]
#include <stdio.h>
int main(void)
{
char c;
c=‘A’;
printf(“%c\n”, c);
return 0;
}
/*변수 c를 character로 선언*/
/*대입문-변수에 값을 할당 */
/*변수 c의 값을 출력*/
A
Chapter 1 Writing an ANSI C Programming
21
Variables, Expressions, and Assignments
[Ex]
#include <stdio.h>
int main(void)
{
float x, y;
}
/* 변수 x,y를 float type으로 선언한다. */
x = 1.0;
/* 변수 x에는 1.0을 대입하고 */
y = 2.0;
/* 변수 y에는 2.0을 대입한다. */
printf(“The sum of x and y is %f.\n”, x + y);
/* x + y의 결과값을 %f의 format으로 출력한다.*/
return 0;
The sum of x and y is 3.000000
Chapter 1 Writing an ANSI C Programming
22
Initialization
 변수를 선언한 후에 초기화를 해야 한다. 몇몇의 시스
템에서는 초기화되지 않은 변수를 사용하면 컴파일러
가 오류 메세지를 출력함.
 정의한 변수명을 통하여 설정된 메모리 공간을 초기화.
 변수를 대입문의 right side에 처음 사용시 반드시 초기
화 필요. (기존의 메모리에 혹시라도 남아 있을 수 있는
garbage값이 사용될 수 있다.)
[Ex]
int y;
int x = 5 + y ;
/* 현재 y값이 무엇인지 확실치 않음 */
Chapter 1 Writing an ANSI C Programming
23
Initialization
[Ex]
int x, y;
x=0;
y=0;
/*x, y를 정수로 선언*/
/*x를 ‘0’으로 초기화 */
/*y를 ‘0’으로 초기화*/
[Ex]
int x=0, y=0;
/*선언과 동시에 초기화 */
[Ex]
int x, y=0;
/*y만 0으로 초기화*/
char c = ‘A’;
/* 변수 c가 char type으로 선언되고
‘A’의 값으로 초기화 */
Chapter 1 Writing an ANSI C Programming
24
The Use of #define and #include
 Preprocessor
– 컴파일 전 가장 우선적으로 처리되는 부분을 말하며 외부파
일을 불러오는 작업(include) 이나 변수명을 새로운 임의의
문자로 변환하여 (define) 사용하는 작업들을 주로 한다.
– #define이 사용된 라인 이후에 그 영향을 미친다.
[Ex]
#include <stdio.h>
#include “filename”
#define LIMIT 100
#define PI 3.14159
시스템에서 사용 가능한 standard library를
선언. stdio.h에 정의되어 있는 함수들을
사용하기 위해서 사용.
필요한 file을 사용하기 위하여 filename을
불러들이는 구문. stdio.h에 없고 사용자가
직접 만들어서 사용하기 위해서 사용.
프로그램 내에 100과 3.14159를
각각 LIMIT와 PI로 선언하여 사용한다.
Chapter 1 Writing an ANSI C Programming
25
Program 예제 1
 printf()는 Print Format의 약어로, 화면에 내용을 출력
할 때 사용하는 명령(함수)이다.
printf(“format string..”, argument list);
[Ex]
#include <stdio.h>
main() {
int n ;
n = 25 * 10;
printf(“%d”, n);
}
[Ex]
printf(“%c%c%c”, ’a’, ’b’, ’c’ );
printf(“%s”, “def” );
Chapter 1 Writing an ANSI C Programming
/* 250 이 출력된다. */
/* abc 가 출력된다. */
/* def 가 출력된다. */
26
Use of printf()
 Conversion characters (format string)
– 작은 따옴표는 문자 상수를 나타낼 때 사용한다.
– 큰 따옴표는 문자열 형태를 나타낼 때 사용한다.
%c
character (문자)
printf(“%c”, ’a’);
%d
decimal integer (10진수)
printf(“%d”, 100);
%e
floating point number in
scientific notation
printf(“%e”, 1.234);
%f
floating point number
printf(“%f”, 1.234);
%g
e-format또는 f-format
printf(“%g”, 1.234);
%s
string (문자열)
printf(“%s”, ”C-book”);
Chapter 1 Writing an ANSI C Programming
27
Conversion Specification
 integer %d
printf(“ %m.pd”, a );
printf(“ %-m.pd”, a);
/*m, p 정수.오른쪽정렬 */
/*m, p 정수. 왼쪽정렬 */
[Ex]
a = 12 ;
printf(“%5.3d %-5.4d %d\n” ,a, a, a+11);
^^0120012^23
– %5.3d로 출력 : ^^012
( 5자리 확보, 3자리 수 012를 오른쪽 정렬하여 출력)
– %-5.4d로 출력 : 0012^
( 5자리 확보, 4자리 수 0012를 왼쪽 정렬하여 출력)
– %d로 출력
: 23
(a +11의 값 ‘23’을 그대로 출력)
Chapter 1 Writing an ANSI C Programming
28
Conversion Specification
 float %f
printf(“ %m.pf”, a );
printf(“ %-m.pf”, a);
/*m, p 정수.오른쪽정렬 */
/*m, p 정수. 왼쪽정렬 */
[Ex]
^83.126083.1260^84.126000^^83.13
a = 83.126 ;
printf(“%8.4f%-8.4f%f%7.2f\n”, a, a, a, a );
– %8.4f : ^83.1260
(소수점을 포함 총 8자리 확보, 소수점 이하 4자리 표시)
– %-8.4f : 83.1260^
(%8.4f와 동일 , 그러나 음수로 인해 왼쪽으로 정렬)
– %f
: 83.126000
(제한 없이 어느 경우에도 소수점 이하 6자로 출력)
– %7.2f : ^^83.13
(7자리 확보, 소수점 이하 2자리-반올림, 오른쪽 정렬)
Chapter 1 Writing an ANSI C Programming
29
Conversion Specification
 float %e
printf(“ %m.pe”, a );
printf(“ %-m.pe”, a);
/*m, p 정수.오른쪽정렬 */
/*m, p 정수. 왼쪽정렬 */
[Ex]
^^1.24e-041.240e-04^0.000124^1.2e-04
a = 0.000124 ;
printf(“%10.2e%-10.3e%f%8.1e\n” a, a, a, a );
– %10.2e : ^^1.24e-04
(10자리 확보, 소수점 이하 2자리, 오른쪽 정렬)
– %-10.3e : 1.240e-04^
(10자리 확보, 소수점 이하 3자리, 왼쪽 정렬)
– %f
: 0.000124
(소수점 이하 6자리, 그대로 출력, 오른쪽 정렬)
– %8.1e
: ^1.2e-04
(8자리 확보, 소수점 이하 1자리-반올림)
Chapter 1 Writing an ANSI C Programming
30
Program 예제 1
[Ex]
#include <stdio.h>
int main(void)
{
int inches, feet, fathoms;
}
fathoms = 7;
feet = 6 * fathoms;
Inches = 12 * feet;
printf(“Wreck of the Hesperus:\n”);
printf(“Its depth at sea in different units:\n”);
printf(“
%d fathoms\n”, fathoms);
printf(“
%d feet\n”, feet);
printf(“
%d inches\n”, inches); Wreck of the Hesperus:
Its depth at sea in different units:
return 0;
Chapter 1 Writing an ANSI C Programming
7 fathoms
42 feet
504 inches
31
Use of scanf()
 scanf() - key board로부터 data를 입력 받기 위해 사
용하는 함수이다.
scanf(“format string..”, argument list);
%c
character (문자)
scanf(“%c”, &a);
%d
decimal integer (10진수)
scanf(“%d”, &a);
%f
floating point number (float)
scanf(“%f”, &a);
%lf
floating point number (double)
scanf(“%lf”, &a);
%Lf
floating point number (long double)
scanf(“%Lf”, &a);
%s
string (문자열)
scanf(“%s”, &a);
Chapter 1 Writing an ANSI C Programming
32
Use of scanf()
[Ex]
#include <stdio.h>
main() {
int n ;
printf(“Enter number : “);
scanf(“%d”, &n);
printf(“You entered : %d”, n);
return 0;
}
Enter number : 10 ꎠ
You entered : 10
Chapter 1 Writing an ANSI C Programming
33
Use of scanf()
[Ex]
#include <stdio.h>
#define PI 3.141592653589793 define문을 사용하여 3.141592..의 숫자를
PI로 정의하여 프로그램 안에서 사용.
int main(void)
{
double radius;
printf(“\n%s\n\n%s”,
“This program computes the area of a circle.”,
“Input the radius: “);
scanf(“%lf”, &radius);
printf(“\n%s\n%s%.2f%s%.2f%s%.2f\n%s%.5f\n\n”,
“Area = PI * radius * radius”,
“
= “, PI, “ * “, radius, “ * “, radius,
“
= “, PI * radius * radius);
return 0;
This program computes the area of a circle.
}
Input the radius: 10 ꎠ
Area = PI * radius * radius
= 3.13 * 10.00 * 10.00
= 313.15927
Chapter 1 Writing an ANSI C Programming
34
while Statement
 조건식이 true인 동안 loop내의 명령들을 수행하다가
false가 되면 loop를 탈출하는 조건 반복문이다.
 while은 loop 시작부분에서 식의 값을 검사하기 때문
에 식이 초기에 false이면 loop가 한번도 실행되지 않
는다.
 while statement Syntax
while (expression)
statement;
Chapter 1 Writing an ANSI C Programming
35
while Statement
[Ex]
#include <stdio.h>
int main(void)
{
int i = 1, sum = 0;
while ( i <= 10 ) {
/* i의 값이 10보다 작을 경우에*/
sum = sum + i;
/* sum에 i의 값을 더한다. */
i = i + 1;
/* i의 값을 1씩 증가 시킨다. */
}
printf(“Sum = %d\n”, sum);
return 0;
}
Sum = 55
Chapter 1 Writing an ANSI C Programming
36
Computing Sums

Algorithm for Computing Sum
–
cnt와 sum의 두 변수를 초기화한다.
–
user가 입력할수 있는 prompt를 만든다.
–
data를 반복적으로 읽고 cnt를 증가시키고 sum에 더한다.
–
cnt와 cum의 값을 출력한다.
Chapter 1 Writing an ANSI C Programming
37
while Statement
[Ex]
#include <stdio.h>
int main(void)
{
int cnt = 0;
float sum = 0.0, x;
printf("The sum of your numbers will be computed\n\n");
printf("Input some numbers: ");
while (scanf("%f", &x) == 1) {
cnt = cnt + 1;
sum = sum + x;
}
printf("\n%s%5d\n%s%12f\n\n","Count:", cnt, “Sum:",sum);
return 0;
The sum of your number will be computed
}
Input some numbers: 1.1 2.02 3.003 4.0004 5.0005 a ꎠ
수치 아닌 char의 입력 시 error발
Count:
5
생으로 scanf함수의 return값이 0
Sum: 15.123449
Chapter 1 Writing an ANSI C Programming
38
Dissection of the find_sum Program
 scanf("%f", &x) == 1
– ==는 equal operator로 a==b라면 a와 b가 같은지를 판단. 같다면 true
를 다르다면 false를 산출한다.
– x에 float값이 대입하는 것이 에러없이 끝난다면
scanf("%f", &x) = 1이 되고, 1 == 1이 되어 조건은 true가 되어
loop내의 statement가 실행된다.
– 만약의 위의 statement가 실행되는데 에러가 발생한다면 조건은
0 == 1이 되며 서로 다르므로 산출결과는 false가 되므로 loop문 안의
statement들은 실행이 되지 않는다. [Ex]
수치이외의 char입력 시 error
 printf("\n%s%5d\n%s%12f\n\n", "Count:", cnt, " Sum:", sum);
– 출력되는 형태의 format을 지정해준다.
Chapter 1 Writing an ANSI C Programming
39
Good Coding Style
 Good Coding Style( code convention )은
programming의 기본이다.
– 공백과 comment를 잘 사용하면 다른 사람들이라도 쉽게 읽
고, 이해하고, 보기 편하게 해준다.
– token사이의 spaces는 무관.
– 여러 statements를 1 line에 쓸 수 있음
– ‘#’로 시작되는 directive statements는 1 line에 1 statement
만 허용.
– 블록 단위로 들여쓰기를 하여 readability의 향상.
– 논리적 단위로 blank line을 삽입 함으로서 readability의 향상.
Chapter 1 Writing an ANSI C Programming
40
Good Coding Style
 Bad Coding Style 예제
#include <stdio.h>
#define FREEZING_PT 32.0
#define SCALE_FACTOR (5.0/9.0)
main() { float fahrenheit, celsius; printf(
“Enter Fahrenheit temperature: “); scanf(“%f”, &fahrenheit);
celsius=(fahrenheit-FREEZING_PT) * SCALE_FACTOR;
printf( “Celsius equivalent: %.1f\n”, celsius);return 0 ;}
– 여러 문장을 한 라인에 쓰는 것은 가능하지만 Good coding
style이라고 권고 하기는 좋지 않다.
Chapter 1 Writing an ANSI C Programming
41
Good Coding Style
 Good Coding Style 예제
#include <stdio.h>
#define FREEZING_PT 32.0
#define SCALE_FACTOR ( 5.0 / 9.0 )
공백라인 삽입
main()
{
float fahrenheit, celsius;
printf( “Enter Fahrenheit temperature: “);
scanf( “%f”, &fahrenheit );
공백 삽입
celsius = ( fahrenheit - FREEZING_PT ) * SCALE_FACTOR;
printf( “Celsius equivalent: %.1f\n”, celsius );
}
return 0 ;
들여쓰기 적용
Enter Fahrenheit temperature: -40 ꎠ
Celsius equivalent: -40.0
Chapter 1 Writing an ANSI C Programming
42
Good Coding Style
 Good Coding Style 예제
#include <stdio.h>
main(void){
int i;
int n = 0;
int sum = 0;
공백라인 삽입
printf(“Enter 10 integers: \n“);
while ( n < 10 ) {
scanf( “%d” , &i );
if ( i != 0 ) {
단계별로 들여쓰기 적용
sum += i;
n++;
}
}
Enter 10 integers :
printf( “Sum = %d\n“, sum );
1 2 3 4 5 6 7 8 9 10 11 12 13 ꎠ
}
Sum = 55
Chapter 1 Writing an ANSI C Programming
43
한글 변수명 사용 금지 => 에러 발생
Chapter 1 Writing an ANSI C Programming
44