본문 바로가기

C

박시현 7주차 C프로그래밍 과제

C프로그래밍

7주차 과제

 

 

 

 

 

과 목 명 : C프로그래밍

담당교수 : 한성현 교수님

학 과 : 컴퓨터소프트웨어학과

학 년 : 1학년

학 번 : 2024001684

이 름 : 박시현

제 출 일 : 2024 4월 16일

출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

연산자의 우선순위:()-->*,/-->+,- 아무리 +,-가 앞에 있어도 우선순위 순서대로 계산한다.

세부적인 우선순위( Precedence )
결합성(Associativity)에 관한 설명

----------------------자동 형 변환-----------------------

#include <stdio.h>
int main(void)
{
int i = 3;
double d = 5.0;
printf("A+1=%d\n", 'A' + 1); // 66
printf("A+1=%c\n", 'A' + 1); // B
printf("5.0/3=%f\n", d / i); // 1.666667
printf("3/2=%d\n", i / 2); // 1
printf("10/4=%d\n", 10 / 4); // 2
printf("10.0/4=%f\n", 10.0 / 4); // 2.500000
printf("10/4=%f\n", 10 / 4); // 0.000000
return 0;
}

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

출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-1-----------------------

#include <stdio.h>
int main(void)
{
int i = 3;
double d = 5.0;
printf("A+1=%d\n", 'A' + 1); // 66
printf("A+1=%c\n", 'A' + 1); // B
printf("5.0/3=%f\n", d / i); // 1.666667
printf("3/2=%d\n", i / 2); // 1
printf("10/4=%d\n", 10 / 4); // 2
printf("10.0/4=%f\n", 10.0 / 4); // 2.500000
printf("10/4=%f\n", 10 / 4); // 0.000000
return 0;
}

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

정수형(%d)이기에 2.5가 아닌 2가 출력된다.
출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-2-----------------------

#include <stdio.h>
int main(void)
{
int x = 10;
int y = +10;
int z = -10;
printf("x=%d -x=%d \n", x, -x);
printf("y=%d -y=%d \n", y, -y);
printf("z=%d -z=%d \n", z, -z);
printf("z*-1=%d z*(-1)=%d -1*z=%d \n", z * -1, z * (-1), -1 * z);
return 0;
}

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

실행 결과
출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

a=a+1;는  a+=1;로 표현할 수 있다.

----------------------실습 예제 6-3-----------------------

#include <stdio.h>
int main(void)
{
int a = 5;
printf("%d\n", a);
a = a + 5; printf("%d\n", a); // 10
a += 5; printf("%d\n", a); // 15, a = a + 5
a -= 5; printf("%d\n", a); // 10, a = a - 5
a *= 5; printf("%d\n", a); // 50, a = a * 5
a /= 2; printf("%d\n", a); // 25, a = a / 2
a *= a + 5; printf("%d\n", a);//a = a*(a+5) = 25*30
return 0;
}

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

출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-4-----------------------

#include <stdio.h>
int main(void)
{
int a = 5;
printf("%d\n", a);
a = a + 5; printf("%d\n", a); // 10
a += 5; printf("%d\n", a); // 15, a = a + 5
a -= 5; printf("%d\n", a); // 10, a = a - 5
a *= 5; printf("%d\n", a); // 50, a = a * 5
a /= 2; printf("%d\n", a); // 25, a = a / 2
a *= a + 5; printf("%d\n", a);//a = a*(a+5) = 25*30
return 0;
}

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

해석:참,참 ,거짓 ,거짓 ,거짓 ,거짓 ,거짓
출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-5-----------------------

#include <stdio.h>
int main(void)
{
int a = 10, b = 20, c = 10;
printf("%d\n", 1 == 2); //0
printf("%d\n", 1 != 2); //1
printf("%d\n", a == b); //0
printf("%d\n", a != b); //1
printf("%d\n", a == 10); //1
printf("%d\n", a == c); //1
printf("%d\n", a = c); //10
printf("%d\n", a = 1); //1
printf("%d\n", a = 0); //0
return 0;
}

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

출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

AND연산자가 OR연산자보다 우선순위가 더 높다.

 

AND연산자 예시:1부터 10까지의 숫자 중 5보다 크면서 9보다 작은 숫자들을 구하여라

결과:6,7,8

OR연산자 예시: 1부터 10까지의 숫자 중 5보다 작거나 9보다 큰 숫자들을 구하여라

결과:1,2,3,4,10

----------------------실습 예제 6-6-----------------------

#include <stdio.h>
int main(void)
{
int a=5,b=0;
printf("%d ",(7==7)&&(8!=3)); // 1
printf("%d ",(7>1) || (8<1)); // 1
printf("%d ",(2==1) && (3==3)); // 0
printf("%d ",!5); // 0이 아닌 수는 모두 참, 0
printf("%d ",(a&&b)); // 0
printf("%d ",(a||b)); // 1
printf("%d\n",(!a)); // 0
return 0;
}

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

실행 결과

 

출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-7-----------------------

#include <stdio.h>
int main(void)
{
int score = 92;
printf("%d\n", 92 >= 90 && 92 < 95); //1 && 1
printf("%d\n", 90 <= 92 < 95); //1<95
printf("%d\n", 97 >= 90 && 97 < 95); //1 && 0
printf("%d\n", 90 <= 97 < 95); // 1<95
if (score >= 90 && score < 95) printf("A1\n");
if (90 <= score < 95) printf("A2\n");
score = 97;
if (score >= 90 && score < 95) printf("A1\n");
if (90 <= score < 95) printf("A2\n"); //논리적 오류
//97이 범위 내에 있지 않지만 범위 내에 있는 것처럼 참으로 인식
return 0;
}

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

출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-8-----------------------

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int year;
printf("연도를 입력하세요: ");
scanf("%d", &year);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("윤년입니다");
}
else
{
printf("윤년이 아닙니다");
}
return 0;
}

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

연도를 입력받고 윤년인지 아닌지 구분한다.
출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-9-----------------------

#include <stdio.h>
int main(void)
{
int a=0x1;
//2진수 0000 0000 0000 0000 0000 0000 0000 0001,16진수 0000 0001
int b=0x3;
//2진수 0000 0000 0000 0000 0000 0000 0000 0011, 16진수 0000 0003
printf("%x\n",a&b); //0000 0000 0000 0000 0000 0000 0000 0001
printf("%x\n",a|b); //0000 0000 0000 0000 0000 0000 0000 0011
printf("%x\n",a^b); //0000 0000 0000 0000 0000 0000 0000 0010
printf("%x\n",a^b^b); //0000 0000 0000 0000 0000 0000 0000 0001
printf("%x\n",~a); //1111 1111 1111 1111 1111 1111 1111 1110
printf("%x\n",~b); //1111 1111 1111 1111 1111 1111 1111 1100
return 0;
}

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

비트 연산자 예시
출처:한성현 교수님의 강의 자료

가장 쉬운 암호화하는 방법:XOR하고 다시 XOR한다.

----------------------실습 예제 6-10-----------------------

#include <stdio.h>
int main(void)
{
printf("%d ", 90 << 1); //180
printf("%d ", 90 * 2); //180
printf("%d ", 90 << 2); //360
printf("%d ", 90 << 3); //720
printf("%d\n", 90 << 4); //1440
printf("%d ", 90 >> 1); //45
printf("%d ", 90 / 2); //45
printf("%d ", 90 >> 2); //22
printf("%d\n", 90 >> 3); //11
return 0;
}

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

비트 시프트 연산자를 사용한 결과
출처:한성현 교수님의 강의 자료

2의 n승으로 계산이 되기 때문에 90<<1은 90*2와 같다.

출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-11-----------------------

#include <stdio.h>
int main(void)
{
int i = 2, j = 4, min;
printf("%d\n", (i < j) ? i : j);
min = (i < j) ? i : j;
printf("%d\n", min);
if (i < j) min = i;
else min = j;
printf("%d\n", min);
return 0;
}

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

----------------------실습 예제 6-11(수정 버전)-----------------------

#include <stdio.h>
int main(void)
{
int i = 2, j = 4, min;
printf("%d\n", (i > j) ? i : j);
min = (i > j) ? i : j;
printf("%d\n", min);
if (i > j) min = i;
else min = j;
printf("%d\n", min);
return 0;
}

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

삼항 조건 연산자를 사용한 결과
출처:한성현 교수님의 강의 자료

if,else문을 한 줄로 표현할 수 있다.

출처:한성현 교수님의 강의 자료

----------------------실습 예제 6-12-----------------------

#include <stdio.h>
int main(void)
{
int a = 10, b = 10, c = 20, d = 20;
int ap, bp, cm, dm;
ap = ++a; // a=a+1; ap=a; ap=11, a=11
printf("a=%d, ap=%d\n", a, ap);
bp = b++; // bp=b; b=b+1; bp=10, b=11
printf("b=%d, bp=%d\n", b, bp);
cm = --c;// c=c-1; cm=c; cm=19, c=19
printf("c=%d, cm=%d\n", c, cm);
dm = d--;// dm=d; d=d-1; dm=20, d=19
printf("d=%d, dm=%d\n", d, dm);
return 0;
}

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

선치와 후치 사용
출처:한성현 교수님의 강의 자료
출처:한성현 교수님의 강의 자료

모두 a의 값에 1을 더하는 방법들이다.