ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C 언어 기초#5 제어문 - if, switch, goto, while, for, continue
    Programming 기초/C Language 2023. 4. 8. 19:38

    *제어문(control statement)

    조건문(if, switch, goto)과 반복문(while, for, continue)이 있다.

     

    *if문

    참인 경우 실행됨. if(조건식)

     

    예제) 문자를 입력받고 대문자, 소문자, 그 외 문자로 분류.

     

    #define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
    #include<stdio.h>
    
    int main(void)
    {
    	char ch;
    
    	printf("문제를 입력하시오:");
    	scanf("%c", &ch);
    
    	if (ch >= 'A' && ch <= 'Z')
    		printf("%c는 대문자입니다.\n", ch);
    	else if (ch >= 'a' && ch <= 'z')
    		printf("%c는 소문자입니다.\n", ch);
    	else if (ch >= '0' && ch <= '9')
    		printf("\"%c\"는 숫자입니다.\n", ch);		// 큰다옴표 출력시 \(이스케이프) 이용.
    	else
    		printf("\"%c\"는 기타문자입니다.\n", ch);
    
    	return 0;
    }

    char 타입 변수에 들어간 입력받은 것을 정수로 해석하여 사용할 수도 있고 아니면 이것을 아스키 코드로 간주하여 문자로 사용할 수도 있다.

     

    * switch 문

    - if 문에서 가능한 실행 경로는 두 개인데, 실행 경로가 여러 개인 경우에는 switch 문을 사용하는 것이 좋다.

    - default 문은 어떤 case 문과도 일치되지 않는 경우에 선택되어 실행된다. 만약 default 문이 없고 일치하는 case 문도 없다면

       아무 것도 실행되지 않는다. (가급적 default 문 포함 시키는 것이 좋음)

    - case절에 실수나 변수, 수식, 문자열을 사용하는 것은 컴파일 오류이다.

    - break;가 없으면 해당 케이스를 실행 후 그 다음 케이스를 조건 일치 불일치와 상관없이 실행한다.

     

    예제) 입력 받은 달이 몇 일까지 있는지 알려주는 프로그램

    #define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
    #include<stdio.h>
    
    int main(void)
    {
    	int month, days;
    
    	printf("달을 입력하시오:");
    	scanf("%d", &month);
    
    	switch (month)
    	{
    		case 2:
    			days = 28;
    			break;
    		case 4:
    		case 6:		# break;가 없기 때문에 case 11의 days = 30;까지 실행된다. 
    		case 9:
    		case 11:
    			days = 30;
    			break;
    		default:
    			days = 31;
    			break;
    	}
    	printf("%d월은 %d일입니다.\n", month, days);
    	return 0;
    }

    cf. 숫자 외 입력을 받으면 오류가 뜸. 나중 포스팅에 숫자 외 입력을 처리하는 방법에 대해 논할 것임.

     

    * goto 문

    - goto문은 프로그램을 아주 복잡하게 만들기 때문에 유지보수에 어려움. goto문 사용하지 않는 것이 좋음.

    - goto문은 원하는 위치(레이블)로 조건 없이 점프하게 하는 기능. (레이블은 점프를 원하는 위치에 이름을 붙인 것) 

    - 함수를 점프할 수는 없음.

    goto error;
    ...
    ...
    ...
    error:
    	printf("오류발생\n");

     

    *EOF

     End Of File 이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다(-1 값을 가지고 있다).

      함수 호출의 실패나, 윈도우에서 ctrl + z , 리눅스에서 ctrl + d를 입력 했을 경우 EOF를 반환한다.

     

    *while문

    while(조건) 형식으로,  조건이 참이면 반복.

     

    예제) 입력 받은 값 중에 최솟값을 출력한다.

    #define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
    #include<stdio.h>
    #include<limits.h>			// 최대값에 대한 정의를 포함한 헤더파일을 불러온다.
    
    int main(void)
    {
    	int number, min_value = INT_MAX; // 일단 정수의 최댓값을 대입해둔다.
    
    	printf("정수를 입력하시오\n 종료는 Ctrl+z\n");
    
    	while (scanf("%d", &number) != EOF)	//입력 받은 값이 EOF이면 while을 실행하지 않는다.
    	{
    		if (number < min_value)		// 입력 받은 값이 이전 입력값보다 작으면 최솟값으로 입력받는다.
    			min_value = number;
    	}
    	printf("최솟값은 %d\n", min_value);
    
    	return 0;

    *continue

    -> 조건문에 따른 continue의 동작 방식.

    p.275

    예제) 알파벳 소문자를 입력 받아 대문자로 바꿔주는 프로그램

    #define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
    #include<stdio.h>
    
    int main(void)
    {
    	char letter;
    	printf("프로그램을 종료하려면 Q를 입력하시오.\n");
    
    	while (1)
    	{
    		printf("소문자를 입력하시오: ");
    		scanf(" %c", &letter); //공백 문자 제외
    
    		if (letter == 'Q')		// Q를 입력하면 프로그램 종료.
    			break;			// 반복문 탈출
    		if (letter < 'a' || letter > 'z')
    			continue;		// 반복문을 다시 실행한다.
    
    		letter -= 32;	// 아스키코드에서 소문자와 대문자는 32만큼 차이난다
    		printf("변환된 대문자는 %c입니다.\n", letter);
    		
    	}
    	return 0;

    *for 문

    for(초기식 ; 조건식 ; 증감식)

    초기식(initialization)은 반복 루프 전 한번만 실행. 변수 값 초기화.

    조건식(expression)은 반복을 계속할 것인지 말 것인지 결정하는 수식. 관계식이나 논리식이어야 함.

    증감식(increment)은 루프를 제어하는 변수를 증가시키거나 감소시킨다.

     

        다양한 for 루프

    1. for( ; ; )  -> 무한 루프

    2. for( ; i<10 ; i++) -> 초기식이나 조건식, 증감식이 없을 수 있다.

    3. for(i = 0, sum=0 ; i<100 ; i++) -> 초기화 수식에 콤마 연산자를 사용하여 2개 이상의 변수를 초기화시킬 수도 있다.

    4. for(printf("반복시작), i=0 ; i<100; i++) -> 초기화 자리에 다른 문장도 들어갈 수 있다.

     

    예제) 복리 이자 계산기

    #define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
    #include<stdio.h>
    
    int main(void)
    {
    	int i, years;
    	double total, rate, investment;
    
    	printf("원금:");
    	scanf("%lf", &investment);
    	printf("이율(%%): ");		// %가 형식지정자로 쓰이므로 출력하려면 %앞에 %를 붙여줘야한다.
    	scanf("%lf", &rate);
    	printf("기간(년):");
    	scanf("%d", &years);
    
    	printf("==================\n");
    	printf("연도 원리금\n");
    	printf("==================\n");
    	total = investment;
    	rate /= 100.0;				// 복합대입연산자/=는 rate= rate / 100.0 을 의미 
    	for (i = 0; i < years; i++)
    	{
    		total = total * (1 + rate);		 // 복합대입연산자 *=로 써도 됨.
    		printf("%2d      %10.1f\n", i + 1, total); 	// &10.1f은 소수점 이하 1자리까지 표시
    	}
    	return 0;
    }

     

     

     

     

     

    출처 : 쉽게 풀어쓴 C언어 Express

    댓글

Designed by Tistory.