김서형 : 010 9320-8604
codeblocks-16.01mingw-setup.exe http://www.codeblocks.org/
1, l( 엘 ), I( 아이 ), 0( 숫자 0), o( 영문자 o) 와같은비슷한문자들을더잘구분
대문자와소문자를구별 ( ), { }, [ ] 을구별하여입력한다. 세미콜론 (;) 와콜론 (:) 을혼동하면안된다. 각문장은세미콜론 (;) 기호로끝나야한다. 단축키 F9
컴파일 컴파일 : 소스파일을기계어파일로만드는과정
컴파일오류 만약컴파일단계에서오류 (error) 가표시되었으면에디터로가서그부분을수정하고다시컴파일하여야한다.
함수 작업의지시는함수 (function) 안에들어있다. 함수는 { 에서시작하여서 } 로종료되는데바로이중괄호사이에작업의지시가들어가게된다.
첫번째문장 #include <stdio.h> int main() { printf(" 안녕하세요?"); return 0; } 문자열 안녕하세요 " 를화면에출력하는문장
두번째문장 #include <stdio.h> int main() { printf(" 안녕하세요?"); return 0; } 함수를종료하는문장, 전체프로그램이종료된다.
헤더파일포함 #include <stdio.h> int main() { printf(" 안녕하세요?"); return 0; } 외부에서파일 stdio.h 을불러들이는문장 헤더파일위치 C:\Program Files (x86)\codeblocks\mingw\lib\gcc\mingw32\4.9.2\include\ssp
프로그램작성 다음과같은출력을내는프로그램작성 안녕하세요? 김철수입니다.
프로그램작성 #include <stdio.h> int main() { printf(" 안녕하세요?"); 안녕하세요? 김철수입니다. } return 0; 어떤문장이들어가야하는가?
프로그램작성 #include <stdio.h> int main() { } printf(" 안녕하세요?"); printf(" 김철수입니다."); return 0; 안녕하세요? 김철수입니다. 올바른결과가아님!
프로그램작성 #include <stdio.h> int main() { printf(" 안녕하세요? \n"); printf(" 김철수입니다. \n"); return 0; 안녕하세요? 김철수입니다. } \n 가줄을바꾼다.
공백과들여쓰기 #include <stdio.h> int main() { printf(" 안녕하세요? \n"); printf(" 김철수입니다. \n"); return 0; 빈줄을넣어서의미별로구분을한다. } 같은수준의처리이면들여쓰기를한다.
공백과들여쓰기가없는경우 #include <stdio.h> int main(){ printf(" 안녕하세요? \n");printf(" 김철수입니다. \n");return 0; } 컴파일은되지만읽기가힘들다.
주석을붙이는방법 주석 (comment): 소스코드에붙이는설명글 여러줄주석 : /* */ /* 파일이름 : hello.c 설명 : 화면으로문자열을출력하는프로그램 작성자 : 김철수 */ 한줄주석 : // // 화면으로문자열을출력하는프로그램
주석을붙인프로그램 /* 파일이름 : comment1.c 설명 : 주석을붙이는방법을설명하는프로그램 작성자 : 김철수 */ #include <stdio.h> // 헤더파일포함 int main() // 메인함수시작 { // 화면으로문자열을출력한다. printf(" 안녕하세요? \n "); printf(" 김철수입니다. \n"); } return 0; // 메인함수종료
정수와실수 컴퓨터는본질적으로숫자를처리하는기계 컴퓨터가처리하는수의종류 정수 : 1,2, 실수 : 3.14, 6.0, 0.1234,. 컴퓨터는정수와실수를서로다른하드웨어로처리한다.
정수출력하기 %d 를사용하여서정수를화면에출력할수있다.
형식지정자의종류 형식지정자 의미 예 실행결과 %d 정수로출력 printf("%d", 10); 10 %f 실수로출력 printf("%f", 3.14); 3.140000 %c 문자로출력 printf("%c", 'a'); a %s 문자열로출력 printf("%s", "Hello"); Hello
실수값출력예제 #include <stdio.h> int main() { printf("%d는정수이다.", 10); printf("%f는실수이다.", 3.14); return 0; } 10 는정수이다. 3.140000 는실수이다. %f 가실수출력
문자출력 문자 (character) 는다음과같이 ' '( 작은따옴표 ) 를이용해서표기한다. 'A', 'e'
문자열출력 문자열 (string) 은여러개의문자가나열된것 "Hey", " 안녕하세요?"
형식지정자예제 #include <stdio.h> int main() { printf(" 사과 %d개는 %d원입니다.\n", 10,9000); printf(" 나의성적은 %f점입니다. \n", 4.3); printf("%c는 %c보다앞에있습니다.\n", 'A', 'B'); return 0; } 사과 10 개는 9000 원입니다. 나의성적은 4.300000 점입니다. A 는 B 보다앞에있습니다.
이스케이프시퀀스 컴퓨터를제어하는목적으로사용되는특수한문자
이스케이프시퀀스예제 #include <stdio.h> int main() { } printf("\a"); printf("abcd\b\n"); printf("**\tprogramming\t**\n"); return 0; ABC ** PROGRAMMING ** 경고음! \a
핵심예제 : 구구단출력하기 구구단의일부를출력하여보자.
핵심예제프로그램 #include <stdio.h> int main() { printf("%d 더하기 %d은 %d입니다. \n", 2, 3,5); printf("%d 곱하기 %d은 %d입니다. \n", 2, 3, 6); printf("%d 나누기 %d은 %d입니다. \n", 10, 2,5); return 0; }
변수란무엇인가? 변수는컴퓨터의메모리안에만들어지는공간으로숫자나문자를저장할수있다.
변수가필요한이유 숫자들의합을구하는프로그램을작성한다고하자. 사용자로부터입력되는숫자들을저장한공간이필요하다.
변수 == 상자 변수는데이터를담아두는상자로생각할수있다. 변수에있는값은언제든지바뀔수있다.
변수의선언 변수를선언하려면자료형과변수의이름을적어준다.
변수기본예제 #include <stdio.h> int main() { int x; 변수선언 x = 10; printf("%d", x); return 0; 10 }
자료형 데이터의타입 ( 종류 ) 을자료형 (data type) 이라고한다. 자료형 정수형 실수형 문자형 int short long float double char 많이사용되는자료형 자료형은뒤에서더상세히다룰것입니다.
변수의이름짓기 영문자와숫자, 밑줄문자 (_) 사용 첫글자는반드시영문자또는밑줄문자 (_) 대문자와소문자는구별 C 언어의예약어와똑같은변수이름은허용되지않는다. 의미있는이름이좋음 sum _count number_of_ pictures King3 2nd_base ( ) money# ( ) double ( ) in t(x)
변수의초기값 #include <stdio.h> int main() { int value; 쓰레기값 } printf("%d \n", value); return 0;
변수에초기값을주는방법 변수를선언할때, 변수이름뒤에 = 을붙이고초기값을적으면된다.
변수의값출력하기 형식지정자사용
변수값은변경가능 #include <stdio.h> int main() { int number; 변수의값은 10 입니다. 변수의값은 20 입니다. number = 10; printf(" 변수의값은 %d 입니다. \n", number); number = 20; printf(" 변수의값은 %d 입니다. \n", number); } return 0;
산술연산
변수와상수 변수 (variable) - 값이언제든지변경될수있는공간. 상수 (constant) - 값이변경되지않는데이터
예제 /* 원의면적을계산하는프로그램 */ #include <stdio.h> int main() { float radius=10.0; float area; 변수 // 원의반지름 // 원의면적 원의면적 : 314.159210 area = 3.141592 * radius * radius; printf(" 원의면적 : %f \n", area); } return 0; 상수
기호상수 기호상수 (symbolic constant) 는 3.141592 와같은상수에이름을붙인것
예제 #include <stdio.h> #define PI 3.141592 int main() { float radius=10.0; float area; // 원의반지름 // 원의면적 } area = PI * radius * radius; printf(" 원의면적 : %f \n", area); return 0; 기호상수 원의면적 : 314.159210
기호상수이점 리터럴상수 vs 기호상수
Lab: 덧셈프로그램 정수 100 과 200 의합을계산한후, 연산결과를화면에출력하는프로그램을작성하여보자. [ex] 변수 a 에 100, 변수 b 에 200 을넣고변수 sum 에합을넣은후, sum 을출력해준다.
코딩 /* 두개의숫자의합을계산하는프로그램 */ #include <stdio.h> int main() { int x; int y; int sum; // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 두정수의합을저장하는변수 x = 100; y = 200; sum = x + y; printf(" 두수의합 : %d \n", sum); } return 0;
printf() 와 scanf()
기본예제
scanf() 함수 키보드로부터입력된데이터를지정된형식으로변환하여변수에저장하는함수
scanf() 의형식지정자
예제 #include <stdio.h> int main() { double grade; printf(" 학점을입력하시오 : "); scanf("%lf", &grade); } printf(" 학점이 %f 이시군요! \n", grade); return 0; 학점을입력하시오 : 4.3 학점이 4.300000 이시군요!
입력안내메시지 프로그램이 scanf() 에도달하면, 실행을중지하고사용자의입력을기다린다. scanf() 함수앞에는반드시 사용자에게입력을지시하는문장이있어야한다.
예제 #include <stdio.h> int main() { double number; 입력안내메시지가없어서무엇을하라는지알수없다. } scanf("%lf", &number); printf(" 입력된값은 %f 입니다. \n", number); return 0; 3.14 엽력된값은 3.140000 입니다.
핵심예제 사용자로부터 2 개의정수를입력받아서덧셈연산을한후에, 연산의결과를화면으로출력하는프로그램을작성해보자.
예제 // 사용자로부터입력받은 2 개의정수의합을계산하여출력 #include <stdio.h> int main() { int x; int y; int sum; printf(" 첫번째숫자를입력하시오 :"); scanf("%d", &x); printf(" 두번째숫자를입력하시오 :"); scanf("%d", &y); sum = x + y; printf(" 두수의합 : %d", sum); // 첫번째정수를저장할변수 // 두번째정수를저장할변수 // 2 개의정수의합을저장할변수 // 입력안내메시지출력 // 하나의정수를받아서 x 에저장 // 입력안내메시지출력 // 하나의정수를받아서 y 에저장 // 변수 2 개를더한다. // sum 의값을 10 진수형태로출력 } return 0;
핵심예제 사용자로부터세개의정수를입력받은후, 합계와평균값을계산하여화면에출력하는프로그램을작성하라.
예제 #include <stdio.h> int main() { int x; int y; int z; int sum; int avg; // 정수형변수 x 선언 // 정수형변수 y 선언 // 정수형변수 z 선언 // 정수형변수 sum 선언 // 정수형변수 avg 선언 printf(" 정수를입력하시오 : "); // 사용자에게값을입력하라는메시지를출력한다. scanf("%d", &x); // 사용자로부터값을받아서변수 x 에저장한다. printf(" 정수를입력하시오 : "); // 사용자에게값을입력하라는메시지를출력한다. scanf("%d", &y); // 사용자로부터값을받아서변수 y 에저장한다. printf(" 정수를입력하시오 : "); // 사용자에게값을입력하라는메시지를출력한다. scanf("%d", &z); // 사용자로부터값을받아서변수 z 에저장한다. sum = x + y + z; avg = sum / 3; // 3개의정수를합하여 sum에저장한다. // sum을 3으로나눈값을 avg에저장한다. printf(" 평균값은 %d입니다. ", avg); // avg를화면에출력한다. } return 0;
Lab: 원의면적계산 원의면적을구하는프로그램을작성하여보자. 원의반지름을 r 이라고하면원의면적은 3.14*r*r 가된다.
예제 #include <stdio.h> int main() { double r; double area; double peri; // 원의반지름을나타내는변수를선언 // 원의면적을나타내는변수를선언 // 원의둘레를나타내는변수를선언 printf(" 원의반지름을입력하시오 : "); scanf("%lf", &r); // 변수 r 로반지름을입력받는다. area = 3.14*r*r; peri = 2.0*3.14*r; // 원의면적을계산하여 area에저장 // 원의둘레를계산하여 peri에저장 printf(" 원의면적 : %f", area); // 원의면적을출력한다. printf(" 원의둘레 : %f", peri); // 원의둘레를출력한다. } return 0;
자료형이란? 데이터의종류를자료형 (data type) 이라고한다. 변수를선언할때는자료형을적어주어야함.
자료형 데이터의타입 ( 종류 ) 을자료형 (data type) 이라고한다. 자료형 정수형 실수형 문자형 int short long float double char 많이사용되는자료형 변수를공부할때보았던내용
비트? 바이트? 비트 (bit) - Binary Digit : 0 과 1 로표현하는최소단위 바이트 (byte) : 한문자를표현하는단위 2 진수 8 개로이루어진세트 0 ~ 255 까지 256 개의경우의수를표현한다. [ 1byte = 8bit ] 1byte = 8bit = 2^8 = 256 2byte = 16bit = 2^16 = 65536 3byte = 24bit = 2^24 = 16777216 4byte = 32bit = 2^32 = 4294967296
정수형 정수를저장하는자료형 2^16 = 65536 / 2 = 32768 2^32 = 4294967296 / 2 = 2147483648
예제 #include <stdio.h> int main() { short year = 0; int sale = 0; long long total_sale = 0; year = 10; sale = 200000000; 64 비트정수형 // 약 3만2천을넘지않도록주의 // 약 21억을넘지않도록주의 total_sale = year * sale; // 웬만하면넘지않으니마음껏사용한다. printf("year : %d, sale : %d, total_sale : %d",year,sale,total_sale); } return 0; 넘으면어떻게될까? 최대값에서 + 1 year = 32768; sale = 2147483648;
sizeof() 연산자 자료형의크기를계산한다.( 바이트값 ) #include <stdio.h> int main(void) { printf("%d \n", sizeof(short)); printf("%d \n", sizeof(int)); printf("%d \n", sizeof(long)); printf("%d \n", sizeof(long long)); return 0; } 2 4 4 8
부호없는정수 음수가필요없다면앞에 unsigned 키워드를붙인다.
실수형 실수는 IEEE754 표준에따른부동소수점 (floating point) 방식으로표현된다. 128 비트
예제 #include <stdio.h> int main() { float x = 1.234567890123456789; double y = 1.234567890123456789; long double z = 1.234567890123456789; printf("float 의크기 =%d", sizeof(float)); printf("double 의크기 =%d", sizeof(double)); printf("long double 의크기 =%d", sizeof(long double)); } printf("x = %.25f",x); printf("y = %.25f",y); printf("z = %.25f",z); float 의크기 =4 double 의크기 =8 long double 의크기 =16 x = 1.2345678806304932000000000 y = 1.2345678901234567000000000 z = 1.2345678901234567000000000
여러가지자료형사용하기 사용자로부터정수, 실수로데이터를받아서다시출력하여보자.
예제 #include <stdio.h> int main() { int month, day, year; int ticket; float discount; printf(" 오늘의날짜를입력하시오 (YYYY.DD.YY 형식으로 ): "); scanf("%d.%d.%d", &year, &month, &day); printf(" 요즘영화한편보려면얼마나하나요? "); scanf("%d", &ticket); printf(" 멤버쉽카드가있으면몇퍼센트나할인되나요? "); scanf("%f", &discount); printf("%d 년 %d 월 %d 일저녁에 ", year, month, day); printf("%d 원으로영화한편보면어때요? ", ticket); printf("%.2f%% 나할인받을수있는데요!", discount); } return (0);
문자형 문자는컴퓨터보다는인간에게중요 문자도숫자를이용하여표현 C 에서문자는숫자로표현됩니다. 65 69 71 74 78
문자형 문자는컴퓨터보다는인간에게중요 문자도숫자를이용하여표현공통적인규격이필요하다. 아스키코드 (ASCII: American Standard Code for Information Interchange) 8 비트를사용하여영어알파벳표현 ( 예 )! 는 33, A 는 65, B 는 66, a 는 97, b 는 98!"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{ }~
아스키코드표 ( 일부 )
핵심예제 : 문자입출력 아래의실행결과와같이사용자로부터문자를입력받아서변수에저장하고다시출력하는프로그램을작성하여보자.
예제 ( 오류... why?) #include <stdio.h> int main() { char initial, grade; printf(" 영어이름첫글자는무엇인가요 : "); scanf("%c", &initial); printf(" 프로그래밍과목학점을물어보아도되나요?(A 부터 F) "); scanf("%c", &grade); } printf("\n"); printf("%c 군의프로그래밍과목성적은 %c 입니다. ", initial, grade); return 0;
예제 ( 엔터처리 ) #include <stdio.h> int main() { char initial, grade; printf(" 영어이름첫글자는무엇인가요 : "); scanf("%c", &initial); getchar(); // 엔터는여기에걸림 printf(" 프로그래밍과목학점을물어보아도되나요?(A 부터 F) "); scanf("%c", &grade); getchar(); // 엔터는여기에걸림 printf("\n"); printf("%c 군의프로그래밍과목성적은 %c 입니다. ", initial, grade); return 0; }
getchar()?? #include <stdio.h> int main() { char initial, grade; printf(" 영어이름첫글자는무엇인가요 : "); initial = getchar(); // scanf("%c", &initial); getchar(); printf(" 프로그래밍과목학점을물어보아도되나요?(A 부터 F) "); grade = getchar(); // scanf("%c", &grade); getchar(); } printf("\n"); printf("%c 군의프로그래밍과목성적은 %c 입니다. ", initial, grade); return 0;
예제 : getchar() 안하려면 #include <stdio.h> int main() { char initial, grade; printf(" 영어이름첫글자는무엇인가요 : "); scanf("%c", &initial); printf(" 프로그래밍과목학점을물어보아도되나요?(A 부터 F) "); scanf(" %c", &grade); // %c 앞에공백 } printf("\n"); printf("%c 군의프로그래밍과목성적은 %c 입니다. ", initial, grade); return (0);
대입연산시의자동적인형변환 int x; 내림변환 x = 3.141592; // x 에는 3 이저장된다.
Lab: 태양빛도달시간 태양에서오는빛이몇초만에지구에도착하는지를컴퓨터로계산해보고자한다. 빛의속도는 1 초에 30 만 km 를이동한다. 태양과지구사이의거리는약 1 억 4960 만 km 이다.
실행결과
힌트 문제를해결하기위해서는먼저필요한변수를생성하여야한다. 여기서는빛의속도, 태양과지구사이의거리, 도달시간을나타내는변수가필요하다. 변수의자료형은모두실수형이어야한다. 왜냐하면매우큰수들이기때문이다. 빛이도달하는시간은 ( 도달시간 = 거리 / ( 빛의속도 )) 으로 계산할수있다. 실수형을 printf() 로출력할때는 %f 나 %lf 를사용한다.
소스 #include <stdio.h> int main() { double light_speed = 300000; double distance = 149600000; double time; // 빛의속도 (300000km/sec) // 태양과지구사이거리 // 149600000km 로초기화한다. // 시간을나타내는변수 time = distance / light_speed; // 거리를빛의속도로나눈다. printf(" 빛의속도는 %fkm/s ", light_speed); printf(" 태양과지구와의거리 %fkm ", distance); printf(" 도달시간은 %f 초 ", time); // 시간을출력한다. } return 0;
컴퓨터와수식 컴퓨터 (computer) 는기본적으로계산하는기계
수식 (expression) 상수, 변수, 연산자의조합연산자와피연산자로나누어진다. 3.14 radius * 피연산자연산자피연산자
산술연산자 산술연산 : 컴퓨터의가장기본적인연산 덧셈, 뺄셈, 곱셈, 나눗셈등의사칙연산을수행하는연산자 연산자 기호 의미 덧셈 x+y x와 y를더한다 뺄셈 x-y x에서 y를뺀다. 곱셈 x*y x와 y를곱한다. 나눗셈 x/y x를 y로나눈다. 나머지 x%y x를 y로나눌때의나머지값
나눗셈연산자 정수형끼리의나눗셈에서는결과가정수형으로생성하고부동소수점형끼리는부동소수점값을생성된다. 정수형끼리의나눗셈에서는소수점이하는버려진다. 형변환에서자세히학습합니다.
#include <stdio.h> 예제 int main() { int x, y, result; printf(" 두개의정수를입력하시오 : "); scanf("%d %d", &x, &y); result = x + y; printf("%d + %d = %d \n", x, y, result); 7 x 4 y } result = x - y; // 뺄셈 printf("%d - %d = %d \n", x, y, result); result = x * y; // 곱셈 printf("%d + %d = %d \n", x, y, result); result = x / y; // 나눗셈 printf("%d / %d = %d \n", x, y, result); return 0; 두개의정수를입력하시오 : 7 4 7 + 4 = 11 7-4 = 3 7 + 4 = 28 7 / 4 = 1
#include <stdio.h> 나누기몫소수점필요할때 int main() { int x, y, result; printf(" 두개의정수를입력하시오 : "); scanf("%d %d", &x, &y); } result = x + y; printf("%d + %d = %d \n", x, y, result); result = x - y; // 뺄셈 printf("%d - %d = %d \n", x, y, result); result = x * y; // 곱셈 printf("%d + %d = %d \n", x, y, result); // 나눗셈 printf("%d / %d = %.2f \n", x, y, (float)x/y); return 0; %.2f 는소수점이하두자리까지만화면에나오라는의미 정수 / 정수 말고 실수 / 정수 되도록함 두개의정수를입력하시오 : 7 4 7 + 4 = 11 7-4 = 3 7 + 4 = 28 7 / 4 = 1.75
나머지연산자 나머지연산자 (modulus operator) 는첫번째피연산자를두번째피연산자로나누었을경우의나머지를계산 10 % 2 는 0 이다. 5 % 7 는 5 이다. 30 % 9 는 3 이다. 나머지연산자를이용한짝수와홀수를구분 x % 2 가 0 이면짝수 아주유용한연산자입니다. 나머지연산자를이용한 5 의배수판단 x % 5 가 0 이면 5 의배수
나머지연산자 #include <stdio.h> int main() { int remainder; int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); remainder = n % 2; printf("2 로나누었을때나머지 =%d \n", remainder); return 0; } 정수를입력하시오 : 10 2 로나누었을때나머지 =0 정수를입력하시오 : 7 2 로나누었을때나머지 =1
핵심예제 : 몫과나머지구하기 사용자로부터 2 개의정수를입력받아서첫번째정수를두번째정수로나눈몫과나머지를계산하여출력하여본다.
핵심예제소스 #include <stdio.h> int main() { int x, y, q, r; printf("2 개의정수를입력하시오 ( 예 9 2): "); scanf("%d %d", &x, &y); q = x / y; r = x % y; printf(" 몫은 %d 입니다. ", q); printf(" 나머지는 %d 입니다. ", r); } return 0;
핵심예제 : 거스름돈계산프로그램 상점에서고객이상품을사고돈을냈을경우에거스름돈을계산해주는프로그램을작성하여보자.
핵심예제소스 #include <stdio.h> int main() { int money, price, change; printf(" 고객으로부터받은돈 : "); scanf("%d", &money); printf(" 물건값 : "); scanf("%d", &price); change = (money - price); printf(" 오천원 :%d \n", change / 5000); printf(" 천원 :%d \n", (change % 5000) / 1000); printf(" 오백원 :%d \n", (change % 5000 % 1000) / 500); printf(" 백원 :%d \n", (change % 5000 % 1000 % 500) / 100); printf(" 오십원 :%d \n", (change % 5000 % 1000 % 500 % 100) / 50); printf(" 십원 :%d \n", (change % 5000 % 1000 % 500 % 100 % 50) / 10); } return 0;
만약거스름돈으로내줘야할화폐가천원, 오백원, 십원짜리만남아있다면... #include <stdio.h> int main(void) { int money, price, change; printf(" 고객으로부터받은돈 : "); scanf("%d", &money); printf(" 물건값 : "); scanf("%d", &price); change = (money - price); printf(" 천원 :%d \n", change / 1000); printf(" 오백원 :%d \n", (change % 1000) / 500); printf(" 십원 :%d \n", (change % 1000 % 5000) / 10); } return 0;
수식에서의자동적인형변환 서로다른자료형이혼합하여사용되는경우, 더큰자료형으로통일된다.
명시적인형변환 ( 캐스팅 ) 형변환 (type cast): 사용자가데이터의타입을변경하는것 (int) 1.23456 (double) x (long) (x+y) // double 형으로변환 // double 형으로변환 // long 형으로변환 1.23456 (int) 1
예제 #include <stdio.h> int main() { int i; printf("%d\n", 3/2); printf("%f\n", 3.0/2); printf("%f\n", (double)3/ 2); i = (int)1.3+ (int)1.8; } printf("%d\n", i); return 0; 1 1.500000 1.500000 2
Lab: 화씨온도를섭씨로바꾸기 5 섭씨온도 = ( 화씨온도 32) 9
잘못된부분은어디에? #include <stdio.h> int main() { double f_temp; double c_temp; printf(" 화씨온도를입력하시오 : "); scanf("%lf", &f_temp); c_temp = 5 / 9 * (f_temp - 32); printf(" 섭씨온도는 %f입니다.\n", c_temp); } return 0;
정답 #include <stdio.h> int main() { double f_temp; double c_temp; 5.0 혹은 9.0 중에하나만바꿔도되지만, 혼돈되지않게모두실수로바꾸는편이나을수도있습니다. printf(" 화씨온도를입력하시오 : "); scanf("%lf", &f_temp); c_temp = 5.0 / 9.0 * (f_temp - 32); printf(" 섭씨온도는 %f 입니다.\n", c_temp); } return 0; 화씨온도를입력하시오 : 90
증감연산자 증감연산자 : ++, -- 변수의값을하나증가시키거나감소시키는연산자
++x 와 x++ 의차이 y = ++x y= x++;
증감연산자정리 증감연산자 의미 ++x 수식의값은증가된 x값이다. x++ 수식의값은증가되지않은원래의x값이다. --x 수식의값은감소된 x값이다. x-- 수식의값은감소되지않은원래의x값이다.
#include <stdio.h> int main() { int x=10, y=10; ++x; printf("x=%d", x); --y; printf("y=%d", y); 예제 #include <stdio.h> int main() { int x=10, y=10; x--; printf("x=%d", x); y--; printf("y=%d", y); #include <stdio.h> int main() { int x=10, y=10; printf("x=%d", ++x); printf("y=%d", y--); } return 0; } return 0; } return 0; x=11 y=9 x=11 y=9 x=11 y=10
대입 ( 배정, 할당 ) 연산자 왼쪽에있는변수에오른쪽의수식의값을계산하여대입 변수 (variable) = 수식 (expression); ( 예 ) z = x + y;
대입연산자주의점 100 = x + y; // 컴파일오류!
대입연산자주의점 x = x + 1; 변수의값을 1 만큼증가시킨다.
복합연산자 복합연산자란 += 처럼대입연산자 = 와산술연산자를합쳐놓은연산자 소스를간결하게만들수있음 x = x + y 와의미가같음! x += y
복합대입연산자 복합대입연산자 x += y x -= y x *= y x /= y x %= y 의미 x = x + y x = x - y x = x * y x = x / y x = x % y
복합대입연산자 // 복합대입연산자프로그램 #include <stdio.h> int main() { int x = 10, y = 10; x += 1; y *= 2; 10 x 10 y } printf("x = %d return 0; y = %d \n", x, y); x = 11 y = 20
핵심예제 : 구의부피 구의부피를계산하는프로그램을작성하여보자. 구의부피는다음과같은공식으로계산된다. 4 V = 3 πr 3
핵심예제소스 #include <stdio.h> int main() { double volume; double radius = 3; const double PI = 3.141592; #define PI 3.141592 기억나나요? } volume = 4.0 * PI * (radius * radius * radius)/ 3.0; printf(" 반지름 3 인구의부피 : %f \n", volume ); return 0;
우선순위 어떤연산자를먼저계산할것인지에대한규칙 -- -- ++ ++ / * / * % % + + - -
우선순위
우선순위의일반적인지침 콤마 < 대입 < 논리 < 관계 < 산술 < 단항 괄호연산자는가장우선순위가높다. 모든단항연산자들은이항연산자들보다우선순위가높다. 콤마연산자를제외하고는대입연산자가가장우선순위가낮다. 연산자들의우선순위가생각나지않으면괄호를이용 ( x <= 10 ) && ( y >= 20 ) 관계연산자나논리연산자는산술연산자보다우선순위가낮다. x + 2 == y + 3
결합규칙 만약같은우선순위를가지는연산자들이여러개가있으면어떤것을먼저수행하여야하는가의규칙 * 와 % 의우선순위가같으므로왼쪽에서오른쪽으로연산을수행한다. 2 * 1 5 % 3 10 % 3 2 1
결합규칙 만약같은우선순위를가지는연산자들이여러개가있으면어떤것을먼저수행하여야하는가의규칙 = 연산자는오른쪽우선결합이므로오른쪽부터계산된다. x = y = z = 5 1 x = y = 5 2 x = 5 3 5
조건문 조건에따라서여러개의실행경로가운데하나를선택 문장이실행되는순서에영향을주는문장 제어문 조건에따라서여러개의같은처리를반복
관계연산자 두개의피연산자를비교하는연산자결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. x y
관계연산자 연산자 의미 x == y x와 y가같은가? x!= y x와 y가다른가? x > y x가 y보다큰가? x < y x가 y보다작은가? x >= y x가 y보다크거나같은가? x <= y x가 y보다작거나같은가?
예제 #include <stdio.h> int main() { int x, y; printf(" 두개의정수를입력하시오 : "); scanf("%d%d", &x, &y); } printf("x == y 의결과값 : %d \n", x == y); printf("x!= y 의결과값 : %d \n", x!= y); printf("x > y 의결과값 : %d \n", x > y); printf("x < y 의결과값 : %d \n", x < y); printf("x >= y 의결과값 : %d \n", x >= y); printf("x <= y 의결과값 : %d \n", x <= y); return 0; 두개의정수를입력하시오 : 3 4 x == y 의결과값 : 0 x!= y 의결과값 : 1 x > y 의결과값 : 0 x < y 의결과값 : 1 x >= y 의결과값 : 0 x <= y 의결과값 : 1
주의할점! (x = y) y 의값을 x 에대입한다. 이수식의값은 x 의값이다. (x == y) x 와 y 가같으면 1, 다르면 0 이수식의값이된다. (x == y) 를 (x = y) 로잘못쓰지않도록주의!
논리연산자 여러개의조건을조합하여참과거짓을따지는연산자결과값은참 (1) 아니면거짓 (0) x && y x 와 y 가모두참인경우에만참이된다.
논리연산자 연산자 x && y x y 의미 AND 연산, x 와 y 가모두참이면참, 그렇지않으면거짓 OR 연산, x 나 y 중에서하나만참이면참, 모두거짓이면거짓!x NOT 연산, x 가참이면거짓, x 가거짓이면참
AND 연산자 27 800 (age <= 30) && (toeic >= 700) 참 (1) 참 (1) 참 (1)
OR 연산자 27 699 (age <= 30) (toeic >= 700) 참 (1) 거짓 (0) 참 (1)
NOT 연산자 피연산자의값이참이면연산의결과값을거짓으로만들고, 피연산자의값이거짓이면연산의결과값을참으로만든다. result =!1; result =!(2==3); // result 에는 0 가대입된다. // result 에는 1 이대입된다.
예제 #include <stdio.h> int main() { int x, y; printf(" 두개의정수를입력하시오 : "); scanf("%d%d", &x, &y); printf("%d && %d 의결과값 : %d \n", x, y, x && y); printf("%d %d 의결과값 : %d \n", x, y, x y); printf("!%d 의결과값 : %d \n", x,!x); return 0; } 두개의정수를입력하시오 : 10 1 && 0 의결과값 : 0 1 0 의결과값 : 1!1 의결과값 : 0
if-else 문 날씨가좋은가? 거짓 참 테니스를친다. 공부를한다. if( 조건식 ) 문장 1; else 문장 2; 조건식이참이면실행된다. 조건식이거짓이면실행된다.
if-else 문 if ( number > 0 ) { printf( 양수입니다. \n"); } else { } printf(" 양수가아닙니다.\n");
핵심예제 : 홀수, 짝수구별하기 키보드에서입력받은정수가홀수인지짝수인지를말해주는프로그램을작성하여보자.
예제 #1 // if-else 문을이용하여홀수와짝수를구분한다. #include <stdio.h> int main() { int number; printf(" 정수를입력하시오 :"); scanf("%d", &number); 2 로나누어서나머지가 0 이면짝수이다. if( number % 2 == 0 ) printf(" 입력된정수는짝수입니다.\n"); else printf(" 입력된정수는홀수입니다.\n"); } return 0; 정수를입력하시오 : 23 입력된정수는홀수입니다.
핵심예제 : 큰수출력하기 사용자로부터두개의정수를입력받아서둘중에서큰수를출력한다.
예제 #1 #include <stdio.h> int main() { int x, y, max; printf(" 첫번째정수 : "); scanf("%d", &x); printf(" 두번째정수 : "); scanf("%d", &y); if (x > y) else max = x; max = y; } printf(" 큰수는 %d \n", max); return 0;
Lab: 윤년판단 입력된연도가윤년인지아닌지를판단하는프로그램을만들어보자.
예제 #3 // 윤년판단프로그램 #include <stdio.h> int main(void) { int year; printf(" 연도를입력하시오 : "); scanf("%d", &year); if((year % 4 == 0 && year % 100!= 0) year % 400 == 0) printf("%d 년은윤년입니다.\n", year); else printf("%d 년은윤년이아닙니다.\n", year); } return 0;
복합문 복합문 (compound statement) 중괄호를사용하여문장들을그룹핑하는것, 블록 (block) 이라고도한다. 단일문대신들어갈수있다. if( score >= 60 ) { printf(" 합격입니다.\n"); } printf(" 장학금도받을수있습니다.\n"); 조건식이참이면 2 개의문장이묶여서실행된다.
중첩 if if 문에다시 if 문이포함 if( 조건식 1 ) if( 조건식 2 ) 문장 ;
중첩 if if( score >= 80 ) if( score >= 90 ) printf(" 당신의학점은 A 입니다.\n"); if 문안의문장자리에 if 문이들어간경우 if( score >= 80 ) if( score >= 90 ) else printf(" 당신의학점은 A 입니다.\n"); printf(" 당신의학점은 B 입니다.\n"); if 문안의문장자리에 if-else 문이들어간경우
if 와 else 의매칭문제 else 절은가장가까운 if 절과매치된다. if(score > 80) if( score >= 90) X O printf( 당신의학점은 A입니다 \n ); else printf( 당신의학점은 B입니다 \n ) if( score >= 80 ) { if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); } else printf(" 당신의학점은 A 나 B 가아닙니다.\n"); 만약다른 if 절과 else 절을매치시키려면중괄호를사용하여블록으로묶는다.
핵심예제 : 학점결정하기 성적이 90 점이상이면 A 학점, 80 점이상이고 90 점미만이면 B 학점, 70 점이상이고 80 점미만이면 C 학점과같이결정하는것이다.
소스 #include <stdio.h> int main() { int score; printf(" 성적을입력하시오 : "); scanf("%d", &score); } if (score >= 90) printf(" 합격 : 학점 A\n"); else if (score >= 80) printf(" 합격 : 학점 B\n"); else if (score >= 70) printf(" 합격 : 학점 C\n"); else if (score >= 60) printf(" 합격 : 학점D\n"); else printf(" 불합격 : 학점F\n"); return 0;
실습 : 이차방정식 1. 사용자에게이차방정식의계수 a, b, c를입력하도록한다. 2. 만약 a가 0이면근은 -c/b이다. 3. 판별식 (b 2 4ac) 가음수이면실근은존재하지않는다. 4. 위의조건에해당되지않으면다음과같은공식을이용하여실근을구한다. x = b ± b2 4ac 2a
실행결과
알고리즘 사용자로부터 a, b, c를읽는다. if a == 0이면일차방정식의근을구한다. 실근을출력한다. (-c/b) else 판별식 (b 2-4ac) 을계산한다. if 판별식 >= 0 근의공식을이용하여실근을구한다. 실근을출력한다. else 실근은없다는메시지출력
#include <stdio.h> #include <math.h> int main() { } double a, b, c, dis, value; print f(" 계수 a 를입력하시오 : "); sca nf("%lf", &a); printf(" 계수 b 를입력하시오 : "); scanf("%lf", &b); printf(" 계수 c 를입력하시오 : "); scanf("%lf", &c); if( a == 0 ) else { } return 0; printf(" 방정식의근은 %f 입니다.", -c/b); dis = b*b - 4.0*a*c; if( dis > 0 ) { } else if( dis == 0 ) else 이차방정식소스 value = sqrt(dis); printf(" 방정식의근은 %f 입니다.\n", (-b+value)/(2.0*a)); printf(" 방정식의근은 %f 입니다.\n", (-b-value)/(2.0*a)); printf(" 방정식의근은 %f 입니다.\n", (-b)/(2.0*a)); printf(" 실근이존재하지않습니다.\n");
Lab: 산술계산기
#include <stdio.h> 계산기소스 int main() { char op; int x, y, result; printf(" 수식을입력하시오 \n"); printf("( 예 : 2 + 5) \n"); printf( ">>"); scanf("%d %c %d", &x, &op, &y); if( op == '+' ) result = x + y; else if( op == '-' ) result = x - y; else if( op == '*' ) result = x * y; else if( op == '/' ) result = x / y; else if( op == '%' ) result = x % y; else printf(" 지원되지않는연산자입니다. \n"); } printf("%d %c %d = %d \n", x, op, y, result); return 0;