K. N. King C Programming - Chapter 3. Exercises, Programming Projects

[Week 2] Hacking Cat’s Weekly Study


Exercises

Section 3.1 (1)

  • (a) ” 86”, “1040” → “(공백)(공백)(공백)(공백)86”, “1040”
  • (b) ” 3.02530e+01” → 12자리 문자열, 소숫점 아래 숫자는 5개, 지수 형태로 구성
  • (c) “83.1620” → 소숫점 4자리까지 나타내기
  • (d) “1e-06” → ”%-6.2g” 형식은 아래의 기준에 따라 값이 설정된다.
    • (1) %g 고정 소수점(f) 혹은 지수 표기(e) 중 더 짧은 형식이 선택된다.
    • (2) .2g 유효 숫자 2자리 (Significant digits)
    • (3) 불필요한 0 제거, 지수 표기가 더 짧으면 지수 표기 사용
      • 0.0000009979 > 9.979e-07 > 1.0e-6 > 1.0e-6(공백)

Section 3.1 (2)


Section 3.2 (3)

  • (a) 동일하다. 공백 포함 여부가 입력에 포함을 주지 않는다.
  • (b) 동일하지 않다. 첫 번째는 공백 구분 없이 하이픈이 사용되며, 두 번째는 하이픈 앞뒤로 공백이 있다. 입력 시에는 각각 1-2-3, 1 -2 -3 형태로 입력해야 값이 올바르게 저장된다.
  • (c) 동일하지 않다. 첫 번째는 공백 없이 실수 값을 입력하고 두 번째는 공백이 필요하다. 입력 시에는 1.2, 1.2 형태로 입력해야 한다.
  • (d) 동일하지 않다. 각각 1.1,2.2, 1.1, 2.2 형태로 입력해야 정상적으로 값이 저장된다.

Section 3.2 (4)


  • 변수 i 는 정수형이기 때문에 최초에 유저에게 10.3을 입력 받으면 10까지만 값을 가져오고 .3 은 입력 스트림에 남아있다. 이후 남아있는 .3 이라는 값은 변수 x에 들어가는데 이 변수는 float 타입이므로 0.300000 값이 들어가게 된다. 다음으로 입력된 5가 정수형 변수 j 에 저장되고 이후 6은 할당할 변수가 없으므로 더 이상 값을 읽지 않고 입력 버퍼에 그대로 남아있게 된다. ( 6\n)

Section 3.2 (5)


  • 4번 문제와 동일하게 값을 할당할 때는 선언한 변수의 타입에 맞는 값만 들어간다.
    • (1) 12.3 → (변수 x는 실수형이므로 그대로 값이 들어간다.)
    • (2) 45.6 → (변수 i는 정수형이므로 45 까지만 값이 들어간다. 이후 .6은 입력 버퍼에 남아있다.)
    • (3) .6 → (변수 y는 실수형이므로 0.6 값이 들어간다. 이후 입력된 789 값은 입력 버퍼에 남은 채로 종료된다.)

Section 3.2 (6)

  • 원본 코드 (addfrac.c)
#include <stdio.h>
 
int main(void)
{
	int num1, denom1, num2, denom2, result_num, result_denom;
	printf("Enter first fraction: ");
	scanf("%d / %d", &num1, denom1);
	printf("Enter second fraction: "); 
	scanf("%d / %d", &num2, &denom2);
	result_num = num1 * denom2 + num2 * denom1;
	resultdenom = denom1 * denom2;
	printf("The sum is %d/%d\n", result_num, result_denom);
	return 0;
}

  • 위 코드를 아래와 같이 수정하면, 공백을 허용한 분수 형태의 값 입력이 가능하다.
    • (1) %d/%d → %d / %d 로 수정하여 입력 값 형식에 공백을 추가해줬고,
    • (2) 값을 저장할 때, 변수의 메모리 주소를 전달하여 값을 올바르게 할당하도록 수정했다.

Programming Projects

Programming Projects 1.


Programming Projects 2.


Programming Projects 3.


Programming Projects 4.


Programming Projects 5.


Programming Projects 6.

#include <stdio.h>
 
# (원본 코드) addfrac.c
int main(void)
{
	int num1, denom1, num2, denom2, result_num, result_denom;
	printf("Enter first fraction: ");
	scanf("%d / %d", &num1, denom1);
	printf("Enter second fraction: "); 
	scanf("%d / %d", &num2, &denom2);
	result_num = num1 * denom2 + num2 * denom1;
	resultdenom = denom1 * denom2;
	printf("The sum is %d/%d\n", result_num, result_denom);
	return 0;
}

🐛.. 🐛.. 🐛..