프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음
CHAPTER 9 둘중하나선택하기
관계연산자 두개의피연산자를비교하는연산자 결과값은참 (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보다작거나같은가?
예제 #include <stdio.h> int main(void) { int x, y; printf(" 두개의정수를입력하시오 : "); scanf("%d%d", &x, &y); } printf("x == y 의결과값 : %d", x == y); printf("x!= y 의결과값 : %d", x!= y); printf("x > y 의결과값 : %d", x > y); printf("x < y 의결과값 : %d", x < y); printf("x >= y 의결과값 : %d", x >= y); printf("x <= y 의결과값 : %d", 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에는 0가대입된다. result =!(2==3); // result에는 1이대입된다.
예제 #include <stdio.h> int main(void) { int x, y; printf(" 두개의정수를입력하시오 : "); scanf("%d%d", &x, &y); printf("%d && %d 의결과값 : %d", x, y, x && y); printf("%d %d 의결과값 : %d", x, y, x y); printf("!%d 의결과값 : %d", x,!x); } return 0; 두개의정수를입력하시오 : 1 0 1 && 0 의결과값 : 0 1 0 의결과값 : 1!1 의결과값 : 0
if-else 문 if( 조건식 ) 문장1; // 조건식이참 else 문장2; // 조건식이거짓
if-else 문 if ( number > 0 ) { printf( 양수입니다. \n"); } else { printf(" 양수가아닙니다.\n"); }
if 문 if( 조건식 ) 문장1; 문장2;
핵심예제 : 홀수, 짝수구별하기 키보드에서입력받은정수가홀수인지짝수인지를말해주는프로그램을작성하여보자.
// if-else 문을이용하여홀수와짝수를구분한다. #include <stdio.h> int main(void) { int number; printf(" 정수를입력하시오 :"); scanf("%d", &number); 예제 #1 if( number % 2 == 0 ) printf(" 입력된정수는짝수입니다.\n"); else printf(" 입력된정수는홀수입니다.\n"); } return 0; 정수를입력하시오 : 23 입력된정수는홀수입니다.
핵심예제 : 큰수출력하기 사용자로부터두개의정수를입력받아서둘중에서큰수를출력한다.
예제 #1 #include <stdio.h> int main(void) { int x, y ; int max ; start x, y printf(" 첫번째정수 : "); scanf("%d", &x); Yes x>y No printf(" 두번째정수 : "); scanf("%d", &y); max x max y if (x > y) else max = x; max = y; max } printf(" 큰수는 %d ", max); return 0; 정수를입력하시오 end : 23 입력된정수는홀수입니다.
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; 연도를입력하시오 : 2012 2012 년은윤년입니다.
복합문 복합문 (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( score >= 80 ) if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); else printf(" 당신의학점은 B입니다.\n");
if 와 else 의매칭문제 if(score > 80) if( score >= 90) printf( 당신의학점은 A 입니다 \n ); else printf( 당신의학점은 B 입니다 \n ) if( score >= 80 ) { if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); } else printf(" 당신의학점은 A나 B가아닙니다.\n");
핵심예제 : 학점결정하기 성적이 90 점이상이면 A 학점, 80 점이상이고 90 점미만이면 B 학점, 70 점이상이고 80 점미만이면 C 학점과같이결정하는것이다.
소스 #include <stdio.h> int main(void) { 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; 성적을입력하시오 : 88 학점 B
실습 : 이차방정식 1. 사용자에게이차방정식의계수 a, b, c를입력하도록한다. 2. 만약 a가 0이면근은 -c/b이다. 3. 판별식 4 가음수이면실근은존재하지않는다. 4. 위의조건에해당되지않으면다음과같은공식을이용하여실근을구한다. 4 2
알고리즘 사용자로부터 a, b, c를읽는다. if a == 0이면일차방정식의근을구한다. 실근을출력한다. else 판별식을계산한다. if 판별식 >= 0 근의공식을이용하여실근을구한다. 실근을출력한다. else 실근은없다는메시지출력 1. 사용자에게이차방정식의계수 a, b, c를입력하도록한다. 2. 만약 a가 0이면근은 -c/b이다. 3. 판별식 4 가음수이면실근은존재하지않는다. 4. 위의조건에해당되지않으면다음과같은공식을이용하여실근을구한다. 4 2
소스 #include <stdio.h> #include <math.h> int main(void) { double a, b, c, dis, value; printf(" 계수 a를입력하시오 :"); scanf("%lf", &a); printf(" 계수 b를입력하시오 :"); scanf("%lf", &b); printf(" 계수 c를입력하시오 :"); scanf("%lf", &c); if( a == 0 ) printf(" 방정식의근은 %f입니다.", -c/b); else { dis = b*b - 4.0*a*c;
소스 } } return 0; if( dis > 0 ) { value = sqrt(dis); printf(" 방정식의근은 %f입니다.\n", (-b+value)/(2.0*a)); printf(" 방정식의근은 %f입니다.\n", (-b-value)/(2.0*a)); } else if( dis == 0 ) printf(" 방정식의근은 %f입니다.\n", (-b)/(2.0*a)); else printf(" 실근이존재하지않습니다.\n");
Lab: 산술계산기 #include <stdio.h> int main(void) { char op ; int x, y, result; printf(" 수식을입력하시오 "); printf("( 예 : 2 + 5> "); printf(">>"); scanf("%d %c %d", &x, &op, &y); if( op == '+' ) result = x + y; 수식을입력하시오 else if( op == '-' ) ( 예 : 2 + 5) result = x - y; >>2 + 5 else if( op == '*' ) 2 + 5 = 7 result = x * y; else if( op == '/' ) result = x / y; else if( op == '%' ) result = x % y; else printf(" 지원되지않는연산자입니다. "); printf("%d %c %d = %d ", x, op, y, result); return 0; }
소스 #include <stdio.h> int main(void) { char op; int x, y, result; printf(" 수식을입력하시오 "); printf("( 예 : 2 + 5) "); 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(" 지원되지않는연산자입니다. "); printf("%d %c %d = %d ", x, op, y, result); return 0; } 수식을입력하시오 ( 예 : 2 + 5) >>2 + 5 2 + 5 = 7
프로그램 1 알파벳이자음인지모음인지를판별하는프로그램을작성한다.
#include <stdio.h> int main() { char ch; printf(" 글자를입력하시오 : "); scanf(" %c", &ch); if (ch == 'a' ch == 'A' ch == 'e' ch == 'E' ch == 'i' ch == 'I' ch == 'o' ch == 'O' ch == 'u' ch == 'U') printf("%c 은모음입니다. \n", ch); else printf("%c 은자음입니다. \n", ch); return 0; }