a book on c 4장 연습문제 풀이
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

t_cnt>left_cnt)
13 printf("??");
14 }
15 }
16
17 if (left_cnt > right_cnt){
18 printf("ERROR : Missing right braces : ");
19 while(left_cnt != right_cnt){
20 printf("}");
21 left_cnt--;
22 }
23 printf("\n");
24 }
25 return 0;
26 }
☞ 만약 {{{{{ }}} 와 같이 짝이 맞지 않는 파일을 입력 했을때는 ERROR : Missing right braces : }} 라고 출력된다.
28. 4.8절 "while 문"에서 공백, 숫자, 문자의 수를 세는 프로그램을 작성하였다. 이 프로그램을 수정하여 소 문자와 대문자를 구별하여 세도록 하여라.
1 #include
2
3 int main(void)
4 {
5 int c,big_digit=0,small_digit=0;
6
7 while((c = getchar()) != EOF)
8 if (c >= 'A' && c <= 'Z')
9 ++big_digit;
10 else if (c >= 'a' && c <= 'z')
11 ++small_digit;
12 printf("big_digit = %d\n",big_digit);
13 printf("small_digit = %d\n",small_digit);
14 return 0;
15 }
29. 다음 코드를 break나 continue 문을 사용하지 않는 코드로 수정하여라.
while (c = getchar()) { while (c = getchar() !='E') {
if (c == 'E') ++cnt ;
break ; if (c >= '0' && c <= '9')
++cnt ; ++digit_cnt ;
if (c >= '0' && c <= '9') ☞ }
++digit_cnt ; n = 50;
} for(i=-5;i < n) {
i = -5; ++i;
n = 50; if (i !=0)
while (i < n) { ☞ total += i;
++i; printf("i = %d and total = %d\n", i, total);
if (i == 0) }
continue ;
total += i;
printf("i = %d and total = %d\n", i, total);
30. goto를 사용하면 프로그램이 복잡해지기 때문에, 현대의 프로그램에서는 goto 문을 거의 사용하지 않는다. 다음 코드는 몇 개의 goto를 사용해도 제어의 흐름이 복잡해진다는 것을 보인 것이다.
d = b * b - 4.0 * a * c; d = b * b -4.0 * a * c;
if (d == 0.0) goto L1; if ( d == 0.0) {
else if (a != 0.0)
if (d > 0.0) { r1 = r2 = -b / (2.0 * a);
if (a != 0.0) { else
r1 = (-b + sqrt(d)) / (2.0 * a); ☞> printf("degenerate case\n");
r2 = (-b - sqrt(d)) / (2.0 * a); }
goto L4; else
} if (a != 0.0) {
else printf("imaginary roots\n");
goto L3; .............
}
else
goto L2;
L1: if (a != 0.0)
r1 = r2 = -b / (2.0 * a);
else
goto L3;
goto L4;
L2: if (a != 0.0) {
printf("imaginary roots\n");
goto L4;
}
L3: printf("degenerate case\n");
L4: .....
이 프로그램을 보면 프로그래머가 다른 경우가 추가될 때마다 코드를 짜집기 해야되었고, 그에 따라 프로그램은 매우 불분명하게 된 것을 볼 수 있다. 이 코드를 goto 문이 없는 코드로 다시 작성하여라.
32. 다음은 for 루프의 몸체에서 continue 문이 어떻게 동작하는지를 볼 수 있는 예제이다. 어떤 값이 출력되는가?
for (putchar('1'); putchar('2'); putchar('3')) {
putchar('4');
continue;
putchar('5');
}
☞ 234가 계속 출력된다.
33. 수학 연산 min(x, y)는 다음과 같은 조건부 수식으로 표현할 수 있다.
(x < y) ? x : y
유사한 방법으로 조건부 수식만을 사용하여 다음 수학 연산을 기술해 보아라.
min(x, y, z) =>( x>y ) ? { (x max(x, y, z, w) =>( x>y ) ? [(x>z) ? {x>w ? x : w} : {z>w ? z : w}] :
[(y>z) ? {y>w ? y : w} : {z>w ? z : w}]
34. 다음 두 문장 중 옳은 것은 어느 것인가? switch 문의 구문을 살펴보고 먼저 답을 작성한 다음, 프로그 램을 작성하여 검사해 보아라.
switch (1); /* version 1 */
switch (1) switch (1); /* version 2 */
=> version(1) 이 옳은 것이다. 왜냐하면 switch문의 조건은 각기 달라야 한다.
35. ANSI C에서 레이블은 자신의 이름 영역을 가지고 있지만, 전통적인 C에서는 그렇지 못하다. 비록 좋은 프로그래밍 방법은 아니지만, ANSI C에서는 하나의 식별자를 변수와 레이블로 동시에 사용할 수 있다. 다 음 코드를 포함하는 프로그램을 작성하고, ANSI C 컴파일러로 실행해 보아라.
int L = -3 ; /* L is a variable */
if (L < 0)
goto L;
printf("L = %d\n", L);
L : printf("Exiting label test!\n"); /* L is a label */
만일 전통적인 C 컴파일러를 사용할 수 있다면, 이 프로그램이 컴파일되는지 검사해 보아라.
☞ 컴파일 되지 않는다.

키워드

  • 가격2,000
  • 페이지수15페이지
  • 등록일2004.06.22
  • 저작시기2004.06
  • 파일형식한글(hwp)
  • 자료번호#256528
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니