문제해결중심 C 프로그래밍 제2장순서도를 C로변환하기 ( 순차구조 ) 강릉원주대학교 학습목표 학습목표 이장은1장에서배운순서도를 C 언어프로그램으로변환하는방법을배우고, 이를익숙하게습득하는것을목표로하며, 다음내용을배운다. 학습내용 C 언어를이용한입력과출력방법 분기, 반복, 복합순서도를 C 언어로변환하는방법 C 언어의자료형, 연산자, 제어문사용방법 GangneungWonju National University 2
2.2 순차순서도를 C 언어프로그램으로변환 변수선언 변수 (variable) : 메모리에서값을저장하기위한공간 형식자료형변수이름 [= 초기값 ] [, 변수이름 [= 초기값 ]... ]; 기본자료형 char : 문자. 단일인용부호사용 ( 예 : A, 3 ) int : 정수. 소수점없는정수 ( 예 : 0, 100, -100) float : 실수. 소수점있는수 ( 예 : 3.14, 1.0) 예 문자형변수선언및초기화 : char Mych = A, Numch = 3 ; 정수형변수선언및초기화 : int Num1 = -3, Num2 = 0 ; 실수형변수선언및초기화 : float R, Pi = 3.141592; GangneungWonju National University 3 2.2 순차순서도를 C 언어프로그램으로변환 변수가있는순서도변환예 형식지정자와변수는일대일대응 GangneungWonju National University 4
printf( ) 함수 용도및형식 용도 여러가지데이터나문자열을출력 형식 printf ( 서식문자열, 인자 1, 인자 2, ) ; 서식문자열 : 서식문자열을가리키는포인터나문자열상수를지정한다. 인자 ( 변수 ) : printf( ) 함수에서는매개변수를인자라고부르며, 문자나숫자, 문자열등이될수있다. printf( () 함수가호출되면먼저서식문자열부터살펴본후,,, '%' 문자로시작하는형식지정자라는것이아닐때에는그문자를그대로화면에출력하고, 형식지정자를만나면미리약속된작업을수행한다. printf( () 함수는줄바꿈을자동으로해주지않는다. GangneungWonju National University 5 printf( ) 함수 사용예 줄바꿈 ( \n ) printf ("Here is your gun. \nthanks, but \n); 출력결과 : Here is your gun. Thanks, but 줄바꿈확장열 형식지정자 (format specifier) 의사용 float i = 3.0; 실수형식지정자 변수사용 printf ("First: %f, Second: %d", i, 99); 출력결과 : First: 3.0, Second: 99 상수사용정수형식지정자 GangneungWonju National University 6
printf( ) 함수 역슬래쉬코드 키보드로부터입력받을수없는문자들의출력 역슬래쉬코드사용 '\n' (newline 문자 ): 캐리지리턴과라인피드문자의조합으로변환된다. C 의역슬래쉬코드들 코드 의미 \b 백스페이스 (backspace) \f 폼피드 (form feed) \n 뉴라인 (newline) \r 캐리지리턴 (carriage return) \t 수평탭 (horizontal tab) \ 큰따옴표 (double quote) \ 작은따옴표 (single quote) 코드 의미 \0 널 (null) \\ 역슬래쉬 (backslash) \v 수직탭 (vertical tab) \a 벨 (bell) \? 의문표 (question mark) \N 8 진수상수 (N 이 8 진수 ) \xn 16 진수상수 (N 이 16 진수 ) GangneungWonju National University 7 printf( ) 함수 형식지정자 서식변환형식인자의데이터형 ( 바이트 ) %d 부호있는 10 진수로출력 int 형또는문자형 %u 부호없는 10 진수로출력 unsigned 형 %x 16 진수로출력정수형또는문자형 %c 문자로출력문자형또는정수형 %s %f %e 널종료문자를만날때까지출력 ( 문자열출력 ) 고정소수점표기법에의해출력 ( 실수출력 ) 부동소수점표기법에의해출력 문자열포인터 부동형 부동형 %% '%' 문자자체출력인자를취하지않음 GangneungWonju National University 8
printf( ) 함수 연습 자신의학년과학번을출력하는프로그램을작성하시오 정수형상수 113, 실수형상수 342.77를출력하는프로그램을 작성하시오 실수 123.345646 을소수점아래 2 자리까지출력하는 프로그램을작성하시오 GangneungWonju National University 9 2.2 순차순서도를 C 언어프로그램으로변환 값을읽는순서도변환예 scanf() 로값읽기 %d : 정수 %c : 문자 %f : 실수 %s : 문자열 & 변수 : 데이터를읽어저장할변수의주소 GangneungWonju National University 10
scanf( ) 함수 용도및형식 scanf( ) 표준함수의이용 수치, 문자, 문자열등을지정한서식에따라입력받는함수 형식 : scanf("%d", & 정수형변수 ); scanf("%f", & 실수형변수 ); scanf( %s, %s, 배열명 ); & : 어떤값을인수들중의하나에저장할수있도록해준다. ( 값을저장할변수의주소를알려준다 ) %d, %f 등과같은형식지정자는 printf ( ) 함수와동일한형식으로사용하지만, 입력받는실수의소수점을제어할수는없다. (%.2f 등을사용하지못한다.) GangneungWonju National University 11 scanf( ) 함수 용도및형식 변환문자가 %s 인경우에는 & 를사용하지않고변수이름만 사용한다.( 문자열을저장하기위한배열의사용 ) scanf( ) 함수는 <Enter> 키를칠때까지입력된일련의숫자를입력 받는다. GangneungWonju National University 12
scanf( ) 함수 입력방법 scanf() 로값을여러개읽을때 입력하고엔터를눌러서분리할때 빈칸으로분리된숫자입력할때 / 로분리된숫자를입력할때 GangneungWonju National University 13 산술연산자 2.3 연산자 증가 / 감소연산자 GangneungWonju National University 14
2.3 연산자 관계연산자 논리연산자 GangneungWonju National University 15 2.3 연산자 할당연산자 GangneungWonju National University 16
2.3 연산자 형변환연산자 (Cast 연산자 ) 값을다른형으로변환시킨다. 형식 (type) value 예제 int d1, d2 ; float r1, r2 ; d1 = 2 ; r1 = 3.5 ; d2 = (int) r1 ; /* d2 에는 r1 의 35 3.5 가정수로변환되어 3 이저장됨 */ r2 = (float) d1 ; /* r2에는 d1의 2가실수로변환되어 2.0이저장됨 */ 치환문의왼쪽에형변환연산자를사용할수없다. GangneungWonju National University 17 2.3 연산자 연산자정리 GangneungWonju National University 18
순차순서도변환 -( 연습문제 1) 순차순서도연습문제 1 의변환 ( 문제1) 가로와세로값을읽고, 사각형의면적을계산해서출력하는순서도를 C 언어프로그램으로변환하라 ( 가로, 세로길이는정수로 주어진다고가정한다 ). 입력화면 출력화면 가로를입력하세요 : 세로를입력하세요 : 가로 : 3, 세로 :4 면적 : 12 GangneungWonju National University 19 순차순서도변환 -( 연습문제 1) 순서도 (1 장연습문제참고 ) 프로그램을시작하고, 변수를준비하고, Width, Height, Area Width, Height, Area 가로를입력하세요 : Width 가로, 세로값을읽고, 사각형의면적을계산하고, 계산된면적을출력하고, 프로그램을끝낸다. Width, Height Area=Width*Height Area 가로를입력하세요 : Height Area=Width*Height Width, Height, Area GangneungWonju National University 20
순서도기호의 C 프로그램변환 순서도 C 프로그램 의미기호프로그램예의미 준비 int age, year float weight int age, year=2012; 변수선언 float weight; ( 메모리확보 ) 입력 age, year, weight scanf( %d%d%f, age, year, length); 키보드 ( 콘솔 ) 입력 처리 area = width * height area = width * height; 계산등의처리작업 출력 year, age, weight printf( 입력결과 : %d, %d, %f, age, year, length); 화면 ( 콘솔 ) 출력 GangneungWonju National University 21 순차순서도변환 -( 연습문제 1) Width, Height, Area 가로를입력하세요 : 변수선언 printf ( ) Width scanf ( ) 가로를입력하세요 : #include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { int Width, Height, Area; printf(" 가로를입력하세요 : "); scanf("%d", &Width); printf(" 세로를입력하세요 : "); scanf("%d", &Height); Height Area=Width*Height 처리문장 Area = Width * Height; printf(" 가로 :%d, 세로 :%d \n", Width, Height); printf(" 면적 :%d \n", Area); Width, Height, Area } getch(); return 0; GangneungWonju National University 22
순차순서도변환 -( 연습문제 2) 순차순서도연습문제 2 의변환 ( 문제2) 임의의실수인반지름값을읽고, 원의면적을계산해서소수점둘째자리까지출력하는순서도를 C 언어프로그램으로변환하라. 입력화면 반지름을입력하세요 : 출력화면반지름 : 3 원의면적 :2827 28.27 - 소수점 2 째자리까지출력하기위해서는 %.2f 로출력형식을지정 GangneungWonju National University 23 순차순서도변환 -( 연습문제 2) 순서도 (1 장참고 ) 프로그램을시작하고, 변수를준비하고, 반지름값을읽고, float Rad, Area Rad float Rad, Area 반지름을입력하세요 : Rad 원의면적을계산하고, 계산된면적을출력하고, 프로그램을끝낸다. Area=Rad * 3.14 Area Area=Rad*3.14 Area GangneungWonju National University 24
순차순서도변환 -( 연습문제 2) float Rad, Area Rad 준비 반지름을입력하세요 : 출력 Area=Rad*3.14 Rad, Area 변수선언 printf ( ) 입력 scanf ( ) 처리 처리문장 #include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { float Rad, Area; printf( 반지름을입력하세요 : "); scanf("%f", &Rad); Area = Width * Height; printf( 반지름 :%.2f \n", Rad); printf( 원의면적 :%.2f \n", Area); } getch(); return 0; GangneungWonju National University 25 순차순서도변환 ( 연습문제 ) 순서도를 C 언어로변환하는연습 ( 문제 3) 화씨온도를읽고, 이것을섭씨온도로변환해서출력하는 순서도를 C 언어프로그램으로변환하라. ( 실수계산과형변환 연산자를사용해보자.) ( 문제4) 상수 a, b, c의값을읽고, 이차방정식 ax2 + bx + c = 0에대해서근을구하고, 이를출력하는순서도를 C 언어프로그램으로 변환하라. ( 제곱근은 math.h 에정의되어있는 sqrt() 함수를이용한다 ) GangneungWonju National University 26
순차순서도변환 -( 연습문제 3) 순서도 ( 1 장순차순서도연습문제 3 참고 ) 1) 처리할일준비하고읽고 Temp_F, Temp_C Temp_F 변환하고 출력한다 Temp_C=Temp_F*5/9-32 Temp_C 2) 해답을위한식 화씨온도 = 섭씨온도 * 9/5 + 32 GangneungWonju National University 27 순차순서도변환 -( 연습문제 4) 변환 Temp_F, Temp_C Temp_F #include "stdafx.h" #include <conio.h> /* getch( ) 를사용하기위하여 include */ int _tmain(int argc, _TCHAR* argv[]) { int Temp_F, Temp_C; printf( 변환할화씨온도를입력하시오 : "); scanf("%d" %d, &Temp_F); Temp_C=Temp_F*5/9-32 Temp_C } Temp_C = (int) (Temp_F * ( 5 / 9 ) 32); printf( 섭씨온도는 %d 입니다.", Temp_C); getch(); return 0; GangneungWonju National University 28
순차순서도변환 -( 연습문제 4) 순서도 ( 1 장순차순서도참고 ) 1) 처리할일 3) 해결을위한식 준비하고 Root1, Root2, a, b, c 읽고 a, b, c 2 계산하고 Root1= (- b + b 4 a c ) 2a Root2= 2 출력한다 (- b - b 4 a c ) 2a 2) 처리할데이터 a, b, c, Root1, Root2 Root_1, Root_2 GangneungWonju National University 29 순차순서도변환 -( 연습문제 4) 변환 Root1, Root2, a, b, c #include "stdafx.h" #include <conio.h> /* getch( ) 를사용하기위하여 include */ #include <math.h> h> /* 수학함수를이용하기위하여 include */ int _tmain(int argc, _TCHAR* argv[]) { float a, b, c, Root1, Root2; Root1= Root2= a, b, c 2 (- b + b 4 a c ) 2a 2 (- b - b 4 a c ) 2 a Root_1, Root_2 printf( 상수세개를스페이스바로분리하여입력하시오 : "); scanf("%f %f %f", &a, &b, &c); Root1=(-b+sqrt(b*b-4*a*c))/(2*a); Root2=(-b-sqrt(pow(b,2)-4*a*c))/(2*a); printf("\n Root1 = %.2f \n Root2 = %.2f", Root1, Root2); getch(); } return 0; GangneungWonju National University 30