if문의 구성
#include <stdio.h>
int main()
{
int num;
printf("정수입력");
scanf_s("%d", &num);
if (num<0)//num1dl 0보다 작으면 아래의 중괄호를 실행한다.
{
printf("입력값은 0보다 작다 \n");
}
if (num > 0)//num1이 0보다 크면 아래의 중괄호를 실행한다.
{
printf("입력값은 0보다 크다 \n");
}
if (num == 0)//num1이 0이면 아래의 중괄호를 실행한다. 이때, 비교 연산자 ==사용!!
{
printf("입력값은 0이다 \n");
}
return 0;
}
#include <stdio.h>
int main()
{
int opt;
double num1, num2;
double result;
printf("1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 \n");
printf("번호를 선택하시오");
scanf_s("%d", &opt);
printf("두개의 실수 입력");
scanf_s("%lf %lf", &num1, &num2); //double 입력 lf
if (opt == 1)
result = num1 + num2; //실행줄이 한줄이면 중괄호 생략가능
if (opt == 2)
result = num1 - num2;
if (opt == 3)
result = num1 * num2;
if (opt == 4)
result = num1 / num2;
printf("결과:%f \n", result);
return 0;
}
이 프로그램의 문제점: 어떤 숫자가 입력되는 조건검사(비교연산)이 모두 실행됨!
해결책:조건을 만족하는 if문이 발견되면 나머지 if문을 건너뛰게 하기!!= if~else문
키워드 else는 if와 함께 쓰여 하나의 문장을 구성하는 형태
if절 조거니 참이면 if블록 실행, 거짓이면 else블록 실행
#include <stdio.h>
int main()
{
int num;
printf("정수 입력");
scanf_s("%d",&num);
if (num < 0)
printf("입력값은 0보다 작다\n");
else
printf("입력값은 0보다 크다 \n");
return 0;
}
세개의 블록중 하나를 선택해서 실행하는 구조
#include <stdio.h>
int main()
{
int opt;
double num1, num2;
double result;
printf("1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 \n");
printf("번호를 선택하시오");
scanf_s("%d", &opt);
printf("두개의 실수 입력");
scanf_s("%lf %lf", &num1, &num2); //double 입력 lf
if (opt == 1)
result = num1 + num2; //실행줄이 한줄이면 중괄호 생략가능
if (opt == 2)
result = num1 - num2;
else if (opt == 3)
result = num1 * num2;
else if (opt == 4)
result = num1 / num2;
printf("결과:%f \n", result);
return 0;
}
위에서 if로만 구성했던 것보다 훨씬 효율적이다!
#include <stdio.h>
int main()
{
int num;
printf("정수 입력");
scanf_s("%d",&num);
if (num < 0)
printf("입력값은 0보다 작다\n");
else if (num > 0)
printf("입력값은 0보다 크다 \n");
else
printf("입력값은 0이다 \n");
}
return 0;
}
#include <stdio.h>
int main()
{
int num;
printf("정수 입력");
scanf_s("%d",&num);
if (num < 0)
printf("입력값은 0보다 작다\n");
else {
if (num > 0)
printf("입력값은 0보다 크다 \n");
else
printf("입력값은 0이다 \n");
}
return 0;
}
위의 두개는 동일하게 출력된다
if~else문을 대체하는 연산자, 처음에는 어색하지만 쓰다보면 코드는 간결하게 하는 데 한 몫한다.
#include <stdio.h>
int main()
{
int num,abs;
printf("정수 입력");
scanf_s("%d",&num);
abs = num > 0 ? num : num * (-1);
//num>0dl 참이면 num출력, 거짓이면 num*(-1)출력!
printf("절댓값 %d\n", abs);
return 0;
}
1.1이상 100미만의 정수중에서 7의배수와 9의 배수를 출력하는 프로그램을 작성해보자. 단!7의 배수이면서 9의 배수인 정수는 한번만 출력해야한다.
2.두개의 정수를 입력받아서 두수의 차를 출력하는 프로그램을 구현해보자. 단, 무조건 큰수에서 작은수를 뺀 결과를 출력해야한다. 예를 들어서 입력된 두수가 순서에 상관없이 4와 16이라면 12가 출력 되어야 한다. 즉 출력 결과는 무조건 0이상이 되어야 한다.
3.학생 전체 평균점수에 대한 학점을 출력하는 프로그램을 구현해보자 90점 이상이면 A 80점 이상이면 B 70점 이상이면 C 50점 이상이면 D그리고 그 미만이면 F이다. 프로그램 실행시 국어, 영어,수학의 점수를 입력받는다. 그리고는 평균을 구한다음 그에 적절한 학점을 출력하면 됨.
4.위의 문제 2를 조건연산자를 이용하는 형태로 변경해보자.
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 100; i++)
{
if ((i % 7 == 0) || (i % 9 == 0))
printf("7또는 9의배수 %d \n", i);
}
return 0;
}
참고로 위의 예제에서 if문은 이렇게 변경가능!
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 100; i++)
{
if (!(i % 7) || !(i % 9))
printf("7또는 9의배수 %d \n", i);
}
return 0;
}
!연산자는 논리 연산자로 참을 거짓으로 거짓을 참으로 변경한다. 따라서 %연산의 결과로 거짓에 해당하는 0이 반환되어야 if문의 조건은 참이되어 printf함수 호출문을 실행하게 됨
#include <stdio.h>
int main()
{
int num1, num2;
printf("두개의 정수를 입력하시오");
scanf_s("%d %d", &num1, &num2);
if (num1 > num2)
printf("두수의 차는 %d이다.", num1 - num2);
else
printf("두수의 차는 %d이다.", num2 - num1);
return 0;
}
2)정답
#include <stdio.h>
int main()
{
int num1, num2;
int result;
printf("두개의 정수를 입력하시오");
scanf_s("%d %d", &num1, &num2);
if (num1 > num2)
result=num1-num2;
else
result=num2-num1;
printf("뺄셈결과 %d \n",result);
return 0;
}
#include <stdio.h>
int main()
{
int sub1, sub2,sub3;
double result;
printf("국어 영어 수학의 점수를 입력하시오");
scanf_s("%d %d %d", &sub1, &sub2,&sub3);
result = (sub1 + sub2 + sub3) / 3;
if (result >= 90)
printf("학점이 %f 이므로 A입니다",result);
else if (result >= 80)
printf("학점이 %f 이므로 B입니다",result);
else if (result >= 70)
printf("학점이 %f 이므로 C입니다",result);
else if (result >= 50)
printf("학점이 %f 이므로 D입니다",result);
else
printf("학점이 50점 미만이므로 F입니다.");
return 0;
}
#include <stdio.h>
int main()
{
int num1, num2;
int result;
printf("두개의 정수를 입력하시오");
scanf_s("%d %d", &num1, &num2);
result = num1 > num2 ? num1 - num2 : num2 - num1;
printf("뺄셈결과 %d \n", result);
return 0;
}
반복문을 탈출할때(빠져나올때) 사용하는 키워드로서 break문이 실행되면 가장 가까이서 감싸고 있는 반복문하나를 빠져 나오게 된다.
절대 if문을 빠져나오는게 아니다!!
#include <stdio.h>
int main()
{
int sum = 0, num = 0;
while (1)
{
sum += num;
if (sum > 5000)
break; //break문 실행! 따라서 반복문 탈출
num++;
}
printf("sum: %d \n", sum);
printf("num: %d \n", num);
return 0;
}
break문과 같이 반복문안에 삽입이 되며, 반복문안에서 위의 문장을 실행하게 되면 실행중인 위치에 상관없이 반복문의 조건검사 위치로 이동한다. 그리고 검사결과 반복조건이 여전히 참이라면 반복영역을 다시 실행하게 된다.
#include <stdio.h>
int main()
{
int num;
printf("start! \n");
for (num = 1; num < 20; num++)
{
if (num % 2 == 0 || num % 3 == 0)
continue;
printf("%d \n", num);
}
printf("end! \n");
return 0;
}
if문의 조건이 만족되면 아래 printf를 실행하지 않고 다시 조건 검사를 위해 if문으로 증가한다. 당연히 num은 0으로 초기화 되는 것이 아니고 printf문만 건너 뛴다음 1증가 한 상태에서 반복영역을 다시 실행한다.
- 구구단을 출력하되 짝수단(2단 4단 6단 8단)만 출력하도록하자, 또한 2단은 2x2까지 4단은 4x4까지 6단은 6x6까지, 8단은 8x8단 까지만 출력되도록 프로그램을 구현해보자. 이렇게 어수선한 문제를 제시하는 이유는 continue와 bresk문의 사용법을 익히기 위해서다. 그러니 가급적이면 contiune와 break문을 사용해서 이 문제를 해결해보자.
2.다음식을 만족하는 모든 A와 Z를 구하는 프로그램을 작성해보자.
AZ +ZA=99
참고로 가능한 모든수의 시도하기 반복문을 중첩시켜야한다.
1)내가쓴것-정상출력
#include <stdio.h>
int main()
{
int dan = 1;
int i = 1;
for (dan = 1; dan < 9; dan++)
{
if (dan % 2 == 1)//단이 홀수이면 아래 내용 건너뛰고 dan++한다음 다시 검사
continue;
for (i = 1; i <= dan; i++)
{
printf("%d x %d =%d \n", dan, i, dan * i);
if (i > dan)
break;
}
i = 1;
}
return 0;
}
2)정답
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i < 10; i++)
{
if (i % 2 != 0) //i%2의 나머지가 0이 아닐때!! i%2==1일때
continue;
for (j = 1; j < 10; j++)
{
if (i < j)
break;
printf("%d x %d= %d \n", i, j, i * j);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int num;
printf("1이상 5이하의 정수입력");
scanf_s("%d", &num);
switch (num)
{
case 1:
printf("1은 one \n");
break;
case 2:
printf("2는 two \n");
break;
case 3:
printf("3는 three \n");
break;
case 4:
printf("4는 four \n");
break;
case 5:
printf("5는 five \n");
break;
default:
printf("i don't know! \n");
}
return 0;
}