1ν•™λ…„ (2023)/C μ–Έμ–΄

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (2) μ‚°μˆ  μ—°μ‚°μž

waterproof 2023. 8. 21. 10:21

 

 

 

 


μ‚°μˆ  μ—°μ‚°μžλŠ” 기본적인 μ‚°μˆ  연산인 λ§μ…ˆ, λΊ„μ…ˆ, κ³±μ…ˆ, λ‚˜λˆ—μ…ˆ, λ‚˜λ¨Έμ§€ 연산을 μ‹€ν–‰ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

 

μ‚°μˆ  μ—°μ‚°μžμ˜ μ’…λ₯˜

 

 

μ‚¬μš©μžμ—κ²Œμ„œ 2개의 μ •μˆ˜λ₯Ό λ°›μ•„μ„œ μ—¬λŸ¬ 가지 연산을 ν•œ 후에 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‚΄νŽ΄λ³΄μž.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int x, y, result;
    
	printf("λ‘κ°œμ˜ μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€: ");
	scanf("%d %d", &x, &y);
    
	result = x + y;
	printf("%d + %d = %d\n", x, y, result);
    
	result = x - y; // λΊ„μ…ˆ
	printf("%d - %d = %d\n", x, y, result);
    
	result = x * y; // κ³±μ…ˆ
	printf("%d + %d = %d\n", x, y, result);
    
	result = x / y; // λ‚˜λˆ—μ…ˆ
	printf("%d / %d = %d\n", x, y, result);
    
	result = x % y; // λ‚˜λ¨Έμ§€
	printf("%d %% %d = %d\n", x, y, result);
    
	return 0;
}

 

 

 

ν”„λ‘œκ·Έλž¨ μ„€λͺ…

line 9: 두 개의 μ •μˆ˜λ₯Ό scanf()λ₯Ό ν˜ΈμΆœν•΄μ„œ ν•œ λ²ˆμ— μž…λ ₯받을 수 μžˆλ‹€. μ΄λ•Œμ—λŠ” ν˜•μ‹ μ§€μ •μž %dλ₯Ό 두 번 써주면 λœλ‹€.
line 11: λ§μ…ˆ 연산을 ν•΄μ„œ κ·Έ 결괏값을 result λ³€μˆ˜μ— μ €μž₯ν•œλ‹€.
line 20: μ •μˆ˜λ₯Ό μ •μˆ˜λ‘œ λ‚˜λˆ„λ©΄ 계산 κ²°κ³Όμ—μ„œ μ†Œμˆ˜μ  μ΄ν•˜λŠ” 버렀진닀. 즉 7을 4둜 λ‚˜λˆˆ λͺ«μΈ 1이 result에 λŒ€μž…λœλ‹€.
line 22: 7을 4둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 3이 result에 λŒ€μž…λœλ‹€.

 

μ—¬κΈ°μ„œ λ‚˜λˆ—μ…ˆ 연산에 λŒ€ν•˜μ—¬ μ£Όμ˜ν•˜μ—¬μ•Ό ν•œλ‹€.

 

• μ‚¬λžŒν•œν…Œ 7/4λ₯Ό 계산해보라고 ν•˜λ©΄ 닡이 1.75라고 ν•œλ‹€.

 

• ν•˜μ§€λ§Œ μ»΄ν“¨ν„°μ—μ„œ μ •μˆ˜ 계산과 μ‹€μˆ˜ 계산은 μ™„μ „νžˆ λ‹€λ₯΄λ‹€. 

 

• μ •μˆ˜λΌλ¦¬μ˜ 연산은 μ •μˆ˜ ν•˜λ“œμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 결과도 λ°˜λ“œμ‹œ μ •μˆ˜λ‘œ λ‚˜μ˜€κ²Œ λœλ‹€.

 

• 예λ₯Ό λ“€μ–΄μ„œ 7을 4둜 λ‚˜λˆ„λ©΄ 1.75κ°€ μ•„λ‹ˆλΌ 1이 되고 μ†Œμˆ˜μ  μ΄ν•˜λŠ” 버렀진닀.

 

μˆ˜μ‹μ˜ 예

 

• λ§Œμ•½ ν”Όμ—°μ‚°μž μ€‘μ—μ„œ ν•˜λ‚˜κ°€ μ‹€μˆ˜μ΄λ©΄, μ‹€μˆ˜ ν•˜λ“œμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 계산을 ν•˜κΈ° λ•Œλ¬Έμ— λ‚˜λˆ—μ…ˆ μ—°μ‚°μ˜ κ²¨λ‘œκ°€λ„ μ‹€μˆ˜κ°€ λœλ‹€.

 

• 즉, 7.0을 4.0으둜 λ‚˜λˆ„λ©΄ 1.75κ°€ λœλ‹€. 

 

• μ΄λ²ˆμ—λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 2개의 μ‹€μˆ˜λ₯Ό λ°›μ•„μ„œ μ—¬λŸ¬ 가지 연산을 ν•œ 후에 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‚΄νŽ΄λ³΄μž.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	double x, y, result;
    
	printf("λ‘κ°œμ˜ μ‹€μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€: ");
	scanf("%lf %lf", &x, &y);
    
	result = x + y;// λ§μ…ˆ 연산을 ν•˜μ—¬μ„œ κ²°κ³Όλ₯Ό result에 λŒ€μž…
	printf("%f + %f = %f\n", x, y, result);
    
	result = x - y; // λΊ„μ…ˆ
	printf("%f - %f = %f\n", x, y, result);
    
	result = x * y; // κ³±μ…ˆ
	printf("%f * %f = %f\n", x, y, result);
    
	result = x / y;// λ‚˜λˆ—μ…ˆ 연산을 ν•˜μ—¬μ„œ κ²°κ³Όλ₯Ό result에 λŒ€μž…
	printf("%f / %f = %f\n", x, y, result);
    
	return 0;
}

 

 

 

 


λ‚˜λ¨Έμ§€ μ—°μ‚°μž

 

λ‚˜λ¨Έμ§€ μ—°μ‚°μž %λŠ” 생각보닀 많이 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ μ—°μ‚°μžμ΄λ‹€.

 

x%yλŠ” xλ₯Ό y둜 λ‚˜λˆ„μ–΄μ„œ 남은 λ‚˜λ¨Έμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.

 

예λ₯Ό λ“€μ–΄ 10%3은 1이닀.

 

10을 3으둜 λ‚˜λˆ„λ©΄ λͺ«μ€ 3이고 λ‚˜λ¨Έμ§€λŠ” 1μ΄λœλ‹€.

 

λ‚˜λ¨Έμ§€ μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜λŠ” μ§μˆ˜μ™€ ν™€μˆ˜λ₯Ό μ‰½κ²Œ ꡬ뢄할 수 μžˆλ‹€. 즉, μ–΄λ–€ 수λ₯Ό 2둜 λ‚˜λˆ„μ–΄μ„œ λ‚˜λ¨Έμ§€κ°€ 0이면 μ§μˆ˜μ΄λ‹€. (x % 2κ°€ 0이면 짝수)

 

• λ‚˜λ¨Έμ§€ μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ 5의 배수λ₯Ό νŒλ‹¨ν•  μˆ˜λ„ μžˆλ‹€. (x % 5κ°€ 0이면 5의 배수)

 

λ‚˜λ¨Έμ§€ μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ 예제: μ‚¬μš©μžλ‘œλΆ€ν„° 초 λ‹¨μœ„μ˜ μ‹œκ°„μ„ λ°›μ•„μ„œ λͺ‡ λΆ„, λͺ‡ μ΄ˆμΈμ§€λ₯Ό κ³„μ‚°ν•˜κΈ°

 

1000μ΄ˆκ°€ λͺ‡ λΆ„, λͺ‡ μ΄ˆμ— ν•΄λ‹Ήν•˜λŠ”μ§€λ₯Ό 계산할 수 μžˆλ‹€. (1000/60)ν•˜λ©΄ λͺ‡ 뢄인지λ₯Ό μ•Œ 수 있고, (1000%60)ν•˜λ©΄ λͺ‡ μ΄ˆκ°€ λ‚¨λŠ”μ§€λ₯Ό 계산할 수 μžˆλ‹€.

 

 

 

#define _CRT_SECURE_NO_WARNINGS
// λ‚˜λ¨Έμ§€ μ—°μ‚°μž ν”„λ‘œκ·Έλž¨
#include <stdio.h>
#define SEC_PER_MINUTE 60 // 1뢄은 60초

int main(void)
{
	int input, minute, second;

	printf("μ΄ˆλ‹¨μœ„μ˜ μ‹œκ°„μ„ μž…λ ₯ν•˜μ‹œμ˜€ (32μ–΅μ΄ˆμ΄ν•˜): ");
	scanf("%d", &input); // μ΄ˆλ‹¨μœ„μ˜ μ‹œκ°„μ„ μ½λŠ”λ‹€.

	minute = input / SEC_PER_MINUTE; // λͺ‡ λΆ„
	second = input % SEC_PER_MINUTE; // λͺ‡ 초

	printf("%dμ΄ˆλŠ” %dλΆ„ %dμ΄ˆμž…λ‹ˆλ‹€. \n", input, minute, second);
	return 0;
}

 

 

ν”„λ‘œκ·Έλž¨ μ„€λͺ…

line 4: #define문을 μ΄μš©ν•˜μ—¬ SEC_PER_MINUTEμ΄λΌλŠ” κΈ°ν˜Έμƒμˆ˜λ₯Ό μ •μ˜ν•œλ‹€. SEC_PER_MINUTE;μ΄λΌλŠ” κΈ°ν˜ΈλŠ” μ „μ²˜λ¦¬κΈ°μ— μ˜ν•˜μ—¬ 60으둜 λŒ€μ²΄λœλ‹€.
line 11: μ‚¬μš©μžλ‘œλΆ€ν„° 초 λ‹¨μœ„μ˜ μ‹œκ°„μ„ λ°›μ•„μ„œ λ³€μˆ˜ input에 μ €μž₯ν•œλ‹€.
line 13: 초 λ‹¨μœ„μ˜ μ‹œκ°„μ΄ λͺ‡ 뢄에 ν•΄λ‹Ήν•˜λŠ”μ§€λ₯Ό μ•ŒκΈ° μœ„ν•˜μ—¬ μž…λ ₯받은 초 λ‹¨μœ„μ˜ μž…λ ₯ μ‹œκ°„μ„ SEC_PER_MINUTE으둜 λ‚˜λˆˆλ‹€.
line 14: μž…λ ₯받은 μ‹œκ°„μ΄ λͺ‡ μ΄ˆμΈμ§€λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € μž…λ ₯ κ°’μ—μ„œ 뢄에 ν•΄λ‹Ήν•˜λŠ” 것듀을 μ œκ±°ν•˜κ³  남은 λ‚˜λ¨Έμ§€λ₯Ό μ•Œμ•„μ•Ό ν•œλ‹€. λ”°λΌμ„œ μž…λ ₯받은 μ‹œκ°„μ„ SEC_PER_MINUTE으둜 λ‚˜λˆ μ„œ λ‚˜μ˜¨ λ‚˜λ¨Έμ§€κ°€ μ΄ˆμ— ν•΄λ‹Ήν•œλ‹€.

 

 

 


증감 μ—°μ‚°μž

 

 μ¦κ° μ—°μ‚°μžλŠ” ++ κΈ°ν˜Έλ‚˜ -- 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜μ˜ 값을 1만큼 μ¦κ°€μ‹œν‚€κ±°λ‚˜ κ°μ†Œμ‹œν‚€λŠ” μ—°μ‚°μžμ΄λ‹€.

 

 ++ μ—°μ‚°μžλŠ” λ³€μˆ˜μ˜ 값을 1만큼 μ¦κ°€μ‹œν‚¨λ‹€.

 

-- μ—°μ‚°μžλŠ” λ³€μˆ˜μ˜ 값을 1만큼 κ°μ†Œμ‹œν‚¨λ‹€.

 

++ μ—°μ‚°μžλŠ” λ‹€μŒκ³Ό 같이 λ°”κΎΈμ–΄μ„œ μ“Έ 수 μžˆλ‹€. λ‹€μŒμ˜ 두 λ¬Έμž₯은 같은 μ˜λ―Έμ΄λ‹€.

x++;
x = x + 1;

 

  -- μ—°μ‚°μžλŠ” λ‹€μŒκ³Ό 같이 λ°”κΎΈμ–΄μ„œ μ“Έ 수 μžˆλ‹€. λ‹€μŒμ˜ 두 λ¬Έμž₯은 같은 μ˜λ―Έμ΄λ‹€.

x--;
x = x - 1;

 

증감 μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžμ˜ μ•žμ΄λ‚˜ 뒀에 올 수 μžˆλ‹€. 증감 μ—°μ‚°μžκ°€ μ•žμ— μ˜€λŠ”μ§€ 뒀에 μ˜€λŠ”μ§€μ— 따라 μˆ˜μ‹μ˜ 값이 달라진닀.

 

증감 μ—°μ‚°μžμ˜ μ’…λ₯˜

 

 

μ£Όμ˜ν•  점: ++x와 x++의 차이점

 

λ§Œμ•½ λ³€μˆ˜ xλ₯Ό μ¦κ°€μ‹œν‚¬ λͺ©μ μœΌλ‘œλ§Œ 증감 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ x++λ‚˜ ++xλŠ” λ™μΌν•˜λ‹€.

 

 κ·ΈλŸ¬λ‚˜ 증감 μ—°μ‚°μžλ₯Ό μ μš©ν•œ 후에 κ·Έ μˆ˜μ‹μ˜ 값을 μ‚¬μš©ν•  λͺ©μ μ΄λΌλ©΄ 두 가지λ₯Ό κ΅¬λΆ„ν•˜μ—¬μ•Ό ν•œλ‹€.

 

++xλŠ” λ¬Έμž₯μ—μ„œ x의 값을 μ¦κ°€μ‹œν‚¨ 후에 μˆ˜μ‹μ˜ 값을 κ³„μ‚°ν•œλ‹€. μˆ˜μ‹ ++x의 값을 μ¦κ°€λœ x의 값이닀.

 

x++λŠ” μˆ˜μ‹μ˜ 값을 κ³„μ‚°ν•œ 후에 x의 값을 μ¦κ°€μ‹œν‚€κ²Œ λœλ‹€. μˆ˜μ‹ x++의 값은 μ¦κ°€λ˜κΈ° μ „μ˜ x값이닀.

 

x = 1;
y = 1;
nextx = ++x;  // x의 값이 μ¦κ°€λœ 후에 μ‚¬μš©λœλ‹€. nextxλŠ” 2κ°€ λœλ‹€.
nexty = y++;  // y의 값이 μ‚¬μš©λœ 후에 μ¦κ°€λœλ‹€. nextyλŠ” 1이 λœλ‹€.

 

 

μ—¬κΈ°μ„œ nextxλŠ” 2이고 nextyλŠ” 1이 λœλ‹€. 증감 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” λ‹€μŒ μ½”λ“œμ—μ„œ x와 y의 값을 μ˜ˆμΈ‘ν•΄λ³΄μž.

 

#include <stdio.h>

int main(void)
{
	int x, y; // λ³€μˆ˜ x, yλ₯Ό μ„ μ–Έν•œλ‹€.
    
	x = 1; // xλŠ” 1이닀.
	y = ++x; // xλŠ” 2이고 yλŠ” 2이닀.
	printf("x=%d y=%d \n", x, y);
    
	y = x++; // xλŠ” 3이고 yλŠ” 2이닀.
	printf("x=%d y=%d \n", x, y);
    
	return 0;
}