IT&코딩/C

C언어 1주차 복습-4

솔론 2022. 8. 17. 15:04
728x90
반응형

연산자 우선순위

 

// 연산자 우선순위

// tip
// 남이 작성해놓은 코드를 분석할 때는 우선순위가 낮은 대입연산자나 복합대입연산자를 먼저 찾아라
// 그럼 좌측에는 무조건 변수이기 때문에 우측항만 보면 된다. 대입 보고 그 다음은 논리연산자
// 삼항 연산자는 눈에 확 보이기도 하고 다른 연산자랑 섞여 쓸 일이 없다.
// 논리연산자 기준으로 좌우를 또 자르고 좌측을 먼저 봐야 한다.
// 그 다음 비트연산자 

// 하나씩 하나씩 좌우로 쪼개고 난 후 좌측을 먼저 봐야 한다.
// 논리연산자의 경우는 좌측값에 따라 우측 결과가 달라짐
// 비트연산자와 논리연산자는 전혀 다른 결과가 나온다는 것 조심

 

// 내가 코드를 작성할 때는 괄호를 쓰면서 연산자 우선순위를 최대한 맞게 적용시키면 된다.

-------------------------------------------------------------------------------------------------------

<제어문>

모든 컴퓨터 언어는 기본적으로 절차지향적 성향을 갖고 있습니다.
절차지향이란 좌에서 우로 위에서 아래의 우리가 책을 읽는 방향과 같습니다.
즉, 컴퓨터가 순서대로 명령을 처리해 나가는 것이죠
그런데 기본적인 흐름을 제어해서 경우에 따른 실행명령이나, 또는 특정 구간을 반복순환하는 흐름을 가져야 할 때가 있습니다.
이때 사용하는 문법이 바로 제어문입니다.

 

<조건 제어문(=조건 분기문)>

일반적으로 if라는 키워드를 사용하며 조건식의 참, 거짓 여부에 명령실행이 갈리는(분기점) 구조를 갖는 제어문.

python은 종속의 속성을 가지고 있는..등 종속문장이 비어있으면 에러가 뜬다. 그래서 pass를 사용한다.

C언어는 세미콜론으로 마무리해도 에러가 안 난다.

참 거짓과 상관없이 다음 문장 취급되어 실행된다.

{}로 2번과 3번은 무조건 실행이 된다.

 

#include<stdio.h>
int main(void)
{
int num1, num2;
scanf("%d%d", &num1, &num2);
if (num1 > num2)
printf("%d", num1 > num2); // 거짓이면 실행되지 않는다.
}

 

#include<stdio.h>
int main(void)
{
int num1 = 1, num2 = 0;
if (num1)
printf("참");
if (num1)
printf("거짓");
}

 

#include<stdio.h>
int main(void)
{
if (1)
printf("참이므로 출력");
if (0)
printf("거짓이므로 출력 안 함");
}

 

#include<stdio.h>
int main(void)
{
int num1, num2;
scanf("%d", &num1);
num2 = num1 % 2;
if (num2 == 0)
printf("짝수");
if (num2 != 0) // if(num2)로 표현 가능 
printf("홀수");
}

 

#include<stdio.h>
int main(void)
{
int su;
printf("10보다 큰 정수를 입력하세요...");
scanf("%d", &su);
if (su <= 10)
printf("10 이하의 수를 입력하였습니다!\n");
printf("%d", su); // 다음 문장이기 때문에 무조건 실행이 된다.
}

 

#include<stdio.h>
int main(void)
{
int su;
printf("10보다 큰 정수를 입력하세요...");
scanf("%d", &su);
if (su <= 10)
{
printf("10 이하의 수를 입력하였습니다!\n"); // 종속문을 묶어주면 10 미만일 때만 두개 다 출력됨
printf("%d", su);
}// 다음 문장이기 때문에 무조건 실행이 된다.
}

 

#include<stdio.h>
int main(void)
{
int num;
printf("정수 입력:");
scanf("%d", &num);
if (num < 0)
printf("입력값은 0보다 작다.\n");
if (num > 0)
printf("입력값은 0보다 크다.\n");
if (num == 0)
printf("입력값은 0이다.\n");
}

 

#include<stdio.h>
int main(void)
{
int num;
printf("정수 입력:");
scanf("%d", &num);
if (num > 0)
printf("입력값은 0보다 크다.\n");
if (num > 50)
printf("입력값은 50보다 크다.\n");
if (num > 100)
printf("입력값은 100보다 크다.\n");
}
// 조건식을 잘 만들지 않으면 이런 버그가 발생한다.
// 단순 if 문의 특징
// 겹치는 범위가 발생하면 2개 이상의 실행결과가 나올 수 있다.

 

#include<stdio.h>
int main(void)
{
int opt;
double num1, num2;
double result;

printf("1. 덧셈 2.뺄셈 3.곱셈 4.나눗셈\n");
scanf("%d", &opt);
printf("두 개의 실수 입력:");
scanf("%lf%lf", &num1, &num2);

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);
}
// 여러 개 조건 중 하나를 고르는(ex. 메뉴) 단순 if문을 쓰면 효율적이지 못하다.

 

// 날짜를 입력받아 요일을 구하시오.
// (단, 1일은 무조건 월요일이다. 7일은 일요일, 8일은 다시 월요일
// ( 어떤 값을 입력을 받던 요일이 정확히 출력되게 만드시오)

#include<stdio.h>
int main(void)
{
int day, day7;
printf("일을 입력하세요!");
scanf("%d", &day);
day7 = day % 7;

if (day7 == 1)
printf("%d는 월요일입니다", day);
if (day7 == 2)
printf("%d는 화요일입니다", day);
if (day7 == 3)
printf("%d는 수요일입니다", day);
if (day7 == 4)
printf("%d는 목요일입니다", day);
if (day7 == 5)
printf("%d는 금요일입니다", day);
if (day7 == 6)
printf("%d는 토요일입니다", day);
if (day7== 0)
printf("%d는 일요일입니다", day);
}

-------------------------------------------------------------------------------------------------------

문제풀이

 

// 문제 - 1

// 1. 수를 입력받아 입력한 수가 3의 배수인 경우 출력하시오. (3의 배수가 아닌 경우 생각x, 단순 if문인 것만 생각할 것)

#include<stdio.h>
int main(void)
{
int num;
printf("수를 입력하세요!");
scanf("%d", &num);
if (num % 3 == 0)
printf("%d는 3의 배수입니다!",num);
}

#include<stdio.h>
int main(void)
{
int num;
printf("수를 입력하세요!");
scanf("%d", &num);
if (!(num%3)) // 부정을 통한 표현
printf("%d는 3의 배수입니다!", num);
}

-------------------------------------------------------------------------------------------------------

// 2. 수를 입력받아 절대값을 구하여 출력하시오
#include<stdio.h>
int main(void)
{
int num;
printf("수를 입력하세요!");
scanf("%d", &num);
if (num >= 0)
printf("%d", num);
if (num < 0)
printf("%d", -num);
}

 

// T 풀이
#include<stdio.h>
int main(void)
{
int num;
printf("임의의 정수 입력 :");
scanf("%d", &num);
if (num < 0) // 음수 여부 파악
num *= -1;
printf("절대값 : %d\n", num);
}

-------------------------------------------------------------------------------------------------------

// 3. 수를 입력받아 짝, 홀수를 구분하여 출력하시오. 
#include<stdio.h>
int main(void)
{
int num;
printf("수를 입력하세요!");
scanf("%d", &num);
if (num % 2 == 0)
printf("짝수");
if (num % 2)
printf("홀수");
}

-------------------------------------------------------------------------------------------------------

// 4. 두 수를 입력 받아 큰 수를 출력하시오.
// 입력 
// 첫 번째 수를 입력하세요 : 수 입력
// 두 번째 수를 입력하세요 : 수 입력

// 출력
// "첫 번째 수가 더 큽니다"
// "두 번째 수가 더 큽니다"
// "두 수는 같은 수입니다"

#include<stdio.h>
int main(void)
{
int num1, num2;
printf("첫 번째 수를 입력하세요:");
scanf("%d", &num1);
printf("두 번째 수를 입력하세요:");
scanf("%d", &num2);
if (num1 > num2)
printf("첫 번째 수가 더 큽니다");
if (num2 > num1)
printf("두 번째 수가 더 큽니다");
if (num1 == num2)
printf("두 수는 같은 수입니다");
}

-------------------------------------------------------------------------------------------------------

// 문제 - 2
// 1. 세 수를 입력받아 큰 수를 출력하시오. (세 수가 각각 다 다른 수라고 가정하고) 

#include<stdio.h>
int main(void)
{
int num1, num2, num3;
printf("세 수를 입력하시오");
scanf("%d%d%d", &num1, &num2, &num3);
if ((num1 > num2) && (num1>num3))
printf("%d", num1);
if ((num2 > num1) && (num2 > num3))
printf("%d", num2);
if ((num3 > num1) && (num3 > num2))
printf("%d", num3);
}

// T 풀이 (각각의 수가 다르다고 가정하고)
// 
#include<stdio.h>
int main(void)
{
int num1, num2, num3;
printf("세 수를 입력하시오");
scanf("%d%d%d", &num1, &num2, &num3);
if (num1 < num2)
num1 = num2; // 큰수를 num1에 담고 num3랑 비교하게 하기 위함
if (num1 < num3)
num1 = num3; // num1에 가장 큰 수를 몰아줌
printf("%d가 가장 큰 수입니다\n", num1);

-------------------------------------------------------------------------------------------------------

// 2. 두 수를 입력받아 큰 수가 짝수이면 출력하시오. ( 두 가지 조건 : 큰 수고, 짝수인)

#include<stdio.h>
int main(void)
{
int num1, num2;
printf("두 수를 입력하시오");
scanf("%d%d", &num1, &num2);
if ((num1 > num2) && (num1 % 2 == 0))
printf("%d", num1);
if ((num2 > num1) && (num2 % 2 == 0))
printf("%d", num2);
}

-------------------------------------------------------------------------------------------------------

// 3. 두 수를 입력 받아 합이 짝수이고 3의 배수인 수를 출력하시오

#include<stdio.h>
int main(void)
{
int num1, num2, sum;
printf("두 수를 입력하시오");
scanf("%d%d", &num1, &num2);
sum = num1 + num2;

if((sum%2==0)&&(sum%3==0))
printf("두수의 합은 %d이며 3의 배수이고, 짝수이다\n", sum);
}

// // (sum%6==0)라는 표현은 2와 3의 공배수이기 때문에 맞는 표현이긴 하지만 채점하면 틀릴 수도 있다.
// // 이렇게 표현하면 코드를 수정할 일이 생기면 어려움이 생긴다
// // 사람 말을 코드로 그대로 번역하는 것이 중요하다.

728x90
반응형