if 명령은 그 뒤에 오는 조건식의 참/거짓 여부에 따라 속한 블럭을 수행할지 말지를 결정하는 명령이다. 가장 기본 문법은 다음과 같다.


if 조건식:
   실행문1
   실행문2
   …


여기에서 조건식이 참(True)이면 실행문1, 실행문2 … 가 수행되고 그렇지 않으면 실행되지 않는다. 주의할 점은 if 문에 속한 모든 실행문은 들여쓰기가 같아야 한다는 것이다. 한 칸이라도 틀리면 문법 오류를 발생하게 된다. (보통 한 수준의 들여쓰기는 공백문자 4칸으로 한다.) 또한 조건식 뒤의 콜론(:)도 처음에는 빠뜨리기 쉬우니 조심하자.


 조건식에는 보통 관계연산자와 논리연산자가 사용된다.


[표 1] 조건식에서 사용되는 관계/논리 연산자들

분류

연산자들

관계연산자

==, !=, <, >, <=, >=, is, is not, in, not in

논리연산자

and, or, not


예를 들면 다음과 같다.


n = int(input("integer:"))
if n%2==0:
   print("even number!")

#실행:
integer:12
even number!


이 예는 입력 받은 정수가 짝수일 경우 화면에 ‘even number’라고 출력하고 홀수일 경우는 아무런 일도 하지 않는 것이다.


좀 더 일반적인 if 명령의 문법은 else 와 짝을 이루는 것이다.


if 조건식 :
   실행문1
   실행문2
   …
else :
   실행문3
   실행문4
   …


이 경우 조건식이 거짓이면 else 블럭(실행문 3, 실행문4…)을 수행하게 된다.


age = int(input("나이:"))
if age<30:
   print("청년")
else:
   print("중년")

#실행:
나이:44
중년


사용자의 나이 입력을 받아서 나이가 30 미만으면 ‘청년’, 30 이상이면 ‘중년’이라고 출력하는 간단한 예제이다.


 일반적인 if 명령의 구조는 다음과 같다.


if 조건식1 :
   실행문1
   ...
elif 조건식2
   실행문2
   …
elif 조건식3
   실행문3
   …
else :
   실행문n
   …


키워드 elif 는 else if 를 줄인 단어이다. 이 구조에서 조건식1이 참이라면 실행문1을 수행하고 if 블럭을 완전히 빠져나간다. 만약 조건문1이 거짓이라면 조건식2를 판별한다. 그래서 조건식2가 참이면 실행문2를 실행하고 if 블럭을 빠져나간다. 모든 조건이 거짓일 경우 else 문에 속한 실행문n이 실행된다.


s = 'hello'
if 'a' in s:
   print("'a' is contained")
elif 'b' in s:
   print("'b' is contained")
else:
   print("both 'a' and 'b' are not contained")

#실행결과:
both 'a' and 'b' are not contained


파이썬에는 C/C++/JAVA/C# 등에는 있는 switch - case 명령문이 없다. 따라서 비교적 많은 수의 다중 조건을 판단해야 할 경우에도 if - elif- else 문을 조합하여 구성해야 한다.


 가끔 조건문을 판단하고 참 거짓에 따라 행동을 정의 할 때 아무런 일도 하지 않도록 설정을 하고 싶을 때가 생기게 된다. 다음의 예를 보자.


"집에 돈이 있으면 가만히 있고 집에 돈이 없으면 노트북을 팔아라"


위의 예를 pass를 적용해서 구현해 보자.


>>> home = [‘money’, 'TV', 'radio', 'notebook']
>>> if 'money' in home:
...    pass
... else:
...    print("sell notebook.")


home이라는 리스트 안에 'money'라는 문자열이 있기 때문에 if 문 다음 문장인 pass가 수행되었고 아무 일도 수행하지 않는 것을 확인 할 수 있다.


위의 예를 보면 if문 다음의 수행할 문장이 한 줄이고 else문 다음에 수행할 문장도 한 줄이다. 이렇게 수행할 문장이 한 줄일 때 조금 더 간편한 방법이 있다. 위에서 알아본 pass를 사용한 예는 다음처럼 간략화할 수 있다.


>>> home = [‘money’, 'TV', 'radio', 'notebook']
>>> if 'money' in home: pass
... else:
...    print("sell notebook.")


if 문 다음의 수행할 문장을 ':'뒤에 바로 적어 주었다. else 문 역시 마찬가지이다. 이렇게 하는 이유는 때로는 이렇게 하는 것이 보기에 편하게 때문이다.



Posted by 살레시오
,

4장 연습문제

pb04-01:사용자가 입력한 int형 변수 x와 y에 대해 x를 y로 나눈 몫과 나머지를 화면에 각각 출력하는 프로그램을 작성하라. 단, y가 0이라면 아무 것도 출력하지 않고, 나머지가 0일 경우 몫만 출력해야 한다.


pb04-02:양의 정수를 입력받아서 1이면 "1st", 2라면 “2nd", 3이면 ”3rd" 나머지의 경우는 숫자 뒤에 “th”를 붙여서 화면에 출력하는 프로그램을 작성하라. 만약 0이하의 숫자가 입력되었다면 다시 입력하도록 한다.


pb04-03: 월소득(monthly income)을 long형으로 입력 받아서 그것에 대한 소득세(income tax)를 계산하여 출력하는 프로그램을 작성하라. 소득세율은 다음과 같다.


소득이    500,000원 이하는 0%

2,500,000원 이하는 0.5%

4,000,000원 이하는 1.0%

                     7,000,000원 이하는 2.0%,

                     그 이상은 4.0%

pb04-04: 2에서 9사이의 정수를 입력받아 해당하는 구구단을 출력하는 프로그램을 작성하라. 그 외의 숫자가 입력되었다면 다시 입력받도록 한다.


pb04-05:정수 하나를 입력 받아서 그 약수들을 출력하는 프로그램을 작성하라.


pb04-06:정수 두 개를 입력 받아서 두 수의 최대공약수(greatest common divisor)를 출력하는 프로그램을 작성하라.


pb04-07:다음 반복문이 화면에 표시하는 결과는 무엇인가?

int iA;
for (iA=36; iA>0; iA/=2) {
  printf("%d ", iA);
}

pb04-08:정수 두 개를 입력 받아서 두 수의 최소공배수(least common multiple)를 출력하는 프로그램을 작성하라.


pb04-09: 1000이하의 모든 소수(prime number)를 출력하는 프로그램을 작성하라. (소수란 1과 자신의 수로만 나누어 떨어지는 정수를 말한다.)


pb04-10: 사용자가 입력한 정수값이 소수(prime number)이면 프로그램을 종료하고 아니면 다시 정수값을 입력받는 프로그램을 작성하라.


pb04-11: 양의 정수를 입력받아서 다음과 같이 화면에 출력하는 프로그램을 작성하라.

pb04-12: float형 변수 fa, fb, fc 에 각각 사용자로 부터 정수값을 입력 받은 후 크기 순으로 나열했을 경우의 중간 값을 화면에 출력하는 프로그램을 작성하라. 예를 들어 1.2 10.0 –3.5 를 사용자가 입력했다면 크기순으로 정렬하면 10.0 > 1.2 > -3.5 이다. 따라서 가운데의 1.2를 출력해야 한다.


pb04-13: 1000 이하의 양의 정수 중 3의 배수이거나 5의 배수인 것들을 역순으로 출력하는 프로그램을 작성하라. 즉 다음과 같이 화면에 출력되어야 한다. 만약 3의 배수이고 동시에 5의 배수인 경우 대괄호 안에 숫자를 출력한다.

1000 999 996 995 993 [990] 987 985 984 981 980 978 [975] 972 ....9 6 5 3


pb04-14: 다음 프로그램이 실행된다면 화면에 어떻게 출력되는가?

#include <stdio.h>
int main(int argc, char **argv) {
  for(char ca='a';ca!='g';ca++) {
  printf("%c ",ca);
  }
}

Posted by 살레시오
,

3장 연습 문제     [gdoc]     [smts]

  1. 연산자 ++, --가 변수에 붙는 방향에 따라 동작이 어떻게 달라지는지 기술하라.

  2. 반지름이 1.5인 원의 원주의 길이와 면적을 계산하여 출력하는 프로그램을 작성하라.

  3. 하나의 정수를 입력받아서 짝수이면 "even number!" , 홀수이면 "odd number!"라고 화면에 표시하는 프로그램을 작성하라. (조건 연산자를 이용할 것)

  4. 어떤 int형 정수를 입력받아서 그 수의 절대값을 화면에 출력해 주는 프로그램을 작성하라.

  5. 세 개의 int형 정수를 입력받아서 그 중 가장 큰 수를 화면에 출력해 주는 프로그램을 작성하라.

  6. 분수의 분자(numerator)와 분모(denominator)를 각각 입력받아(long 형) 가분수(improper fraction), 진분수(proper fraction) 여부를 출력하는 프로그램을 작성하라. 만약 가분수일 경우 정수+진분수의 형태로도 출력해야 한다.

  7. 두 개의 복소수를 입력받아서 곱셈 결과를 출력하는 프로그램을 작성하라. 단, 복소수의 실수부와 허수부는 float형으로 받는다.

  8. 2차 방정식 x2+ax+b=0 의 계수 a, b값(int형)을 키보드로 읽어들여서 판별식의 조건에 따라 두 실근일 경우 “real roots”, 중근일 경우 “an equal root”, 허근일 경우 “complex roots” 라고 화면에 표시하는 프로그램을 작성하라. 단, 중근일 경우에는  중근을 출력해야 한다.


--- 이하는 생략 가능 ---------------

  1. 변수 ucB의 b2가 0이라면 화면에 “LED off”, 1이라면 “LED on”이라고 출력하는 프로그램을 작성하라.

  2. 변수 ucC의 초기값을 0x0F이다. 이 변수값 전체가 주기적으로 반전되는 프로그램을 작성하라. (단 시간을 지연시키는 함수는 _delay_ms(unsigned shot usN )이라고 가정하고 usN에는 밀리세컨드 숫자를 입력한다고 하자.)

  3. 변수 ucA의 상위 니블을 반전시키는 코드를 작성하라.

  4. unsigned char형 변수값을 이진수로 표기해주는 프로그램을 작성하라.


Posted by 살레시오
,