내장형 하드웨어/C언어

if문, 다중 if문, switch 문, 흐름도 (flow chart)

동화다아아 2011. 4. 4. 13:40

 

예제 p3_4.c

#include<stdio.h>

int main()

{

        int num1, num2, bigger; // 4바이트 정수형 변수 선언

        printf("Please enter two intergers: ");

        scanf("%d %d", &num1, &num2);

        bigger = num1; //num1의 값을 bigger에 대입한다.


        
if(num1<num2) //num2가 num1보다 클 경우 {}부분이 실행된다.

        {

                bigger = num2; // num2가 num1보다 클 경우 bigger에 대입된다.

        }

        printf("The larger number is : %3d\n",bigger);


        return 0;

}


흐름도(flow chart)



예제 p3_6.c

#include<stdio.h>

int main()

{

        int num1, num2, bigger, smaller;

        

        printf("Please enter two integers: ");

        scanf("%d %d", &num1, &num2);

        if(num1 < num2) // num2가 num1보다 클 경우 { } 부분 실행

        {

                bigger = num2;

                smaller = num1;

        }

        else //num1이 num2 보다 작지 않다면 실행

        {

                bigger = num1;

                smaller = num2;

        }

        printf("%d is larger than %3d\n", bigger, smaller);


        return 0;

}


⇒ if와 else는 조건을 나타내는 논리식의 값이 참이면 if 절이 실행되고, 거짓이면 else 절이 실행된다.

⇒ if(num1<num2)

   ① CPU num1 값을 메모리에서 불러온다.

   ② CPU num2 값을 메모리에서 불러온다.

   ③ ALU가 num1과 num2 값을 비교하여 num1이 num2보다 작으면 1(참), 크면 2(거짓)으로 인식한다.

⇒ 비교와 계산은 다르다.

   ․ 비교할 때 왼쪽에서 오른쪽으로 값을 분석한다.

   ․ 계산할 때 오른쪽에서 왼쪽으로 값을 분석한다.

⇒  if(0.1), if(100), if(-100)… 등을 넣어보면 모두 참으로 인식되며 if(0)의 값만이 거짓이다. 컴퓨터의 논리는 0 이외에는 모두 참으로 인식되므로 if문 안에 0, 0.1, 10, -100 등을 넣어도 모두 참으로 인식한다는 것이다.


예제 p3_7.c

#include<stdio.h>

int main()

{

        int score;

        char grade = 'X'; // grade를 X로 초기화 하지 않으면 score 값의 입력이 잘못된 경우에 grade가 미정값을 가져서 마지막 printf문에서 예상할 수 없는 값을 출력할 수 있다.

        printf("Please enter examination score: ");

        scanf("%d", &score);

        if((score <= 100) && (score >= 90)) // 논리 연산자 &&를 이용한 논리식으로 두 조건이 만족되어야 참이 된다.

        {

                grade = 'A';

        }

        else if((score < 90) && (score >= 80))

        {

                grade = 'B';

        }

        else if((score < 80) && (score >= 70))

        {

                grade = 'C';

        }

        else if((score < 70) && (score >= 60))

        {

                grade = 'D';

        }

        else if((score < 60) && (score >= 0))

        {

                grade = 'F';

        }

        else

        {

                printf("worng score\n");

        }

        printf("The grade is %c\n", grade);


        return 0;

}

⇒ 이 예제에서 점수가 60점 이하일 경우는 F를 받게 되며, 100점 이상일 경우에는 X를 받게 된다. 일반적으로 시험점수는 0에서 100점 사이지만 사용자가 실수로 100점 이상의 점수를 입력할 수 있다. 이런 실수로 프로그램이 종료되거나 실행시간 오류를 일으키지 않도록 프로그램이 대비되어야 하는데, 이렇게 사용자의 비정상적인 입력에도 프로그램이 정상적으로 작동하는 것을 프로그램의 강건성(robustness)라고 한다.


- 올바른 다중 if문 코드 예

if(height>=160) //165보다 height가 같거나 클 경우 아래를 실행한다.

{

        if(height<=195)  // 165 <= height <= 195, height가 165보다 크거나 같고 195보다 작거나 같다.

        {

                pass=1;

        }

        else // 195 < height, 195보다 height가 클 경우 실행된다.

        {

                pass=0;

}

- switch 문


#include<stdio.h>

int main()

{

        int iNum;

        scanf("%d", &iNum);

        switch(iNum)

        {

                case 1 :

                        printf("1\n");

                        break;

                case 2 :

                        printf("2\n");

                        break;

                default: 

                        printf("잘못된 입력\n");

                        break;

        }

        return 0;

}

⇒ switch()에서 ()안에는 변수, case 다음에 오는 것은 상수로 한다.

⇒ :(라벨)은 표시 역할을 의미