쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소
이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다.
일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력 데이터처리 결과출력
덧셈프로그램 #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; }
프로그램의실행화면 두수의합 : 300
주석 (comment) /* 두개의숫자의합을계산하는프로그램 */ #include <stdio.h> 주석은코드를설명하는글입니다. int main(void) {......... } 주석
3 가지방법의주석 /* 한줄로된주석 */ /* 여러줄로된주석 */ // 여기서부터줄의끝까지주석
들여쓰기 들여쓰기 (indentation): 같은수준에있는문장들을왼쪽끝에서몇자안으로들여쓰는것
주석과들여쓰기가없다면.. #include <stdio.h> int main(void) { int x; int y; int sum; x = 100; y = 200; sum = x + y; printf(" 두수의합 : %d", sum); return 0; } 실행은되지만무슨처리를하고있는프로그램인지알기가힘들고또한들여쓰기가안되어있어서같은수준에있는문장들을구분하기힘듭니다.
중간점검 주석은 /* /*... */ */ 와같이중첩할수있을까? 주석은한줄이상이될수있는가? 주석에는어떤내용을쓰면좋은가? 주석은프로그램의동작에어떤영향을끼치는가?
전처리기 #include <stdio.h> # 기호로시작 헤더파일 stdio.h 를소스코드안에포함 stdio.h 는표준입출력에대한라이브러리함수의정의가들어있다.
전처리기 /* 첫번째프로그램 */ #include <stdio.h> // stdio.h int printf(char *, ); int main(void) { printf("hello World!"); return 0; } stdio.h hello.c
중간점검 printf() 를사용하기위하여포함시켜야하는헤더파일은무엇인가? 전처리기 #include의의미는무엇인가?
함수 함수 (function): 특정기능을수행하는처리단계들을괄호로묶어서이름을붙인것 입력 함수는프로그램을구성하는기본적인단위 ( 부품 ) 함수 출력
함수의구조
함수안에들어있는것 Q) 그렇다면함수안에들어있는것은무엇인가? 입력 A) 함수안에는함수가처리하는처리단계 ( 문장 ) 들이중괄호안에나열 문장 1; 문장 2; 문장 3;... 함수 위에서아래로순차적으로실행된다. 출력
함수 작업을수행하는문장은함수안에들어가야함
함수호출 Q) 함수안에있는문장들은언제실행되는가? A) 함수가호출되면실행된다. Q) 함수호출은어떻게하는가? A) 함수의이름을적어주면된다. 함수 B(); 함수 A 문장 1; 문장 2; 문장 3;... 함수 C 함수 B 문장 1; 문장 2; 문장 3;... 문장 1; 문장 2; 문장 3;... 프로그램
함수호출 Q) 많은함수중에서가장먼저실행되는것은? A) main() 함수이다. 다른함수들은 main() 으로부터직간접적으로호출된다. input() main() 문장 1; 문장 2; 문장 3;... process() input(); process(); output(); output() 문장 1; 문장 2; 문장 3;... 문장 1; 문장 2; 문장 3;...
문장 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 문장은 ;( 세미콜른 ) 으로끝나야한다.
return 문장
main() 은누가호출할까?
중간점검 모든 C 프로그램에반드시있어야되는함수는무엇인가? 함수의시작과끝을나타내는기호는무엇인가? 모든문장은어떤기호로끝나는가?
변수 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
변수선언 변수선언 : 컴파일러에게어떤타입의변수가사용되는지를미리알리는것 int x; 자료형 변수의이름
자료형 자료형 (data type): 변수가저장할데이터가정수인지실수인지, 아니면또다른어떤데이터인지를지정하는것
변수선언 int x; // 첫번째정수를저장하는변수 int y; // 두번째정수를저장하는변수 int sum; // 두정수의합을저장하는변수 각변수는정수를저장할수있다. x y sum 메모리공간에변수가만들어지고이름이붙여진다.
상수 x = 100; y = 200; 상수 상수 (constant): 그값이프로그램이실행하는동안변하지않는수 12 12 변수는실행도중에값을변경할수있으나상수는한번값이정해지면변경이불가능합니다. 변수 상수
중간점검 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);
산술연산 연산 연산자 C 수식 수학에서의기호 덧셈 + x + y x + y 뺄셈 - x -y x -y 곱셈 * x * y xy 나눗셈 / x / y x / y 나머지 % x % y x mod y
산술연산 sum = x + y; 5 sum 2 = + x y 3
대입연산 x = 100; 대입연산 (assignment operation): 변수에값을저장하는연산 대입연산 = 배정연산 = 할당연산 = 연산자는변수에값을저장합니다. x = 100 ;
정리
중간점검 변수a와변수b의곱을변수product에저장하는문장을작성하여보자. 변수a를변수b로나눈값을변수quotient에저장하는문장을작성하여보자.
printf() printf(): 모니터에출력을하기위한표준출력라이브러리함수
문자열출력 printf("hello World!\n"); 문자열 (string): Hello World!\n 와같이문자들을여러개나열한것 Hello World! H e l l o W o 실행결과 printf()
변수값출력 printf(" 두수의합 : %d", sum); 두수의합 : 30 형식지정자의개수와변수의개수와순서는같아야한다.
형식지정자 형식지정자 : 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
여러개의변수값출력 형식제어문자열 printf( 학번 %d 의성적은 %f \n, number, height ); 학번 23 의성적은 3.99 형식지정자의개수와변수의개수와순서는같아야한다.
주의!
중간점검 printf() 에서변수의값을실수형태로출력할때사용하는형식지정자는무엇인가? printf() 를사용하여서정수형변수 k의값을출력하는문장을작성하여보자.
사용자로부터입력을받아보자. 덧셈프로그램 #2 시작 두정수를읽음 입력단계 두정수를더하여합을구한다. 처리단계 합을출력 출력단계 데이터입력 데이터처리 결과출력 종료
두번째덧셈프로그램 // 사용자로부터입력받은 2 개의정수의합을계산하여출력 #include <stdio.h> int main(void) { int x; int y; int sum; // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 2개의정수의합을저장할변수 printf(" 첫번째숫자를입력하시오 :"); // 입력안내메시지출력 scanf("%d", &x); // 하나의정수를받아서 x에저장 2 x + 3 y 5 sum printf(" 두번째숫자를입력하시오 :"); // 입력안내메시지출력 scanf("%d", &y); // 하나의정수를받아서 x에저장 sum = x + y; // 변수 2개를더한다. printf(" 두수의합 : %d", sum); // sum의값을10진수형태로출력 첫번째숫자를입력하시오 : 2 두번째숫자를입력하시오 : 3 두수의합 : 5 } return 0; // 0 을외부로반환
scanf() scanf(): 키보드로부터입력을하기위한라이브러리함수 형식제어문자열 scanf( %d %f, &number, &height ); 23 45.7 형식지정자의개수와변수의개수와순서는같아야한다.
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);
scanf() 형식지정자와변수의자료형은일치하여야함
실수입력 float ratio = 0.0; scanf("%f", &ratio); double scale = 0.0; scanf("%lf", &scale); 주의!!!
중간점검 scanf() 를시용하여서사용자로부터실수값을받아서 double 형의변수 value 에저장하는문장을작성하여보자.
/* 저축액을계산하는프로그램 */ #include <stdio.h> int main(void) { int salary; int deposit; 연봉계산프로그램 // 월급 // 저축액 10 12 * * = salary 200 } printf(" 월급을입력하시오 : "); scanf("%d", &salary); deposit = 10 * 12 * salary; printf("10 년동안의저축액 : %d\n", deposit); return 0; 24000 deposit 월급을입력하시오 : 200 10년동안의저축액 : 24000
원의면적프로그램 /* 원의면적을계산하는프로그램 */ #include <stdio.h> int main(void) { float radius; // 원의반지름 float area; // 면적 printf(" 반지름을입력하시오 : "); scanf("%f", &radius); area = 3.14 * radius * radius; printf(" 원의면적 : %f\n", area); 5.0 5.0 * 3.14 5.0 radius * = 78.500000 area } return 0; 반지름을입력하시오 : 5.0 원의면적 :78.500000
환율계산프로그램 /* 환율을계산하는프로그램 */ #include <stdio.h> 928.78 int main(void) { float rate; // 원 / 달러환율 float usd; // 달러화 int krw; // 원화 rate / = 1076. 681204 usd printf(" 달러에대한원화환율을입력하시오 : "); scanf("%f", &rate); 1000000 printf(" 원화금액을입력하시오 : "); scanf("%d", &krw); krw usd = krw / rate; printf(" 원화 %d 원은 %f 달러입니다.\n", krw, usd); 달러에대한원화환율을입력하시오 : 928.78 원화금액을입력하시오 : 1000000 원화 1000000원은 1076.681204달러입니다. return 0; }
실습 : 사각형의둘레와면적 필요한변수는 w, h, area, perimeter라고하자. 변수의자료형은실수를저장할수있는 double형으로하자. area = w*h; perimeter = 2*(w+h);
프로그램의실행화면 사각형의넓이 : 50.000000 사각형의둘레 : 30.000000
코딩 #include <stdio.h> int main(void) { 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;
도전문제 1. 한번의 printf() 호출로변수 perimeter와 area의값이동시에출력 되도록변경하라. 2. 변수들을한줄에모두선언하여보자. 3. w와 h의값을사용자로부터받도록변경하여보자. %lf를사용한다.
Q & A