1、C语言程序设计现代方法第二版习题答案CProgrammingAModernApproachChapter 2Answers to Selected Exercises2.was #2 (a) The program contains one directive (#include) and four statements (three calls of printf and one return).(b)Parkinsons Law:Work expands so as to fill the timeavailable for its completion.3.was #4#include
2、int main(void)int height = 8, length = 12, width = 10, volume;volume = height * length * width;printf(Dimensions: %dx%dx%dn, length, width, height); printf(Volume (cubic inches): %dn, volume);printf(Dimensional weight (pounds): %dn, (volume + 165) / 166);return 0;4.was #6 Heres one possible program:
3、#include int main(void)int i, j, k; float x, y, z;printf(Value of i: %dn, i); printf(Value of j: %dn, j); printf(Value of k: %dn, k);printf(Value of x: %gn, x); printf(Value of y: %gn, y);printf(Value of z: %gn, z);return 0;When compiled using GCC and then executed, this program produced the followi
4、ng output:Value of i: 5618848Value of j: 0Value of k: 6844404Value of x: 3.98979e-34Value of y: 9.59105e-39Value of z: 9.59105e-39The values printed depend on many factors, so the chance that youll get exactly these numbers is small.5.was #10 (a) is not legal because 100_bottles begins with a digit.
5、8.was #12 There are 14 tokens: a, =, (, 3, *, q, -, p, *, p, ), /, 3, and ;.Answers to Selected Programming Projects4.was #8; modified#include int main(void)float original_amount, amount_with_tax;printf(Enter an amount: );scanf(%f, &original_amount); amount_with_tax = original_amount * 1.05f;printf(
6、With tax added: $%.2fn, amount_with_tax);return 0;The amount_with_tax variable is unnecessary. If we remove it, the program is slightly shorter:#include int main(void)float original_amount;printf(Enter an amount: );scanf(%f, &original_amount);printf(With tax added: $%.2fn, original_amount * 1.05f);r
7、eturn 0;Chapter 3Answers to Selected Exercises2.was #2(a)printf(%-8.1e, x);(b)printf(%10.6e, x);(c)printf(%-8.3f, x);(d)printf(%6.0f, x);5.respectively.was #8 The values of x, i, and y will be 12.3, 45, and .6,Answers to Selected Programming Projects1.was #4; modified#include int main(void)int month
8、, day, year;printf(Enter a date (mm/dd/yyyy): ); scanf(%d/%d/%d, &month, &day, &year);printf(You entered the date %d%.2d%.2dn, year, month, day);return 0;3.was #6; modified#include int main(void)int prefix, group, publisher, item, check_digit;printf(Enter ISBN: );scanf(%d-%d-%d-%d-%d, &prefix, &grou
9、p, &publisher, &item, &check_digit);printf(GS1 prefix: %dn, prefix); printf(Group identifier: %dn, group); printf(Publisher code: %dn, publisher); printf(Item number: %dn, item); printf(Check digit: %dn, check_digit);/* The five printf calls can be combined as follows:printf(GS1 prefix: %dnGroup ide
10、ntifier: %dnPublisher code: %dnItem number: %dnCheck digit: %dn, prefix, group, publisher, item, check_digit);*/return 0; Chapter 4Answers to Selected Exercises2.was #2 Not in C89. Suppose that i is 9 and j is 7. The value of (-i)/j could be either 1 or 2, depending on the implementation. On the oth
11、er hand, the value of -(i/j) is always 1, regardless of the implementation.In C99, on the other hand, the value of (-i)/j must be equal to the value of -(i/j).9.was #6(a)63 8(b)3 2 1(c)2 -1 3(d)0 0 013. was #8 The expression +i is equivalent to (i += 1). The value of both expressions is i after the
12、increment has been performed.Answers to Selected Programming Projects2. was #4#include int main(void)int n;printf(Enter a three-digit number: );scanf(%d, &n);printf(The reversal is: %d%d%dn, n % 10, (n / 10) % 10, n / 100);return 0;Chapter 5Answers to Selected Exercises2. was #2(a) 1(b) 1(c)1(d)14.w
13、as #4 (i j) - (i j)6.was #12 Yes, the statement is legal. When n is equal to 5, it does nothing, since 5 is not equal to - 9.10.was #16 The output isonetwosince there are no break statements after the cases.Answers to Selected Programming Projects2. was #6#include int main(void)int hours, minutes;pr
14、intf(Enter a 24-hour time: ); scanf(%d:%d, &hours, &minutes);printf(Equivalent 12-hour time: );if (hours = 0)printf(12:%.2d AMn, minutes);else if (hours 12)printf(%d:%.2d AMn, hours, minutes);else if (hours = 12)printf(%d:%.2d PMn, hours, minutes); elseprintf(%d:%.2d PMn, hours - 12, minutes);return
15、 0;4. was #8; modified#include int main(void)int speed;printf(Enter a wind speed in knots: ); scanf(%d, &speed);if (speed 1)printf(Calmn);else if (speed = 3)printf(Light airn);else if (speed = 27) printf(Breezen);else if (speed = 47) printf(Galen);else if (speed = 63)printf(Stormn);elseprintf(Hurric
16、anen);return 0;6.was #10#include int main(void)int check_digit, d, i1, i2, i3, i4, i5, j1, j2, j3, j4, j5, first_sum, second_sum, total;printf(Enter the first (single) digit: );scanf(%1d, &d);printf(Enter first group of five digits: ); scanf(%1d%1d%1d%1d%1d, &i1, &i2, &i3, &i4, &i5); printf(Enter se
17、cond group of five digits: );scanf(%1d%1d%1d%1d%1d, &j1, &j2, &j3, &j4, &j5); printf(Enter the last (single) digit: );scanf(%1d, &check_digit);first_sum = d + i2 + i4 + j1 + j3 + j5;second_sum = i1 + i3 + i5 + j2 + j4;total = 3 * first_sum + second_sum;if (check_digit = 9 - (total - 1) % 10) printf(
18、VALIDn);elseprintf(NOT VALIDn);return 0;10. was #14#include int main(void)int grade;printf(Enter numerical grade: );scanf(%d, &grade);if (grade 100) printf(Illegal graden); return 0;switch (grade / 10) case 10:case 9: printf(Letter grade: An); break;case 8: printf(Letter grade: Bn); break;case 7: pr
19、intf(Letter grade: Cn); break;case 6: printf(Letter grade: Dn); break;case 5:case 4:case 3:case 2:case 1:case 0: printf(Letter grade: Fn); break;return 0;Chapter 6Answers to Selected Exercises4. was #10 (c) is not equivalent to (a) and (b), because i is incremented before the loop body is executed.1
20、0. was #12 Consider the following while loop:while ()continue;The equivalent code using goto would have the following appearance: while ()goto loop_end;loop_end: ; /* null statement */12. was #14for (d = 2; d * d = n; d+) if (n % d = 0)break;The if statement that follows the loop will need to be mod
21、ified as well: if (d * d = n)printf(%d is divisible by %dn, n, d);elseprintf(%d is primen, n);14. was #16 The problem is the semicolon at the end of the first line. If we remove it, the statement is now correct:if (n % 2 = 0) printf(n is evenn);Answers to Selected Programming Projects2.was #2#includ
22、e int main(void)int m, n, remainder;printf(Enter two integers: ); scanf(%d%d, &m, &n);while (n != 0) remainder = m % n;m = n; n = remainder;printf(Greatest common divisor: %dn, m);return 0;4. was #4#include int main(void)float commission, value;printf(Enter value of trade: );scanf(%f, &value);while
23、(value != 0.0f) if (value 2500.00f)commission = 30.00f + .017f * value;else if (value 6250.00f) commission = 56.00f + .0066f * value;else if (value 20000.00f)commission = 76.00f + .0034f * value;else if (value 50000.00f) commission = 100.00f + .0022f * value;else if (value 500000.00f)commission = 15
24、5.00f + .0011f * value;elsecommission = 255.00f + .0009f * value;if (commission 39.00f)commission = 39.00f;printf(Commission: $%.2fnn, commission);printf(Enter value of trade: );scanf(%f, &value);return 0;6. was #6#include int main(void)int i, n;printf(Enter limit on maximum square: ); scanf(%d, &n)
25、;for (i = 2; i * i = n; i += 2) printf(%dn, i * i);return 0;8. was #8#include int main(void)int i, n, start_day;printf(Enter number of days in month: );scanf(%d, &n);printf(Enter starting day of the week (1=Sun, 7=Sat): ); scanf(%d, &start_day);/* print any leading blank dates */for (i = 1; i start_
26、day; i+)printf( );/* now print the calendar */ for (i = 1; i = n; i+) printf(%3d, i);if (start_day + i - 1) % 7 = 0) printf(n);return 0;Chapter 7Answers to Selected Exercises3.was #4 (b) is not legal.4.was #6 (d) is illegal, since printf requires a string, not a character, as its first argument.10.
27、was #14 unsigned int, because the (int) cast applies only to j, not j * k.12. was #16 The value of i is converted to float and added to f, then the result is converted to double and stored in d.14. was #18 No. Converting f to int will fail if the value stored in f exceeds the largest value of type i
28、nt.Answers to Selected Programming Projects 1. was #2 short int values are usually stored in 16 bits, causing failure at 182. int and long int values are usually stored in 32 bits, with failure occurring at 46341.2. was #8#include int main(void)int i, n;char ch;printf(This program prints a table of
29、squares.n); printf(Enter number of entries in table: ); scanf(%d, &n);ch = getchar();/* dispose of new-line character following number of entries */ /* could simply be getchar(); */for (i = 1; i = n; i+) printf(%10d%10dn, i, i * i);if (i % 24 = 0) printf(Press Enter to continue.);ch = getchar(); /* or simply getchar(); */return 0;5.was #10#include #include int main(void)int su
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1