C Primer Plus第6版编程练习答案(已下载)之欧阳术创编

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Chapter 2 Programming Exercises
PE 2--‐1
/* Programming Exercise 2-1 */
#include
<stdio.h> int
main(void)
{ printf("Gustav
Mahler\n");
printf("Gustav\nMahle
r\n"); printf("Gustav
");
printf("Mahler\n");
return 0;
}
PE 2--‐3
/* Programming Exercise 2-3 */
#include
<stdio.h> int
main(void)
{ int ageyears; /* age in
years */ int agedays; /*
age in days */
/* large ages may require the long type
*/ ageyears = 101; agedays = 365 * ageyears;
printf("An age of %d years is %d days.\n", ageyears, agedays); return 0;
}
PE 2--‐4
/* Programming Exercise 2-4 */
#include
<stdio.h>
void
jolly(void);
void
deny(void);
int main(void)
{ jol
ly();
jolly();
jolly();
deny();
return
0; }
void jolly(void)
{
printf("For he's a jolly good fellow!\n"); }
void deny(void)
{
printf("Which nobody can deny!\n");
}
PE 2--‐6
/* Programming Exercise 2-6 */
#include
<stdio.h> int
main(void)
{ int
toes;
toes =
10;
printf("toes = %d\n", toes);
printf("Twice toes = %d\n", 2 * toes); printf("toes squared = %d\n", toes * toes); return 0;
}
/* or create two more variables, set them to 2 * toes and toes * toes */
PE 2--‐8
/* Programming Exercise 2-8 */
#include
<stdio.h>
void
one_three(voi
d); void
two(void); int
main(void)
{
printf("starting
now:\n");
one_three();
printf("done!\n");
return 0;
}
void one_three(void)
{
printf("one\n");
two();
printf("three\n");
}
void two(void)
{
printf("two\n");
}
Chapter 3 Programming Exercises
PE 3--‐2
/* Programming Exercise 3-2 */
#include
<stdio.h> int
main(void)
{
int
ascii;
printf("Enter an ASCII code: ");
scanf("%d", &ascii);
printf("%d is the ASCII code for %c.\n", ascii, ascii); return 0;
}
PE 3--‐4
/* Programming Exercise 3-4 */
#include
<stdio.h> int
main(void)
{ floa
t num;
printf("Enter a floating-point value: ");
scanf("%f", &num);
printf("fixed-point notation: %f\n",
num); printf("exponential
notation: %e\n", num); printf("p
notation: %a\n", num); return 0;
}
PE 3--‐6
/* Programming Exercise 3-6 */
#include
<stdio.h> int
main(void)
{
float mass_mol = 3.0e-23; /* mass of water molecule
in grams */ float mass_qt = 950; /* mass of quart
of water in grams */ float quarts; float molecules;
printf("Enter the number of quarts of water: ");
scanf("%f", &quarts);
molecules = quarts * mass_qt / mass_mol;
printf("%f quarts of water contain %e molecules.\n", quarts, molecules); return 0;
}
Chapter 4 Programming Exercises
PE 4--‐1
/* Programming Exercise 4-1 */
#include
<stdio.h> int
main(void)
{ char
fname[40];
char
lname[40];
printf("Enter your first
name: "); scanf("%s",
fname); printf("Enter your
last name: "); scanf("%s",
lname); printf("%s, %s\n",
lname, fname); return 0;
}
PE 4--‐4
/* Programming Exercise 4-4 */
#include
<stdio.h> int
main(void)
{ float
height;
char
name[40];
printf("Enter your height in
inches: "); scanf("%f", &height);
printf("Enter your name: ");
scanf("%s", name);
printf("%s, you are %.3f feet tall\n", name, height / 12.0); return
0;
}
PE 4--‐7
/* Programming Exercise 4-7 */
#include
<stdio.h>
#include
<float.h> int
main(void)
{ float ot_f = 1.0 /
3.0; double ot_d
= 1.0 / 3.0;
printf(" float values:
");
printf("%.4f %.12f %.16f\n", ot_f, ot_f, ot_f); printf("double values: ");
printf("%.4f %.12f %.16f\n", ot_d,
ot_d, ot_d); printf("FLT_DIG: %d\n",
FLT_DIG); printf("DBL_DIG: %d\n",
DBL_DIG); return 0;
}
Chapter 5 Programming Exercises PE 5--‐1
/* Programming Exercise 5-1 */
#include
<stdio.h> int
main(void)
{ const int
minperhour = 60;
int minutes, hours,
mins;
printf("Enter the number of minutes to convert: "); scanf("%d", &minutes);
while (minutes > 0 )
{ hours = minutes /
minperhour; mins =
minutes % minperhour;
printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): "); scanf("%d", &minutes);
}
printf("Bye\n");
return
0;
}
PE 5--‐3
/* Programming Exercise 5-3 */
#include
<stdio.h> int
main(void)
{ const int
daysperweek = 7;
int days, weeks,
day_rem;
printf("Enter the number of
days: "); scanf("%d", &days);
while (days > 0)
{ weeks = days /
daysperweek; day_rem
= days % daysperweek;
printf("%d days are %d weeks and %d
days.\n", days, weeks, day_rem);
printf("Enter the number of days (0 or less to end): "); scanf("%d", &days);
}
printf("Done!\n");
return 0;
}
PE 5--‐5
/* Programming Exercise 5-5
*/ #include <stdio.h>
int main(void) /* finds sum of first n integers */
{
int count,
sum;
int n;
printf("Enter the upper
limit: "); scanf("%d", &n);
count = 0; sum
= 0; while
(count++ < n) sum =
sum + count; printf("sum
= %d\n", sum); return 0;
}
PE 5--‐7
/* Programming
Exercise 5-7 */
#include <stdio.h>
void
showCube(double x);
int main(void) /* finds cube of entered number */ { doub
le val;
printf("Enter a floating-point
value: "); scanf("%lf", &val);
showCube(val); return 0; }
void showCube(double x)
{
printf("The cube of %e is %e.\n", x, x*x*x );
}
Chapter 6 Programming Exercises
PE 6--‐1
/* pe6-1.c */
/* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */
#include <stdio.h>
#define SIZE 26 int
main( void ) { char
lcase[SIZE]; int i;
for (i = 0; i < SIZE;
i++) lcase[i] = 'a'
+ i; for (i = 0; i <
SIZE; i++)
printf("%c", lcase[i]);
printf("\n");
return 0;
}
PE 6--‐3
/* pe6-3.c */
/* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */
#include
<stdio.h> int
main( void )
{ char let
= 'F'; char
start; char
end;
for (end = let; end >= 'A'; end--)
{
for (start = let; start >= end; start-
-) printf("%c", start);
printf("\n");
}
return
0;
}
PE 6--‐6
/* pe6-6.c */
#include
<stdio.h> int
main( void )
{ int lower, upper,
index; int square,
cube;
printf("Enter starting
integer: "); scanf("%d",
&lower); printf("Enter
ending integer: ");
scanf("%d", &upper);
printf("%5s %10s %15s\n", "num",
"square", "cube"); for (index = lower;
index <= upper; index++)
{ square =
index * index;
cube = index * square;
printf("%5d %10d %15d\n", index, square, cube);
}
return
0;
}
PE 6--‐8
/* pe6-8.c */
#include
<stdio.h> int
main( void )
{ doubl
e n, m;
double
res;
printf("Enter a pair of numbers: ");
while (scanf("%lf %lf", &n, &m) == 2)
{
res = (n - m) / (n * m);
printf("(%.3g - %.3g)/(%.3g*%.3g) = %.5g\n", n, m, n, m, res); printf("Enter next pair (non-numeric to quit): "); }
return 0;
}
PE 6--‐11
/* pe6-11.c */
#include
<stdio.h>
#define
SIZE 8 int
main( void )
{ int
vals[SIZE];
int i;
printf("Please enter %d integers.\n",
SIZE); for (i = 0; i < SIZE; i++)
scanf("%d", &vals[i]);
printf("Here, in reverse order, are the values you entered:\n"); for (i = SIZE - 1; i >= 0; i--)
printf("%d ", vals[i]); printf("\n"); return 0;
}
PE 6--‐13
/* pe6-13.c */
/* This version starts with the 0 power */
#include
<stdio.h>
#define
SIZE 8 int
main( void )
{
int
twopows[SIZE];
int i;
int value = 1; /* 2 to the 0 */
for (i = 0; i < SIZE; i++)
{ twopows[i]
= value; value
*= 2;
}
i =
0;
do
{
printf("%d ",
twopows[i]); i++; } while (i < SIZE);
printf("\n"); return 0;
}
PE 6--‐14
/* pe-14.c */
/* Programming Exercise 6-14 */ #include
<stdio.h>
#define
SIZE 8 int
main(void)
{ double
arr[SIZE];
double
arr_cumul[SIZE];
int i;
printf("Enter %d numbers:\n", SIZE);
for (i = 0; i < SIZE; i++)
{
printf("value #%d: ", i + 1); scanf("%lf", &arr[i]); /* or scanf("%lf", arr + i);
*/
}
arr_cumul[0] = arr[0]; /* set first element */ for (i = 1; i < SIZE; i++)
arr_cumul[i] = arr_cumul[i-1] + arr[i];
for (i = 0; i < SIZE;
i++) printf("%8g ",
arr[i]); printf("\n"); for
(i = 0; i < SIZE; i++)
printf("%8g ", arr_cumul[i]);
printf("\n");
return 0;
}
PE 6--‐16
/* pe6-16.c */
#include <stdio.h>
#define RATE_SIMP 0.10
#define
RATE_COMP
0.05 #define
INIT_AMT 100.0
int main( void )
{
double daphne =
INIT_AMT;
double deidre =
INIT_AMT; int
years = 0;
while (deidre <= daphne)
{ daphne +=
RATE_SIMP * INIT_AMT;
deidre += RATE_COMP *
deidre;
++years;
}
printf("Investment values after %d years:\n",
years); printf("Daphne: $%.2f\n", daphne);
printf("Deidre: $%.2f\n", deidre); return 0;
}
Chapter 7 Programming Exercises
PE 7--‐1
/* Programming
Exercise 7-1 */
#include <stdio.h> int
main(void)
{ char ch;
int sp_ct = 0;
int nl_ct = 0;
int other = 0;
while ((ch =
getchar()) !
= '#')
{
if (ch == ' ')
sp_ct++; else if
(ch == '\n')
nl_ct++; else
other++;
}
printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other); return
0;
}
PE 7--‐3
/* Programming Exercise 7-3 */
#include
<stdio.h> int
main(void)
{ int n;
double sumeven =
0.0; int ct_even
= 0; double
sumodd = 0.0;
int ct_odd = 0;
while (scanf("%d", &n) == 1 && n != 0) {
if (n % 2 == 0)
{
sumeven += n;
++ct_even;
}
else // n % 2 is either 1 or -1
{
sumodd += n;
++ct_odd;
} }
printf("Number of evens: %d",
ct_even); if (ct_even > 0)
printf(" average: %g", sumeven /
ct_even); putchar('\n');
printf("Number of odds: %d",
ct_odd); if (ct_odd > 0)
printf(" average: %g", sumodd /
ct_odd); putchar('\n');
printf("\ndone\n");
return
0;
}
PE 7--‐5
/* Programming Exercise 7-5 */
#include
<stdio.h> int
main(void)
{ char
ch; int
ct1 = 0;
int ct2 = 0;
while ((ch
=
getchar())
!= '#')
{
switch(ch)
{
case '.' : putchar('!');
++ct1; break;
case '!' : putchar('!');
putchar('!');
++ct2; break;
default : putchar(ch);
} }
printf("%d replacement(s) of . with !\n", ct1); printf("%d replacement(s) of ! with !!\n", ct2); return
0;
}
PE 7--‐7
// Programming Exercise 7-7
#include <stdio.h>
#define BASEPAY 10 // $10 per hour
#define BASEHRS 40 // hours at basepay
#define OVERTIME 1.5 // 1.5 time
#define AMT1 300 // 1st rate tier
#define AMT2 150 // 2st rate tier
#define RATE1 0.15 // rate for 1st tier
#define RATE2 0.20 // rate for 2nd
tier #define RATE3 0.25 // rate for
3rd tier int main(void)
{
double
hours;
double gross;
double net;
double taxes;
printf("Enter the number of hours worked this
week: "); scanf("%lf", &hours); if (hours
<= BASEHRS) gross = hours * BASEPAY;
else
gross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1)
* RATE2; else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1
- AMT2) * RATE3; net = gross - taxes;
printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net); return
0;
}
PE 7--‐9
/* Programming Exercise 7-9 */
#include
<stdio.h>
#include
<stdbool.h> int
main(void)
{
int
limit;
int num;
int div;
bool numIsPrime; // use int if stdbool.h not available
printf("Enter a positive integer: ");
while (scanf("%d", &limit) == 1 &&
limit > 0)
{
if (limit > 1)
printf("Here are the prime numbers up through %d\n", limit); else
printf("No primes.\n");
for (num = 2; num <= limit;
num++)
{
for (div = 2, numIsPrime = true; (div * div) <= num; div++) if (num % div == 0) numIsPrime = false; if (numIsPrime)
printf("%d is prime.\n", num);
}
printf("Enter a positive integer (q to quit): ");
}
printf("Done!\n
");
return 0;
}
PE 7--‐11
/* pe7-11.c */
/* Programming Exercise 7-11 */
#include
<stdio.h>
#include
<ctype.h> int
main(void)
{
const double
price_artichokes = 2.05;
const double price_beets =
1.15; const double
price_carrots = 1.09; const
double DISCOUNT_RATE =
0.05; const double under5 =
6.50; const double under20 =
14.00; const double base20 =
14.00; const double extralb =
0.50;
char
ch;
double
lb_artichokes = 0;
double lb_beets = 0;
double lb_carrots =
0; double lb_temp;
double lb_total;
double
cost_artichokes;
double cost_beets;
double
cost_carrots;
double cost_total;
double final_total;
double discount;
double shipping;
printf("Enter a to buy artichokes, b for beets, "); printf("c for carrots, q to quit: "); while ((ch = getchar()) != 'q' && ch != 'Q') { if (ch == '\n')
continue; while
(getchar() != '\n')
continue; ch =
tolower(ch); switch
(ch) {
case 'a' : printf("Enter pounds of artichokes: "); scanf("%lf", &lb_temp); lb_artichokes += lb_temp; break;
case 'b' : printf("Enter pounds of beets:
"); scanf("%lf", &lb_temp); lb_beets += lb_temp; break;
case 'c' : printf("Enter pounds of carrots: "); scanf("%lf",
&lb_temp); lb_carrots +=
lb_temp; break;
default : printf("%c is not a valid choice.\n", ch);
}
printf("Enter a to buy artichokes, b for beets, "); printf("c for carrots, q to quit: ");
}
cost_artichokes = price_artichokes *
lb_artichokes; cost_beets = price_beets *
lb_beets; cost_carrots = price_carrots *
lb_carrots; cost_total = cost_artichokes +
cost_beets + cost_carrots; lb_total =
lb_artichokes + lb_beets + lb_carrots; if
(lb_total <= 0) shipping = 0.0; else if
(lb_total < 5.0) shipping = under5; else if
(lb_total < 20) shipping = under20; else
shipping = base20 + extralb *
lb_total; if (cost_total > 100.0)
discount = DISCOUNT_RATE
* cost_total; else discount =
0.0;
final_total = cost_total + shipping - discount; printf("Your order:\n");
printf("%.2f lbs of artichokes at $%.2f per pound:$ %.2f\n", lb_artichokes,
price_artichokes, cost_artichokes); printf("%.2f
lbs of beets at $%.2f per pound: $%.2f\n",
lb_beets, price_beets, cost_beets); printf("%.2f
lbs of carrots at $%.2f per pound: $%.2f\n",
lb_carrots, price_carrots, cost_carrots);
printf("Total cost of vegetables: $%.2f\n",
cost_total); if (cost_total > 100)
printf("V olume discount: $%.2f\n", discount); printf("Shipping: $%.2f\n", shipping); printf("Total charges:
$%.2f\n", final_total); return 0; }
Chapter 8 Programming Exercises
PE 8--‐1
/* Programming Exercise 8-1 */
#include <stdio.h>
int main(void) { int ch;
int ct = 0; while ((ch
= getchar()) != EOF)
ct++;
printf("%d characters read\n", ct);
return
0;
}
PE 8--‐3
/* Programming Exercise 8-3 */
/* Using ctype.h eliminates need to assume consecutive coding */
#include <stdio.h>
#include
<ctype.h> int
main(void) { int
ch; unsigned
long uct = 0;
unsigned long lct
= 0; unsigned
long oct = 0;
while ((ch =
getchar()) != EOF) if
(isupper(ch)) uct++;
else if (islower(ch))
lct++; else
oct++;
printf("%lu uppercase characters read\n", uct);
printf("%lu lowercase characters read\n", lct);
printf("%lu other characters read\n", oct);
return
0;
}
/* or you could use
if (ch >= 'A' && ch
<= 'Z') uct++;
else if (ch >= 'a' && ch
<= 'z') lct++; else
oct++;
*/
PE 8--‐5
/* Programming Exercise 8-5 */
/* binaryguess.c -- an improved number-guesser */
/* but relies upon truthful, correct responses */
#include <stdio.h>
#include <ctype.h> int
main(void) { int high
= 100; int low = 1;
int guess = (high + low)
/ 2; char response;
printf("Pick an integer from 1 to 100. I will try to guess "); printf("it.\nRespond with a y if my guess is right, with"); printf("\na h if it is high, and with an l if it is low.\n"); printf("Uh...is your number %d?\n", guess);
while ((response = getchar()) != 'y') /* get response */
{
if (response == '\n')
continue;
if (response != 'h' && response != 'l')
{
printf("I don't understand that response. Please enter h for\n"); printf("high, l for low, or y for correct.\n"); continue;
}
if (response == 'h')
high = guess - 1;
else if (response == 'l')
low = guess + 1;
guess = (high + low) /
2;
printf("Well, then, is it %d?\n", guess);
}
printf("I knew I could do it!\n");
return 0;
}
PE 8--‐7
/* Programming Exercise 8-7 */
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
#define BASEPAY1 8.75 // $8.75 per hour
#define BASEPAY2 9.33 // $9.33 per hour
#define BASEPAY3 10.00 // $10.00 per hour
#define BASEPAY4 11.20 // $11.20 per hour
#define BASEHRS 40 // hours at basepay
#define OVERTIME 1.5 // 1.5 time
#define AMT1 300 // 1st rate tier
#define AMT2 150 // 2st rate tier
#define RATE1 0.15 // rate for 1st tier
#define RATE2 0.20 // rate for
2nd tier #define RATE3 0.25 //
rate for 3rd tier int getfirst(void); void
menu(void); int main(void)
{ double
hours;
double
gross;
double net;
double
taxes;
double pay;
char
response;
men
u();
while ((response = getfirst()) != 'q')
{
if (response == '\n') /* skip over newlines */ continue;
response = tolower(response); /* accept A as a, etc. */ switch (response)
{
case 'a': pay = BASEPAY1;
break; case 'b': pay =
BASEPAY2; break; case 'c': pay
= BASEPAY3; break; case 'd':
pay = BASEPAY4; break;
default : printf("Please enter a, b, c, d, or q.\n"); menu();
continue; // go to beginning of loop
}
printf("Enter the number of hours worked this
week: "); scanf("%lf", &hours); if
(hours <= BASEHRS) gross = hours * pay;
else
gross = BASEHRS * pay + (hours - BASEHRS) *
pay * OVERTIME; if (gross <= AMT1) taxes
= gross * RATE1; else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) *
RATE2; else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;
printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net); menu(); }
printf("Done.\n");
return
0;
}
void menu(void)
{
printf("*******************************************
*************"
"*********\n");
printf("Enter the letter corresponding to the desired pay
rate"
" or action:\n");
printf("a) $%4.2f/hr b) $%4.2f/hr\n",
BASEPAY1, BASEPAY2);
printf("c) $%5.2f/hr d) $%5.2f/hr\n",
BASEPAY3, BASEPAY4); printf("q)
quit\n");
printf("*******************************************
*************"
"*********\n");
}
int getfirst(void)
{
int
ch;
ch = getchar();
while (isspace(ch))
ch = getchar();
while (getchar() !=
'\n') continue;
return ch;
}
Chapter 9 Programming Exercises PE 9--‐1
/* Programming Exercise 9-1 */
#include <stdio.h>
double min(double,
double); int main(void)
{
double x, y; printf("Enter
two numbers (q to quit): "); while
(scanf("%lf %lf", &x, &y) == 2)
{ printf("The smaller number
is %f.\n", min(x,y)); printf("Next two values (q to quit): ");
}
printf("Bye!\n");
return
0;
}
double min(double a, double b)
{
return a < b ? a : b;
}
/* alternative
implementation double
min(double a, double b)
{ if (a <
b)
return a;
else
return b;
}
*/
PE 9--‐3
/* Programming Exercise 9-3 */
#include <stdio.h>
void chLineRow(char ch, int c,
int r); int main(void)
{ char ch; int col, row;
printf("Enter a character (# to quit):
"); while ( (ch = getchar()) != '#')
{ if (ch
== '\n')
continue;
printf("Enter number of columns and number of rows: "); if (scanf("%d %d", &col,
&row) != 2) break; chLineRow(ch, col, row);
printf("\nEnter next character (# to quit): ");
}
printf("Bye!\n");
return
0;
}
// start rows and cols at 0
void chLineRow(char ch, int
c, int r)
{
int col, row;
for (row = 0; row < r ; row++)
{
for (col = 0; col < c;
col++) putchar(ch);
putchar('\n');
}
return;
}
PE 9--‐5
/* Programming Exercise 9-5 */
#include <stdio.h>
void larger_of(double *p1, double
*p2); int main(void)
{
double x, y; printf("Enter
two numbers (q to quit): "); while
(scanf("%lf %lf", &x, &y) == 2)
{
larger_of(&x, &y);
printf("The modified values are %f and %f.\n", x, y); printf("Next two values (q to quit): ");
}
printf("Bye!\n");
return
0;
}
void larger_of(double *p1, double *p2)
{ if
(*p1 > *p2)
*p2 = *p1;
else
*p1 = *p2;
}
// alternatively:
/*
void larger_of(double *p1, double *p2)
{
*p1= *p2 = *p1 > *p2 ? *p1 : *p2;
}
*
/
PE 9--‐8
/* Programming Exercise 9-8
*/ #include <stdio.h>
double power(double a, int b); /* ANSI
prototype */ int main(void) { double x, xpow;
int n; printf("Enter a number and the integer power"); printf(" to which\nthe number will
be raised. Enter q"); printf(" to quit.\n");
while (scanf("%lf%d", &x, &n) == 2)
{ xpow = power(x,n); /* function call
*/ printf("%.3g to the power %d is %.5g\n", x,
n, xpow); printf("Enter next pair of numbers
or q to quit.\n");
} printf("Hope you enjoyed this power
trip -- bye!\n"); return 0;
} double power(double a, int b) /* function definition */
{ double
pow = 1;
int i; if
(b == 0)
{ if (a
== 0)
printf("0 to the 0 undefined; using 1 as the value\n"); pow = 1.0; } else if (a == 0) pow = 0.0; else if (b > 0) for(i = 1; i <= b; i++) pow *= a; else /* b < 0 */ pow = 1.0 / power(a, - b);
return pow; /* return the value of pow */
}
PE 9--‐10
/* Programming Exercise 9-10 */
#include <stdio.h> void
to_base_n(int x, int base); int
main(void) { int number; int b;
int count; printf("Enter an
integer (q to quit):\n"); while
(scanf("%d", &number) == 1)
{ printf("Enter number base
(2-10): "); while ((count =
scanf("%d", &b))== 1
&& (b < 2 || b > 10))
{
printf("base should be in the range 2-10: ");
} if
(count != 1)
break;
printf("Base %d equivalent:
", b); to_base_n(number, b);
putchar('\n');
printf("Enter an integer (q to quit):\n");
}
printf("Done.\
n"); return 0;
}
void to_base_n(int x, int base) /* recursive function */ { int r; r = x % base;
if (x >= base)
to_base_n(x / base,
base); putchar('0' + r);
return;
}
Chapter 10 Programming Exercises
PE 10--‐1
/* Programming Exercise 10-1 */
#include <stdio.h>
#define MONTHS 12 // number of
months in a year #define YRS 5 //
number of years of data int main(void)
{
// initializing rainfall data for 2010 - 2014
const float rain[YRS][MONTHS] = {
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
}; int year,
month; float
subtot, total;
printf(" YEAR RAINFALL
(inches)\n"); for (year = 0, total = 0;
year < YRS; year++)
{ /* for each year, sum rainfall for each
month */ for (month = 0, subtot = 0; month < MONTHS; month++) subtot += *(*(rain +
year) + month); printf("%5d %15.1f\n", 2010 + year, subtot);
total += subtot; /* total for all years */
}
printf("\nThe yearly average is %.1f inches.\n\n",
total/YRS); printf("MONTHLY A VERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct "); printf(" Nov Dec\n");
for (month = 0; month < MONTHS; month++)
{ /* for each month, sum rainfall over
years */ for (year = 0, subtot =0; year < YRS;
year++) subtot += *(*(rain + year) + month); printf("%4.1f ", subtot/YRS);
}
printf("\n");
return 0;
}
PE 10--‐3
/* Programming Exercise 10-3 */
#include <stdio.h>
#define LEN 10
int max_arr(const int ar[],
int n); void show_arr(const
int ar[], int n);
int main(void)
{
int orig[LEN] =
{1,2,3,4,12,6,7,8,9,10}; int max;
show_arr(orig, LEN);
max = max_arr(orig, LEN);
printf("%d = largest value\n",
max);
return
0;
}
int max_arr(const int ar[], int n)
{ int i;
int max =
ar[0];
/* don't use 0 as initial max value -- fails if all array values are neg */ for (i = 1; i < n;
i++) if (max <
ar[i]) max =
ar[i]; return max;
}
void show_arr(const int ar[], int n)
{ int i; for (i
= 0; i < n; i++)
printf("%d ", ar[i]);
putchar('\n');
}。

相关文档
最新文档