쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 덧셈프로그램 #1 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 주석 전처리기지시어 /* 두개의숫자의합을계산하는프로그램 */ int x; int y; int sum; // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 두정수의합을저장하는변수 변수선언 데이터입력 데이터처리 결과출력 함수 x = 100; y = 200; sum = x + y; printf(" 두수의합 : %d", sum); return 0; 문장 연산 1
프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* ------------------------ 저자 : 홍길동날짜 : 2013.3.4 여러줄로이루어진주석 -------------------------- */ // 여기서부터줄의끝까지주석 주석 /* This program accepts an array of N elements and a key. * * Then it searches for the desired element. If the search * * is successful, it displays "SUCCESSFUL SEARCH". * * Otherwise, a message "UNSUCCESSFUL SEARCH" is displayed. */ void main() 2
들여쓰기 주석과들여쓰기가없다면.. 들여쓰기 (indentation): 같은수준에있는문장들을왼쪽끝에서몇자안으로들여쓰는것 int x; int y; int sum; x = 100; y = 200; sum = x + y; printf(" 두수의합 : %d", sum); return 0; 실행은되지만무슨처리를하고있는프로그램인지알기가힘들고또한들여쓰기가안되어있어서같은수준에있는문장들을구분하기힘듭니다. 중간점검 전처리기 주석은 /* /* */ */ 와같이중첩할수있을까? 주석은한줄이상이될수있는가? 주석에는어떤내용을쓰면좋은가? 주석은프로그램의동작에어떤영향을끼치는가? 외부파일을포함시키라는의미의전처리기 # 기호로시작 stdio.h 는표준입출력에대한라이브러리함수의정의가들어있다. 3
/* 첫번째프로그램 */ 전처리기 // stdio.h int printf(char *,); 중간점검 printf() 를사용하기위하여포함시켜야하는헤더파일은무엇인가? 전처리기 #include 의의미는무엇인가? printf("hello World!"); return 0; stdio.h hello.c 함수 함수의구조 함수 (function): 특정기능을수행하는처리단계들을괄호로묶어서이름을붙인것 입력 함수의출력타입 함수의이름 함수의입력타입, void 는입력이없다는의미이다. 함수는프로그램을구성하는기본적인단위 ( 부품 ) 출력 함수 함수의시작 함수의몸체 함수가수행하는작업에해당하는문장들이들어간다. 함수의종료 4
함수안에들어있는것 함수 Q) 그렇다면함수안에들어있는것은무엇인가? A) 함수안에는함수가처리하는처리단계 ( 문장 ) 들이중괄호안에나열 문장 1; 문장 2; 문장 3; 입력 함수 위에서아래로순차적으로실행된다. 작업을수행하는문장은함수안에들어가야함 여기에작업을넣을것. 출력 함수호출 Q) 함수안에있는문장들은언제실행되는가? A) 함수가호출되면실행된다. Q) 함수호출은어떻게하는가? A) 함수의이름을적어주면된다. 함수호출 Q) 많은함수중에서가장먼저실행되는것은? A) main() 함수이다. 다른함수들은 main() 으로부터직간접적으로호출된다. input() 함수 B(); 함수A 문장 1; 문장 2; 문장 3; 함수B 문장 1; 문장 2; 문장 3; 함수C 문장 1; 문장 2; 문장 3; main() input(); process(); output(); output() 문장 1; 문장 2; 문장 3; 문장 1; 문장 2; 문장 3; process() 문장 1; 문장 2; 문장 3; 프로그램 5
문장 return 문장 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 문장은 ;( 세미콜른 ) 으로끝나야한다. main() 은누가호출할까? 중간점검 main() printf() 함수를실행하려면함수를호출하면됩니다. 모든 C 프로그램에반드시있어야되는함수는무엇인가? 함수의시작과끝을나타내는기호는무엇인가? 모든문장은어떤기호로끝나는가? 운영체제 printf (.. ); 문장 1; 문장 2; 문장 3; 6
변수 int x; // 첫번째정수를저장하는변수 int y; // 두번째정수를저장하는변수 int sum; // 두정수의합을저장하는변수 변수의종류 변수는데이터를담는상자로생각할수있다. Q) 변수란무엇인가? A) 프로그램이사용하는데이터를일시적으로저장할목적으로사용하는메모리공간 자료형 int x; 변수의이름 x 2 데이터 변수의이름 변수의종류 변수에는데이터의종류에따라여러가지타입이존재한다. 변수의이름 식별자 (identifier): 변수나함수의이름 식별자를만드는규칙 식별자는영어의대소문자, 숫자, 밑줄문자 _ 로이루어진다. 식별자는숫자로시작할수없다. 대문자와소문자를구별하며 C 언어의키워드와똑같은이름은허용되지않는다. 식별자의예 : s, s1, student_number: 올바른식별자 $s, 2nd_student, int: 잘못된식별자 A 12 123.456 ch i fvalue 7
변수선언 변수선언 : 컴파일러에게어떤타입의변수가사용되는지를미리알리는것 자료형 자료형 (data type): 변수가저장할데이터가정수인지실수인지, 아니면또다른어떤데이터인지를지정하는것 int x; 자료형 변수의이름 변수선언 int x; // 첫번째정수를저장하는변수 int y; // 두번째정수를저장하는변수 int sum; // 두정수의합을저장하는변수 x = 100; y = 200; 상수 상수 상수 (constant): 그값이프로그램이실행하는동안변하지않는수 각변수는정수를저장할수있다. x y sum 12 12 변수는실행도중에값을변경할수있으나상수는한번값이정해지면변경이불가능합니다. 메모리공간에변수가만들어지고이름이붙여진다. 변수 상수 8
중간점검 수식 int 형변수 i 를선언하는문장을작성하여보자. double 형변수 f 를선언하는문장을작성하여보자. 변수선언은함수의어떤위치에서하여야하는가? sum = x + y; 수식 (expression): 피연산자와연산자로구성된식 수식은결과값을가진다. x 가 3 일때수식 x 2-5x + 6 의값을계산하라. int x, y; x = 3; y = x * x - 5 * x + 6; printf( %d\n, y); 산술연산 산술연산 sum = x + y; 연산연산자 C 수식수학에서의기호 덧셈 + x + y x + y 뺄셈 - x - y x - y 곱셈 * x * y xy 5 나눗셈 / x / y x / y 나머지 % x % y x mod y sum 2 = x + y 3 9
x = 100; 대입연산 대입연산 (assignment operation): 변수에값을저장하는연산 대입연산 = 배정연산 = 할당연산 x = 100 ; = 연산자는변수에값을저장합니다. int x; int y; int sum; x = 100; y = 200; sum = x + y; 프로그램 printf(" 두수의합 : %d", sum); 정리 x y sum 100 x 100 x 컴퓨터내부 변수에값이대입된다. 200 y 200 y 변수가생성된다. sum 300 sum 덧셈연산이수행된다. return 0; 중간점검 printf() 변수 a 와변수 b 의곱을변수 product 에저장하는문장을작성하여보자. 변수 a 를변수 b 로나눈값을변수 quotient 에저장하는문장을작성하여보자. printf(): 모니터에출력을하기위한표준출력라이브러리함수 10
문자열출력 변수값출력 printf("hello World!\n"); 문자열 (string): Hello World!\n 와같이문자들을여러개나열한것 Hello Wo H e l l o W o 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 11
주의! 중간점검 printf() 에서변수의값을실수형태로출력할때사용하는형식지정자는무엇인가? printf() 를사용하여서정수형변수 k 의값을출력하는문장을작성하여보자. 사용자로부터입력을받아보자. 덧셈프로그램 #2 두번째덧셈프로그램 // 사용자로부터입력받은 2 개의정수의합을계산하여출력 int x; int y; int sum; printf(" 첫번째숫자를입력하시오 :"); scanf("%d", &x); printf(" 두번째숫자를입력하시오 :"); scanf("%d", &y); // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 2개의정수의합을저장할변수 // 입력안내메시지출력 // 하나의정수를받아서 x에저장 // 입력안내메시지출력 // 하나의정수를받아서 x에저장 sum = x + y; // 변수 2개를더한다. printf(" 두수의합 : %d", sum); // sum의값을 10진수형태로출력 return 0; // 0 을외부로반환 첫번째숫자를입력하시오 :10 두번째숫자를입력하시오 :20 두수의합 : 30 12
scanf() 의동작 scanf() 키보드로부터값을받아서변수에저장한다. 변수의주소를필요로한다. 형식지정자 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); 13
실수입력시주의할점 중간점검 float ratio = 0.0; scanf("%f", &ratio); float 형은 %f 사용 scanf() 를시용하여서사용자로부터실수값을받아서 double 형의변수 value 에저장하는문장을작성하여보자. double scale = 0.0; scanf("%lf", &scale); double 형은 %lf 사용 /* 저축액을계산하는프로그램 */ int salary; int deposit; 연봉계산프로그램 // 월급 // 저축액 printf(" 월급을입력하시오 : "); scanf("%d", &salary); deposit = 10 * 12 * salary; printf("10 년동안의저축액 : %d\n", deposit); return 0; 사용자로부터월급을입력받는다. 월급에 10*12 를곱하여 10 년동안의저축액을계산한다. 결과를출력한다. /* 원의면적을계산하는프로그램 */ float radius; float area; printf(" 반지름을입력하시오 : "); scanf("%f", &radius); area = 3.14 * radius * radius; printf(" 원의면적 : %f\n", area); return 0; 원의면적프로그램 // 원의반지름 // 면적 원의면적계산 월급을입력하시오 : 200 10 년동안의저축액 : 24000 반지름을입력하시오 : 5.0 원의면적 : 78.500000 14
/* 환율을계산하는프로그램 */ float rate; float usd; int krw; 환율계산프로그램 printf(" 달러에대한원화환율을입력하시오 : "); scanf("%f", &rate); printf(" 원화금액을입력하시오 : "); scanf("%d", &krw); // 원 / 달러환율 // 달러화 // 원화 // 입력안내메시지 // 사용자로부터환율입력 // 입력안내메시지 // 원화금액입력 실습 : 사각형의둘레와면적 필요한변수는 w, h, area, perimeter 라고하자. 변수의자료형은실수를저장할수있는 double 형으로하자. area = w*h; perimeter = 2*(w+h); w usd = krw / rate; // 달러화로환산 printf(" 원화 %d원은 %f달러입니다.\n", krw, usd); // 계산결과출력 return 0; // 함수결과값반환 h 달러에대한원화환율을입력하시오 : 928.78 원화금액을입력하시오 : 1000000 원화 1000000 원은 1076.681204 달러입니다. 프로그램의실행화면 코딩 사각형의넓이 : 50.000000 사각형의둘레 : 30.000000 double w; double h; double area; double perimeter; 사각형의넓이 : 50.000000 사각형의둘레 : 30.000000 w = 10.0; h = 5.0; area = w*h; perimeter = 2*(w+h); printf(" 사각형의넓이 : %lf", area); printf(" 사각형의둘레 : %lf", perimeter); return 0; 15
도전문제 Q & A 1. 한번의 printf() 호출로변수 perimeter와 area의값이동시에출력 되도록변경하라. 2. 변수들을한줄에모두선언하여보자. 3. w와 h의값을사용자로부터받도록변경하여보자. %lf를사용한다. 16