어서와 C 언어는처음이지 제 12 장
논리연산자 관계연산자의한계 if (age >= 21) /* 21 <= age <= 65 인지를검사 */ if (age <= 65) printf(" 나이가 21과 65 사이입니다. n");
논리연산자
논리연산자의예 ( 예 ) if ((age >= 21) && (age <= 65)) ( 예 ) if ((hrsworked > 40) (sales > 25000.00)) ( 예 ) if (!(ischartermember)) " 만일나이가 21 세이상이고, 그리고 65 세보다이하이면,..."
// 완전초보자가이드 3 판 11 장예제 #2 // 파일 Chapter11ex2.c /* 이프로그램은변수와수식을정의한다. 그리고변수를검사하기위하여관계연산자와논리연산자를사용한다.*/ #include <stdio.h> main() // 프로그램에서사용되는공통적인정수를정의한다. int planets = 8; int friends = 6; int potterbooks = 7; int starwars = 6; int months = 12; int beatles = 4; int avengers = 6; int baseball = 9; int basketball = 5; int football = 11;
"); // 첫번째논리문장은 AND 연산자를사용한다. // 시트콤프렌즈캐스트와비틀즈멤버의수를합치면 // 야구단을만들수있는지를검사한다. // 또시트콤프렌즈캐스트와어벤저스멤버의수를합치면 // 야구단을만들수있는지를검사한다. if ((friends + beatles >= baseball) && (friends + avengers >= football)) printf(" 시트콤프렌즈배우와비틀즈멤버의수를합치면 "); printf(" 야구단을만들수있다,"); printf("and 시트콤프렌즈배우와어벤저스멤버의수를합치면 else printf(" 야구단을만들수있다."); printf(" 시트콤프렌즈의멤버와비틀즈멤버의수를합쳐도 "); printf(" 야구팀을만들지못하거나,"); printf(" 시트콤프렌즈의멤버와어벤저스멤버와합쳐서 "); printf(" 야구단을만들수없다.");
// 두번째논리문장은 OR 연산자를사용해서 // 스타워즈영화의수가 1 년중의월의개수보다적거나 // 해리포터책의개수가 1 년중의월의개수보다적은지검사한다. // 어느쪽하나만참이면 true, // if 문장이실행된다. if ((starwars <= months) (potterbooks <= months)) printf(" 해리포터책을한달에한권씩읽으면,"); printf("1 년안에끝낼수있거나,"); printf("or 스타워즈영화를한달에한편씩보면,"); printf("1 년안에끝낼수있다."); else printf(" 너무많은책과영화가있어서둘다불가능하다,"); printf(" 충분한시간이없음!");
// 마지막논리문장은 NOT 연산자를사용하여검사한다. // 야구팀의선수수와농구팀의선수수를합한수가미식축구선수수보다 // 크지않으면 // if 문장이실행된다. if (!(baseball + basketball > football)) printf(" 야구와농구팀의선수수를합쳐도 "); printf(" 미식축구선수보다적다."); else printf(" 야구와농구팀의선수수를합치면 "); printf(" 미식축구선수보다많다."); return 0;
부정연산자피해하기 프로그래밍에서도부정적인생각은좋지않다! ( 예 ) if (!count) /* count가 0이면 if 의몸체를실행한다. */ ( 예 ) if (count == 0) 권장!
// 완전초보자가이드 3 판 12 장예제 #2 // 파일 Chapter12ex2.c /* 이프로그램은사람의성을묻는다. 사용자가 P 에서 S 사이의성을입력하면, 사용자는특별한방으로이동된다. */ #include <stdio.h> main() // 성을저장할수있는배열을정의한다. char name[25]; printf(" 영어이름을입력하시오 :"); printf("( 첫글자는대문자로!)"); scanf(" %s",name);// 문자열배열의경우,& 을사용할필요가없다. if ((name[0] >= 'P') &&(name[0]<='s')) printf(" 티켓을찾으려면 2432호로가세요."); else printf(" 여기서티켓을찾으세요.");
return 0;
if 문의용도 printf(" 프린터가켜있나요 (Y/N)?"); scanf(" %c",&ans);// 문자변수앞에 & 을필요로한다. if ((ans == 'Y') (ans=='n')) // 사용자가정확한대답을했으면 if (ans == 'N') printf("*** 지금프린터를켜시오. ***"); else printf("y 또는 N 을입력하지않았군요.");
논리연산자의우선순위 && 연산자가 연산자보다우선순위가높다 ( 예 ) if (age < 20 sales < 1200 && hrsworked > 15) if ((age < 20) ((sales < 1200) && (hrsworked > 15)))
괄호를사용하는것이좋음 성적이우수하고수업에 3 번이하로결석한학생들을선생님이표창하려고한다. 그리고학생이표창을받으려면기본적으로 3 개의학교조직에가입하거나 2 개의스포츠활동에참여하여야한다. ( 예 ) if (grade > 93 && classmissed <= 3 && numacts >= 3 sports >= 2) 잘못되었음! if ((grade > 93) && (classmissed <= 3) && ((numacts >= 3) (sports >= 2))
Lab: 작은수 사용자로부터정수 3 개를받아서이중에서가장작은수를찾아내는프로그램을작성해보자 정수 3 개를입력하시오 : 10 20 30 가장작은수는 10 입니다.
#include <stdio.h> main() int x, y, z; printf(" 정수 3 개를입력하시오 :"); scanf("%d %d %d", &x, &y, &z); if (x < z && y < z) printf(" 가장작은수는 %d 입니다.",x); if (y < z && y < x) printf(" 가장작은수는 %d 입니다.",y); if (z < x && z < y) printf(" 가장작은수는 %d 입니다.",z); return 0;
Lab: 학점부여 학생의성적을받아서다음과같이학점을매기는프로그램을작성하여보자. 90 점 - 100 점 : A 학점 80 점 -89 점 : B 학점 70 점 -79 점 : C 학점 60 점 69 점 : D 학점 59 점이하 : F 학점 성적을입력하시오 : 98 A 학점입니다.
#include <stdio.h> main() int score; char grade; printf(" 성적을입력하시오 :"); scanf("%d", &score); if (score >= 90) grade = 'A'; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else grade = 'F'; printf("%c 학점입니다.",grade); return 0;
학습정리 관계연산자를연결할때는논리연산자를사용한다. 연산자의양쪽이모두참이되어야만전체조건이참이되는경우는 && 를사용한다. 연산자의어떤쪽한편만참이되어도전체조건이참이되는경우에는 를사용한다.! 을너무많이사용하지말자. 대부분의부정논리는 not 연산자를없애고조건을반전하면없앨수있다. ( 즉 < 은 >= 이되고 > 은 <= 이된다 ) 너무많은관계연산자들은하나의수식으로묶지말자. 머리만복잡해진다.
Q & A