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언어] 배열, 구조체, 포인터 (0) | 2022.06.09 |
---|---|
[C언어] 함수, 기억클래스 (0) | 2022.06.02 |
[C언어] 제어문, 함수 (0) | 2022.05.27 |
[C언어] 제어문 (2) (0) | 2022.05.19 |