본문 바로가기
관/솔직한 c 언어 공부

c언어 기초 공부 06.

by 4차원 박스 2019. 11. 6.

 

오늘도 반복문을 살펴본다.

 


do while 문은 
do{ }먼저 실행 그다음 while(조건); 실행

키보드로부터 값을 받아온 후에 조건을 실행할때
사용을 한다.


for문

for(i=0; i<10; i++){}
으로 구성되며

for(초기식, 조건식, 증감식)
과 같은 구조이다.

int i; 로 선언을 해주고 사용하거나
초기식에서 int i=0; 과 같이 그자리에서 선언하고 사용하는 방식이 있다(안되는 경우도 존재함 컴퍼일러 이거나 세팅 문제이다).


선언과 같은것은 범위가 필요함(scope) 즉 유효범위 라고 함.
즉 변수의 그릇과 관련된 에러 같은것은 scope와 같은것임. 또한 이러한변수
선언의 범위는 같은 함수 안에서만 유효함.


다음은 예제이다

int main()
{
int d,i;
int s=0;
printf("어디까지 더할건가: ");
scanf("%d",&d);
for(i=0;i<=d;i++)
{
s+=i;
}
printf("결과 =%d",s);
printf("\n");
return 0;
}
어디까지 더할건가: 10
결과 =55

이렇게 등장함

//팩
int main()
{
int d,i;
int f=1;
printf("몇팩?: ");
scanf("%d",&d);
for(i=1;i<=d;i++)
{
f*=i;
}
printf("결과 %d! = %d",d,f);
printf("\n");
return 0;
}

몇팩?: 10
결과 10! = 3628800

이렇게 등장함


//온도변환
int main()
{
int d;
int i;
printf("몇까지 출력?");
scanf("%d",&d);
for(i=0;i<=d;i+=10 )
{
printf("%d F= %f C \n",i,(i-32.0)*5.0/9.0); //나누기가 들어있으면 뒤에 수를 실수형태로 만들어준다.
}
printf("\n");
return 0;
}
몇까지 출력?100
0 F= -17.777778 C
10 F= -12.222222 C
20 F= -6.666667 C
30 F= -1.111111 C
40 F= 4.444444 C
50 F= 10.000000 C
60 F= 15.555556 C
70 F= 21.111111 C
80 F= 26.666667 C
90 F= 32.222222 C
100 F= 37.777778 C

이렇게 나옴

// gui흉내1
HWND w;
HDC d;
int main()
{
int x,y,i;
w=GetForegroundWindow();
d=GetWindowDC(w);

x=50;
y=50;
for(i=0;i<5;i++ )
{
Rectangle(d,x,y,x+30,y+30);
x+=100;
}

return 0;
}

// gui흉내2
HWND w;
HDC d;
int main()
{
int x,y;
w=GetForegroundWindow();
d=GetWindowDC(w);

MoveToEx(d,100,300,0);
LineTo(d,300,300);

MoveToEx(d,100,300,0);
LineTo(d,100,0);
for(x=0;x<300;x++ )
{
y=0.01*x*x+x;
SetPixel(d,100+x,300-y,RGB(255,0,0));
}

return 0;
}

for문에서 무한루프
for( ; ; ){} 이런식으로 사용한다.

time complexity(시간 복잡도)
프로그래밍을 할때 얼마나 많은 시간이 걸리는가
for문의 개수로 표시되며 O(n)으로 표시하며 n의 거듭제곱수 에 따라
for문의 개수가 표시된다.

커질수록 느리다고 생각하면 된다.


for문의 중첩은 
출력되는것이 두줄이상으로 여러개있으면 된다고 파악하고 실행한다.


//구구단
int main()
{
int i,j;
for(i=2;i<10;i++)
{
for(j=1;j<10;j++)
{
printf("%dx%d=%2d  ",i,j,i*j);
}
printf("\n");
}
printf("\n");
return 0;
}

결과로
2x1= 2  2x2= 4  2x3= 6  2x4= 8  2x5=10  2x6=12  2x7=14  2x8=16  2x9=18
3x1= 3  3x2= 6  3x3= 9  3x4=12  3x5=15  3x6=18  3x7=21  3x8=24  3x9=27
4x1= 4  4x2= 8  4x3=12  4x4=16  4x5=20  4x6=24  4x7=28  4x8=32  4x9=36
5x1= 5  5x2=10  5x3=15  5x4=20  5x5=25  5x6=30  5x7=35  5x8=40  5x9=45
6x1= 6  6x2=12  6x3=18  6x4=24  6x5=30  6x6=36  6x7=42  6x8=48  6x9=54
7x1= 7  7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49  7x8=56  7x9=63
8x1= 8  8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64  8x9=72
9x1= 9  9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81

가 등장

//경우의 수
int main()
{
int i,j;
printf("두 주사위의 합이 7이 되는 경우의 수만 출력하기 \n");

for(i=1;i<7;i++)
{
for(j=0;j<1;j++)
{
printf("%d  %d  ",i,7-i);
}
printf("\n");
}
printf("\n");
return 0;
}

결과로

두 주사위의 합이 7이 되는 경우의 수만 출력하기
1  6
2  5
3  4
4  3
5  2
6  1

가 등장



break 문 continue

전자는 그 반복문 나가는것 후자는 제일가까운  반복문으로 넘어가게 하는것
어찌되든 제일가까운 반복문을 찾으면 된다.

(잠깐 팁

슈드코드(pseudo) 논리를 설명하는 코드로 실제 코드가 아닌 가짜 코드이다. )



//숫자 맞추기 게임
int main()
{
int c,r,g;
c=0;
srand((unsigned)time(NULL));            //프로그램을 실행할때마다 랜덤한 변수를 만들어주는 역할
r=(rand()%100)+1;                          //1부터 100까지 랜덤한 값을 r에 저장
for(;;)
{
printf("예상한 수를 입력:");
scanf("%d",&g);
if (g>r)
{
c+=1;
printf("정답보다 크다 \n");
}
else if (g<r)
{
c+=1;
printf("정답보다 작다 \n");
}
else
{
c+=1;
printf("정답 \n");
break;
}
}
printf("%d번 만에 맞춤",c);
printf("\n");
return 0;
}



예상한 수를 입력:50
정답보다 크다
예상한 수를 입력:25
정답보다 크다
예상한 수를 입력:20
정답보다 크다
예상한 수를 입력:10
정답보다 작다
예상한 수를 입력:08
정답보다 작다
예상한 수를 입력:19
정답보다 크다
예상한 수를 입력:18
정답보다 크다
예상한 수를 입력:15
정답보다 작다
예상한 수를 입력:16
정답보다 작다
예상한 수를 입력:17
정답
10번 만에 맞춤





//직각 삼각형 세기
int main()
{
int a,b,c,t;
t=0;
for(a=1;a<=100;a++)
{
for(b=1;b<=100;b++)
{
for(c=1;c<=100;c++)
{
if (a*a+b*b==c*c)
{
t+=1;
printf("%d  %d  %d \n",a,b,c);
}

}
}
}
printf("%d 개의 직각삼각형이 존재함",t/2);
return 0;
}

3  4  5
4  3  5
5  12  13
6  8  10
7  24  25
8  6  10
8  15  17
9  12  15
9  40  41
10  24  26
11  60  61
12  5  13
12  9  15
12  16  20
12  35  37
13  84  85
14  48  50
15  8  17
15  20  25
15  36  39
16  12  20
16  30  34
16  63  65
18  24  30
18  80  82
20  15  25
20  21  29
20  48  52
21  20  29
21  28  35
21  72  75
24  7  25
24  10  26
24  18  30
24  32  40
24  45  51
24  70  74
25  60  65
27  36  45
28  21  35
28  45  53
28  96  100
30  16  34
30  40  50
30  72  78
32  24  40
32  60  68
33  44  55
33  56  65
35  12  37
35  84  91
36  15  39
36  27  45
36  48  60
36  77  85
39  52  65
39  80  89
40  9  41
40  30  50
40  42  58
40  75  85
42  40  58
42  56  70
44  33  55
45  24  51
45  28  53
45  60  75
48  14  50
48  20  52
48  36  60
48  55  73
48  64  80
51  68  85
52  39  65
54  72  90
55  48  73
56  33  65
56  42  70
57  76  95
60  11  61
60  25  65
60  32  68
60  45  75
60  63  87
60  80  100
63  16  65
63  60  87
64  48  80
65  72  97
68  51  85
70  24  74
72  21  75
72  30  78
72  54  90
72  65  97
75  40  85
76  57  95
77  36  85
80  18  82
80  39  89
80  60  100
84  13  85
84  35  91
96  28  100
52 개의 직각삼각형이 존재함


' > 솔직한 c 언어 공부' 카테고리의 다른 글

c언어 기초 공부 08.  (0) 2019.11.09
c언어 기초 공부 07.  (0) 2019.11.07
c언어 기초 공부 05.  (0) 2019.11.05
c언어 기초 공부 04.  (0) 2019.11.04
c언어 기초 공부 03.  (0) 2019.11.04

댓글