어서와 C 언어는처음이지 제 11 장
경로선택을위한데이터검사 if 문장 관계연산자 (relational operator)
데이터검사하기 만약내가충분한돈을벌면, 우리는이태리로간다. 만약구두가맞지않으면, 환불한다. 만약외부기온이높으면, 잔디에물을준다.
관계연산자
관계연산자의예 int i = 5; int j = 10; int k = 15; int l = 5; i == l j < k k > i j!= l i > j k < j k == l 참 거짓
관계연산자의결과값 C 가관계연산자를계산할때마다, 1 또는 0 의값이생성된다. a = (4 < 10); // (4 < 10) 가참이므로변수 a에 1이저장된다. b = (8 == 9); // (8 == 9) 가거짓이므로변수 b에 0이저장된다.
if 문장 if (condition) 하나이상문장들의블록 ;
// 완전초보자가이드 3 판 11 장예제 #1 // 파일 Chapter11ex1.c /* 이프로그램은사용자에게탄생연도를질문하여현재의나이를계산한다. 또날짜가잘못입력되어서미래의날짜가입력됐는지도검사한다. 사용자가윤년에태어났으면이를알려준다.*/ #include <stdio.h> #define CURRENTYEAR 2014 main() int yearborn, age; printf(" 몇년에태어나셨습니까?"); scanf(" %d",&yearborn);
// if 문장은데이터검증을하는데사용된다. // 사용자가입력한탄생연도가올바른지를검사한다. // 이문장은 yearborn 이 2013 년이후일경우에만실행된다. if (yearborn > CURRENTYEAR) printf(" 진짜요? 아직태어나지않으셨다고요?"); printf(" 다른연도를입력하시겠습니까?"); printf(" 몇년에태어나셨습니까?"); scanf(" %d",&yearborn); age = CURRENTYEAR yearborn; printf(" 따라서금년생일이지나면 %d 살이되시는군요!", age);
// 두번째 if 문장은사용자가태어난연도가윤년인지를검사한다. // 윤년일경우에만 if 의몸체가실행된다. if ((yearborn % 4) == 0) printf(" 윤년에태어나셨군요 -- 쿨하시네요!"); return 0;
if-else 문장 if (condition) 하나이상문장의블록 ; else 하나이상문장의블록 ;
// 완전초보자가이드 3 판 11 장예제 #2 // 파일 Chapter11ex2.c /* 이프로그램은사용자에게탄생연도를질문하여현재의나이를계산한다. 또날짜가잘못입력되어서미래의날짜가입력됐는지도검사한다. 사용자가윤년에태어났으면이를알려준다.*/ #include <stdio.h> #define CURRENTYEAR 2014 main() int yearborn, age; printf(" 몇년에태어나셨습니까?"); scanf(" %d",&yearborn); // if 문장은데이터검증을하는데사용된다. // 사용자가입력한탄생연도가올바른지를검사한다. // 이문장은 yearborn이 2013년이후일경우에만실행된다. if (yearborn > CURRENTYEAR) printf(" 진짜요? 아직태어나지않으셨다고요?"); printf(" 시간여행을축하합니다!");
else age = CURRENTYEAR -yearborn; printf(" 따라서금년생일이지나면 %d 살이되시는군요!", age); 검사한다. // 두번째 if 문장은사용자가태어난연도가윤년인지를 // 윤년일경우에만 if 의몸체가실행된다. if ((yearborn % 4) == 0) printf(" 윤년에태어나셨군요 -- 쿨하시네요!"); return 0;
// 완전초보자가이드 3 판 11 장예제 #2 // 파일 Chapter11ex2.c /* 이프로그램은사용자에게 1 에서 10 까지의척도를사용하여행복의정도를질문한다. 그리고구간에따라서 2 줄로된메시지를출력한다. 1-2, 3-4, 5-7, 8-10 과같은구간을사용한다.*/ #include <stdio.h> main() int prefer; printf(" 지금얼마나행복한지 1부터 10까지의숫자중어떤것으로표현할수있나요?"); scanf(" %d", &prefer); // 사용자의행복수준이입력되면연속된 if 문장이이행복수준을검사하게된다. // 행복수준이감소하는순서로검사한다.4 개의경우중에서하나가실행된다. if (prefer >= 8) printf(" 좋군요!"); printf(" 모든일들이잘되고있군요!");
else if (prefer >= 5) printf(" 평균보다는높으시네요, 그렇죠?"); printf(" 곧더좋아지실겁니다!"); else if (prefer >= 3) printf(" 좋다고느끼지못해서안타깝네요."); printf(" 곧모든일이좋아지기를빕니다..."); else printf(" 조금만참으세요 좋아질겁니다, 그렇죠?"); printf(" 해뜨기전이가장어두운법이죠."); return 0;
실행결과 행복의정도를 1 부터 10 까지의숫자중어떤것으로표현할수있나요? 5 평균보다는높으시네요, 그렇죠? 곧더좋아지실겁니다!
Lab: 짝수 or 홀수 사용자로부터정수를받아서짝수인지홀수인지를판별해주는프로그램을작성하여보자. 정수를입력하시오 : 23 23 은홀수입니다.
#include <stdio.h> main() int num; printf(" 정수를입력하시오 :"); scanf("%d", &num); if ((num % 2) == 0) // 나머지가 0 인지를검사한다. printf("%d 은짝수입니다.",num); else printf("%d 은홀수입니다.",num); return 0;
Lab: 시각에따른인사출력 사용자로부터현재시각을입력받는다. 현재시각이 10 시이전이면 Good morning 을출력한다. 현재시각이 20 시이전이면 Good day 를출력한다. 나머지시각에는 Good evening 을출력한다. 현재시각을입력하시오 : 23 Good evening
#include <stdio.h> main() int time; printf(" 현재시각을입력하시오 :"); scanf("%d", &time); if (time < 10) printf("good morning"); else if (time < 20) printf("good day"); else return 0; printf("good evening");
학습정리 데이터를비교할때는관계연산자를사용한다. 관계연산자의결과가참이면 1이생성되고거짓이면 0이생성된다. 데이터를비교하기위해 if를사용하고 if 검사가실패하면 else를이용해서무엇을해야되는지를지정한다. if 코드와 else 코드를될수있으면중괄호로감싸도록하자. 중괄호안의코드는관계연산자의결과에따라서실행되거나실행되지않는다. if나 else 다음에세미콜론을찍으면안된다. 세미콜론은 if 문이나 else 문안에들어있는문장들의끝에만붙여야한다.
Q & A
LAB 1. 연도를입력받아윤년인지평년인지를판단하는프로그램을작성하시오. 윤년의조건은다음과같다. 4년에한번씩윤년이다. 100년째되는해는윤년이아니다. 400년째되는해는윤년이다. 예를들어, 2008 을입력하면 윤년 이라고출력해야하고, 2011 을입력하면 평년 이라고출력한다.