일반적인프로그램의기본구성형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력 데이터처리 결과출력 1-23
덧셈프로그램 #1 주석 전처리기지시어 /* 두개의숫자의합을계산하는프로그램 */ #include <stdio.h> 함수 int main(void) { int x; int y; int sum; // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 두정수의합을저장하는변수 변수선언 x = 100; y = 200; 연산 sum = x + y; printf(" 두수의합 : %d", sum); 문장 return 0; } 1-24
주석 (comment) /* 두개의숫자의합을계산하는프로그램 */ #include <stdio.h> 주석은코드를설명하는글입니다. int main(void) {......... } 주석 1-25
/* 한줄로된주석 */ 3 가지방법의주석 /* 여러줄로된주석 */ // 여기서부터줄의끝까지주석 1-26
프로그래밍언어과목의표준주석표기 Standard comment at each source code file produced in this course /** * File Name: "???.c" or "xxx.h", or "yyy.cpp" * Description: * - This program is...... * * Programmed by Gil-Dong Hong (November 15, 2009), * Last updated: Version 2.0, September 1, 2012 (by Young-Chul Kim). * * ======================================================== * Version Control (Explain updates in detail) * ======================================================== * Name YYYY/MM/DD Version Remarks * Gil-Dong Hong 2009/11/15 v1.0 1:1 Chatting on UDP socket, 2 threads * John Doe 2010/05/01 v1.1 User interface has been updated with GUI * Young-Chul Kim 2012/09/01 v2.0 Major change in the program structure * ======================================================== */ 1-27
들여쓰기 (indentation) 들여쓰기 (indentation): 같은수준에있는문장들을왼쪽끝에서몇자안으로들여쓰는것 1-28
주석과들여쓰기가없다면.. #include <stdio.h> int main(void) { int x; int y; int sum; x = 100; y = 200; sum = x + y; printf(" 두수의합 : %d", sum); return 0; } 실행은되지만무슨처리를하고있는프로그램인지알기가힘들고또한들여쓰기가안되어있어서같은수준에있는문장들을구분하기힘듭니다. 1-29
전처리기 (preprocessor) #include <stdio.h> # 기호로시작 헤더파일 stdio.h를소스코드안에포함 stdio.h는표준입출력에대한라이브러리함수의정의가들어있다. 1-30
전처리기 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!"); return 0; } // stdio.h int printf(char *, ); stdio.h hello.c 1-31
함수 (function) 함수 (function): 특정기능을수행하는처리단계들을중괄호로묶어서이름을붙인것 입력 함수는프로그램을구성하는기본적인단위 ( 부품 ) 함수 main() 도함수중하나 출력 1-32
함수의구조 1-33
함수안에들어있는것 Q) 그렇다면함수안에들어있는것은무엇인가? 입력 A) 함수안에는함수가처리하는처리단계 ( 문장 ) 들이중괄호안에나열 문장 1; 문장 2; 문장 3;... 함수 위에서아래로순차적으로실행된다. 출력 1-34
함수 작업을수행하는문장 (statement) 들은함수안에들어가야함 1-35
함수호출 (function call) Q) 함수안에있는문장들은언제실행되는가? A) 함수가호출되면실행된다. Q) 함수호출은어떻게하는가? A) 함수의이름을적어주면된다. 함수 B(); 함수 A 문장 1; 문장 2; 문장 3;... 함수 C 함수 B 문장 1; 문장 2; 문장 3;... 문장 1; 문장 2; 문장 3;... 1-36 프로그램
함수호출 Q) C 프로그램의많은함수중에서가장먼저실행되는것은? A) main() 함수이다. 다른함수들은 main() 으로부터직간접적으로호출된다. input() main() 문장 1; 문장 2; 문장 3;... process() input(); process(); output(); output() 문장 1; 문장 2; 문장 3;... 문장 1; 문장 2; 문장 3;... 1-37
문장 (statement) 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 각문장은 ; ( 세미콜론 ) 으로끝나야한다. 1-38
return 문장 1-39
main() 은누가호출할까? 1-40
변수 (variable) int x; // 첫번째정수를저장하는변수 int y; // 두번째정수를저장하는변수 int sum; // 두정수의합을저장하는변수 Q) 변수란무엇인가? A) 프로그램이사용하는데이터를일시적으로저장할목적으로사용하는메모리공간 1-41
변수의종류 변수는데이터를담는상자로생각할수있다. 데이터 자료형 int x; 변수의이름 x 2 변수의이름 변수에는데이터의종류에따라여러가지타입이존재한다 : char ( 문자 ) int ( 정수 ) double ( 실수, 부동소숫점, double precision floating point) 1-42
변수의이름 식별자 (identifier): 변수나함수의이름 식별자를만드는규칙 식별자는영어의대소문자, 숫자, 밑줄문자 _ 로이루어진다. 식별자는숫자로시작할수없다. 대문자와소문자를구별하며 C 언어의키워드와똑같은이름은허용되지않는다. 식별자의예 : s, s1, student_number: 올바른식별자 $s, 2nd_student, int: 잘못된식별자 A 12 123.456 ch i fvalue 1-43
변수선언 변수선언 : 컴파일러에게어떤타입의변수가사용되는지를미리 알리는것 int x; 자료형 변수의이름 1-44
자료형 (data type) 자료형 (data type): 변수가저장할데이터가정수인지 실수인지, 아니면또다른어떤데이터인지를지정하는것 1-45
변수선언 int x; // 첫번째정수를저장하는변수 int y; // 두번째정수를저장하는변수 int sum; // 두정수의합을저장하는변수 각변수는정수를저장할수있다. x y sum 메모리공간에변수가만들어지고이름이붙여진다. 1-46
상수 (Constant) x = 100; y = 200; 상수 상수 (constant): 그값이프로그램이실행하는동안변하지않는수 12 12 변수는실행도중에값을변경할수있으나상수는한번값이정해지면변경이불가능합니다. 변수 상수 1-47
수식 (expression) sum = x + y; 수식 (expression): 피연산자 (operand) 와연산자 (operator) 로구성된식 수식은결과값을가진다. x 가 3 일때수식 x 2-5x + 6 의값을계산하라. int x, y; x = 3; y = x * x - 5 * x + 6; printf( %d\n, y); 1-48
산술연산 연산 연산자 C 수식 수학에서의기호 덧셈 + x + y x + y 뺄셈 - x -y x -y 곱셈 * x * y xy 나눗셈 / x / y x / y 나머지 % x % y x mod y 1-49
sum = x + y; 산술연산 5 sum 2 = x + y 3 1-50
대입연산 x = 100; 대입연산 (assignment operation): 변수에값을저장하는연산 대입연산 = 배정연산 = 할당연산 = 연산자는변수에값을저장합니다. x = 100 ; 1-51
정리 1-52
printf() printf(): 모니터에출력을하기위한표준출력라이브러리함수 1-53
문자열출력 printf("hello World!\n"); 문자열 (string): Hello World! n 와같이문자들을여러개나열한것 Hello World! H e l l o W o 실행결과 printf() 1-54
변수값출력 printf(" 두수의합 : %d", sum); 두수의합 : 30 형식지정자의개수와변수의개수와순서는같아야한다. 1-55
printf() 함수의형식지정자 형식지정자 : printf() 에서값을출력하는형식을지정한다. 형식지정자 의미예실행결과 %d 10진정수로출력 printf( %d \n, 10); 10 %f 실수로출력 printf( %f \n, 3.14); 3.14 %c 문자로출력 printf( %c \n, a ); a %s 문자열로출력 printf( %s \n, Hello ); Hello 1-56
여러개의변수값출력 형식제어문자열 printf( 학번 %d 의성적은 %f \n, st_id, score ); 학번 23 의성적은 3.99 형식지정자의개수와변수의개수와순서는같아야한다. 1-57
두번째덧셈프로그램 // 사용자로부터입력받은 2 개의정수의합을계산하여출력 #include <stdio.h> int main(void) { int x; // 첫번째정수를저장할변수 int y; // 두번째정수를저장할변수 int sum; // 2 개의정수의합을저장할변수 printf(" 첫번째숫자를입력하시오 :"); // 입력안내메시지출력 scanf("%d", &x); // 하나의정수를받아서 x 에저장 x 2 + 3 y 5 sum printf(" 두번째숫자를입력하시오 :"); // 입력안내메시지출력 scanf("%d", &y); // 하나의정수를받아서 x 에저장 sum = x + y; // 변수 2 개를더한다. printf(" 두수의합 : %d", sum); // sum 의값을 10 진수형태로출력 첫번째숫자를입력하시오 : 2 두번째숫자를입력하시오 : 3 두수의합 : 5 } return 0; // 0 을외부로반환 1-58
scanf() scanf(): 표준입력장치 ( 키보드 ) 로부터입력을하기위한라이브러리함수 형식제어문자열 scanf( %d %f, &number, &height ); 23 45.7 형식지정자의개수와변수의개수와순서는같아야한다. 1-59
scanf() 의동작 키보드로부터값을받아서변수에저장한다. 변수의주소 (address) 를필요로한다. 1-60
scanf() 의형식지정자 형식지정자 의미 예 %d 정수를 10진수로입력한다 scanf( %d, &i); %f float 형의실수로입력한다. scanf( %f, &f); %lf double 형의실수로입력한다. scanf( %lf, &d); %c 문자형태로입력한다. scanf( %c, &ch); %s 문자열형태로입력한다. char s[10]; scanf( %s, &s); 1-61
scanf() 형식지정자와변수의자료형은일치하여야함 1-62
float ratio = 0.0; scanf("%f", &ratio); 실수입력 double scale = 0.0; scanf("%lf", &scale); 주의!!! 1-63
원의면적계산프로그램 원의반지름이주어졌을때, 면적계산하기 원의면적 = 3.14159 x 반지름 x 반지름 Algorithm AreaOfCircle() 1: // input arguments: none 2: double radius; // local variable 3: double area; // local variable 4: input radius; 5: area = 3.14159 * radius * radius; 6: printout radius and area; 7: end 원의반지름 (radius) 원의면적 = r 2 1-64
원의면적프로그램소스코딩 /* 원의면적을계산하는프로그램 */ #include <stdio.h> int main(void) { float radius; // 원의반지름 float area; // 면적 printf(" 반지름을입력하시오 : "); scanf("%f", &radius); area = 3.14 * radius * radius; 5.0 5.0 * 3.14 5.0 radius * = 78.500000 area } printf(" 원의면적 : %f\n", area); return 0; 반지름을입력하시오 : 5.0 원의면적 :78.500000 1-65
사각형의둘레와면적 필요한변수는 w, h, area, perimeter라고하자. 변수의자료형은실수를저장할수있는 double형으로하자. area = w*h; perimeter = 2*(w+h); 1-66
사각형의둘레와면적계산 Pseudo code Algorithm PerimeterAndAreaOfRectangle() 1: // input arguments: none 2: double width; // local variable 3: double height; // local variable 4: double area; 5: double perimeter; 6: input width; 7: input height; 8: area = width * height; 9: perimeter = (width + height) * 2.0; 10: printout area and perimeter of rectangle with width and height; 11: end 1-67
사각형의둘레와면적계산 Source Coding /** Perimeter and Area of Rectangle */ #include <stdio.h> int main(void) { double width; double height; double area; double perimeter; } printf( 사각형의폭과높이를입력하시오 : ); scanf( lf, &width); scanf( lf, &height); area = width*height; perimeter = 2*(width+height); printf( 폭 (%lf), 높이 (%lf) 인사각형 : ); printf( 넓이 :%lf,",area); printf( 둘레 :%lf n", perimeter); return 0; 1-68
Homework 1 1.1 1부터 10까지를더하여합을구하고, 그평균을구하는알고리즘의 pseudo code를작성하라. 1.2 100명의학생들의성적을차례로입력하고, 가장우수한성적, 가장낮은성적, 평균성적을구하는알고리즘의 pseudo code를작성하라. 1.3 사용자로부터원기둥의반지름, 원기둥의높이를입력받고, 이원기둥의체적 (volume) 과표면적 (surface area) 를계산하는프로그램의 pseudo code를작성하라. 1.4 위1.3문제에서작성한 pseudo code에따라c 프로그램으로작성하고, 실행화면을 capture하여 source code와함께제출하라. 1-69