๐Ÿ’ก

๋”ฐ๋ฐฐ์”จ 9.1 ~ ๋ณธ๋ฌธ

๋”ฐ๋ฐฐ์”จ

๋”ฐ๋ฐฐ์”จ 9.1 ~

์•„์˜ณ์ด 2021. 1. 19. 19:09

9.1 ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ

-์ผ๋ฐ˜ํ™”(๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์— ์„ฑ๋ฆฝํ•  ์ˆ˜ ์žˆ๋„๋ก)

-๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์—ฌ๋Ÿฌ๋ฒˆ ๋‚˜์˜ฌ ๋•Œ

-์ง€์†์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ ค๋ฉด

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>	//	strlen()
#include <stdbool.h>

#define WIDTH 30
#define NAME "Na-Da Ga"
#define ADDRESS "Seoul, Korea"

void print_chars(char c, int n_stars, bool endl)
{
	for (int i = 0; i < n_stars; i++)
		printf("%c",c);

	if (endl == true)
		printf("\n");
}

void print_centered_str(char str[])
{
	int n_blanks = 0;

	n_blanks = (WIDTH - strlen(str)) / 2;
	print_chars(' ', n_blanks, false);
	printf("%s\n", str);
}

int main()
{	
	print_chars('*', WIDTH, true);

	print_centered_str(NAME);
	
	print_centered_str(ADDRESS);

	print_chars('*', WIDTH, false);

	return 0;
}

 

 

 

9.2 ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž…

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>	//	strlen()
#include <stdbool.h>

#define WIDTH 30
#define NAME "Na-Da Ga"
#define ADDRESS "Seoul, Korea"

void print_centered_str(char str[]);
void print_chars(char c, int n_stars, bool newline);//	prototype

int main()
{
	print_chars('*', WIDTH, true);//	argument

	print_centered_str(NAME);
	print_centered_str(ADDRESS);

	print_chars('*', WIDTH, false);

	return 0;
}

void print_centered_str(char str[])
{
	int n_blanks = 0;

	n_blanks = (WIDTH - strlen(str)) / 2;
	print_chars(' ', n_blanks, false);
	printf("%s\n", str);
}

void print_chars(char c, int n_stars, bool newline)//	parameter
{
	for (int i = 0; i < n_stars; i++)
		printf("%c", c);		//	putchar(c)

	if (newline == true)
		printf("\n");
}

9.1์˜ ํ•จ์ˆ˜๋“ค์„ ํ”„๋กœํ† ํƒ€์ž…ํ™” ํ•œ ๋ชจ์Šต

 

 

 

9.3 ํ•จ์ˆ˜์˜ ์ž๋ฃŒํ˜•๊ณผ ๋ฐ˜ํ™˜๊ฐ’

์ •์ˆ˜ํ˜• ์ž๋ฃŒํ˜• int๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ ์ž๋ฃŒํ˜•์ด ์ƒ๋žต๋˜๋ฉด ์•Œ์•„์„œ int๋กœ ์ƒ๊ฐํ•ด์„œ ์ปดํŒŒ์ผ ํ•œ๋‹ค.But ํ™•์‹คํžˆ ํ‘œํ˜„ํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹๋‹ค

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int int_min(int, int);

int main()
{
	int i1, i2;

	while (1)
	{
		printf("Input two integers : ");

		if (scanf("%d %d", &i1, &i2) != 2) break;

		int lesser = int_min(i1, i2);
		//int lesser = min;
		printf("The lesser of %d and %d is %d\n", i1, i2, lesser);

		//printf("The lesser of %d and %d is %d\n", i1, i2, int_min(i1, i2));
	
	}

	printf("End.\n");
	return 0;
}

int int_min(int i, int j)
//int_min(int i, int j)
{
	int min;

	if (i < j)
		min = i;
	else
		min = j;

	return min;

	//	return (i < j) ? i : j;

	//	return (float)min;	warning

	/*
	if (i < j)
		return i;
	else
		return j;

	printf("Who am I?");	์‹คํ–‰ ์•ˆ๋จ
	*/

	//return;	//return with no value
}

์ฝ”๋“œ ์•„๋ž˜์ชฝ์˜

return (float)min;

์€ min์„ float์œผ๋กœ ํ˜•๋ณ€ํ™˜ ํ•ด์ค˜๋„ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜์ž๋ฃŒํ˜•์ด int๋กœ ์ง€์ •๋˜์–ด ์žˆ์–ด

๋‹ค์‹œ float -> int๋กœ ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜ warning์ด ๋œฌ๋‹ค

 

 

 

9.4 ๋ณ€์ˆ˜์˜ ์˜์—ญScope๊ณผ ์ง€์—ญ ๋ณ€์ˆ˜Local Variable

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int int_max(int i, int j)
{
	//a = 456;
	int m;
	m = i > j ? i : j;
	return m;
}

int main()
{
	//m = 123;

	int a;

	a = int_max(1, 2);

	printf("%d\n", a);
	printf("%p\n", &a);		//	์ฃผ์†Œ๊ฐ’์„ ์ง์ ‘ ์ถœ๋ ฅ

	{
		//int a;
		a = int_max(4, 5);

		printf("%d\n", a);
		printf("%p\n", &a);

		int b = 123;
	}

	//b = 456;

	printf("%d\n", a);
	printf("%p\n", &a);

	return 0;
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด

2
00CFFE2C
5
00CFFE2C
5
00CFFE2C

 

mainํ•จ์ˆ˜์˜ ์ž‘์€ ๋ธ”๋Ÿญ์˜ int a ์˜ ์ฃผ์„์„ ํ’€๊ณ  ์‹คํ–‰์‹œํ‚ค๋ฉด

2
001DF9BC
5
001DF9B0
2
001DF9BC

 

์ด๋ ‡๊ฒŒ ์ฒซ๋ฒˆ์งธ๋Š” a์˜ ์ฃผ์†Œ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์ง€๋งŒ ๋‘๋ฒˆ์งธ์—์„œ ์ž‘์€ ๋ธ”๋Ÿญ์˜ a๋Š” ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅธ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

-{ } ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€์ˆ˜์˜ ์˜์—ญ์„ ๋‚˜๋ˆ„๊ณ  ๋ฐ–์˜ ๋ธ”๋Ÿญ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์•ˆ์˜ ๋ธ”๋Ÿญ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ

์•ˆ์˜ ๋ธ”๋Ÿญ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ๋ฐ–์˜ ๋ธ”๋Ÿญ์—์„œ ์‚ฌ์šฉํ•   ์ˆ˜๋Š” ์—†๋‹ค.

 

 

 

9.5 ์ง€์—ญ ๋ณ€์ˆ˜์™€ ์ŠคํƒStack

-'์Œ“๋‹ค' '์Œ“์•„์˜ฌ๋ฆฐ ๋”๋ฏธ'

-์ฒ˜์Œ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์•„๋ž˜์— ๋†“์ด๊ณ  ๋งˆ์ง€๋ง‰์— ์Œ“์ธ๊ฒƒ์ด ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ.

-int i; ๋ผ๊ณ  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด i๋Š” ๊ทธ์ € ์ด๋ฆ„์ผ ๋ฟ, ์‹ค์ œ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์ฃผ์†Œ๋‹ค. ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๊ฐ’์— ์ ‘๊ทผํ•œ๋‹ค

 

 

9.6 ์žฌ๊ท€ ํ˜ธ์ถœ Recursion

-๋ฌดํ•œ๋ฃจํ”„ ์‚ฌ์šฉํ• ๋•Œ ์‚ฌ์šฉ X while, for ์‚ฌ์šฉ

-stop condition์„ ์‚ฌ์šฉํ•˜์ž

-์ธ์…‰์…˜์ฒ˜๋Ÿผ ๊ฟˆ์—์„œ ๊ฟˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ๊ฐ€์žฅ ๊นŠ์€ ๊ฟˆ์—์„œ ๊นจ๊ณ  ๋˜ ๊ทธ ๊ฟˆ์—์„œ ๊นจ๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋А๋‚Œ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void my_func(int);

int main()
{
	my_func(1);

	return 0;
}

void my_func(int n)
{
	printf("Level %d, address of variable n = %p\n", n, &n);

	if (n < 4)	//	stop condition
		my_func(n + 1);

	printf("Level %d, address of variable n = %p\n", n, &n);
}

 

 

9.7 ์žฌ๊ท€ ํ˜ธ์ถœ๊ณผ ์Šคํƒ

Level 1, address of variable n = 19920948
Level 2, address of variable n = 19920732
Level 3, address of variable n = 19920516
Level 4, address of variable n = 19920300
Level 4, address of variable n = 19920300
Level 3, address of variable n = 19920516
Level 2, address of variable n = 19920732
Level 1, address of variable n = 19920948

 

9.6์˜ ์ฝ”๋“œ์—์„œ ์ฃผ์†Œ๋ฅผ ์‹ญ์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ”์„œ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋Œ€์นญ์œผ๋กœ ์ฃผ์†Œ๊ฐ€ ๊ฐ™์€๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

9.8 ํŒฉํ† ๋ฆฌ์–ผ ์˜ˆ์ œ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

long loop_factorial(int n);
long recursive_factorial(int n);

int main()
{
	int num = 5;

	printf("%d\n", loop_factorial(num));
	printf("%d\n", recursive_factorial(num));

	return 0;
}

long loop_factorial(int n)
{
	long fac;

	for (fac = 1; n > 1; n--)
	{
		fac *= n;
	}
	return fac;
}

long recursive_factorial(int n)
{
	if (n > 0)
	{
		return n * recursive_factorial(n - 1);	//	tail recursion
	}
	else
		return 1;
}

 

 

9.9 ์ด์ง„์ˆ˜ ๋ณ€ํ™˜ ์˜ˆ์ œ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
	10
	10 / 2 = 5, remainder = 0
	5 / 2 = 2, remainder = 1
	2 / 2 = 1, remainder = 0
	1 / 2 = 0, remainder = 1
	*/

void print_binary(unsigned long n);
void print_binary_loop(unsigned long n);

int main()
{
	unsigned long num = 10;

	print_binary_loop(num);		//	0101
	print_binary(num);			//	1010

	printf("\n");

	return 0;
}

void print_binary_loop(unsigned long n)
{
	while (1)
	{
		int quotient = n / 2;
		int remainder = n % 2;
	
		printf("%d", remainder);

		n = quotient;

		if (n == 0) break;
	}
	printf("\n");
}

void print_binary(unsigned long n)
{
	int remainder = n % 2;

	if (n >= 2)
		print_binary(n / 2);

	printf("%d", remainder);

	return;
}

while๋ฌธ์„ ์ด์šฉํ•˜๋ฉด ์ด์ง„์ˆ˜๊ฐ€ ๊ฑฐ๊พธ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

'๋”ฐ๋ฐฐ์”จ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋”ฐ๋ฐฐ์”จ 10.1 ~  (0) 2021.01.25
๋”ฐ๋ฐฐ์”จ 9.10 ~  (0) 2021.01.21
๋”ฐ๋ฐฐ์”จ 7.10 ~  (0) 2021.01.18
๋”ฐ๋ฐฐ์”จ 7.2 ~  (0) 2021.01.15
๋”ฐ๋ฐฐ์”จ 6.10 ~  (0) 2021.01.12