๐ต ์ด๋ฒ ์ธ ๋ฒ์งธ ํฌ์คํ ์์๋ ๋ณธ๊ฒฉ์ ์ธ ์ฝ๋ฉ์ ์ํ ๋ค์ํ ๋ถ๊ธฐ๋ฌธ / ๋ฐ๋ณต๋ฌธ์ ๋ฐฐ์ฐ์! ๊ทธ๋ฆฌ๊ณ ํจ์๊น์ง ๋ฐฐ์ฐ๋ฉฐ Part 01์ ๋ง๋ฌด๋ฆฌํ๋ ค ํ๋ค! 6์ฅ๋ถํฐ 10์ฅ๊น์ง ๋ค๋ฃฐ ์์ !
6. printfํจ์์ scanfํจ์ ์ ๋ฆฌํ๊ธฐ
โ ์ฌ๋ฌ ํน์๋ฌธ์์ ์ถ๋ ฅ
→ ํฐ ๋ฐ์ดํ ์์ฒด์ ์ถ๋ ฅ์ ์ํ๋ฉด ์์ \๋ฅผ ๋ถ์ฌ์ค๋ค.
→ \n์ ๊ฐํ
→ \\ ์ญ์ฌ๋์ฌ ์์ฒด๋ฅผ ์ถ๋ ฅ
→ \'์ ์์ ๋ฐ์ดํ๋ฅผ ์ถ๋ ฅ
→ \t๋ ์ํ ํญ ํจ๊ณผ
โก printf์ f๋ formatted(์์์ด ์ง์ ๋) ํํ์ ์ถ๋ ฅ์ ๋ปํ๋ค. %d๋ 10์ง์ ์ ์๋ก ์ถ๋ ฅ, %X๋ 16์ง์๋ก ์ถ๋ ฅ(์ํ๋ฒณ์ ๋๋ฌธ์) %x๋ 16์ง์๋ก ์ถ๋ ฅ(์ํ๋ฒณ์ ์๋ฌธ์)
์์๋ฌธ์ | ์ถ๋ ฅ ๋์(์๋ฃํ) | ์ถ๋ ฅ ํํ |
%d | char, short, int | ๋ถํธ ์๋ 10์ง์ ์ ์ |
%ld | long | ๋ถํธ ์๋ 10์ง์ ์ ์ |
%lld | long long | ๋ถํธ ์๋ 10์ง์ ์ ์ |
%u | unsigned int | ๋ถํธ ์๋ 10์ง์ ์ ์ |
%o(%#o) | unsigned int | ๋ถํธ ์๋ 8์ง์ ์ ์ (#๋ถ์ด๋ฉด 8์ง์ ๋ต๊ฒ ์ถ๋ ฅ) |
%x %X(%#x, %#X) | unsigned int | ๋ถํธ ์๋ 16์ง์ ์ ์ (#๋ถ์ด๋ฉด 16์ง์ ๋ต๊ฒ ์ถ๋ ฅ) |
%f | float, double | 10์ง์ ๋ฐฉ์์ ๋ถ๋์์์ ์ค์ |
%Lf | long double | 10์ง์ ๋ฐฉ์์ ๋ถ๋์์์ ์ค์ |
%e, %E | float, double | e ๋๋ E ๋ฐฉ์์ ๋ถ๋์์์ ์ค์ |
%g, %G | float, double | ๊ฐ์ ๋ฐ๋ผ %f์ %e ์ฌ์ด์์ ์ ํ (์์์ ์ดํ์ ์๋ฆฌ์๊ฐ ๋์ด๋๋ฉด e ํ๊ธฐ๋ฒ์ผ๋ก ์ถ๋ ฅ) |
%c | char, short, int | ๊ฐ์ ๋์ํ๋ ๋ฌธ์ |
%s | char * | ๋ฌธ์์ด |
%p | void * | ํฌ์ธํฐ์ ์ฃผ์ ๊ฐ |
โข ํ๋ ํญ ์ง์
→ %8d๋ผ๋ฉด ํ๋ ํญ์ 8์นธ ํ๋ณดํ๊ณ ์ค๋ฅธ์ชฝ ์ ๋ ฌ / %-8d๋ผ๋ฉด ํ๋ ํญ์ 8์นธ ํ๋ณดํ๊ณ ์ผ์ชฝ ์ ๋ ฌ (์ถ๋ ฅํํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฅธ์ชฝ ์ ๋ ฌ)
โฃ scanf ํจ์
์์๋ฌธ์ | ์ ๋ ฅ ํํ |
%d | 10์ง์ ์ ์ |
%o | 8์ง์ ์์ ์ ์ |
%x | 16์ง์ ์์ ์ ์ |
%f | float ์ค์์ ํํ |
%lf | double ์ค์์ ํํ |
%Lf | long double ์ค์์ ํํ |
%s | ๋ฌธ์์ด์ ํํ |
(์ด ๋ ์ค์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ e ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด๋ ๋๋ค)
7. ๋ฐ๋ณต์คํ์ ๋ช ๋ นํ๋ ๋ฐ๋ณต๋ฌธ
โค while๋ฌธ
→ while๋ฌธ ์์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ ๋์ ๊ณ์ ์คํ
→ while๋ฌธ ์ค์ฒฉ๋ ๊ฐ๋ฅ
ex) Hello World! 3๋ฒ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(void) {
int num = 0;
while (num < 3){
printf("Hello World! %d\n", num);
num++;
}
return 0;
}
ex) ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(void) {
int dan = 1;
int num = 1;
int res;
while (dan < 10){
num = 1;
while (num < 10){
printf("%d x %d = %d\n", dan, num, dan*num);
num++;
}
printf("\n");
dan++;
}
return 0;
}
/*
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
*/
ex) ์์ ์ ์ ์ ๋ ฅ ๋ฐ๊ณ ๊ทธ ์๋งํผ 3์ ๋ฐฐ์ ์ถ๋ ฅ
#include <stdio.h>
int main(void) {
int num;
int cnt = 1;
printf("enter your num: ");
scanf("%d", &num);
while(cnt <= num){
printf("%d ", cnt*3);
cnt++;
}
printf("\n");
return 0;
}
/*
enter your num: 5
3 6 9 12 15
*/
ex) ๊ณ์ํด์ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉฐ ๊ทธ ๊ฐ์ ๊ณ์ํด์ ๋ํด ๋๊ฐ๋ค. ์ฌ์ฉ์๊ฐ 0์ ์ ๋ ฅํ ๋ ๊น์ง ๊ณ์ ๋๋ฉฐ 0์ด ์ ๋ ฅ๋๋ฉด ๋ชจ๋ ์ ์์ ํฉ์ ์ถ๋ ฅ์ํค๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค.
#include <stdio.h>
int main(void) {
int num;
int ans = 0;
while (num != 0) {
printf("enter your num: ");
scanf("%d", &num);
ans += num;
}
printf("sum is %d\n", ans);
return 0;
}
ex) ์ ๋ ฅ ๋ฐ์ ์ซ์์ ํด๋นํ๋ ๊ตฌ๊ตฌ๋จ์ ์ถ๋ ฅํ๋, ์ญ์์ผ๋ก ์ถ๋ ฅ
#include <stdio.h>
int main(void) {
int dan;
int cnt = 9;
printf("enter your dan: ");
scanf("%d", &dan);
while(cnt > 0){
printf("%d x %d = %d\n", dan, cnt, dan*cnt);
cnt--;
}
return 0;
}
ex) ๋ช ๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅํ ๊ฒ์ธ์ง ๋ฌป๊ณ , ๊ทธ ์ ๋งํผ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ค์, ์ ๋ ฅ ๋ฐ์ ๋ชจ๋ ์ ์์ ํ๊ท ์ ์ถ๋ ฅ (์์์ ์ดํ๊น์ง ๊ณ์ฐ)
#include <stdio.h>
int main(void) {
int cnt, num, counts;
int sum = 0;
printf("how many?: ");
scanf("%d", &cnt);
counts = cnt;
while (cnt > 0){
printf("enter your number: ");
scanf("%d", &num);
sum += num;
cnt--;
}
printf("total mean is: %lf\n", (double)sum/counts);
return 0;
}
ex) ์ด 5๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅ ๋ฐ์์ ๊ทธ ์์ ํฉ์ ์ถ๋ ฅํ๊ธฐ. ๋จ, ์ ์๋ ๋ฐ๋์ 1์ด์์ด์ด์ผ ํ๋ค. ๋ง์ฝ์ 1๋ฏธ๋ง์ ์๊ฐ ์ ๋ ฅ๋๋ค๋ฉด ์ด๋ฅผ ์ ๋ ฅ์ผ๋ก ์ธ์ ํ์ง ์๊ณ ์ฌ ์ ๋ ฅ์ ์๊ตฌํด์ผ ํ๋ค. ๊ทธ๋์ ๊ฒฐ๊ตญ 1์ด์์ ์ ์ 5๊ฐ๋ง ๋ชจ๋ ์ ๋ ฅ๋ฐ์ ์ ์๋๋ก ํ๋ก๊ทธ๋จ ์์ฑ
#include <stdio.h>
int main(void) {
int num;
int sum = 0, cnt = 5;
while (cnt > 0){
printf("enter your number: ");
scanf("%d", &num);
while (num >= 1){
sum += num;
cnt--;
num = 0;
}
}
printf("sum is %d\n",sum);
return 0;
}
ex) ์ค ์๊ฐ ๋์ด๋ ๋ ๋ง๋ค O์ ๊ฐ์๊ฐ ๋์ด๋๊ฒ๋ ์ถ๋ ฅ
#include <stdio.h>
int main(void) {
int number_of_lines;
int cnt1 = 0, cnt2 = 0;
printf("enter the number of lines: ");
scanf("%d", &number_of_lines);
while (cnt1 < number_of_lines){
cnt2 = 0;
while (cnt2 < cnt1){
printf("O ");
cnt2++;
}
printf("*\n");
cnt1++;
}
return 0;
}
โฅ do~while๋ฌธ
→ while๋ฌธ๊ณผ ๋ฌ๋ฆฌ ๋ฐ๋ณต์กฐ๊ฑด์ ๋ท๋ถ๋ถ์์ ๊ฒ์ฌํ๋ค. ์ฆ, ๋ฐ๋ณต์กฐ๊ฑด์ด ๋ง์ง ์๋๋ผ๋, ๋ฐ๋ณต์์ญ์ ์ต์ํ ํ ๋ฒ์ ์คํํ๋ ๊ตฌ์กฐ. ๋ฐ๋ผ์ ๋ฐ๋ณต์์ญ์ด ๋ฌด์กฐ๊ฑด ํ ๋ฒ ์ด์์ ์คํ๋์ด์ผ ํ ๋ do~while๋ฌธ ์ฌ์ฉ
ex) 0์ด์ 100์ดํ์ ์ ์ ์ค์์ ์ง์์ ํฉ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ (์ ๋ต 2500) (์กฐ๊ฑด: do-while๋ฌธ)
#include <stdio.h>
int main(void) {
int number = 0, sum = 0;
do{
sum += number;
number+=2;
}while(number <= 100);
printf("sum is %d\n", sum);
return 0;
}
โฆ for๋ฌธ
→ for๋ฌธ์ ๋ฐ๋ณต์ ํ์๊ฐ ์ ํด์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ for๋ฌธ ์์ฒด ๋ด๋ถ์์ ๋ณ์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ์ฝ๋ ์๋ถ๋ถ์์ ๋ณ์ ์ด๊ธฐํ ํ์. for๋ฌธ์ ์ค๊ฐ์ ์์นํ ์กฐ๊ฑด์์ด ๋น์์ง๋ฉด ๋ฌด์กฐ๊ฑด '์ฐธ'์ด ๋์ด ๋ฌดํ๋ฃจํ ํ์ฑ. for๋ฌธ์ ๋ค์ด๊ฐ๋ ์ธ ๊ฐ์ ์์ ์ด๊ธฐ์, ์กฐ๊ฑด์, ์ฆ๊ฐ์์ ๋ชจ๋ ์๋ตํ ์ ์์.
ex) ๋ ๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ๋ ์ ์ ํฌํจ ์ฌ์ด์ ๋ชจ๋ ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ(๋๋ฒ์งธ ์ ์๊ฐ ์ฒซ๋ฒ์งธ ์ ์๋ณด๋ค ๋ ์ปค์ผ ํ๋ค๋ ์กฐ๊ฑด)
#include <stdio.h>
int main(void) {
int num1, num2;
int sum = 0;
printf("enter two numbers: ");
scanf("%d", &num1);
scanf("%d", &num2);
int diff = num2 - num1;
for (int x = 0; x <= diff; x++) {
sum += (num1 + x);
}
printf("answer is %d\n", sum);
return 0;
}
ex) n์ ์ ๋ ฅ๋ฐ๊ณ , n!๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ
#include <stdio.h>
int main(void) {
int n;
int ans = 1;
printf("enter the n: ");
scanf("%d", &n);
for(int x = 1; x <= n; x++){
ans *= x;
}
printf("n! is %d\n",ans);
return 0;
}
8. ์กฐ๊ฑด์ ๋ฐ๋ฅธ ํ๋ฆ์ ๋ถ๊ธฐ
โง ์กฐ๊ฑด์ ์คํ ํ๋ฆ if ~ else if ~ else if ~ else
โจ ์กฐ๊ฑด ์ฐ์ฐ์(์ผํญ ์ฐ์ฐ์)
int num3 = (num1>num2) ? (num1) : (num2);
→ ์กฐ๊ฑด์ด ๋ง๋ค๋ฉด num3๊ฐ num1์ด ๋๊ณ , ์กฐ๊ฑด์ด ํ๋ฆฌ๋ค๋ฉด num3๊ฐ num2๊ฐ ๋๋ค.
ex) 1์ด์ 100๋ฏธ๋ง์ ์ ์ ์ค 7์ ๋ฐฐ์์ 9์ ๋ฐฐ์
#include <stdio.h>
int main(void) {
for (int i = 1; i < 101; i++) {
if ((i%7 == 0) || (i%9==0)){
printf("%d\n",i);
}
}
return 0;
}
ex) ๋ ๊ฐ์ ์ ์ ์ ๋ ฅ ๋ฐ์์ ๋ ์์ ์ฐจ๋ฅผ ์ถ๋ ฅ(if - else๋ฌธ / ์ผํญ ์ฐ์ฐ์)
#include <stdio.h>
int main(void) {
int num1, num2;
printf("enter two nums: ");
scanf("%d", &num1);
scanf("%d", &num2);
if (num1 >= num2){
printf("diff is %d\n", num1-num2);
}
else{
printf("diff is %d\n", num2-num1);
}
return 0;
}
#include <stdio.h>
int main(void) {
int num1, num2, diff;
printf("enter two nums: ");
scanf("%d", &num1);
scanf("%d", &num2);
diff = (num1>=num2) ? (num1-num2) : (num2-num1);
printf("diff is %d\n", diff);
return 0;
}
ex) ๊ตญ์ด - ์์ด - ์ํ ์ ์๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ ์ ์ฒด ํ๊ท ์ ์์ ๋ํ ํ์ ์ถ๋ ฅ
#include <stdio.h>
int main(void) {
int kor, eng, math;
printf("enter your scores: ");
scanf("%d", &kor);
scanf("%d", &eng);
scanf("%d", &math);
double avg = (double)(kor+eng+math)/3;
if (avg>=90){
printf("final grade is A\n");
}
else if (avg>=80){
printf("final grade is B\n");
}
else if (avg>=70){
printf("final grade is C\n");
}
else if(avg>=50){
printf("final grade is D\n");
}
else{
printf("final grade is F\n");
}
return 0;
}
โฉ continue & break
→ break๋ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ ๋ ์ฌ์ฉํ๋ค. break๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ฏ๋ก if๋ฌธ ํ์ถ์ด ์๋๋ค. ๋ฌดํ ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ๋ ์ฉ๋๋ก ์ฌ์ฉ
→ continue๋ ์คํ์ค์ธ ์์น์ ์๊ด์์ด ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด๊ฒ์ฌ ์์น๋ก ์ด๋ํ๋ค. ์ฆ, continue ์ดํ์ ์ฝ๋๋ ์๋ตํ๊ณ ๋ค์ ์คํ.
ex) continue ๋๋ break๋ฅผ ์ฌ์ฉํด ๊ตฌ๊ตฌ๋จ ์ค ์ง์ ๋จ๋ง ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(void) {
int dan = 1;
for (; dan <= 9; dan++) {
if (dan % 2 != 0) {
continue;
}
for (int cnt = 1; cnt <= 9; cnt++) {
printf("%d x %d = %d\n", dan, cnt, dan * cnt);
}
printf("\n");
}
return 0;
}
ex) ๋ค์ ์์ ๋ง์กฑํ๋ ๋ชจ๋ A์ Z๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ ์์ฑํ๊ธฐ (AZ + ZA = 99)
#include <stdio.h>
int main(void) {
for (int A = 0; A <= 9; A++) {
for (int Z = 0; Z <= 9; Z++) {
if ((10 * A + Z + 10 * Z + A) == 99) {
if (A != 0 && Z != 0) {
printf("possible (A,Z) pair: %d, %d\n", A, Z);
}
}
}
}
return 0;
}
โช switch๋ฌธ๊ณผ goto๋ฌธ
→ if๋ฌธ์ ๋นํด ์ ํ์ ์ธ switch๋ฌธ์ด์ง๋ง, ๋ถ๊ธฐ ์๊ฐ ๋ง์ ๋ ์ฌ์ฉ๋๋ค. ๊ฐ case๋ณ๋ก ๋ง์ง๋ง์ break; ๊ทธ๋ฆฌ๊ณ ๋งจ ๋ง์ง๋ง์ default๋ฌธ์ด ์๋ค. ๋ ๊ฐ ์ด์์ case๊ฐ ์กด์ฌํ๋ค๋ฉด case 'M': case 'm' ๊ณผ ๊ฐ์ด ์ฐ์์ ์ผ๋ก ๋ถ์ธ ๋ค์ ์งํํ๋ฉด ๋๋ค.
→ goto๋ฌธ์ ์์์ ์ผ๋ก ์ง์ ํ ์์น๋ก ์ด๋. ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
9. C์ธ์ด์ ํต์ฌ! ํจ์!
โ ํจ์์ ํ์์ฑ
: ํฌ๊ณ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์๊ฒ ๋๋ ์ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ๋ ๊ฒ์ด ๋ณด๋ค ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์น์ด ๋๋ค. main์ด๋ผ๋ ํ๋์ ํจ์๋ก ์ ๋ณตํ๋ ค ๋ค์ง ๋ง๊ณ , ์์ ํฌ๊ธฐ์ ํจ์๋ค๋ก ๋๋์ด์ ์ ๋ณตํ์๋ ๋ป. ํ๋ก๊ทธ๋จ์ ์์ ํฌ๊ธฐ์ ํจ์๋ค๋ก ๋๋ ์ ๊ตฌํํ๋ฉด ๋ฌธ์ ์ ๋ฐ์ ๋ฐ ํ๋ก๊ทธ๋จ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์ค์ฝ๋์ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ๋ณ๊ฒฝ์ ๋ฒ์๋ฅผ ์ถ์ ๋ฐ ์ ํํ ์ ์๋ค.
ex) printf() ํจ์๋ ์ ๋ฌ์ธ์์ ๋ฐํ๊ฐ์ด ๋ชจ๋ ์กด์ฌํ๋ ํจ์ (๋ฐํ๊ฐ์ผ๋ก ๋ชจ๋ํฐ์ ์ถ๋ ฅํ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์ถ๋ ฅ๋๋ค)
#include <stdio.h>
int main(void) {
int num1 = printf("hello world!\n");
int num2 = printf("12345\n");
printf("%d, %d\n", num1, num2);
return 0;
}
โก ์ ํ (1) ์ ๋ฌ์ธ์ ์๊ณ , ๋ฐํ ๊ฐ์ด ์กด์ฌํ๋ ํจ์
→ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ์ ํจ์ / ํจ์๊ฐ ํธ์ถ๋๋ฉด ํธ์ถ๋ ํจ์์ ์์ญ์ผ๋ก ์คํ์ ํ๋ฆ์ด ์ด๋ํ๋ค
→ ๋ฐํํ ์ ์๋ ๊ฐ์ ์๋ 1๊ฐ
ex) 2๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ 2๊ฐ์ ์ ์ ๋ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์
#include <stdio.h>
int Add(int num1, int num2){
return num1+num2;
}
int main(void) {
int result;
result = Add(3,4);
printf("result is %d\n",result); //result is 7
return 0;
}
โข ์ ํ (2) ์ ๋ฌ์ธ์๋ ๋ฐํ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ํจ์
→ ์ ๋ฌ์ธ์๋ ์์ผ๋, ๋ฐํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
ex) ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํจ์
#include <stdio.h>
void ShowAddResult(int num){
printf("result is %d\n",num);
}
int main(void) {
int result;
result = 3+4;
ShowAddResult(result);
return 0;
} //result is 7
→ ์ ๋ฌ์ธ์๋ ์์ผ๋, ๋ฐํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
ex) ์ซ์๋ฅผ ์ฝ๊ณ , ์ฝ์ ์ซ์๋ฅผ ๋ฐํํ๋ ํจ์
#include <stdio.h>
int ReadNum(void) {
int num;
scanf("%d",&num);
return num;
}
int main(void) {
int result;
int a = ReadNum();
int b = ReadNum();
printf("Result is %d\n",a+b);
return 0;
}
→ ์ ๋ฌ์ธ์๋ ์๊ณ , ๋ฐํ ๊ฐ๋ ์๋ ๊ฒฝ์ฐ: ๋จ์ํ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ํจ์์ผ ๋ ์ฐ๊ธฐ๋ ํ๋ค.
โฃ return์ ์๋ฏธ
→ (1) ํจ์๋ฅผ ๋น ์ ธ ๋๊ฐ๋ค
→ (2) ๊ฐ์ ๋ฐํํ๋ค
→ ๋ฐ๋ผ์ ๋ฐํํ์ด void๋ผ๋, ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๊ธฐ ์ํด return๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
โค ํจ์ ์ํ ์ ์ธ
→ C์ธ์ด๋ ์ ์ฐจ์งํฅ์ธ์ด์ฌ์ ๋ด๊ฐ ์ฐ๋ ค๋ ํจ์๊ฐ ์ด๋ฏธ ์์ ์์ด์ผ ํ๋ค. ๋ง์ฝ, ํจ์์ ๋ด์ฉ์ ์ดํ์ ์ฐ๊ณ ์ถ๋ค๋ฉด ๋จผ์ ์ ์ธ๋ง ํด๋ ๊ฐ๋ฅ!
ex) Increment ํจ์ ์ ์ธ
#include <stdio.h>
int Increment(int n);
int main(void) {
int num = 2;
num = Increment(num);
printf("%d\n", num);
return 0;
}
int Increment(int n) {
n++;
return n;
}
// 3
→ ํจ์์ ์ํ์ ๋งจ ์์ ๋ฏธ๋ฆฌ ์ ์ธํ ๋, ๋งค๊ฐ๋ณ์์ ์๋ฃํ๊ณผ ๊ฐฏ์๋ง ์๋ฉด ๋๋ฏ๋ก, ๊ตณ์ด ๋งค๊ฐ๋ณ์์ ์ด๋ฆ๊น์ง ์์ฑํ ํ์๋ ์๋ค
ex) int Increment(int n); ๋์ int Increment(int);๋ผ ์์ฑํด๋ ๋ฌด๋ฐฉ
โฅ ํธ์ถ๋ ํจ์ ๋ด์์ ๋ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ํจ์ ์ํ ์ ์ธ๋ง ๋งจ ์์ ํด์ฃผ๊ณ ์๋์ ์์ ๋กญ๊ฒ ์ฌ๋ฌ ํจ์์ ์คํ ์์์ ์ ์ฝ ์์ด ์์ฑํ๋๊ฑธ ๊ถ์ฅ!
โฆ * ์์ *
ex) 3๊ฐ์ ์ ์๋ฅผ ์ธ์๋ก ๋ฐ์์ ๊ทธ ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฐํํ๋ ํจ์์ ๊ฐ์ฅ ์์ ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์ ์. ๊ทธ๋ฆฌ๊ณ ํธ์ถํ๋ ์ ์ ํ main ํจ์ ์์ฑ
#include <stdio.h>
int GetMaxValue(int, int, int);
int GetMinValue(int, int, int);
int main(void) {
int num1, num2, num3;
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &num3);
printf("The Max value is %d\n",GetMaxValue(num1, num2, num3));
printf("The Min value is %d\n",GetMinValue(num1, num2, num3));
return 0;
}
int GetMaxValue(int a, int b, int c){
int X = (a > b) ? a: c;
int ans = (c > X) ? c: X;
return ans;
}
int GetMinValue(int a, int b, int c){
int X = (a < b) ? a: c;
int ans = (c < X) ? c: X;
return ans;
}
ex) ์ญ์จ์ ํ์จ ๊ฐ๊ฐ ์๋ก ๋ฐํํ๋ ํจ์
#include <stdio.h>
double CelToFah(double);
double FahToCel(double);
int main(void) {
double Cel, Fah;
scanf("%lf", &Cel);
scanf("%lf", &Fah);
printf("The Celsius is %lf\n",CelToFah(Cel));
printf("The Fahrenheit is %lf\n",FahToCel(Fah));
return 0;
}
double CelToFah(double Cel){
return 1.8*Cel + 32;
}
double FahToCel(double Fah){
return (Fah-32)/1.8;
}
ex) ์ธ์๋ก ์ ๋ฌ๋ ์๋งํผ ํผ๋ณด๋์น ์์ด์ ์ถ๋ ฅํ๋ ํจ์
(์๋ฅผ ๋ค์ด 5๋ฅผ ์ ๋ ฅํ๋ฉด 0์์๋ถํฐ ์์ํด์ ์ด 5๊ฐ์ ํผ๋ณด๋์น ์์ด์ ์ถ๋ ฅํด์ผ ํ๋ค)
โ a b ๊ทธ๋ค์ ์๋ฅผ ๊ตฌํ ๋ ค๋ฉด a+bํ ๊ฒฐ๊ณผ๊ฐ ์์ผ ํ๋๋ฐ, ์ด ๋ b๊ฐ ๋ํ๋ ค๋ ์ฒซ ๋ฒ์งธ ์, a+b๊ฐ ๋ํ๋ ค๋ ๋ ๋ฒ์งธ ์๊ฐ ๋๋ฏ๋ก, ๋์ค์ temp ๋ณ์๋ฅผ ์จ์ ๋์ค์ update๋ฅผ ์ ํ ๋ณธ๋์ a+b๊ฐ ๋ ๋ฒ์งธ ์๊ฐ ๋๊ฒ๋ ํ๋ค โ
#include <stdio.h>
void fibo(int);
int main(void) {
int num;
int add = 0;
printf("enter the num: ");
scanf("%d", &num);
fibo(num);
return 0;
}
void fibo(int num) {
int front1 = 0;
int front2 = 1;
int temp;
if (num == 1) {
printf("%d", front1);
printf("\n");
} else if (num == 2) {
printf("%d %d", front1, front2);
printf("\n");
} else {
printf("%d %d ", front1, front2);
for (int i = 0; i < num - 2; i++) {
printf("%d ", front1 + front2);
temp = front1 + front2;
front1 = front2;
front2 = temp;
}
printf("\n");
}
}
โง ์ง์ญ๋ณ์(Local Variable)
→ ์ค๊ดํธ ๋ด์ ์ ์ธ๋๋ ๋ณ์๋ ๋ชจ๋ ์ง์ญ๋ณ์
→ ์ฆ, ๋ค๋ฅธ ํจ์ ๋ด์ ๋ง๋ ๋ณ์๋ ์๋ก ์ด๋ฆ์ด ๊ฐ์๋ ์ถฉ๋ํ์ง x
→ ์ง์ญ๋ณ์๋ ํด๋น์ง์ญ์ ๋ฒ์ด๋๋ฉด ์๋์ผ๋ก ์๋ฉธ๋๋ค.
→ ์ง์ญ๋ณ์๋ stack์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋๊ฒ ๋๋ค. ์ฆ, ์ง์ญ๋ณ์๋ ์ ์ธ์ด ๋ ๋๋ง๋ค ์ ์์ ์๋ฏ์ด ํ ๋น๋์ด, ํธ์ถํ ํจ์๊ฐ return๋ฌธ์ ๋ง๋ ์ข ๋ฃ๋๋ฉด, ํธ์ถ๋ ํจ์์ ์๋ ๋ณ์๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์์๋๋ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
ex) ์๋ ์์ ๋ฅผ ๋ณด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ณ ๋ด๋ ค๊ฐ๋ ๋ณ์์ ๋ณํ ํํฉ ํ์ ํ๊ธฐ
#include <stdio.h>
int SimpleFuncOne(void);
int SimpleFuncTwo(void);
int main(void) {
int num = 17;
SimpleFuncOne();
SimpleFuncTwo();
printf("main num: %d\n", num);
return 0;
}
int SimpleFuncOne(void){
int num = 10;
num++;
printf("SimpleFuncOne num: %d\n", num);
return 0;
}
int SimpleFuncTwo(void){
int num1 = 20, num2 = 30;
num1++, num2--;
printf("num1 , num2: %d %d\n",num1, num2);
return 0;
}
/*
SimpleFuncOne num: 11
num1 , num2: 21 29
main num: 17
*/
→ ์ง์ญ๋ณ์๋ ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด๋ฌธ์๋ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด๋ฌธ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธ์ด ๋๋ค.
→ ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ธํ๋ ๋งค๊ฐ๋ณ์๋ ์ง์ญ๋ณ์์ ์ผ์ข ์ด๋ค.
โจ ์ ์ญ๋ณ์
→ ํ๋ก๊ทธ๋จ์ด ์ฒ์ ์คํ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋์ด์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋จ์์๋ ๋ณ์
→ ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ณ์๋ก, ์ง์ญ๋ณ์์ ๋ฌ๋ฆฌ ์ค๊ดํธ ๋ด์ ์ ์ธ x
ex) ์๋ ์์์ num (๋ง์ฝ ๋ณ๋์ ๊ฐ์ผ๋ก ์ด๊ธฐํํ์ง ์์ผ๋ฉด 0์ผ๋ก ์ด๊ธฐํ๋จ)
#include <stdio.h>
void Add(int val);
int num = 0;
int main(void) {
printf("%d\n",num); //0
Add(3);
printf("%d\n",num); //3
num++;
printf("%d\n",num); //4
return 0;
}
void Add(int val){
num += val;
}
→ ์ ์ญ๋ณ์์ ๋์ผํ ์ด๋ฆ์ ์ง์ญ๋ณ์๊ฐ ์ ์ธ๋๋ค๋ฉด, ํด๋น ์ง์ญ ๋ด์์๋ ์ ์ญ๋ณ์๊ฐ ๊ฐ๋ฆฌ์์ง๊ณ , ์ ์ญ๋ณ์๋ก์ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ง๋ค. (์ง์)
→ ๊ทธ๋ฌ๋ ์ ์ญ๋ณ์๋ ๊ฐ๊ธ์ ์ผ๋ก ๋ง์ด ๋ง๋ค์ง ์๋ ๊ฒ์ ์ ํธ. ๊ฐ ํจ์ ๋ด์์ ์ด๋ป๊ฒ ์ฐ๋ ์ง ๋ณ์์ ์ฉ๋๋ฅผ ๋ด์ผ ํ๊ณ , ๋ฐ๊พผ๋ค๋ฉด ์ฌ๋ฌ ํจ์์ ์์ญ์ ์ํฅ์ ๋ฏธ์น๊ธฐ์ ์ ์คํ ๋ง๋ค ๊ฒ!
โฉ static ๋ณ์ <์ง์ญ๋ณ์์ static ์ ์ธ>
→ ์ง์ญ๋ณ์ ์์ static ์ ์ธ์ ๋ถ์ด๋ฉด, ์ ์ธ๋ ํจ์ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ (์ง์ญ๋ณ์ ํน์ฑ) + ๋ฑ 1ํ ์ด๊ธฐํ๋๊ณ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์๊น์ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์กด์ฌ(์ ์ญ๋ณ์ ํน์ฑ)
ex) staic local variable ์์
#include <stdio.h>
void SimpleFunc(void){
static int num1 = 0;
int num2 = 0;
num1++, num2++;
printf("static: %d, local: %d\n", num1, num2);
}
int main(void) {
int i;
for(i=0;i<3;i++){
SimpleFunc();
}
return 0;
}
/*
static: 1, local: 1
static: 2, local: 1
static: 3, local: 1
*/
→ ์ฝ๊ฒ ์๊ธฐํ๋ฉด, ์ ์ญ๋ณ์์ธ๋ฐ ์ฃผ์ด์ง ๋ฒ์ ๋ด์์๋ง ๋์ํ๋ ์ ์ญ๋ณ์!(static ํน์ง ๊ผญ ๊ธฐ์ต) ๋ง์ฝ ์ ์์์์ ์์ฑํ SimpleFunc() ๋ด์ num1์ SimpleFunc() ๋ฐ์ ์์ญ์์ ์ ์ธํ๋ค๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค!
→ static ์ง์ญ๋ณ์๋ ๋น์ฐํ ์ ์ญ๋ณ์๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ค. ์ ์ญ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด static ์ง์ญ๋ณ์๋ฅผ ์ถ์ฒ! (์ ์ฉ ๋ฒ์๊ฐ ํ์ ์ ์ผ ๊ฒฝ์ฐ)
โช register ๋ณ์
→ ์ง์ญ๋ณ์์ register ์ ์ธ ์ถ๊ฐ ๊ฐ๋ฅ. register๋ผ๊ณ ์ ์ธ์ด ๋๋ฉด ๋ณ์ num์ CPU ๋ด์ ์กด์ฌํ๋ '๋ ์ง์คํฐ'๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ํ๋ฅ ์ด ๋์์ง๋ค.
→ ๋ ์ง์คํฐ๋ CPU๋ด์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ํฌ๊ธฐ๊ฐ ๋งค์ฐ ์์ ๋ฉ๋ชจ๋ฆฌ์ฌ๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ํ๋ ์ฐ์ฐ์ ๋งค์ฐ ๋น ๋ฅด๋ค. ์๋ฌด๋ฆฌ register ์ ์ธ์ ์ถ๊ฐํด๋ ์ปดํ์ผ๋ฌ๊ฐ ํฉ๋นํ์ง ์๋ค๊ณ ํ๋จํ๋ฉด ๋ ์ง์คํฐ์ ํ ๋น๋์ง ์๋๋ค. ๋ฐ๋๋ก ์๋ฌด๋ฐ ์ ์ธ์ ํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ register์ ํ ๋นํด์ผ๊ฒ ๋ค๊ณ ํ๋จํ๋ฉด ๊ทธ ๋ณ์๋ register์ ํ ๋น๋๋ค. (์ฆ, ์ปดํ์ผ๋ฌ์ ์ฌ๋)
→ register๋ ํ๋์ ๋ณ์๊ฐ ์ฃฝ์น๊ณ ์๋ฆฌํ๊ธฐ์ ๋๋ฌด๋๋ ์ค์ํ๊ณ ๋น์ผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ - ๋ฐ๋ผ์ ์ ์ญ๋ณ์๋ x)
โซ ์ฌ๊ทํจ์
→ ํจ์ ๋ด์์ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์: ํจ์๊ฐ ํธ์ถ๋๋ฉด ํด๋น ํจ์์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ ์คํ. ์๋ฅผ ๋ค์ด ํจ์์ ์ด๋ฆ์ด Recursive()๋ผ๋ฉด, Recursive ํจ์๋ฅผ ์คํํ๋ ์ค๊ฐ์ ๋ค์ Recursive() ํจ์๊ฐ ํธ์ถ๋ ๊ฒฝ์ฐ Recursive() ํจ์์ ๋ณต์ฌ๋ณธ์ ํ๋ ๋ ๋ง๋ค์ด์ ๋ณต์ฌ๋ณธ์ ์คํํ๊ฒ ๋๋ค.
→ ์ฌ๊ทํจ์ ๋ด์ ํ์ถ์ ์กฐ๊ฑด์ ์ถ๊ฐ(return๋ฌธ) ํด์ ๊ณ์ ์คํ๋๋ ๊ฑธ ๋ฐฉ์ง!
ex) ์์
#include <stdio.h>
void Recursive(int num){
if (num<=0)
return;
printf("Recursive call! %d\n",num);
Recursive(num-1);
}
int main(void) {
Recursive(3);
return 0;
}
→ ์๋ฃ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๋จ์ํํ๋๋ฐ ์ฌ๊ท๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
ex) → ํฉํ ๋ฆฌ์ผ ๊ตฌํ๊ธฐ ์์ (1)
#include <stdio.h>
void Factorial(int num, int ans){
if (num<=1){
printf("Result of num! is %d\n",ans);
return;
}
ans *= num;
Factorial(num-1,ans);
}
int main(void) {
int num;
printf("Enter your num: ");
scanf("%d",&num);
Factorial(num,1);
return 0;
}
→ ์์ (2)
#include <stdio.h>
int Factorial(int num){
if (num==1){
return 1;
}
else{
return num * Factorial(num-1);
}
}
int main(void) {
int num;
printf("Enter your num: ");
scanf("%d",&num);
printf("Result of num! is %d\n",Factorial(num));
return 0;
}
10. ๋์ ! ํ๋ก๊ทธ๋๋ฐ 1
โ ํ๋ก๊ทธ๋จ ์ฌ์ฉ์๋ก๋ถํฐ ๋ ๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅ ๋ฐ์์ ๊ตฌ๊ตฌ๋จ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ ์์ฑํ๊ธฐ
(์๋ฅผ ๋ค์ด 3๊ณผ 5๋ฅผ ์ ๋ ฅํ๋ฉด 3๋จ, 4๋จ, 5๋จ์ด ์ถ๋ ฅ๋์ด์ผ ํจ / ์ด ๋ 3๊ณผ 5๋ฅผ ์ ๋ ฅํ๊ฑด 5์ 3์ ์ ๋ ฅํ๊ฑด ํ๋ก๊ทธ๋จ์ ๊ฐ์ ๊ฒฐ๊ณผ ์ถ๋ ฅ ํ์)
#include <stdio.h>
int main(void) {
int num1, num2, start, end;
scanf("%d", &num1);
scanf("%d", &num2);
if (num1 < num2){
start = num1, end = num2;
}
else{
start = num2, end = num1;
}
for(int i = start; i < end + 1; i++){
for(int j = 1;j < 10; j++){
printf("%d x %d = %d\n",i,j,i*j);
}
printf("\n");
}
return 0;
}
โก ๋ ๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ์ต๋๊ณต์ฝ์(GCD)๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ ์์ฑํ๊ธฐ
→ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
#include <stdio.h>
int GCD(int a, int b){
int A, B, temp;
if (a>b){
A = a, B = b;
}
else{
A = b, B = a;
}
while(B != 0){
temp = A%B;
A = B;
B = temp;
}
return A;
}
int main(void) {
int a, b;
printf("Enter a and b: ");
scanf("%d",&a);
scanf("%d",&b);
printf("GCD of (a,b) is %d\n",GCD(a,b));
return 0;
}
→ ๋๋ ๊ณต์ฝ์ ์ ์ ์ฌ์ฉ
#include <stdio.h>
int GCD(int a, int b){
int A, B, result;
if (a>b){
A = a, B = b;
}
else{
A = b, B = a;
}
for(int i = B; B >=1; i--){
if ((A%i == 0) && (B%i == 0)){
result = i;
break;
}
}
return result;
}
int main(void) {
int a, b;
printf("Enter a and b: ");
scanf("%d",&a);
scanf("%d",&b);
printf("GCD of (a,b) is %d\n",GCD(a,b));
return 0;
}
โข ํ์ฌ ์ฃผ๋จธ๋์ 5000์์ด ์๋ค. DVD ํ ํธ์ ๋น๋ฆฌ๋ฉด 3500์์ด ๋จ๋๋ค.
์ํผ์ ๋ค๋ ค์ ํฌ๋ฆผ๋นต(500์), ์์ฐ๊นก(700์), ์ฝ๋ผ(400์)๋ฅผ ์ฌ๋ ค ํ๋ค. ์๋์ ํ๋๋ ๋จ๊ธฐ์ง ์๊ณ ์ด ์ธ ๊ฐ์ง ๋ฌผ๊ฑด์ ํ๋ ์ด์ ๋ฐ๋์ ๊ตฌ๋งคํ๋ ค๋ฉด ์ด๋ป๊ฒ ๊ตฌ๋งค๋ฅผ ์งํํด์ผ ํ๋๊ฐ? ์ ํํ ์ ์๋ ์ต์ ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ ์์ฑํ๊ธฐ
#include <stdio.h>
int main(void) {
int a = 500, b = 700, c = 400;
int change = 3500;
for(int A = 1; A <= (3500/500); A++){
for(int B = 1; B <= (3500/700); B++){
for(int C = 1; C <= (3500/400); C++){
if ((A*500 + B*700 + C*400) == 3500){
printf("Bread: %d, Snack: %d, Cola: %d\n",A,B,C);
}
}
}
}
return 0;
}
/*
Bread: 1, Snack: 2, Cola: 4
Bread: 2, Snack: 3, Cola: 1
Bread: 4, Snack: 1, Cola: 2
*/
โฃ x๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉด ์์ฐ์ 1๋ถํฐ ์ฐจ๋ก๋๋ก x๋ฒ์งธ์ ์์(Prime Number)๊น์ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์.
→ 2๋ถํฐ n-1๊น์ง n์ผ๋ก ๋๋์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์์์ ํ์ธ
โป O(N) ์๊ฐ ๋ณต์ก๋ โป
#include <stdio.h>
#include <time.h>
#include <math.h>
int isPrime(int n){
for(int k = 2; k < n; k++){
if(n%k == 0){
return 0;
}
}
return 1;
}
int main(void) {
int cnt;
int num = 2;
double start, end;
printf("enter cnt: ");
scanf("%d",&cnt);
start = (double)clock() / CLOCKS_PER_SEC;
while(cnt >= 1){
if(num == 2 || isPrime(num)==1){
printf("%d ",num);
cnt--;
}
num++;
}
printf("\n");
end = (((double)clock()) / CLOCKS_PER_SEC);
printf("elapse time: %lf\n",end-start);
return 0;
}
→ 2๋ถํฐ $\sqrt{n}$๊น์ง๋ง ๋ฒ์๋ฅผ ํ์ธ
โป O($\sqrt{N}$) ์๊ฐ ๋ณต์ก๋ โป
#include <stdio.h>
#include <time.h>
#include <math.h>
int isPrime(int n){
double root = pow((double)n,0.5);
for(int k = 2; k <= (int)root; k++){
if(n%k == 0){
return 0;
}
}
return 1;
}
int main(void) {
int cnt;
int num = 2;
double start, end;
printf("enter cnt: ");
scanf("%d",&cnt);
start = (double)clock() / CLOCKS_PER_SEC;
while(cnt >= 1){
if(num == 2 || isPrime(num)==1){
printf("%d ",num);
cnt--;
}
num++;
}
printf("\n");
end = (((double)clock()) / CLOCKS_PER_SEC);
printf("elapse time: %lf\n",end-start);
return 0;
}
โ ์ค์ ๋ก 100๊ฐ์ ์์๋ฅผ ์ถ๋ ฅํ๋ ์คํ์ ํ์ ๊ฒฝ์ฐ, elapse time์ด 2๋ฐฐ๋ ์ค์ด๋๋ ๊ฑธ ํ์ธํ ์ ์๋ค! โ (์๋ ์ถ๋ ฅ๊ฒฐ๊ณผ ํ์ธ)
โค ํ๋ก๊ทธ๋จ ์ฌ์ฉ์๋ก๋ถํฐ ์ด(second)๋ฅผ ์ ๋ ฅ๋ฐ์ ํ์, ์ด๋ฅผ [์, ๋ถ, ์ด]์ ํํ๋ก ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ ์์ฑ
#include <stdio.h>
int main(void) {
int seconds, h, m, s;
printf("your seconds: ");
scanf("%d", &seconds);
h = seconds/3600;
m = ((seconds - 3600*h)/60);
s = (seconds - 3600*h - 60*m);
printf("[h:%d, m:%d, s:%d]\n", h, m, s);
return 0;
}
โฅ ์ซ์ n์ ์ ๋ ฅ ๋ฐ๊ณ , ์๋ ๊ณต์์ด ์ฑ๋ฆฝํ๋ k์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ ์์ฑ
$2^{k} \leq n$
#include <stdio.h>
#include <math.h>
int main(void) {
int n;
int k = 0;
printf("enter n: ");
scanf("%d",&n);
while(1){
if(pow((double)2,(double)k) > n){
printf("the biggest k is %d\n", k-1);
break;
}
k++;
}
return 0;
}
โฆ 2์ n์น์ ๊ตฌํ๋ ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
#include <stdio.h>
int PowerofTwo(int n){
if(n>0){
return 2 * PowerofTwo(n-1);
}
}
int main(void) {
int n;
int k = 0;
printf("enter n: ");
scanf("%d",&n);
printf("2 power n is: %d\n",PowerofTwo(n));
return 0;
}
* ์ ์ฒด ๋ด์ฉ ์ถ์ฒ <์ค์ฑ์ฐ์ ์ดํ C ํ๋ก๊ทธ๋๋ฐ>
'C, C++ > Fundamentals' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C Basics 5/ (์ดํ ํ๋ก๊ทธ๋๋ฐ) (0) | 2023.07.26 |
---|---|
C Basics 4/ (์ดํ ํ๋ก๊ทธ๋๋ฐ) (0) | 2023.07.05 |
C Basics 2/ (์ดํ Cํ๋ก๊ทธ๋๋ฐ) (0) | 2023.06.26 |
C Basics 1/ (0) | 2023.06.25 |
C fundamentals (1) (1) | 2023.06.16 |
๋๊ธ