혼자 실습 기록용
//#include <stdio.h>
////int main() {
// // int a;
// // a = 100000000000;
// // printf("a 의 값은 : %d \n", a);
// // return 0;
////}
//
////int main() {
//// int a = 10;
//// a = 127;
//// printf("a의 값은 %d 진수로 %o입니다. \n", 8, a);
//// printf("a의 값은 %d 진수로 %d입니다. \n", 10, a);
//// printf("a의 값은 %d 진수로 %x입니다. \n", 16, a);
////}
//
////int main() {
////
//// float a = 3.141592f;
//// double b = 3.141592;
////// printf("a : %f \n", a);
////// printf("b : %f \n", b);
////// return 0;
//// printf("%f", 1.0);
////}
//
////int main() {
//// float a = 3.141592f;
//// double b = 3.141592;
//// int c = 123;
//// printf(" a: %5.4f \n", a);
//// printf(" c: %5d \n", c);
//// printf(" b: %6.3f \n", b);
//// return 0;
////}
//
///*산술 연산자*/
////int main() {
//// int a, b;
//// a = 10;
//// b = 3;
//// //printf("a + b 는 : %d \n ", a + b);
//// //printf("a - b 는 : %d \n ", a - b);
//// //printf("a * b 는 : %d \n ", a * b);
//// printf("a / b 는 : %f \n ", a / b);
//// //printf("a %% b 는 : %d \n ", a % b);
////}
//
///*대입연산자*/
////int main() {
//// int a = 3;
//// a = a + 3;
//// printf ("a 의 값은 : %d \n", a);
//// return 0;
////}
//
///*더하기 1을 하는 방법*/
////int main() {
//// int a = 1, b = 1, c = 1, d = 1;
//// a = a + 1;
//// printf("a : %d\n", a);
//// b += 1;
//// printf("b : %d\n", b);
//// c++;
//// printf("c : %d\n", c);
//// ++d;
//// printf("d : %d\n", d);
//// return 0;
//
///*prefix, postfix*/
//int main(){
// int a = 1;
// printf("++a : %d\n", ++a);
// a = 1;
// printf("a++: %d\n", a++);
// printf("a : %d \n", a);
// return 0;
//
//
//
//}
#include <stdio.h>
//int main() {
// int a;
// a = 100000000000;
// printf("a 의 값은 : %d \n", a);
// return 0;
//}
//int main() {
// int a = 10;
// a = 127;
// printf("a의 값은 %d 진수로 %o입니다. \n", 8, a);
// printf("a의 값은 %d 진수로 %d입니다. \n", 10, a);
// printf("a의 값은 %d 진수로 %x입니다. \n", 16, a);
//}
//int main() {
//
// float a = 3.141592f;
// double b = 3.141592;
//// printf("a : %f \n", a);
//// printf("b : %f \n", b);
//// return 0;
// printf("%f", 1.0);
//}
//int main() {
// float a = 3.141592f;
// double b = 3.141592;
// int c = 123;
// printf(" a: %5.4f \n", a);
// printf(" c: %5d \n", c);
// printf(" b: %6.3f \n", b);
// return 0;
//}
/*산술 연산자*/
//int main() {
// int a, b;
// a = 10;
// b = 3;
// //printf("a + b 는 : %d \n ", a + b);
// //printf("a - b 는 : %d \n ", a - b);
// //printf("a * b 는 : %d \n ", a * b);
// printf("a / b 는 : %f \n ", a / b);
// //printf("a %% b 는 : %d \n ", a % b);
//}
/*대입연산자*/
//int main() {
// int a = 3;
// a = a + 3;
// printf ("a 의 값은 : %d \n", a);
// return 0;
//}
/*더하기 1을 하는 방법*/
//int main() {
// int a = 1, b = 1, c = 1, d = 1;
// a = a + 1;
// printf("a : %d\n", a);
// b += 1;
// printf("b : %d\n", b);
// c++;
// printf("c : %d\n", c);
// ++d;
// printf("d : %d\n", d);
// return 0;
/*prefix, postfix*/
#include <stdio.h>
int main() {
printf("Size of int: %lu bytes\n", sizeof(int));
return 0;
}
text.scanf_s
//#include <stdio.h>
//int main() {
// char a;
// a = 'a';
// printf("a 의 값이 들어 있는 문자는? 값 : %d , 문자 : %c \n", a, a);
// return 0;
//}
/*섭씨온도를 화씨로 바꾸기*/
//int main() {
// double celsius; //섭씨온도
// printf("섭씨 온도를 화씨 온도로 바꿔주는 프로그램입니다. \n");
// printf("섭씨 온도를 입력해주세요: ");
// scanf_s("%lf", &celsius); // 섭씨 온도를 입력 받는다.
// printf("섭씨 %f 도는 화씨로 %f 도 입니다\n", celsius, 9 * celsius / 5 + 32);
// return 0;
//}
/* scanf 총 정리 */
#include <stdio.h>
int main() {
char ch; // 문자
short sh; // 정수
int i;
long lo;
float fl; // 실수
double du;
printf("char 형 변수 입력 : ");
scanf_s("%c", &ch);
printf("short 형 변수 입력 : ");
scanf_s("%hd", &sh);
printf("int 형 변수 입력 : ");
scanf_s("%d", &i);
printf("long 형 변수 입력 : ");
scanf_s("%ld", &lo);
printf("float 형 변수 입력 : ");
scanf_s("%f", &fl);
printf("double 형 변수 입력 : ");
scanf_s("%lf", &du);
printf("char : %c , short : %d , int : %d ", ch, sh, i);
printf("long : %ld , float : %f, double : %f \n", lo, fl, du);
return 0;
}
if문
//#include <stdio.h>
//int main() {
// int i;
// printf("입력하고 싶은 수자를 입력하세요!: ");
// scanf_s("%d", &i);
// if (i == 7) {
// printf("당신은 행운의 숫자 7를 입력함 올ㅋ");
//
// }
// return 0;
//}
//#include <stdio.h>
//int main() {
//double i, j;
//printf("나누고싶은 두 정수를 입력하세요 : ");
//scanf_s("%lf %lf", &i, &j);
//
//if (j == 0) {
// printf("0으로 나눌 수 없음\n");
// return 0;
//}
//
//printf("%f 를 %f로 나눈 결과는 : %f\n", i, j, i / j);
//return 0;
//}
///* 합격? 불합격? */
//#include <stdio.h>
//int main() {
// int score;
//
// printf("당신의 수학점수를 입력하세요! : ");
// scanf_s("%d", &score);
//
// if (score >= 90) {
// printf("당신은 합격입니다! \n");
// }
//
// if (score < 90) {
// printf("당신은 불합격 입니다! \n");
// }
//
// return 0;
//}
/* 크기 비교하기 */
#include <stdio.h>
int main() {
int i, j;
printf("크기를 비교할 두 수를 입력해 주세요 : ");
scanf_s("%d %d", &i, &j);
if (i > j) // i 가 j 보다 크면
{
printf("%d 는 %d 보다 큽니다 \n", i, j);
}
if (i < j) // i 가 j 보다 작으면
{
printf("%d 는 %d 보다 작습니다 \n", i, j);
}
if (i >= j) // i 가 j 보다 크거나 같으면
{
printf("%d 는 %d 보다 크거나 같습니다 \n", i, j);
}
if (i <= j) // i 가 j 보다 작거나 같으면
{
printf("%d 는 %d 보다 작거나 같습니다 \n", i, j);
}
if (i == j) // i 와 j 가 같으면
{
printf("%d 는 %d 와(과) 같습니다 \n", i, j);
}
if (i != j) // i 와 j 가 다르면
{
printf("%d 는 %d 와(과) 다릅니다 \n", i, j);
}
return 0;
}
if else
//#include <stdio.h>
//int main() {
// int num;
//
// printf("아무 숫자나 입력해 보세요 : ");
// scanf_s("%d", &num);
//
// if (num == 7) {
// printf("행운의 숫자 7 이군요!\n");
// }
// else {
// printf("그냥 보통 숫자인 %d 를 입력했군요\n", num);
// }
// return 0;
//
//}
///* 새로쓰는 죽음의 숫자 예제 */
//#include <stdio.h>
//int main() {
// int num;
//
// printf("아무 숫자나 입력해 보세요 : ");
// scanf_s("%d", &num);
//
// if (num == 7) {
// printf("행운의 숫자 7 이군요!\n");
// }
// else if (num == 4) {
// printf("죽음의 숫자 4 인가요 ;;; \n");
// }
// else {
// printf("그냥 평범한 숫자 %d \n", num);
// }
// return 0;
//}
/* if 와 if- else if 의 차이*/
//#include <stdio.h>
//int main() {
// int num;
//
// printf("아무 숫자나 입력해 보세요 : ");
// scanf_s("%d", &num);
//
// if (num == 7) {
// printf("a 행운의 숫자 7 이군요!\n");
// }
// else if (num == 7) {
// printf("b 행운의 숫자 7 이군요! \n");
// }
//
// // 비교
// if (num == 7) {
// printf("c 행운의 숫자 7 이군요!\n");
// }
// if (num == 7) {
// printf("d 행운의 숫자 7 이군요! \n");
// }
//
// return 0;
//}
///* 크기 비교 */
//#include <stdio.h>
//int main() {
// int a;
// printf("아무 숫자나 입력하세요 : ");
// scanf_s("%d", &a);
//
// if (a >= 10) {
// if (a < 20) {
// printf(" %d 는 10 이상, 20 미만인 수 입니다. \n", a);
// }
// }
// return 0;
//
//}
//
///* 논리 연산자 */
//#include <stdio.h>
//int main() {
// int a;
// printf("아무 숫자나 입력하세요 : ");
// scanf_s("%d", &a);
//
// if (a >= 10 && a < 20) {
// printf(" %d 는 10 이상, 20 미만인 수 입니다. \n", a);
// }
//
// return 0;
//}
//#include <stdio.h>
//
//int main() {
// int a = 31, b = 15;
// printf("a & b = %d\n", a & b);
// printf("a && b = %d\n", a && b);
//}
/* 논리 합 */
#include <stdio.h>
int main() {
int height, weight;
printf("당신의 키와 몸무게를 각각 입력해 주세요 : ");
scanf_s("%d %d", &height, &weight);
if (height >= 190 || weight >= 100) {
printf("당신은 '거구' 입니다. \n");
}
return 0;
}
주의
왜 & 대신에 && 를 쓸까?
그렇다면 우리가 여태 알고 있었던 AND 연산 기호인 & 를 쓰지 않고 && 를 쓰는 것일까요? 그 이유는 & 하나는, 말 그대로 비트 사이의 AND 연산을 사용 할 때 사용하는 것이로, 조건식 사이의 관계를 표현하고 싶다면 논리 곱 연산자인 && 를 사용해야 합니다.
쉽게 말해 & 는 정확한 비트 AND 연산 결과를 제공하고, && 는 그냥 참 (= 1) 혹은 거짓 (= 0) 만을 알려줍니다. 따라서 만약에 어떠한 int 변수 a 와 b 사이에 AND 연산을 하고 싶다면 a & b 를 해야지, a && b 를 하면 올바른 AND 연산을 수행할 수 없습니다. 간단히 아래 예제를 보면 알 수 있습니다.
#include <stdio.h>
int main() {
int a = 31, b = 15;
printf("a & b = %d\n", a & b);
printf("a && b = %d\n", a && b);
}
성공적으로 컴파일 하였다면
실행 결과
a & b = 15
a && b = 1
흠 그렇다면 반대로 && 자리에 & 를 써도 무방할 것 같은데 말이죠. 왜냐하면 위에서도 말했듯이 0 이 아닌 모든 값들은 어차피 참으로 간주되기 때문이죠. 그런데 왜 논리식 사이에는 && 를 사용하는 것이 바람직할까요?
Short Circuit Evaluation
예를 들어서 다음과 같은 문장을 생각해봅시다.
if (height >= 180 && weight >= 90) {
}
만약에 height 가 179 라고 해봅시다. 그렇다면 굳이 그 다음의 조건식인 weight >= 90 을 확인해봐야 할까요? 아닙니다. AND 의 경우 어차피 둘 중 하나가 거짓이라면, 그 다음것은 확인해볼 필요도 없이 전체 연산 결과가 거짓임을 알 수 있습니다. 따라서 굳이 weight >= 90 을 확인해볼 필요가 없습니다.
위 경우 처럼 한 조건식을 확인하였는데 전체 결과가 정해져 있는 경우, 굳이 그 다음 조건식을 확인할 필요가 없습니다. 이 같은 경우 컴퓨터는 뒤의 조건식을 확인하지 않는데 (쓸데 없는 연산을 줄이기 위해서), 이와 같은 방식을 Short Circuit Evaluation 이라고 부릅니다. (줄여서 SCE 라고 부릅시다.)
만약에 height >= 180 & weight >= 90 처럼 & 를 사용하였다면 SCE 를 적용할 수 없습니다. 왜냐하면 & 는 정확한 연산 결과를 제공해야 하므로 뒤에 오는 식도 반드시 계산을 해야 하기 때문이죠. 하지만 && 는 논리 결과에 따라서 0 혹은 1 만 돌려주면 되기 때문이므로 SCE 를 사용 할 수 있습니다.
'Study > C Language' 카테고리의 다른 글
씹어먹는 C언어 혼자 실습 (3) switch문 (1) | 2024.10.17 |
---|---|
씹어먹는 C언어 혼자 실습 (2) (6) | 2024.10.16 |