[C언어] 제어문 (1)

2022. 5. 15. 22:55·C언어
728x90
반응형

제어문

  • 위부터 아래로 순차적으로 실행되는 프로그램의 실행 순서를 바꾸기 위해서 사용하는 제어문은 C 언어 뿐만 아니라 다른 언어에서도 가장 중요한 문법이다
  • for문과 if문의 사용 빈도가 가장 높음

 

1. 조건문 if

  • if문 다음 괄호 안에 조건식이 참이면 문장 1을 실행하고 거짓이면 문장 1을 실행 하지 않고 건너뜀

2. 조건문: if~else문

  • 양자택일의 상황에서 사용
  • if문 다음의 괄호 안의 조건식이 참이면 문장 1을 실행하고 다음 문장으로 가며, 조건식이 거짓이면 문장2와 다음 문장을 실행

3. 다중 if~else문

  • 더 많은 조건에 따라 분기해야 하는 프로그램은 다중 if~els문을 사용한다.
  • else문에 다시 if~else문을 사용하는 것이고 마지막은 else로 끝남
    if(조건식1)

  문장 1;

else if(조건식2)

 문장 2;

 .

 .

 else

 문장 n

 

4. 조건문: switch~case문

  • switch~case문은 다중 if~else문처럼 경우(case)의 수가 많을 경우 자주 사용하는 조건문
  • 결과가 정수형(int, char, enum)인 경우만 선택할 수 있으므로 범위 검사 문제에는 적당하지 않음
  •  switch다음의 조건식은 결과가 정수형(int, char, enum)인 수식만 가능
  •  case 다음에 쓰는 상수1, 상수2 등을 레이블(label)이라 함
  •  case문의 레이블 다음에는 구두점 콜론(:)을 씀
  •  break문은 자신을 포함하고 있는 블록(루프)을 벗어나는데 사용
    조건식은 각 case문에서 차례대로 비교되고 조건식의 결과와 상수 레이블이 일치하면 그 아래 문장을 실행하고 break문을 만나면 switch~case문을 탈출
  •  보통은 각 case별로 실행할 내용이 다르므로 case문마다 마지막에 break문을 모두 사용하지만, break문을 반드시 써야 하는 것은 아님
  •  마지막 case에 해당하는 default문은 위의 case 레이블에 만족하는 경우가 없을 때 실행되는 부분으로 다중 if~else의 마지막 else에 해당함

5. 반복문:for

  • switch다음의 조건식은 결과가 정수형(int, char, enum)인 수식만 가능
  • case 다음에 쓰는 상수1, 상수2 등을 레이블(label)이라 함
  •  case문의 레이블 다음에는 구두점 콜론(:)을 씀
  •  break문은 자신을 포함하고 있는 블록(루프)을 벗어나는데 사용
    조건식은 각 case문에서 차례대로 비교되고 조건식의 결과와 상수 레이블이 일치하면 그 아래 문장을 실행하고 break문을 만나면 switch~case문을 탈출
  •  보통은 각 case별로 실행할 내용이 다르므로 case문마다 마지막에 break문을 모두 사용하지만, break문을 반드시 써야 하는 것은 아님
  •  마지막 case에 해당하는 default문은 위의 case 레이블에 만족하는 경우가 없을 때 실행되는 부분으로 다중 if~else의 마지막 else에 해당함

 

-실습 코드 소스-

 

<실습1>

관계연산자

연산결과가 참이면 1, 거짓이면 0이 나옴

 

<실습2>

#include <stdio.h>

#include <limits.h> //정수형

#include <float.h> //double, float형

int main(void)

{

printf("char 크기 : %dbytes \n",sizeof(char));

printf("int 크기 : %dbytes \n",sizeof(int));

printf("int max : %d, int min : %d \n",INT_MAX,INT_MIN );

    printf("unsigned int max : %u \n",UINT_MAX);

printf("short 크기 : %dbytes \n",sizeof(short));

printf("short max : %d, short min : %d \n",SHRT_MAX,SHRT_MIN );

    printf("unsigned short max : %u \n",USHRT_MAX);

printf("long 크기 : %dbytes \n",sizeof(long));

printf("float 크기 : %dbytes \n",sizeof(float));

printf("double 크기 : %dbytes \n",sizeof(double));

    printf("double max : %g, double min : %g \n",DBL_MAX,DBL_MIN );

    printf("long double 크기 : %dbytes \n",sizeof(long double));

    printf("long long int 크기 : %dbytes \n",sizeof(long long int));

    return 0;

}

//결과

char 크기 : 1bytes

int 크기 : 4bytes

int max : 2147483647, int min : -2147483648

unsigned int max : 4294967295

short 크기 : 2bytes

short max : 32767, short min : -32768

unsigned short max : 65535

long 크기 : 8bytes

float 크기 : 4bytes

double 크기 : 8bytes

double max : 1.79769e+308, double min : 2.22507e-308

long double 크기 : 8bytes

long long int 크기 : 8bytes

Program ended with exit code: 0

 

 

<실습3>

#include <stdio.h>

int main(void)

{

int a=10, b=20;

printf("변수 a의 값=%d, 주소=%p\n",a, &a);

    printf("변수 b의 값=%d, 주소=%p\n",b, &b);

    return 0;

}

//결과(mac os)

변수 a의 값=10, 주소=0x16fdff248

변수 b의 값=20, 주소=0x16fdff244

Program ended with exit code: 0

 

<실습4>

#include <stdio.h>

int main(void)

{

int i=-2, abs;

    abs=i>0 ? i : -i;

printf("%d\n",abs); // -2의 절대값인 2 출력

    return 0;

}

//결과 2

 

<실습5>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int score;



    printf("당신의 점수를 입력하고 Enter를 누르세요=");

    scanf("%d", &score);



    if (score < 60) printf("60점 미만이므로 재수강해야 합니다.\n");

    //if문 4가지 방법으로 만들어보기

    return 0;

}

//결과 당신의 점수를 입력하고 Enter를 누르세요=100

<실습6>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int score;

    printf("당신의 점수를 입력하고 Enter를 누르세요=");

    scanf("%d", &score);

    if (score == 0) printf("1: 0점입니다.\n");

    if (!score) printf("2: 0점입니다.\n");

    if (score != 0) printf("1: 0점이 아닙니다.\n");

    if (score) printf("2: 0점이 아닙니다.\n");

    return 0;

}

 

<실습7>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int score;



    printf("당신의 점수를 입력하고 Enter를 누르세요=");

    scanf("%d", &score);



    if (score >= 90 && score < 95) printf("1:A\n");

    if(90<=score<95) printf("2:A\n");

    return 0;

}



(8 : score값이 90 이상 95 미만이면 printf()함수를 실행. C 언어로 특정 구간을 표현할 때는 (score>=90 && score<95)

9 : 92를 입력하면 printf()함수를 실행. 이는 우연히 같은 결과가 나온 것으로 100이나 30을 입력해도 printf()함수를 실행. 90<=92<95는  (90<=92)<95이므로 1<95와 같이 계산되어 참임. 어떤 수를 넣어도 왼쪽 연산의 결과는 참이면 1, 거짓이면 0이 나오므로 0(1)<95은 항상 참임. 결국 잘못된 조건식임)

 

<실습8>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num;

    printf("주민등록번호 뒷 자리의 첫 번째 숫자를 입력하세요=");

    scanf("%d", &num);

    if (num == 1) printf("당신은 남성이군요!\n");

    if (num == 2) printf("당신은 여성이군요!\n");

    return 0;

}

[9 : 입력받은 숫자가 1이면 "당신은 남성이군요!"를 출력.

2000년부터는 남자의 숫자가 3이므로 if( num==1 || num==3 )으로 바꾸는 것이 더 정확함

10 : 입력받은 숫자가 2이면 "당신은 여성이군요!"를 출력.

2000년부터는 여자의 숫자가 4이므로 if( num==2 || num==4 )로 바꾸는 것이 더 정확]

 

<실습9>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num1, num2;



    printf("두 개의 다른 수를 입력하고 Enter를 누르세요=");

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

    {if (num1 > num2)

printf("두 수 중 더 큰 수는 %d입니다.\n", num1);

}

   { if (num1 < num2)

printf("두 수 중 더 큰 수는 %d입니다.\n", num2);

}

  //else printf("두 수 중 더 큰 수는 %d입니다.\n", num2);

    return 0;

}

[if문을 나란히 쓰는 것보다 else를 쓰는게 더 좋은 프로그램이다.]



<실습10>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int score;

    printf("당신의 점수를 입력하고 Enter를 누르세요=");

    scanf("%d", &score);

    if (score < 80) printf("80점 미만이므로 재수강해야 합니다.\n");

    else printf("80점 이상이므로 Pass입니다.\n");

    return 0;

}

[9 : 양자택일 문제에서는 if~else문을 사용하면 됨

   물론 9, 10행은 다음과 같이 작성해도 됨

      if(score<60)

           printf("60점 미만이므로 재수강해야 합니다.\n");

      else

           printf("60점 이상이므로 Pass입니다.\n");]

 

<실습11>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num1, num2, max;



    printf("두 개의 다른 수를 입력하고 Enter를 누르세요=");

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

    if (num1 > num2) max = num1;

    else max = num2;

    //max=(num1>num2) ? num1 : num2;

    printf("더 큰 수는 %d입니다.\n", max);

    return 0;

}

 

<실습12>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num;



    printf("당신의 주민등록번호 뒷 자리의 첫 번째 숫자를 입력하세요=");

    scanf("%d", &num);

    if (num == 1 || num == 3) printf("당신은 남성이군요!\n");

    else printf("당신은 남성이 아니군요!\n");

    if (num == 2 || num == 4) printf("당신은 여성이군요!\n");

    else printf("당신은 여성이 아니군요!\n");

    return 0;

}

 

<실습13>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    char ch;



    printf("키보드로 키 하나를 입력하세요=");

    scanf("%c", &ch);



    if (ch >= 'A' && ch <= 'Z') printf("영어 대문자 입니다.\n");

    else  printf("영어 대문자가 아닙니다.\n");

    return 0;

}

 

<실습14>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int year;

    printf("2월이 29일까지 있어서 1년이 366일인 해를 윤년이라고 한다.\n");

    printf("연도가 평년인지 윤년인지를 출력해주는 프로그램입니다.\n");

    printf("알고 싶은 연도를 입력하세요 : ");

    scanf("%d", &year);



    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

        printf("%d년은 윤년입니다.\n",year);

    else

        printf("%d년은 평년입니다.\n",year);

    return 0;

}

 

 

<실습15>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

int num;



printf("당신의 주민등록번호 뒷 자리의 첫 번째 숫자를 입력하세요=");

scanf("%d", &num);



if (num == 1 || num == 3)

  printf("당신은 남성이군요!\n");

else if (num == 2 || num == 4)

  printf("당신은 여성이군요!\n");

else

  printf("당신은 대한민국 사람이 아니군요!\n");

    if (num == 5 || num == 7)

        printf("당신은 외국인 남성이군요!\n");

    if (num == 6 || num == 8)

        printf("당신은 외국인 여성이군요!\n");

return 0;

}

 

<실습16>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    char ch;



    printf("키보드로 키 하나를 입력하세요=");

    scanf("%c", &ch);

    if (ch >= 'a' && ch <= 'z')

        printf("영어 소문자입니다.\n");

    else if (ch >= 'A' && ch <= 'Z')

        printf("영어 대문자입니다.\n");

    else

        printf("영문자가 아닙니다.\n");

    return 0;

}

 

<실습17>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int value;



    printf("1~3까지의 수를 입력하세요:");

    scanf("%d", &value);



    if (value == 1) printf("1을 입력하셨습니다.\n");

    else if (value == 2) printf("2를 입력하셨습니다.\n");

    else if (value == 3) printf("3을 입력하셨습니다.\n");

    else printf("잘못 입력하셨습니다.\n");

    return 0;

}

 

<실습18>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num1, num2, num3, max;

    printf("세 개의 다른 수를 입력하고 Enter를 누르세요=");

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

    if (num1 > num2) max = num1;

    else max = num2;

    if (num3 > max) max = num3;

    //else max = max;

    ///max=(num1>num2) ? num1 : num2;

    ///max=(num3>max) ? num3 : max;

    printf("입력받은 수는 %d, %d, %d이고,\n", num1, num2, num3);

    printf("최댓값은 %d입니다.\n", max);

    return 0;

}

또는

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int num1, num2, num3, max;

    printf("세 개의 다른 수를 입력하고 Enter를 누르세요=");

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

max=(num1>num2) ? num1 : num2;

    max=(num3>max) ? num3 : max;

    printf("입력받은 수는 %d, %d, %d이고,\n", num1, num2, num3);

    printf("최댓값은 %d입니다.\n", max);

    return 0;

}

 

<실습19>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int score;

    printf("당신의 점수를 입력하고 Enter를 누르세요=");

    scanf("%d", &score);



    if (score < 60) printf("F\n");

    else if (score >= 60 && score < 65) printf("D\n");

    else if (score >= 65 && score < 70) printf("D+\n");

    else if (score >= 70 && score < 75) printf("C\n");

    else if (score >= 75 && score < 80) printf("C+\n");

    else if (score >= 80 && score < 85) printf("B\n");

    else if (score >= 85 && score < 90) printf("B+\n");

    else if (score >= 90 && score < 95) printf("A\n");

    else if (score >= 95 && score <= 100) printf("A+\n");

    else printf("입력이 올바르지 않습니다!\n");

    return 0;

}

 

<실습20>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

    int value;



    printf("1~5까지의수를입력하세요:");

    scanf("%d", &value);

    switch(value) {//1단계

        case 1:

            printf("1를입력하셨습니다.\n");

            break;

        case 2:

            printf("2를입력하셨습니다.\n");

            break;

        case 3:

            printf("3을입력하셨습니다.\n");

            break;

        case 4:

            printf("4을입력하셨습니다.\n");

            break;

        case 5:

            printf("5을입력하셨습니다.\n");

            break;

        default:

            printf("다시입력하세요.\n");

            break;

    }



    return 0;

}

 

<실습21>

#define _CRT_SECURE_NO_WARNINGS  //Visual Studio에서만 사용

#include <stdio.h>

int main(void)

{

char op;         // 연산자 저장 변수

int num1, num2; // 피연산자 저장 변수



printf("덧셈과 뺄셈, 곱셈과 나눗셈만 가능합니다\n");

printf("계산하려는 수식(예:10+20)을 입력하세요:");

scanf("%d%c%d", &num1, &op, &num2); //10+20



switch (op) {

case '+':

  printf("덧셈 결과는 %d입니다.\n", num1 + num2);

  break;

case '-':

  printf("뺄셈 결과는 %d입니다.\n", num1 - num2);

  break;

    case '*':

      printf("곱셈 결과는 %d입니다.\n", num1 * num2);

      break;

    case '/':

      printf("나눗셈 결과는 %.2f입니다.\n", (double)num1 / num2);

      break;

    case '%':

      printf("몫의 결과는 %d입니다.\n", num1 % num2);

      break;

default:

  printf("다시 입력하세요\n");

  break;

}

return 0;

}

 

<실습22>

#include <stdio.h>

int main(void)

{

    int i;

    for (i=0;i<100;i++) {

        printf("%03d:영민\t",i);

    }

    return 0;

}
728x90
반응형

'C언어' 카테고리의 다른 글

[C언어] 배열, 구조체, 포인터  (1) 2022.06.09
[C언어] 함수, 기억클래스  (0) 2022.06.02
[C언어] 제어문, 함수  (4) 2022.05.27
[C언어] 제어문 (2)  (0) 2022.05.19
'C언어' 카테고리의 다른 글
  • [C언어] 배열, 구조체, 포인터
  • [C언어] 함수, 기억클래스
  • [C언어] 제어문, 함수
  • [C언어] 제어문 (2)
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • Apple (119)
        • iOS (22)
        • visionOS (4)
        • Swift (65)
        • UIKit (2)
        • SwiftUI (20)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios
    combine
    배열
    이니셜라이저
    클래스
    운영체제
    연산자
    UIKit
    Optional
    오블완
    코딩테스트
    비동기
    SWIFT
    스위프트
    티스토리챌린지
    네트워크
    자바스크립트
    swiftUI
    디자인패턴
    Xcode
    옵셔널
    프로세스
    Initializers
    visionOS
    메서드
    변수
    함수
    제어문
    프로퍼티 래퍼
    Vision Pro
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[C언어] 제어문 (1)
상단으로

티스토리툴바