c++ primer plus(第六版)第二至第六章课后编程练习全部答案

合集下载

C_Primer_Plus第6版编程练习答案(已下载)

C_Primer_Plus第6版编程练习答案(已下载)

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("Gustav Mahler\n");printf("Gustav\nMahler\n");printf("Gustav "); printf("Mahler\n");return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include <stdio.h> intmain(void){ int ageyears; /* age in years */ intagedays; /* 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> voidjolly(void); voiddeny(void); int main(void){ jolly();jolly(); jolly();deny(); return0; }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> intmain(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> voidone_three(void); voidtwo(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 ExercisesPE 3-­‐2/* Programming Exercise 3-2 */#include <stdio.h> intmain(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> intmain(void){ float num;printf("Enter a floating-point value: "); scanf("%f", &num);printf("fixed-point notation: %f\n", num);printf("exponential notation: %e\n", num); printf("pnotation: %a\n", num); return 0;}PE 3-­‐6/* Programming Exercise 3-6 */#include <stdio.h> intmain(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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */#include <stdio.h> intmain(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> intmain(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; doubleot_d = 1.0 / 3.0; printf(" floatvalues: ");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 ExercisesPE 5-­‐1/* Programming Exercise 5-1 */#include <stdio.h> intmain(void){ const int minperhour = 60; intminutes, 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> intmain(void){ const int daysperweek = 7; intdays, 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> voidshowCube(double x);int main(void) /* finds cube of entered number */{ double 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 ExercisesPE 6-­‐1/* pe6-1.c *//* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */#include <stdio.h> #define SIZE 26 intmain( void ) { char lcase[SIZE]; inti; 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> intmain( 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; intsquare, 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 ){ double 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 */#define SIZE 8 intmain( void ){ int vals[SIZE]; inti;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 intmain( 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 */#define SIZE 8 intmain(void){ double arr[SIZE]; doublearr_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 #defineINIT_AMT 100.0 int main( void ){double daphne = INIT_AMT;double deidre = INIT_AMT; intyears = 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 ExercisesPE 7-­‐1/* Programming Exercise 7-1 */#include <stdio.h> int main(void){ char ch; intsp_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> intmain(void){ int n; double sumeven =0.0; int ct_even = 0;double sumodd = 0.0; intct_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> intmain(void){ char ch; intct1 = 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 RATE30.25 // rate for 3rd tier int main(void){double hours; doublegross; double net;double taxes;printf("Enter the number of hours worked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS) gross = hours * BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross <=AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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; intnum; int div;bool numIsPrime; // use int if stdbool.h not availableprintf("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); elseprintf("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; constdouble price_beets = 1.15; const doubleprice_carrots = 1.09; const doubleDISCOUNT_RATE = 0.05; const double under5 =6.50; const double under20 = 14.00; constdouble base20 = 14.00; const double extralb =0.50;char ch;double lb_artichokes = 0;double lb_beets = 0; doublelb_carrots = 0; double lb_temp;double lb_total;double cost_artichokes;double cost_beets; doublecost_carrots; double cost_total;double final_total; doublediscount; double shipping;printf("Enter a to buy artichokes, b for beets, "); printf("c forcarrots, 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; elseshipping = base20 + extralb * lb_total; if (cost_total >100.0)discount = DISCOUNT_RATE * cost_total; elsediscount = 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("Volume discount: $%.2f\n", discount);printf("Shipping: $%.2f\n", shipping); printf("Total charges:$%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 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) { intch; 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++; elseoct++;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; intlow = 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 ifmy 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 RATE30.25 // rate for 3rd tier int getfirst(void); void menu(void);int main(void){ double hours;double gross;double net; doubletaxes; double pay;char response;menu();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; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME; if (gross <=AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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 ExercisesPE 9-­‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double, double); intmain(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 doublemin(double a, double b){ if (a < b)return a; elsereturn 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(charch, 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 tothe power %d is %.5g\n", x, n, xpow); printf("Enter next pair of numbersor 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> voidto_base_n(int x, int base); int main(void) { int number;int b; int count; printf("Enter an integer (q toquit):\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 ExercisesPE 10-­‐1/* Programming Exercise 10-1 */#include <stdio.h>#define MONTHS 12 // number of months in a year #defineYRS 5 // number of years of data int main(void){// initializing rainfall data for 2010 - 2014 const floatrain[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 AVERAGES:\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 10int max_arr(const int ar[], int n); voidshow_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');}PE 10-­‐5/* Programming Exercise 10-5 */#include <stdio.h>#define LEN 10double max_diff(const double ar[], int n); void show_arr(const double ar[], int n);int main(void){double orig[LEN] = {1.1,2,3,4,12,61.3,7,8,9,10}; double max; show_arr(orig, LEN); max =max_diff(orig, LEN);printf("%g = maximum difference\n", max);return 0;}double max_diff(const double ar[], int n){ int i; double max =ar[0]; double min = ar[0];for (i = 1; i < n; i++){if (max < ar[i]) max =ar[i]; else if (min > ar[i])min = ar[i];}return max - min;}void show_arr(const double ar[], int n){ int i; for (i = 0; i < n; i++)printf("%g ", ar[i]); putchar('\n');}PE 10-­‐8/* Programming Exercise 10-8 */#include <stdio.h>#define LEN1 7#define LEN2 3。

c++_primer_plus(第六版)第二至第六章课后编程练习全部答案

c++_primer_plus(第六版)第二至第六章课后编程练习全部答案

第二章:开始学习C++//ex2.1--display your name and address#include<iostream>int main(void){using namespace std;cout<<"My name is liao chunguang and I live in hunan chenzhou.\n”;}//ex2.2--convert the furlong units to yard uints-把浪单位换位码单位#include<iostream>double fur2yd(double);int main(){using namespace std;cout<<"enter the distance measured by furlong units:";double fur;cin>>fur;cout<<"convert the furlong to yard"<<endl;double yd;yd=fur2yd(fur);cout<<fur<<" furlong is "<<yd<<" yard"<<endl;return 0;}double fur2yd(double t){return 220*t;}//ex2.3-每个函数都被调用两次#include<iostream>void mice();void see();using namespace std;int main(){mice();mice();see();see();return 0;}void mice(){cout<<"three blind mice"<<endl;}void see(){cout<<"see how they run"<<endl;}//ex2.4#include<iostream>int main(){using namespace std;cout<<"Enter your age:";int age;cin>>age;int month;month=age*12;cout<<age<<" years is "<<month<<" months"<<endl;return 0;}//ex2.5---convert the Celsius valve to Fahrenheit value#include<iostream>double C2F(double);int main(){using namespace std;cout<<"please enter a Celsius value:";double C;cin>>C;double F;F=C2F(C);cout<<C<<" degrees Celsius is "<<F<<" degrees Fahrenheit."<<endl; return 0;}double C2F(double t){return 1.8*t+32;}//ex2.6---convert the light years valve to astronomical units--把光年转换为天文单位#include<iostream>double convert(double);//函数原型int main(){using namespace std;cout<<"Enter the number of light years:";double light_years;cin>>light_years;double astro_units;astro_units=convert(light_years);cout<<light_years<<" light_years = "<<astro_units<<" astronomical units."<<endl; return 0;}double convert(double t){return 63240*t;//1 光年=63240 天文单位}//ex2.7--显示用户输入的小时数和分钟数#include<iostream>void show();main(){using namespace std;show();return 0;}void show(){using namespace std;int h,m;cout<<"enter the number of hours:";cin>>h;cout<<"enter the number of minutes:";cin>>m;cout<<"Time:"<<h<<":"<<m<<endl;}第三章:处理数据//ex3.1—将身高用英尺(feet)和英寸(inch)表示#include<iostream>const int inch_per_feet=12;// const常量--1feet=12inches--1英尺=12英寸int main(){using namespace std;cout<<"please enter your height in inches:___\b\b\b";// \b表示为退格字符int ht_inch;cin>>ht_inch;int ht_feet=ht_inch/inch_per_feet;//取商int rm_inch=ht_inch%inch_per_feet;//取余cout<<"your height is "<<ht_feet<<" feet,and "<<rm_inch<<" inches\n";return 0;}//ex3.2--计算相应的body mass index(体重指数)#include<iostream>const int inch_per_feet=12;const double meter_per_inch=0.0254;const double pound_per_kilogram=2.2;int main(){using namespace std;cout<<"Please enter your height:"<<endl;cout<<"First,enter your height of feet part(输入你身高的英尺部分):_\b";int ht_feet;cin>>ht_feet;cout<<"Second,enter your height of inch part(输入你身高的英寸部分):_\b";int ht_inch;cin>>ht_inch;cout<<"Now,please enter your weight in pound:___\b\b\b";double wt_pound;cin>>wt_pound;int inch;inch=ht_feet*inch_per_feet+ht_inch;double ht_meter;ht_meter=inch*meter_per_inch;double wt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram;cout<<endl;cout<<"Your pensonal body information as follows:"<<endl;cout<<"身高:"<<inch<<"(英尺inch)\n"<<"身高:"<<ht_meter<<"(米meter)\n"<<"体重:"<<wt_kilogram<<"(千克kilogram)\n";double BMI;BMI=wt_kilogram/(ht_meter*ht_meter);cout<<"your Body Mass Index(体重指数) is "<<BMI<<endl;return 0;}//ex3.3 以度,分,秒输入,以度输出#include<iostream>const int minutes_per_degree=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter a latitude in degrees,minutes,and seconds:\n";cout<<"First,enter the degrees:";int degree;cin>>degree;cout<<"Next,enter the minutes of arc:";int minute;cin>>minute;cout<<"Fianlly,enter the seconds of arc:";int second;cin>>second;double show_in_degree;show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/mi nutes_per_degree/seconds_per_minute;cout<<degree<<" degrees,"<<minute<<" minutes,"<<second<<"seconds ="<<show_in_degree<<" degrees\n";return 0;}//ex3.4#include<iostream>const int hours_per_day=24;const int minutes_per_hour=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter the number of seconds:";long seconds;cin>>seconds;int Day,Hour,Minute,Second;Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day;Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day;Minute=seconds/seconds_per_minute%minutes_per_hour;Second=seconds%seconds_per_minute;cout<<seconds<<"seconds = "<<Day<<" days,"<<Hour<<" hours,"<<Minute<<" minutes,"<<Second<<" seconds\n";return 0;}//ex3.5#include<iostream>int main(){using namespace std;cout<<"Enter the world population:";long long world_population;cin>>world_population;cout<<"Enter the population of the US:";long long US_population;cin>>US_population;double percentage;percentage=(double)US_population/world_population*100;cout<<"The population of the US is "<<percentage<<"% of the world population.\n";return 0;}//ex3.6 汽车耗油量-美国(mpg)or欧洲风格(L/100Km)#include<iostream>int main(){using namespace std;cout<<"Enter the miles of distance you have driven:";double m_distance;cin>>m_distance;cout<<"Enter the gallons of gasoline you have used:";double m_gasoline;cin>>m_gasoline;cout<<"Your car can run "<<m_distance/m_gasoline<<" miles per gallon\n";cout<<"Computing by European style:\n";cout<<"Enter the distance in kilometers:";double k_distance;cin>>k_distance;cout<<"Enter the petrol in liters:";double k_gasoline;cin>>k_gasoline;cout<<"In European style:"<<"your can used "<<100*k_gasoline/k_distance<<" liters of petrol per 100 kilometers\n";return 0;}//ex3.7 automobile gasoline consumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"European style(liters per 100 kilometers):";double Euro_style;cin>>Euro_style;cout<<"Converts to U.S. style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<62.14*3.875/Euro_style<<" mpg\n";return 0;}// Note that 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters.//Thus, 19 mpg is about 12.4 L/100Km, and 27 mpg is about 8.7 L/100Km.Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):12.4Converts to U.S. style(miles per gallon):12.4 L/100Km = 19.4187 mpgPress any key to continue// ex3.7 automobile gasoline consumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"U.S. style(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< 62.14*3.875/US_style<<"L/100Km\n";return 0;}// Enter the automobile gasoline consumption figure inU.S. style(miles per gallon):19Converts to European style(miles per gallon):19 mpg = 12.6733L/100KmPress any key to continue第四章复合类型//ex4.1 display the information of student#include<iostream>const int Asize=20;using namespace std;struct student//定义结构描述{char firstname[Asize];char lastname[Asize];char grade;int age;};void display(student);//函数原型放在结构描述后int main(){cout<<"what is your first name?"<<endl;student lcg;//创建结构变量(结构数据对象)cin.getline(lcg.firstname,Asize);cout<<"what is your last name?"<<endl;cin.getline(stname,Asize);cout<<"what letter grade do you deserve?"<<endl;cin>>lcg.grade;cout<<"what is your age?"<<endl;cin>>lcg.age;display(lcg);return 0;}void display(student name){cout<<"Name: "<<name.firstname<<","<<stname<<endl;cout<<"Grade:"<<char(name.grade+1)<<endl;cout<<"Age:"<<name.age<<endl;}//ex4.2 use the string-class instead of char-array#include<iostream>#include<string>int main(){using namespace std;string name,dessert;cout<<"Enter your name: \n";getline(cin,name);cout<<"Enter your favorite dessert: \n";getline(cin,dessert);cout<<"I have some delicious "<<dessert;cout<<" for you, "<<name<<".\n";return 0;}//有时候会遇到需要按下两次回车键才能正确的显示结果,这是vc++6.0的一个BUG,更改如下:else if (_Tr::eq((_E)_C, _D)){_Chg = true;_I.rdbuf()->sbumpc();//修改后的break; }ex4.3 输入其名和姓,并组合显示#include<iostream>#include<cstring>const int Asize=20;int main(){using namespace std;char fname[Asize];char lname[Asize];char fullname[2*Asize+1];cout<<"Enter your first name:";//输入名字,存储在fname[]数组中cin.getline(fname,Asize);cout<<"Enter your last name:";//输入姓,存储在lname[]数组中cin.getline(lname,Asize);strncpy(fullname,lname,Asize);//把姓lname复制到fullname空数组中strcat(fullname,", ");//把“,”附加到上述fullname尾部strncat(fullname,fname,Asize);//把fname名字附加到上述fullname尾部fullname[2*Asize]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here's the information in a single string:"<<fullname<<endl;//显示组合结果return 0;}//ex4.4 使用string对象存储、显示组合结果#include<iostream>#include<string>int main(){using namespace std;string fname,lname,attach,fullname;cout<<"Enter your first name:";getline(cin,fname);//note:将一行输入读取到string类对象中使用的是getline(cin,str)//它没有使用句点表示法,所以不是类方法cout<<"Enter your last name:";getline(cin,lname);attach=", ";fullname=lname+attach+fname;cout<<"Here's the information in a single string:"<<fullname<<endl;return 0;}//ex4.5 declare a struct and initialize it 声明结果并创建一个变量#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack={"Mocha Munch",2.3,350};cout<<"Here's the information of snack:\n";cout<<"brand:"<<snack.brand<<endl;cout<<"weight:"<<snack.weight<<endl;cout<<"calory:"<<snack.calory<<endl;return 0;}//ex4.6 结构数组的声明及初始化#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack[3]={{"Mocha Munch",2.3,350},{"XuFuJi",1.1,300},{"Alps",0.4,100}};for(int i=0;i<3;i++)//利用for循环来显示snack变量的内容{cout<<snack[i].brand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}//ex4.7 pizza披萨饼#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza pie;//创建一个名为pie的结构变量cout<<"What's the name of pizza company:";cin.getline(pany,Size);cout<<"What's the diameter of pizza:";cin>>pie.diameter;cout<<"What's the weight of pizza:";cin>>pie.weight;cout<<"company:"<<pany<<endl;cout<<"diameter:"<<pie.diameter<<"inches"<<endl;cout<<"weight:"<<pie.weight<<"ounches"<<endl;return 0;}//ex4.8 pizza pie 披萨饼使用new创建动态结构#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza *pie=new pizza;//使用new创建动态结构cout<<"What's the diameter of pizza:";cin>>pie->diameter;cin.get();//读取下一个字符cout<<"What's the name of pizza company:";cin.get(pie->company,Size);cout<<"What's the weight of pizza:";cin>>pie->weight;cout<<"diameter:"<<pie->diameter<<" inches"<<endl;cout<<"company:"<<pie->company<<endl;cout<<"weight:"<<pie->weight<<" ounches"<<endl;delete pie;//delete释放内存return 0;}//ex.4.9 使用new动态分配数组—方法1#include<iostream>#include<string>using namespace std;struct CandyBar{string brand;double weight;int calory;};int main(){CandyBar *snack= new CandyBar[3];snack[0].brand="A";//单个初始化由new动态分配的内存snack[0].weight=1.1;snack[0].calory=200;snack[1].brand="B";snack[1].weight=2.2;snack[1].calory=400;snack[2].brand="C";snack[2].weight=4.4;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}//ex.4.10 数组—方法1#include <iostream>int main(){using namespace std;const int Size = 3;int success[Size];cout<<"Enter your success of the three times 40 meters running:\n";cin >> success[0]>>success[1]>>success[2];cout<<"success1:"<<success[0]<<endl;cout<<"success2:"<<success[1]<<endl;cout<<"success3:"<<success[2]<<endl;double average=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<endl;return 0;}//ex.4.10 array—方法2#include <iostream>#include <array>int main(){using namespace std;array<double,4>ad={0};cout<<"Enter your success of the three times 40 meters running:\n";cin >> ad[0]>>ad[1]>>ad[2];cout<<"success1:"<<ad[0]<<endl;cout<<"success2:"<<ad[1]<<endl;cout<<"success3:"<<ad[2]<<endl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<endl;return 0;}第五章循环和关系表达式//ex.5.1#include <iostream>int main(){using namespace std;cout<<"Please enter two integers: ";int num1,num2;cin>>num1>>num2;int sum=0;for(int temp=num1;temp<=num2;++temp)//or temp++sum+=temp;cout<<"The sum from "<<num1<<" to "<<num2<<" is "<<sum<<endl; return 0;}//ex.5.2#include <iostream>#include<array>int main(){using namespace std;array<long double,101>ad={0};ad[1]=ad[0]=1L;for(int i=2;i<101;i++)ad[i]=i*ad[i-1];for(int i=0;i<101;i++)cout<<i<<"! = "<<ad[i]<<endl;return 0;}//ex.5.3#include <iostream>int main(){using namespace std;cout<<"Please enter an integer: ";int sum=0,num;while((cin>>num)&&num!=0){sum+=num;cout<<"So far, the sum is "<<sum<<endl;cout<<"Please enter an integer: ";}return 0;}//ex.5.4#include <iostream>int main(){using namespace std;double sum1,sum2;sum1=sum2=0.0;int year=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}cout<<"经过"<<year<<"年后,Cleo的投资价值才能超过Daphne的投资价值。

C++primer plus第六版第六章编程题答案

C++primer plus第六版第六章编程题答案

第6章;1、#include<iostream>#include<cctype>using namespace std;int main(){char ch;while((ch=cin.get())!='@'){if( isdigit(ch) );else if(tolower(ch)==ch)cout<<(char)toupper(ch);elsecout<<(char)tolower(ch);}return 0;}2、#include<iostream>//#include<math.h>//#include<string>#include<cctype>using namespace std;int main(){double dona[10];int dt=0;cin>>dona[dt];if(!cin){cout<<"Incorrect number!";return 0;}while((dt<9)&&cin){++dt;cin>>dona[dt];}double average,sum;sum=0.0;average=0.0;int t_aver=0;if(dt==9){for(int i=0;i<=dt;++i){sum+=dona[i];}average=sum/dt;for(int i=0;i<=dt;++i){if(dona[i]>average)t_aver++;}cout<<"you input "<<dt+1<<" numbers\n";}else{for(int i=0;i<dt;++i){sum+=dona[i];}average=sum/dt;for(int i=0;i<dt;++i){if(dona[i]>average)t_aver++;}cout<<"you input "<<dt<<" numbers\n";}cin.clear();cout<<"average= "<<average;cout<<". It has "<<t_aver<<" numbers bigger than average.\n";return 0;}3、#include<iostream>#include<cctype>using namespace std;enum menu{c,p,t,g};int main(){char in;cout<<"Please enter oen of the following choices:\n""c:weret p:hyuijj\n"<<"t:gghh f:hhnjsjs\n";do{cout<<"Enter c,p,t or g: ";cin>>in;}while(in!='c' && in!='p' && in!='t' && in!='g');switch(in){case 'c': cout<<"hahahaha\n";break;case 'p': cout<<(char)toupper(in)<<endl;break;case 't': cout<<"hehehehehheh\n";break;case 'g': cout<<(int)in<<endl;break;default: cout<<"something wrong!";}return 0;}4、#include<iostream>#include<string>#include<cctype>using namespace std;struct bop{char fullname[20];char titlename[20];char bopname[20];int perference;};int main(){const int count=2;int i=0;bop t_b[count]={{"wimp mac","wp","Celia La",1},{"panpan","th","Pat hand",0}};cout<<"a. name; b:title; \n""c: bopname; d:perference;\n""q:quit\n";char in;cout<<"Enter your choice: ";cin>>in;while(in!='q'){switch( in){case 'a':{for(i=0;i<count;i++)cout<< t_b[i].fullname<<endl;break;}case 'b':{for(i=0;i<count;i++)cout<< t_b[i].titlename<<endl;break;}case 'c':{for(i=0;i<count;i++)cout<< t_b[i].bopname<<endl;break;}case 'd':{for(i=0;i<count;i++){switch (t_b[i].perference){case 0: cout<< t_b[i].fullname<<endl;break;case 1: cout<< t_b[i].titlename<<endl;break;case 2: cout<< t_b[i].bopname<<endl;break;default:cout<<"input wrong!";}}break;}default: cout<<"incorrect enter";}cout<<"\nEnter your choice: ";cin>>in;}cout<<"Bye.";return 0;}8、#include<iostream>//#include<math.h>#include<string>#include<cctype>#include<fstream>using namespace std;int main(){/*//产ú生Θ?文?件tofstream foid;char context[20]={'0'};int i=0;foid.open("tect field");context[i]=cin.get();while((char)context[i]!='@'&&i<19){foid<<context[i];++i;context[i]=cin.get();}*///读á取?文?件tifstream fd;char fd_cot[20]={'0'};fd.open("tect field");if(!fd.is_open()){cout<<"Could not open the file\n";exit;}int num_let=0;int i=0;fd.get(fd_cot[i]);while(fd.good()){if(!isspace(fd_cot[i]))++num_let;++i;fd.get(fd_cot[i]);}cout<<"This file has "<<num_let<<" letters\n";fd.close();}。

C Primer Plus第6版编程练习问题详解(已下载)

C Primer Plus第6版编程练习问题详解(已下载)

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("Gustav Mahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n"); return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include <stdio.h> intmain(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> voidjolly(void); voiddeny(void); intmain(void){ jolly();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> intmain(void){ int toes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes); printf("toessquared = %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> voidone_three(void); voidtwo(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 ExercisesPE 3-­‐2/* Programming Exercise 3-2 */#include <stdio.h> intmain(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> intmain(void){ float 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> intmain(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ floatmass_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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */#include <stdio.h> intmain(void){ char fname[40];char lname[40];printf("Enter your first name: ");scanf("%s", fname); printf("Enter yourlast name: "); scanf("%s", lname);printf("%s, %s\n", lname, fname); return0;}PE 4-­‐4/* Programming Exercise 4-4 */#include <stdio.h> intmain(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);return0;}PE 4-­‐7/* Programming Exercise 4-7 */#include <stdio.h>#include <float.h> intmain(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 ExercisesPE 5-­‐1/* Programming Exercise 5-1 */#include <stdio.h> intmain(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");return0;}PE 5-­‐3/* Programming Exercise 5-3 */#include <stdio.h> intmain(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"); return0;}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> voidshowCube(double x);int main(void) /* finds cube of entered number */{ double 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 ExercisesPE 6-­‐1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h> #define SIZE 26int main( void ) { charlcase[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> intmain( void ){ char let = 'F';char start; charend;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 endinginteger: "); 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 ){ double 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 intmain( 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 intmain( void ){int twopows[SIZE]; inti;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 intmain(void){ double arr[SIZE];double arr_cumul[SIZE]; inti;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 #defineINIT_AMT 100.0 int main( void ){double daphne = INIT_AMT;double deidre = INIT_AMT; intyears = 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 ExercisesPE 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> intmain(void){ int n; doublesumeven = 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> intmain(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 RATE30.25 // rate for 3rd tier int main(void){double hours;double gross; doublenet; double taxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours); if (hours <= BASEHRS) gross = hours* BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross<= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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; intdiv;bool numIsPrime; // use int if stdbool.h not availableprintf("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); elseprintf("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> intmain(void){const double price_artichokes = 2.05;const double price_beets = 1.15; constdouble price_carrots = 1.09; const doubleDISCOUNT_RATE = 0.05; const double under5 =6.50; const double under20 = 14.00; constdouble base20 = 14.00; const double extralb= 0.50;char ch;double lb_artichokes = 0;double lb_beets = 0; doublelb_carrots = 0; double lb_temp;double lb_total;double cost_artichokes;double cost_beets; doublecost_carrots; doublecost_total; doublefinal_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 forcarrots, 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; elseshipping = base20 + extralb * lb_total; if(cost_total > 100.0)discount = DISCOUNT_RATE * cost_total; elsediscount = 0.0;final_total = cost_total + shipping - discount; printf("Yourorder:\n");printf("%.2f lbs of artichokes at $%.2f per pound:$ %.2f\n",lb_artichokes, price_artichokes, cost_artichokes); printf("%.2f lbs ofbeets 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("Volume discount: $%.2f\n", discount);printf("Shipping: $%.2f\n", shipping); printf("Totalcharges: $%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 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);return0;}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 longuct = 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);return0;}/* 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 #defineRATE3 0.25 // rate for 3rd tier intgetfirst(void); void menu(void); int main(void){ double hours;double gross;double net;double taxes;double pay; charresponse;menu();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; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME; if(gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 +AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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 ExercisesPE 9-­‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double, double); intmain(void){double x, y; printf("Enter two numbers (qto 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 doublemin(double a, double b){ if (a < b)return a; elsereturn b;}*/PE 9-­‐3/* Programming Exercise 9-3 */#include <stdio.h>void chLineRow(char ch, int c, int r); intmain(void){ char ch; int col, row; printf("Entera 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 voidchLineRow(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); intmain(void){double x, y; printf("Enter two numbers (qto 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 theinteger 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 ExercisesPE 10-­‐1/* Programming Exercise 10-1 */#include <stdio.h>#define MONTHS 12 // number of months in a year #defineYRS 5 // number of years of data int main(void){// initializing rainfall data for 2010 - 2014 const floatrain[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 AVERAGES:\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 10int max_arr(const int ar[], int n); voidshow_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);return0;}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');}PE 10-­‐5/* Programming Exercise 10-5 */#include <stdio.h>#define LEN 10double max_diff(const double ar[], int n); voidshow_arr(const double ar[], int n);int main(void){double orig[LEN] = {1.1,2,3,4,12,61.3,7,8,9,10}; double max;show_arr(orig, LEN);max = max_diff(orig, LEN);printf("%g = maximum difference\n", max);return0;}double max_diff(const double ar[], int n){ int i; double max= ar[0]; double min =ar[0];for (i = 1; i < n; i++){if (max < ar[i])max = ar[i]; else if (min >ar[i]) min = ar[i];}return max - min;}void show_arr(const double ar[], int n)。

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

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

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include<stdio.h>intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n");return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include<stdio.h>intmain(void){ int ageyears;/* age in years */int agedays; /*age in days *//* large ages may requirethe 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>voidjolly(void);void de n y( v oi d ); in t m ai n (v oi d) {j o l l y ( ); jo lly ( ) ; jo lly ( ) ; d e n y ( ) ; r eturn;}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>intmain(void){inttoes;toes=1;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2* toes); printf("toes squared= %d\n", toes * toes); return0;}/* or create two more variables, set them to 2 * toes and toes * toes */PE 2-­‐8/* Programming Exercise 2-8 */#include<stdio.h>voidone_three(void);voidtwo(void);intmain(void){printf("startingnow:\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>intmain(void){intascii;printf("Enter an ASCIIcode: "); 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>intmain(void){floatnum;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>intmain(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 ofwater: "); 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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */#include <st dio.h> int mai n(v oid) {charfnam e[40 ]; charlname[4];printf("Enteryour first name: ");scanf("%s",fname);printf("Enter yourlast name: ");scanf("%s",lname);printf("%s, %s\n",lname, fname);return 0;}PE 4-­‐4/* Programming Exercise 4-4 */ #include <st dio.h> int mai n(v oid) {floatheight; charname[4];printf("Enter yourheight in inches: ");scanf("%f", &height);printf("Enter yourname: "); scanf("%s",name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return;}PE 4-­‐7/* Programming Exercise 4-7 */ #include<stdio.h>#include<float.h>intmain(void){ floatot_f =1.0 / 3.0;doubleot_d =1.0 / 3.0;printf("floatvalues: ");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>intmain(void){ constintminperhour = 60;int minutes,hours,mins;printf("Enter the number ofminutes 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;}PE 5-­‐3/* Programming Exercise 5-3 */ #include<stdio.h>intmain(void){ constintdaysperweek = 7;int days,weeks,day_rem;printf("Enter thenumber of days: ");scanf("%d", &days);while (days > 0){ weeks= days /daysperweek;day_rem =days %daysperweek;printf("%d days are %d weeksand %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/* ProgrammingExercise 5-5 */#include<stdio.h>int main(void) /* finds sum of first n integers */ {intcount,sum;intn;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/*ProgrammingExercise 5-7 */#include<stdio.h>voidshowCube (double x);int main(void) /* finds cube of entered number */{doubleval;printf("Enter afloating-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>#defineSIZE 26 intmain( void ){ charlcase[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>intmain(void ){charlet='F';charstart;charend;for (end = let; end >= 'A'; end--) {for (start = let;start >= end; start--)printf("%c", start); printf("\n");}return;}PE 6-­‐6/*pe6-6.c*/#include<stdio.h>intmain(void ){ intlower,upper,index;intsquare,cube;printf("Enterstarting integer: ");scanf("%d",&lower);printf("Enterending 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;}PE 6-­‐8 /*pe6-8.c*/#include<stdio.h>intmain(void ){doublen,m;doubleres;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 */# i n c l u d e< s t d i o . h ># d e f i n eS I Z E8i n tm a i n (v o i d) {intvals[SIZE];inti;printf("Please enter %dintegers.\n", SIZE); for(i = 0; i < SIZE; i++)scanf("%d", &vals[i]);printf("Here, in reverse order, are the valuesyou 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>#defi n eS I Z E8i n tm a i n (v o i d){inttwopows[SIZE];int i;int value = 1; /* 2 to the 0 */ for (i = 0; i < SIZE; i++){ twopows[i] =value;value*= 2;}i=;do{printf("%d ",twopows[i]);i++; } while(i < SIZE);printf("\n"); return 0;}PE 6-­‐14/* pe-14.c *//* Programming Exercise 6-14 */ #include< s t d i o . h ># d e f i n eS I Z E8intmain(void){ doublearr[SIZE];doublearr_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]); /* orscanf("%lf", arr +i); */}arr_cumul[0] = arr[0]; /* setfirst 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 #defineRATE_COMP 0.05#defineINIT_AMT100.0intmain( void ){doubledaphne =INIT_AMT;doubledeidre =INIT_AMT; intyears = 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/*ProgrammingExercise 7-1 */#include<stdio.h>intmain(void){charch;int sp _ct =0 ; int nl_ct =0 ; int other=; while((ch=getchar())!='#'){if(ch == ' ')sp_ct++;else if (ch== '\n')nl_ct++;elseother++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other);return;}PE 7-­‐3/* Programming Exercise 7-3 */ #include<stdio.h>intmain(void){ int n;doublesumeven = 0.0;intct_eve。

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

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

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include<stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n");return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include<stdio.h> intmain(void){ int ageyears; /* age inyears */ 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>voidjolly(void);voiddeny(void);intmain(void){ jolly();jolly();jolly();deny();return0; }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> intmain(void){ inttoes;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>voidone_three(void); voidtwo(void); intmain(void){printf("startingnow:\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 ExercisesPE 3-­‐2/* Programming Exercise 3-2 */#include<stdio.h> intmain(void){intascii;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> intmain(void)t num;printf("Enter a floating-point value: ");scanf("%f", &num);printf("fixed-pointnotation: %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> intmain(void){float mass_mol = 3.0e-23; /* mass of watermolecule 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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */<stdio.h> intmain(void){ charfname[40];charlname[40];printf("Enter your firstname: "); scanf("%s",fname); printf("Enteryour last name: ");scanf("%s", lname);printf("%s, %s\n", lname,fname); return 0;}PE 4-­‐4/* Programming Exercise 4-4 */#include<stdio.h> intmain(void){ floatheight;charname[40];printf("Enter your height ininches: "); scanf("%f", &height);printf("Enter your name: ");scanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return0;}PE 4-­‐7/* Programming Exercise 4-7 */#include<stdio.h>#include<float.h> intmain(void){ float ot_f = 1.0/ 3.0; doubleot_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> intmain(void){ const intminperhour = 60;int minutes, hours,mins;printf("Enter the number of minutes toconvert: "); 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");return0;}PE 5-­‐3/* Programming Exercise 5-3 */#include<stdio.h> intmain(void){ const intdaysperweek = 7;int days, weeks,day_rem;printf("Enter the number ofdays: "); scanf("%d", &days);while (days > 0){ weeks = days /daysperweek;day_rem = days %daysperweek;printf("%d days are %d weeks and %ddays.\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 upperlimit: "); scanf("%d", &n);count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum = %d\n", sum);return 0;}PE 5-­‐7/* ProgrammingExercise 5-7 */#include <stdio.h>voidshowCube(double x);int main(void) /* finds cube of entered number */ { double val;printf("Enter a floating-pointvalue: "); 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 ExercisesPE 6-­‐1/* pe6-1.c *//* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */#include <stdio.h>#define SIZE 26 intmain( void ) { charlcase[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> intmain( 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");}return0;}PE 6-­‐6/* pe6-6.c */#include<stdio.h> intmain( void ){ int lower,upper, index; intsquare, cube;printf("Enter startinginteger: "); scanf("%d",&lower); printf("Enterending 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); }return0;}PE 6-­‐8/* pe6-8.c */#include<stdio.h> intmain( void ){ double n, m;doubleres;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>#defineSIZE 8 intmain( void){ intvals[SIZE];int i;printf("Please enter %dintegers.\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;}/* pe6-13.c *//* This version starts with the 0 power */ #include<stdio.h>#defineSIZE 8 intmain( void){inttwopows[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-14.c *//* Programming Exercise 6-14 */#include<stdio.h>#defineSIZE 8 intmain(void){ doublearr[SIZE];doublearr_cumul[SIZE];int i;printf("Enter %dnumbers:\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#defineRATE_COMP 0.05#defineINIT_AMT 100.0int main( void ){double daphne =INIT_AMT;double deidre =INIT_AMT; intyears = 0;while (deidre <= daphne) { daphne +=RATE_SIMP * INIT_AMT; deidre += RATE_COMP * deidre;++years;}printf("Investment values after %dyears:\n", years); printf("Daphne: $%.2f\n",daphne); printf("Deidre: $%.2f\n", deidre);return 0;}Chapter 7 Programming ExercisesPE 7-­‐1/* ProgrammingExercise 7-1 */#include <stdio.h>int main(void){ char ch;int sp_ct =0; intnl_ct = 0;int other =0;while ((ch =getchar()) != '#'){if (ch == ' ')sp_ct++; elseif (ch == '\n')nl_ct++; elseother++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other); return0;}PE 7-­‐3/* Programming Exercise 7-3 */#include<stdio.h> intmain(void){ int n;double sumeven= 0.0; intct_even = 0;double sumodd= 0.0; intct_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");return0;}PE 7-­‐5/* Programming Exercise 7-5 */#include<stdio.h> intmain(void){ charch; intct1 = 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);return0;}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 for2nd tier #define RATE3 0.25 //rate for 3rd tier int main(void){doublehours;double gross;double net;double taxes;printf("Enter the number of hours workedthis week: "); scanf("%lf", &hours); if(hours <= BASEHRS) gross = hours *BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1)* RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net);return0;}PE 7-­‐9/* Programming Exercise 7-9 */#include<stdio.h>#include<stdbool.h> intmain(void){intlimit;int num;int div;bool numIsPrime; // use int if stdbool.h not availableprintf("Enter a positive integer: ");while (scanf("%d", &limit) == 1 &&limit > 0){if (limit > 1)printf("Here are the prime numbers upthrough %d\n", limit); elseprintf("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> intmain(void){const doubleprice_artichokes = 2.05; const double price_beets = 1.15; const doubleprice_carrots = 1.09; const double DISCOUNT_RATE = 0.05; const double under5 = 6.50; const doubleunder20 = 14.00; const double base20 = 14.00; const double extralb = 0.50;char ch;doublelb_artichokes = 0;double lb_beets =0; doublelb_carrots = 0;double lb_temp;double lb_total;doublecost_artichokes;doublecost_beets;doublecost_carrots;doublecost_total;doublefinal_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; elseif (lb_total < 20) shipping = under20;elseshipping = 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 perpound:$ %.2f\n", lb_artichokes,price_artichokes, cost_artichokes); printf("%.2flbs of beets at $%.2f per pound: $%.2f\n",lb_beets, price_beets, cost_beets); printf("%.2flbs 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("Volume discount: $%.2f\n",discount); printf("Shipping: $%.2f\n",shipping); printf("Total charges:$%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 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);return0;}PE 8-­‐3/* Programming Exercise 8-3 *//* Using ctype.h eliminates need to assume consecutive coding */#include<stdio.h>#include<ctype.h> intmain(void) { intch; unsignedlong uct = 0;unsigned long lct= 0; unsignedlong oct = 0;while ((ch =getchar()) != EOF) if(isupper(ch))uct++; else if(islower(ch))lct++; elseoct++;printf("%lu uppercase characters read\n", uct); printf("%lu lowercase characters read\n", lct); printf("%lu other characters read\n", oct);return0;}/* or you coulduse 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) { inthigh = 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 for2nd tier #define RATE3 0.25 //rate for 3rd tier int getfirst(void);void menu(void); int main(void){ doublehours;doublegross;double net;doubletaxes;doublepay;charresponse;menu();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 workedthis week: "); scanf("%lf", &hours); if(hours <= BASEHRS) gross = hours * pay;elsegross = BASEHRS * pay + (hours - BASEHRS) *pay * OVERTIME; if (gross <= AMT1) taxes= gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1)* RATE2; elsetaxes = 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");return0;}void menu(void){printf("********************************************************""*********\n");printf("Enter the letter corresponding to the desiredpay 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); intmain(void){double x, y; printf("Entertwo numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == 2){ printf("The smaller numberis %f.\n", min(x,y)); printf("Next two values (q to quit): ");}printf("Bye!\n");return0;}double min(double a, double b){return a < b ? a : b;}/* alternativeimplementation doublemin(double a, double b){ if (a <b)return a;elsereturn 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");return0;}// start rows and cols at 0void 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("Entertwo 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");return0;}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 ofnumbers or q to quit.\n");} printf("Hope you enjoyed this powertrip -- bye!\n"); return 0;} double power(double a, int b) /* functiondefinition */{ doublepow = 1;int i; if(b == 0){ if (a== 0)printf("0 to the 0 undefined; using 1 as thevalue\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> voidto_base_n(int x, int base); intmain(void) { int number; int b;int count; printf("Enter aninteger (q to quit):\n"); while(scanf("%d", &number) == 1){ printf("Enter numberbase (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 ExercisesPE 10-­‐1/* Programming Exercise 10-1 */#include <stdio.h>#define MONTHS 12 // number ofmonths 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; floatsubtot, 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 AVERAGES:\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 10int max_arr(const int ar[],int n); void show_arr(constint 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);return0;}int max_arr(const int ar[], int n)。

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

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

Chapter 2 Programming ExercisesPE 2--‐1/* Programming Exercise 2-1 */#include<stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav");printf("Mahler\n"); return 0;}PE 2--‐3/* Programming Exercise 2-3 */#include<stdio.h> intmain(void){ int ageyears; /*age in years */ intagedays; /* age indays *//* 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>voidjolly(void);voiddeny(void);intmain(void){jolly();jolly();jolly();deny();return;}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> intmain(void){inttoes;toes=1;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>voidone_three(void);voidtwo(void);intmain(void){printf("starting now:\n");one_three();printf("done!\n"); return0;}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> intmain(void){intascii;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> intmain(void){floatnum;printf("Enter a floating-point value: "); scanf("%f", &num);printf("fixed-pointnotation: %f\n", num);printf("exponentialnotation: %e\n", num);printf("p notation: %a\n",num); return 0;}PE 3--‐6/* Programming Exercise 3-6 */#include<stdio.h> intmain(void){float mass_mol = 3.0e-23; /* mass of watermolecule in grams */ float mass_qt = 950;/* mass of quart of water in grams */ floatquarts; float molecules;printf("Enter the number of quarts ofwater: "); 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 ExercisesPE 4--‐1/* Programming Exercise 4-1 */#include<stdio.h> intmain(void){charfname[40];charlname[40];printf("Enter yourfirst name: ");scanf("%s", fname);printf("Enter yourlast name: ");scanf("%s", lname);printf("%s, %s\n",lname, fname);return 0;}PE 4--‐4/* Programming Exercise 4-4 */ #include<stdio.h> intmain(void){floatheight;charname[40];printf("Enter your heightin inches: "); scanf("%f",&height); printf("Enteryour name: ");scanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return;}PE 4--‐7/* Programming Exercise 4-7 */#include<stdio.h>#include<float.h> intmain(void){ floatot_f = 1.0 /3.0;double ot_d= 1.0 / 3.0;printf(" floatvalues: ");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 ExercisesPE 5--‐1/* Programming Exercise 5-1 */#include<stdio.h> intmain(void){ const intminperhour =60; intminutes, hours,mins;printf("Enter the number ofminutes 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;}PE 5--‐3/* Programming Exercise 5-3 */ #include<stdio.h> intmain(void){ const intdaysperweek= 7; intdays, weeks,day_rem;printf("Enter thenumber of days: ");scanf("%d", &days);while (days > 0){ weeks =days / daysperweek;day_rem = days % daysperweek;printf("%d days are %d weeksand %d days.\n", days, weeks,day_rem);printf("Enter the number of days (0 or less to end): "); scanf("%d", &days);}printf("Done!\n"); return0;}PE 5--‐5/* ProgrammingExercise 5-5 */#include <stdio.h>int main(void) /* finds sum of first n integers */ {intcount,sum;intn;printf("Enter theupper limit: ");scanf("%d", &n);count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum= %d\n", sum);return 0;}PE 5--‐7/*ProgrammingExercise 5-7*/ #include<stdio.h> voidshowCube(double x);int main(void) /* finds cube of entered number */ {doubleval;printf("Enter a floating-point value: ");scanf("%lf", &val);showCube(val); return0; }void showCube(double x){printf("The cube of %e is %e.\n", x, x*x*x );}Chapter 6 Programming ExercisesPE 6--‐1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include<stdio.h>#define SIZE26 intmain( void ){ charlcase[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> intmain(void ){charlet ='F';charstart;charend;for (end = let; end >= 'A'; end--) {for (start = let; start >= end; start--)printf("%c", start);printf("\n");}return;}PE 6--‐6/* pe6-6.c */#include<stdio.h> intmain(void ){ intlower, upper,index; intsquare, cube;printf("Enterstarting integer: ");scanf("%d", &lower);printf("Enter endinginteger: ");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;}PE 6--‐8/* pe6-8.c */#include<stdio.h> intmain(void ){doublen,m;doubleres;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>#defineSIZE 8intmain(void ){intvals[SIZE];int i;printf("Please enter %dintegers.\n", SIZE); for (i =0; i < SIZE; i++)scanf("%d", &vals[i]);printf("Here, in reverse order, are the valuesyou 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>#defineSIZE 8intmain(void ){inttwopows[SIZE];int i;int value = 1; /* 2 to the 0 */for (i = 0; i < SIZE; i++){ twopows[i] =value;value *= 2;}i=;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>#defineSIZE 8intmain(void){ doublearr[SIZE];doublearr_cumul[SIZE];int i;printf("Enter %dnumbers:\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 #defineRATE_COMP 0.05#defineINIT_AMT 100.0 intmain( void){doubledaphne =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/*ProgrammingExercise 7-1*/ #include<stdio.h> intmain(void){charch;intsp_ct = 0;intnl_ct = 0;intother = 0;while((ch=getchar()) !='#'){if (ch== ' ')sp_ct++;else if (ch =='\n')nl_ct++;elseother++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other);return;}PE 7--‐3/* Programming Exercise 7-3 */#include<stdio.h> intmain(void){ int n;doublesumeven =0.0; intct_even =0;doublesumodd =0.0; intct_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 ofodds: %d", ct_odd); if(ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar('\n');printf("\ndone\n");return;}PE 7--‐5/* Programming Exercise 7-5 */ #include<stdio.h> intmain(v oid) {char ch; intct1=0; intct2=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;}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 // ratefor 2nd tier #define RATE30.25 // rate for 3rd tier intmain(void){doublehours;doublegross;doublenet;doubletaxes;printf("Enter the number of hoursworked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS)gross = hours * BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross<= AMT1) taxes = gross * RATE1; else if(gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross -AMT1) * RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net);return;}PE 7--‐9/* Programming Exercise 7-9 */#include<stdio.h>#include<stdbool.h> intmain(void){intlimit;intnum;intdiv;bool numIsPrime; // use int if stdbool.h notavailableprintf("Enter a positiveinteger: "); while(scanf("%d", &limit) == 1 &&limit > 0){if (limit > 1)printf("Here are the prime numbers upthrough %d\n", limit); elseprintf("Noprimes.\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> intmain(void){const doubleprice_artichokes =2.05; const doubleprice_beets = 1.15;const doubleprice_carrots = 1.09;const doubleDISCOUNT_RATE =0.05; const doubleunder5 = 6.50; constdouble under20 =14.00; const double base20 = 14.00; const double extralb = 0.50;charch;doublelb_artichokes = 0;doublelb_beets =0; doublelb_carrots =0; doublelb_temp;doublelb_total;doublecost_artichokes;doublecost_beets;doublecost_carrots;doublecost_total;doublefinal_total; doublediscount;doubleshipping;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 poundsof 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; elseshipping = base20 +extralb * lb_total; if(cost_total > 100.0)discount =DISCOUNT_RATE *cost_total; elsediscount = 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 perpound: $%.2f\n", lb_beets,price_beets, cost_beets); printf("%.2f lbsof 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); return0; }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;}PE 8--‐3/* Programming Exercise 8-3 *//* Using ctype.h eliminates need to assume consecutive coding */#include<stdio.h>#include<ctype.h>intmain(void){ int ch;unsignedlong uct =0;unsignedlong lct =0;unsignedlong oct =0;while ((ch =getchar()) != EOF)if (isupper(ch))uct++; else if(islower(ch))lct++; elseoct++;printf("%lu uppercase characters read\n", uct); printf("%lu lowercase characters read\n", lct); printf("%lu other characters read\n", oct);return;}/* or youcould use if(ch >= 'A'&& ch <='Z') uct++;else if (ch >= 'a'&& ch <= 'z')lct++; elseoct++;*/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> intmain(void){ int high =100; int low =1; int guess =(high + low) /2; charresponse;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 withan l if it is low.\n"); printf("Uh...is yournumber %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 doit!\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 #defineRATE3 0.25 // rate for3rd tier int getfirst(void); voidmenu(void); int main(void){doublehours;doublegross;doublenet;doubletaxes;doublepay;charresponse;menu();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 hoursworked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS)gross = hours * pay; elsegross = BASEHRS * pay + (hours -BASEHRS) * pay * OVERTIME; if (gross <=AMT1) taxes = gross * RATE1; else if(gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross -AMT1) * RATE2; elsetaxes = 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;}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){intch;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>doublemin(double,double); intmain(void){double x, y;printf("Enter two numbers(q to quit): "); while(scanf("%lf %lf", &x, &y)== 2){ printf("The smaller numberis %f.\n", min(x,y));printf("Next two values (q to quit): ");}printf("Bye!\n");return;}double min(double a, double b){return a < b ? a : b;}/* alternative implementationdouble min(doublea, double b){if(a<b)return a;elsereturnb;}*/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;}// start rows and colsat 0 voidchLineRow(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); intmain(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;}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/* ProgrammingExercise 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 */{doublepow=1;inti;if(b==0){if(a==0)。

C Primer Plus第6版编程练习答案(已下载)

C Primer Plus第6版编程练习答案(已下载)

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("Gustav Mahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n"); return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include <stdio.h> intmain(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); voiddeny(void); intmain(void){ jolly(); 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> intmain(void){ inttoes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes); printf("toessquared = %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(void);void two(void); intmain(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 ExercisesPE 3-­‐2/* Programming Exercise 3-2 */#include <stdio.h> intmain(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> intmain(void){ floatnum;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> intmain(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ floatmass_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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */#include <stdio.h> intmain(void){ charfname[40]; charlname[40];printf("Enter your first name: ");scanf("%s", fname); printf("Enter yourlast name: "); scanf("%s", lname);printf("%s, %s\n", lname, fname); return0;}PE 4-­‐4/* Programming Exercise 4-4 */#include <stdio.h> intmain(void){ floatheight; charname[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> intmain(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("doublevalues: ");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 ExercisesPE 5-­‐1/* Programming Exercise 5-1 */#include <stdio.h> intmain(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> intmain(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> voidshowCube(double x);int main(void) /* finds cube of entered number */{ doubleval;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 ExercisesPE 6-­‐1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h> #define SIZE26 int main( void ) { charlcase[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> intmain( 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 endinginteger: "); 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 ){ double 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> #defineSIZE 8 intmain( void ){ intvals[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> #defineSIZE 8 intmain( 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> #defineSIZE 8 int main(void){ double arr[SIZE];double arr_cumul[SIZE]; inti;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 intmain( void ){double daphne = INIT_AMT;double deidre = INIT_AMT; intyears = 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 ExercisesPE 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> intmain(void){ int n; doublesumeven = 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> intmain(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 #defineRATE3 0.25 // rate for 3rd tier int main(void){double hours;double gross; doublenet; double taxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours); if (hours <= BASEHRS) gross = hours* BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if(gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2) taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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> intmain(void){int limit;int num; intdiv;bool numIsPrime; // use int if stdbool.h not availableprintf("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);elseprintf("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> intmain(void){const double price_artichokes = 2.05;const double price_beets = 1.15; constdouble price_carrots = 1.09; const doubleDISCOUNT_RATE = 0.05; const double under5 =6.50; const double under20 = 14.00; constdouble base20 = 14.00; const double extralb= 0.50;char ch;double lb_artichokes = 0;double lb_beets = 0; doublelb_carrots = 0; double lb_temp;double lb_total;doublecost_artichokes; doublecost_beets; doublecost_carrots; doublecost_total; doublefinal_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 forcarrots, 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; elseshipping = 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("Yourorder:\n");printf("%.2f lbs of artichokes at $%.2f per pound:$ %.2f\n",lb_artichokes, price_artichokes, cost_artichokes); printf("%.2f lbs ofbeets 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 ofvegetables: $%.2f\n", cost_total); if (cost_total > 100)printf("Volume discount: $%.2f\n", discount);printf("Shipping: $%.2f\n", shipping); printf("Totalcharges: $%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 8-­‐1/* Programming Exercise 8-1 */#include <stdio.h>int main(void) { int ch; intct = 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 longuct = 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("%lulowercase characters read\n", lct); printf("%lu other charactersread\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 ishigh, 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 intgetfirst(void); void menu(void); int main(void){ doublehours; doublegross; double net;double taxes;double pay; charresponse;menu();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; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME;if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1+ AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = 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 ExercisesPE 9-­‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double, double); intmain(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 doublemin(double a, double b){ if (a < b)return a; elsereturn b;}*/PE 9-­‐3/* Programming Exercise 9-3 */#include <stdio.h>void chLineRow(char ch, int c, int r); intmain(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 voidchLineRow(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); intmain(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 */ intmain(void) { double x, xpow; int n; printf("Enter a number andthe 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); intmain(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 ExercisesPE 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 constfloat 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 AVERAGES:\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 10int 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}; intmax;show_arr(orig, LEN); max =max_arr(orig, LEN); printf("%d = largestvalue\n", max);return 0;}int max_arr(const int ar[], int n){ int i; intmax = 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');}PE 10-­‐5/* Programming Exercise 10-5 */#include <stdio.h>#define LEN 10double max_diff(const double ar[], int n); voidshow_arr(const double ar[], int n);。

C Primer Plus第6版编程练习答案(已下载)

C Primer Plus第6版编程练习答案(已下载)

C Primer Plus Sixth Edition Programming ExerciseSelected Answers Chapter 2 Programming ExercisesPE 2-­­1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("Gustav Mahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n"); return0;}PE 2-­­3/* Programming Exercise 2-3 */#include <stdio.h> intmain(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); intmain(void){ jolly();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> intmain(void){ int toes;toes = 10;printf("toes = %d\n", toes);— printf("Twice toes = %d\n", 2 * toes);printf("toes squared = %d\n", toes * toes); return0;}/* 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(void);void two(void); intmain(void){printf("starting now:\n");one_three();printf("done!\n"); return0;}void one_three(void){printf("one\n");two();printf("three\n");}void two(void){printf("two\n");}Chapter 3 Programming ExercisesPE 3-­­2/* Programming Exercise 3-2 */#include <stdio.h> intmain(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> intmain(void){ floatnum;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> intmain(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 ExercisesPE 4-­­1/* Programming Exercise 4-1 */#include <stdio.h> intmain(void){ charfname[40]; charlname[40];printf("Enter your first name: ");scanf("%s", fname); printf("Enteryour last name: "); scanf("%s",lname); printf("%s, %s\n", lname,fname); return 0;}PE 4-­­4/* Programming Exercise 4-4 */#include <stdio.h> intmain(void){ float height;char name[40];printf("Enter your height in inches: ");scanf("%f", &height); printf("Enter yourname: "); 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> intmain(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 ExercisesPE 5-­­1/* Programming Exercise 5-1 */#include <stdio.h> intmain(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> intmain(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); return0;}PE 5-­­7/* Programming Exercise 5-7 */#include <stdio.h> voidshowCube(double x);int main(void) /* finds cube of entered number */{ doubleval;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 ExercisesPE 6-­­1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h> #define SIZE26 int main( void ) { charlcase[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> intmain( 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> intmain( void ){ int lower, upper,index; int square, cube;printf("Enter starting integer: ");scanf("%d", &lower); printf("Enterending 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> intmain( void ){ double n,m; doubleres;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 intmain( void ){ intvals[SIZE]; inti;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 intmain( 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 intmain(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]); /* orscanf("%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 intmain( 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 ExercisesPE 7-­­1/* Programming Exercise 7-1 */#include <stdio.h> intmain(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> intmain(void){ int n; doublesumeven = 0.0; intct_even = 0; doublesumodd = 0.0; intct_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> intmain(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 intmain(void){double hours;double gross;double net; doubletaxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours); if (hours <= BASEHRS)gross = hours * BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME;if (gross <= AMT1) taxes = gross * RATE1; else if (gross <=AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;elsetaxes = 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> intmain(void){int limit;int num; intdiv;bool numIsPrime; // use int if stdbool.h not availableprintf("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);elseprintf("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> intmain(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; constdouble under20 = 14.00; const doublebase20 = 14.00; const double extralb= 0.50;charch;double lb_artichokes = 0;double lb_beets = 0;double lb_carrots = 0;double lb_temp; doublelb_total;doublecost_artichokes; doublecost_beets; doublecost_carrots; doublecost_total; doublefinal_total; doublediscount; doubleshipping;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 ofcarrots: "); 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; elseshipping = 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 ofcarrots at $%.2f per pound: $%.2f\n", lb_carrots,price_carrots, cost_carrots); printf("Total cost ofvegetables: $%.2f\n", cost_total); if (cost_total > 100)printf("Volume discount: $%.2f\n", discount);printf("Shipping: $%.2f\n", shipping);printf("Total charges: $%.2f\n", final_total);return 0; }Chapter 8 Programming ExercisesPE 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> intmain(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++; elseoct++;—printf("%lu uppercase characters read\n", uct);printf("%lu lowercase characters read\n", lct); printf("%luother 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("\nah if it is high, and with an l if it is low.\n"); printf("Uh...is yournumber %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 tierint getfirst(void); void menu(void); intmain(void){ double hours;double gross;double net;double taxes;double pay;char response;menu();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; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME;if (gross <= AMT1) taxes = gross * RATE1; else if(gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;elsetaxes = 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)—{ intch;ch = getchar();while (isspace(ch))ch = getchar(); while(getchar() != '\n')continue; return ch;}Chapter 9 Programming ExercisesPE 9-­­1/* Programming Exercise 9-1 */#include <stdio.h>double min(double, double); intmain(void){double x, y; printf("Enter twonumbers (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 doublemin(double a, double b){ if (a < b)return a;elsereturn b;}*/PE 9-­­3/* Programming Exercise 9-3 */#include <stdio.h>void chLineRow(char ch, int c, int r); intmain(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 voidchLineRow(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); intmain(void){double x, y; printf("Enter twonumbers (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 */ intmain(void) { double x, xpow; int n; printf("Enter anumber and the integer power"); printf(" to which\nthenumber 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 toquit.\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 (qto 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 ExercisesPE 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 intmain(void){// initializing rainfall data for 2010 - 2014const 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 AVERAGES:\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 10int 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; intmax = 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');}PE 10-­­5/* Programming Exercise 10-5 */#include <stdio.h>#define LEN 10double max_diff(const double ar[], int n); voidshow_arr(const double ar[], int n);int main(void){double orig[LEN] = {1.1,2,3,4,12,61.3,7,8,9,10};double max;show_arr(orig, LEN);max = max_diff(orig, LEN);printf("%g = maximum difference\n", max);return 0;}double max_diff(const double ar[], int n){ int i; doublemax = ar[0]; doublemin = ar[0];for (i = 1; i < n; i++){if (max < ar[i])max = ar[i]; else if(min > ar[i])min = ar[i];}return max - min;}void show_arr(const double ar[], int n)。

C Primer Plus第6版编程练习答案(已下载)精编版

C Primer Plus第6版编程练习答案(已下载)精编版
}
/* or create two more variables, set them to 2 * toes and toes * toes */
PE
/* Programming Exercise 2-8 */
#include <stdio.h> void one_three(void); void two(void); int main(void)
Chapter
PE
/* Programming Exercise 2-1 */
#include <stdio.h> int main(void)
{ printf("Gustav Mahler\n"); printf("Gustav\nMahler\n"); printf("Gustav "); printf("Mahler\n"); return 0;
printf("An age of %d years is %d days.\n", ageyears, agedays); return 0;
}
PE
/* Programming Exercise 2-4 */
#include <stdio.h> void jolly(void); void deny(void); int main(void)
}
PE
/* Programming Exercise 2-3 */
#include <stdio.h> int main(void)
{ int ageyears; /* age in years */ int agedays; /* age in days */

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

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

Chapter 2 Programming ExercisesPE 2-­‐1/* Programming Exercise 2-1 */#include<stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n"); printf("Gustav ");printf("Mahler\n");return 0;}PE 2-­‐3/* Programming Exercise 2-3 */#include<stdio.h> intmain(void){ int ageyears; /* age inyears */ int agedays; /*age in days *//* large ages may require the longtype */ 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> voidjolly(void); voiddeny(void); intmain(void){ jolly();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> intmain(void){ inttoes;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> voidone_three(void);void two(void);int main(void){printf("startingnow:\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 ExercisesPE 3-­‐2/* Programming Exercise 3-2 */#include<stdio.h> intmain(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> intmain(void){ floatnum;printf("Enter a floating-point value: ");scanf("%f", &num);printf("fixed-point notation: %f\n",num); printf("exponentialnotation: %e\n", num); printf("pnotation: %a\n", num); return 0;}PE 3-­‐6/* Programming Exercise 3-6 */#include<stdio.h> intmain(void){float mass_mol = 3.0e-23; /* mass of watermolecule 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 ExercisesPE 4-­‐1/* Programming Exercise 4-1 */#include<stdio.h> intmain(void){ charfname[40];char lname[40];printf("Enter your firstname: "); 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> intmain(void){ floatheight;charname[40];printf("Enter your height ininches: "); 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> intmain(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> intmain(void){ const intminperhour = 60; intminutes, hours, mins;printf("Enter the number of minutes toconvert: "); 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> intmain(void){ const intdaysperweek = 7; intdays, weeks, day_rem;printf("Enter the number ofdays: "); scanf("%d", &days);while (days > 0){ weeks = days /daysperweek; day_rem= days % daysperweek;printf("%d days are %d weeks and %ddays.\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/* ProgrammingExercise 5-7 */#include <stdio.h>void showCube(doublex);int main(void) /* finds cube of entered number */ { doubleval;printf("Enter a floating-pointvalue: "); 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 ExercisesPE 6-­‐1/* pe6-1.c *//* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */#include <stdio.h>#define SIZE 26 intmain( void ) { charlcase[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> intmain( void ){ char let ='F'; charstart; charend;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> intmain( 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> intmain( void ){ doublen, 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 SIZE8 intmain( void ){ intvals[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"); return0;}PE 6-­‐13/* pe6-13.c *//* This version starts with the 0 power */#include<stdio.h>#define SIZE8 intmain( 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 SIZE8 intmain(void){ double arr[SIZE];doublearr_cumul[SIZE];int i;printf("Enter %dnumbers:\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#defineRATE_COMP 0.05#define INIT_AMT100.0 int main( void ){double daphne =INIT_AMT; doubledeidre = INIT_AMT;int years = 0;while (deidre <= daphne){ daphne +=RATE_SIMP * INIT_AMT;deidre += RATE_COMP *deidre;++years; }printf("Investment values after %dyears:\n", years); printf("Daphne: $%.2f\n", daphne); printf("Deidre: $%.2f\n", deidre); return 0;}Chapter 7 Programming ExercisesPE 7-­‐1/* ProgrammingExercise 7-1 */#include <stdio.h> intmain(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++; elseother++;}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> intmain(void){ int n; doublesumeven = 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> intmain(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 2ndtier #define RATE3 0.25 // rate for3rd tier int main(void){double hours;double gross;double net;double taxes;printf("Enter the number of hours workedthis week: "); scanf("%lf", &hours); if(hours <= BASEHRS) gross = hours *BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross <= AMT1) taxes =gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1)* RATE2; elsetaxes = 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> intmain(void){int limit;int num;int div;bool numIsPrime; // use int if stdbool.h not availableprintf("Enter a positive integer: ");while (scanf("%d", &limit) == 1 &&limit > 0){if (limit > 1)printf("Here are the prime numbers upthrough %d\n", limit); elseprintf("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> intmain(void){const doubleprice_artichokes = 2.05;const double price_beets =1.15; const doubleprice_carrots = 1.09; constdouble DISCOUNT_RATE =0.05; const double under5 =6.50; const double under20= 14.00; const doublebase20 = 14.00; constdouble extralb = 0.50;ch;doublelb_artichokes = 0;double lb_beets = 0;double lb_carrots =0; double lb_temp;double lb_total;doublecost_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 ofbeets: "); 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; elseshipping = 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("Volume discount: $%.2f\n", discount); printf("Shipping: $%.2f\n", shipping); printf("Total charges:$%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 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 longlct = 0; unsignedlong 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 useif (ch >= 'A' && ch<= 'Z') uct++;else if (ch >= 'a' && ch<= 'z') lct++; elseoct++;*/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> intmain(void) { int high =100; int low = 1; intguess = (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 for2nd tier #define RATE3 0.25 //rate for 3rd tier int getfirst(void); voidmenu(void); int main(void){ doublehours;double gross;double net;double taxes;double pay;char response;menu();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 workedthis week: "); scanf("%lf", &hours); if(hours <= BASEHRS) gross = hours * pay;elsegross = BASEHRS * pay + (hours - BASEHRS) *pay * OVERTIME; if (gross <= AMT1) taxes= gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross - AMT1)* RATE2; elsetaxes = 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 desiredpay 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){ intch;ch = getchar();while (isspace(ch))ch = getchar();while (getchar() != '\n')continue; return ch;}Chapter 9 Programming ExercisesPE 9-­‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double,double); int main(void){double x, y; printf("Entertwo 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 toquit): ");}printf("Bye!\n");return 0;}double min(double a, double b) {return a < b ? a : b;}/* alternativeimplementation doublemin(double a, double b){ if (a < b)return a;elsereturn 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 0void 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("Entertwo 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); /* ANSIprototype */ int main(void) { double x, xpow;int n; printf("Enter a number and theinteger power"); printf(" to which\nthenumber will be raised. Enter q"); printf(" toquit.\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 numbersor q to quit.\n");} printf("Hope you enjoyed this powertrip -- bye!\n"); return 0;} double power(double a, int b) /* functiondefinition */{ doublepow = 1; inti; if (b ==0) { if (a== 0)printf("0 to the 0 undefined; using 1 as thevalue\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> voidto_base_n(int x, int base); intmain(void) { int number; int b;int count; printf("Enter aninteger (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 ExercisesPE 10-­‐1/* Programming Exercise 10-1 */#include <stdio.h>#define MONTHS 12 // number ofmonths 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; floatsubtot, 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 AVERAGES:\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 10int max_arr(const int ar[], intn); void show_arr(const intar[], 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; intmax = 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]; returnmax;}void show_arr(const int ar[], int n){ int i; for (i =0; i < n; i++)printf("%d ", ar[i]);putchar('\n');}PE 10-­‐5/* Programming Exercise 10-5 */。

c++primerplus(第六版)课后编程练习测试参考答案

c++primerplus(第六版)课后编程练习测试参考答案

精心整理第二章:开始学习C++//ex2.1--displayyournameandaddress#include<iostream>intmain(void){usingnamespacestd;cout<<"MynameisliaochunguangandIliveinhunanchenzhou.\n”;}//ex2.2--convertthefurlongunitstoyarduints-把浪单位换位码单位#include<iostream>doublefur2yd(double);intmain(){usingnamespacestd;cout<<"enterthedistancemeasuredbyfurlongunits:";doublefur;cin>>fur;cout<<"convertthefurlongtoyard"<<endl;doubleyd;yd=fur2yd(fur);cout<<fur<<"furlongis"<<yd<<"yard"<<endl;return0;}doublefur2yd(doublet){return220*t;}//ex2.3-每个函数都被调用两次#include<iostream>voidmice();voidsee();usingnamespacestd;intmain(){mice();mice();see();see();return0;}voidmice(){cout<<"threeblindmice"<<endl;}精心整理{cout<<"seehowtheyrun"<<endl;}//ex2.4#include<iostream>intmain(){usingnamespacestd;cout<<"Enteryourage:";intage;cin>>age;intmonth;month=age*12;cout<<age<<"yearsis"<<month<<"months"<<endl;return0;}//ex2.5---converttheCelsiusvalvetoFahrenheitvalue#include<iostream>doubleC2F(double);intmain(){usingnamespacestd;cout<<"pleaseenteraCelsiusvalue:";doubleC;cin>>C;doubleF;F=C2F(C);cout<<C<<"degreesCelsiusis"<<F<<"degreesFahrenheit."<<endl;return0;}doubleC2F(doublet){return1.8*t+32;}//ex2.6---convertthelightyearsvalvetoastronomicalunits--把光年转换为天文单位#include<iostream>doubleconvert(double);//函数原型intmain(){usingnamespacestd;cout<<"Enterthenumberoflightyears:";doublelight_years;cin>>light_years;doubleastro_units;astro_units=convert(light_years);cout<<light_years<<"light_years="<<astro_units<<"astronomicalunits."<<endl;}doubleconvert(doublet){return63240*t;//1光年=63240天文单位}//ex2.7--显示用户输入的小时数和分钟数#include<iostream>voidshow();main(){usingnamespacestd;show();return0;}voidshow(){usingnamespacestd;inth,m;cout<<"enterthenumberofhours:";cin>>h;cout<<"enterthenumberofminutes:";cin>>m;cout<<"Time:"<<h<<":"<<m<<endl;}第三章:处理数据//ex3.1—将身高用英尺(feet)和英寸(inch)表示#include<iostream>constintinch_per_feet=12;//const常量--1feet=12inches--1英尺=12英寸intmain(){usingnamespacestd;cout<<"pleaseenteryourheightininches:___\b\b\b";//\b表示为退格字符intht_inch;cin>>ht_inch;intht_feet=ht_inch/inch_per_feet;//取商intrm_inch=ht_inch%inch_per_feet;//取余cout<<"yourheightis"<<ht_feet<<"feet,and"<<rm_inch<<"inches\n";return0;}//ex3.2--计算相应的bodymassindex(体重指数)#include<iostream>constintinch_per_feet=12;constdoublemeter_per_inch=0.0254;constdoublepound_per_kilogram=2.2;intmain()usingnamespacestd;cout<<"Pleaseenteryourheight:"<<endl;cout<<"First,enteryourheightoffeetpart(输入你身高的英尺部分):_\b";intht_feet;cin>>ht_feet;cout<<"Second,enteryourheightofinchpart(输入你身高的英寸部分):_\b";intht_inch;cin>>ht_inch;cout<<"Now,pleaseenteryourweightinpound:___\b\b\b";doublewt_pound;cin>>wt_pound;intinch;inch=ht_feet*inch_per_feet+ht_inch;doubleht_meter;ht_meter=inch*meter_per_inch;doublewt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram;cout<<endl;cout<<"Yourpensonalbodyinformationasfollows:"<<endl;cout<<"身高:"<<inch<<"(英尺inch)\n"<<"身高:"<<ht_meter<<"(米meter)\n"<<"体重:"<<wt_kilogram<<"(千克kilogram)\n";doubleBMI;BMI=wt_kilogram/(ht_meter*ht_meter);cout<<"yourBodyMassIndex(体重指数)is"<<BMI<<endl;return0;}//ex3.3以度,分,秒输入,以度输出#include<iostream>constintminutes_per_degree=60;constintseconds_per_minute=60;intmain(){usingnamespacestd;cout<<"Enteralatitudeindegrees,minutes,andseconds:\n";cout<<"First,enterthedegrees:";intdegree;cin>>degree;cout<<"Next,entertheminutesofarc:";intminute;cin>>minute;cout<<"Fianlly,enterthesecondsofarc:";intsecond;cin>>second;doubleshow_in_degree;show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/minutes_per_degree/seconds_per_minute;精心整理cout<<degree<<"degrees,"<<minute<<"minutes,"<<second<<"seconds="<<show_in_degree<<"degrees\n";return0;}//ex3.4#include<iostream>constinthours_per_day=24;constintminutes_per_hour=60;constintseconds_per_minute=60;intmain(){usingnamespacestd;cout<<"Enterthenumberofseconds:";longseconds;cin>>seconds;intDay,Hour,Minute,Second;Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day;Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day;Minute=seconds/seconds_per_minute%minutes_per_hour;Second=seconds%seconds_per_minute;cout<<seconds<<"seconds="<<Day<<"days,"<<Hour<<"hours,"<<Minute<<"minutes,"<<Second<<"seconds\n";return0;}//ex3.5#include<iostream>intmain(){usingnamespacestd;cout<<"Entertheworldpopulation:";longlongworld_population;cin>>world_population;cout<<"EnterthepopulationoftheUS:";longlongUS_population;cin>>US_population;doublepercentage;percentage=(double)US_population/world_population*100;cout<<"ThepopulationoftheUSis"<<percentage<<"%oftheworldpopulation.\n";return0;}//ex3.6?汽车耗油量-美国(mpg)or欧洲风格(L/100Km)#include<iostream>intmain(){?usingnamespacestd;?cout<<"Enterthemilesofdistanceyouhavedriven:";?cin>>m_distance;?cout<<"Enterthegallonsofgasolineyouhaveused:";?doublem_gasoline;?cin>>m_gasoline;?cout<<"Yourcarcanrun"<<m_distance/m_gasoline<<"milespergallon\n";?cout<<"ComputingbyEuropeanstyle:\n";?cout<<"Enterthedistanceinkilometers:";?doublek_distance;?cin>>k_distance;?cout<<"Enterthepetrolinliters:";?doublek_gasoline;?cin>>k_gasoline;?cout<<"InEuropeanstyle:"<<"yourcanused"<<100*k_gasoline/k_distance<<"litersofpetrolper100kilometers\n";?return0;}//ex3.7automobilegasolineconsumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg)#include<iostream>intmain(){usingnamespacestd;cout<<"Entertheautomobilegasolineconsumptionfigurein\n"<<"Europeanstyle(litersper100kilometers):";doubleEuro_style;cin>>Euro_style;cout<<"ConvertstoU.S.style(milespergallon):"<<endl;cout<<Euro_style<<"L/100Km="<<62.14*3.875/Euro_style<<"mpg\n";return0;}//Notethat100kilometersis62.14miles,and1gallonis3.875liters.//Thus,19mpgisabout12.4L/100Km,and27mpgisabout8.7L/100Km.EntertheautomobilegasolineconsumptionfigureinEuropeanstyle(litersper100kilometers):12.4ConvertstoU.S.style(milespergallon):12.4L/100Km=19.4187mpgPressanykeytocontinue//ex3.7automobilegasolineconsumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km)#include<iostream>intmain(){usingnamespacestd;cout<<"Entertheautomobilegasolineconsumptionfigurein\n"<<"U.S.style(milespergallon):";doubleUS_style;cin>>US_style;cout<<"ConvertstoEuropeanstyle(milespergallon):"<<endl;return0;}//EntertheautomobilegasolineconsumptionfigureinU.S.style(milespergallon):19ConvertstoEuropeanstyle(milespergallon):19mpg=12.6733L/100KmPressanykeytocontinue第四章复合类型//ex4.1displaytheinformationofstudent#include<iostream>constintAsize=20;usingnamespacestd;structstudent//定义结构描述{charfirstname[Asize];charlastname[Asize];chargrade;intage;};voiddisplay(student);//函数原型放在结构描述后intmain(){cout<<"whatisyourfirstname?"<<endl;studentlcg;//创建结构变量(结构数据对象)cin.getline(lcg.firstname,Asize);cout<<"whatisyourlastname?"<<endl;cin.getline(stname,Asize);cout<<"whatlettergradedoyoudeserve?"<<endl;cin>>lcg.grade;cout<<"whatisyourage?"<<endl;cin>>lcg.age;display(lcg);return0;}voiddisplay(studentname){cout<<"Name:"<<name.firstname<<","<<stname<<endl;cout<<"Grade:"<<char(name.grade+1)<<endl;cout<<"Age:"<<name.age<<endl;}//ex4.2usethestring-classinsteadofchar-array#include<iostream>#include<string>intmain(){usingnamespacestd;cout<<"Enteryourname:\n";getline(cin,name);cout<<"Enteryourfavoritedessert:\n";getline(cin,dessert);cout<<"Ihavesomedelicious"<<dessert;cout<<"foryou,"<<name<<".\n";return0;}//有时候会遇到需要按下两次回车键才能正确的显示结果,这是vc++6.0的一个BUG,更改如下:elseif(_Tr::eq((_E)_C,_D)){_Chg=true;_I.rdbuf()->sbumpc();//修改后的break;}ex4.3输入其名和姓,并组合显示#include<iostream>#include<cstring>constintAsize=20;intmain(){usingnamespacestd;charfname[Asize];charlname[Asize];charfullname[2*Asize+1];cout<<"Enteryourfirstname:";//输入名字,存储在fname[]数组中cin.getline(fname,Asize);cout<<"Enteryourlastname:";//输入姓,存储在lname[]数组中cin.getline(lname,Asize);strncpy(fullname,lname,Asize);//把姓lname复制到fullname空数组中strcat(fullname,",");//把“,”附加到上述fullname尾部strncat(fullname,fname,Asize);//把fname名字附加到上述fullname尾部fullname[2*Asize]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here'stheinformationinasinglestring:"<<fullname<<endl;//显示组合结果return0;}//ex4.4使用string对象存储、显示组合结果#include<iostream>#include<string>intmain(){usingnamespacestd;stringfname,lname,attach,fullname;cout<<"Enteryourfirstname:";getline(cin,fname);//note:将一行输入读取到string类对象中使用的是getline(cin,str)//它没有使用句点表示法,所以不是类方法cout<<"Enteryourlastname:";getline(cin,lname);精心整理fullname=lname+attach+fname;cout<<"Here'stheinformationinasinglestring:"<<fullname<<endl;return0;}//ex4.5declareastructandinitializeit声明结果并创建一个变量#include<iostream>constintAsize=20;structCandyBar{charbrand[Asize];doubleweight;intcalory;};intmain(){usingnamespacestd;CandyBarsnack={"MochaMunch",2.3,350};cout<<"Here'stheinformationofsnack:\n";cout<<"brand:"<<snack.brand<<endl;cout<<"weight:"<<snack.weight<<endl;cout<<"calory:"<<snack.calory<<endl;return0;}//ex4.6结构数组的声明及初始化#include<iostream>constintAsize=20;structCandyBar{charbrand[Asize];doubleweight;intcalory;};intmain(){usingnamespacestd;CandyBarsnack[3]={{"MochaMunch",2.3,350},{"XuFuJi",1.1,300},{"Alps",0.4,100}};for(inti=0;i<3;i++)//利用for循环来显示snack变量的内容{cout<<snack[i].brand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}精心整理}//ex4.7pizza披萨饼#include<iostream>#include<string>constintSize=20;structpizza//声明结构{charcompany[Size];doublediameter;doubleweight;};intmain(){usingnamespacestd;pizzapie;//创建一个名为pie的结构变量cout<<"What'sthenameofpizzacompany:";cin.getline(pany,Size);cout<<"What'sthediameterofpizza:";cin>>pie.diameter;cout<<"What'stheweightofpizza:";cin>>pie.weight;cout<<"company:"<<pany<<endl; cout<<"diameter:"<<pie.diameter<<"inches"<<endl; cout<<"weight:"<<pie.weight<<"ounches"<<endl;return0;}//ex4.8pizzapie披萨饼使用new创建动态结构#include<iostream>#include<string>constintSize=20;structpizza//声明结构{charcompany[Size];doublediameter;doubleweight;};intmain(){usingnamespacestd;pizza*pie=newpizza;//使用new创建动态结构cout<<"What'sthediameterofpizza:";cin>>pie->diameter;cin.get();//读取下一个字符cout<<"What'sthenameofpizzacompany:";cin.get(pie->company,Size);cout<<"What'stheweightofpizza:";cout<<"diameter:"<<pie->diameter<<"inches"<<endl;cout<<"company:"<<pie->company<<endl;cout<<"weight:"<<pie->weight<<"ounches"<<endl;deletepie;//delete释放内存return0;}//ex.4.9使用new动态分配数组—方法1#include<iostream>#include<string>usingnamespacestd;structCandyBar{stringbrand;doubleweight;intcalory;};intmain(){CandyBar*snack=newCandyBar[3];snack[0].brand="A";//单个初始化由new动态分配的内存snack[0].weight=1.1;snack[0].calory=200;snack[1].brand="B";snack[1].weight=2.2;snack[1].calory=400;snack[2].brand="C";snack[2].weight=4.4;snack[2].calory=500;for(inti=0;i<3;i++){cout<<"brand:"<<snack[i].brand<<endl;cout<<"weight:"<<snack[i].weight<<endl;cout<<"calorie:"<<snack[i].calory<<endl<<endl;}delete[]snack;return0;}—方法1#include<iostream>intmain(){usingnamespacestd;constintSize=3;intsuccess[Size];cout<<"Enteryoursuccessofthethreetimes40metersrunning:\n";cin>>success[0]>>success[1]>>success[2];cout<<"success1:"<<success[0]<<endl;cout<<"success2:"<<success[1]<<endl;cout<<"success3:"<<success[2]<<endl;doubleaverage=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<endl;return0;}—方法2#include<iostream>#include<array>intmain(){usingnamespacestd;array<double,4>ad={0};cout<<"Enteryoursuccessofthethreetimes40metersrunning:\n";cin>>ad[0]>>ad[1]>>ad[2];cout<<"success1:"<<ad[0]<<endl;cout<<"success2:"<<ad[1]<<endl;cout<<"success3:"<<ad[2]<<endl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<endl;return0;}第五章循环和关系表达式//ex.5.1#include<iostream>intmain(){usingnamespacestd;cout<<"Pleaseentertwointegers:";intnum1,num2;cin>>num1>>num2;intsum=0;for(inttemp=num1;temp<=num2;++temp)//ortemp++sum+=temp;cout<<"Thesumfrom"<<num1<<"to"<<num2<<"is"<<sum<<endl;return0;}//ex.5.2#include<iostream>#include<array>intmain(){usingnamespacestd;array<longdouble,101>ad={0};ad[1]=ad[0]=1L;for(inti=2;i<101;i++)ad[i]=i*ad[i-1];for(inti=0;i<101;i++)cout<<i<<"!="<<ad[i]<<endl;return0;}//ex.5.3#include<iostream>intmain(){usingnamespacestd;cout<<"Pleaseenteraninteger:";intsum=0,num;while((cin>>num)&&num!=0){sum+=num;cout<<"Sofar,thesumis"<<sum<<endl;cout<<"Pleaseenteraninteger:";}return0;}//ex.5.4#include<iostream>intmain(){usingnamespacestd;doublesum1,sum2;sum1=sum2=0.0;intyear=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}cout<<"经过"<<year<<"年后,Cleo的投资价值才能超过Daphne的投资价值。

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

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

Chapter 2 Programming ExercisesPE 2--‐1/* Programming Exercise 2-1 */#include<stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n");return 0;}PE 2--‐3/* Programming Exercise 2-3 */#include<stdio.h> intmain(void){ int ageyears; /* agein 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>voidjolly(void);voiddeny(void);intmain(void){ jolly();jolly();jolly();deny();return0; }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> intmain(void){ inttoes;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>voidone_three(void); voidtwo(void);intmain(void){printf("startingnow:\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> intmain(void){intascii;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> intmain(void){ float num;printf("Enter a floating-point value:"); scanf("%f", &num);printf("fixed-pointnotation: %f\n", num);printf("exponentialnotation: %e\n", num);printf("p notation: %a\n",num); return 0;}PE 3--‐6/* Programming Exercise 3-6 */#include<stdio.h> intmain(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ float mass_qt = 950;/* mass of quart of water in grams */ floatquarts; 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> intmain(void){ charfname[40];charlname[40];printf("Enter your firstname: "); scanf("%s",fname); printf("Enteryour last name: ");scanf("%s", lname);printf("%s, %s\n",lname, fname); return0;}PE 4--‐4/* Programming Exercise 4-4 */#include<stdio.h> intmain(void){ floatheight;charname[40];printf("Enter your height ininches: "); scanf("%f",&height); printf("Enteryour name: "); scanf("%s",name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return0;}PE 4--‐7/* Programming Exercise 4-7 */#include<stdio.h>#include<float.h> intmain(void){ float ot_f =1.0 / 3.0;double ot_d =1.0 / 3.0;printf(" floatvalues: ");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> intmain(void){ const intminperhour = 60;int minutes, hours,mins;printf("Enter the number of minutesto 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");return0;}PE 5--‐3/* Programming Exercise 5-3 */#include<stdio.h> intmain(void){ const intdaysperweek = 7;int days, weeks,day_rem;printf("Enter the numberof days: "); scanf("%d",&days); while (days > 0){ weeks = days /daysperweek;day_rem = days %daysperweek;printf("%d days are %d weeksand %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 Exercise5-5 */ #include <stdio.h>int main(void) /* finds sum of first n integers */ {intcount,sum;int n;printf("Enter the upperlimit: "); scanf("%d",&n); count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum = %d\n",sum); return 0;}PE 5--‐7/* ProgrammingExercise 5-7 */#include <stdio.h>voidshowCube(doublex);int main(void) /* finds cube of entered number */ { double val;printf("Enter a floating-pointvalue: "); 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 ExercisesPE 6--‐1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h>#define SIZE 26 intmain( 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> intmain( void ){ charlet = 'F';char start;char end;for (end = let; end >= 'A'; end--){for (start = let; start >= end; start--) printf("%c", start); printf("\n");}return0;}PE 6--‐6/* pe6-6.c */#include<stdio.h> intmain( void ){ int lower,upper, index;int square, cube;printf("Enter startinginteger: ");scanf("%d", &lower);printf("Enter endinginteger: ");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);}return0;}PE 6--‐8/* pe6-8.c */#include<stdio.h> intmain( void ){ double n, m;doubleres;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>#defineSIZE 8 intmain( void ){ intvals[SIZE];int i;printf("Please enter %dintegers.\n", SIZE); for (i = 0; i< SIZE; i++) scanf("%d",&vals[i]);printf("Here, in reverse order, are the valuesyou 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>#defineSIZE 8 intmain( void ){inttwopows[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>#defineSIZE 8 intmain(void){ doublearr[SIZE];doublearr_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]); /* orscanf("%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#defineRATE_COMP0.05 #defineINIT_AMT 100.0int main( void ){double daphne= INIT_AMT;double deidre =INIT_AMT; intyears = 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/* ProgrammingExercise 7-1 */#include <stdio.h>int main(void){ charch; intsp_ct = 0;int nl_ct =0; intother = 0;while ((ch=getchar())!= '#'){if (ch == ' ')sp_ct++;else if (ch == '\n')nl_ct++;elseother++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other);return0;}PE 7--‐3/* Programming Exercise 7-3 */#include<stdio.h> intmain(void){ int n;double sumeven= 0.0; intct_even = 0;double sumodd= 0.0; intct_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 ofevens: %d", ct_even); if(ct_even > 0)printf(" average: %g",sumeven / ct_even); putchar('\n'); printf("Number ofodds: %d", ct_odd); if(ct_odd > 0)printf(" average: %g",sumodd / ct_odd); putchar('\n'); printf("\ndone\n");return0;}PE 7--‐5/* Programming Exercise 7-5 */#include<stdio.h> intmain(void){ charch;int ct1 =0; intct2 = 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);return0;}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 for2nd tier #define RATE3 0.25 //rate for 3rd tier int main(void){doublehours;double gross;double net;double taxes;printf("Enter the number of hoursworked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS)gross = hours * BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 + (gross -AMT1) * RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net);return0;}PE 7--‐9/* Programming Exercise 7-9 */#include<stdio.h>#include<stdbool.h>int main(void){intlimit;int num;int div;bool numIsPrime; // use int if stdbool.h notavailableprintf("Enter a positive integer:"); while (scanf("%d", &limit)== 1 && limit > 0){if (limit > 1)printf("Here are the prime numbers upthrough %d\n", limit); elseprintf("Noprimes.\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>intmain(void){const doubleprice_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;doublelb_artichokes =0; doublelb_beets = 0;doublelb_carrots = 0;double lb_temp;double lb_total;doublecost_artichokes; doublecost_beets;doublecost_carrots;doublecost_total;doublefinal_total;doublediscount;doubleshipping;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 ofbeets: "); scanf("%lf",&lb_temp); lb_beets +=lb_temp; break;case 'c' : printf("Enter poundsof 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 forbeets, "); 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; elseshipping = 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 $%.2fper 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("%.2flbs 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("Volume 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) { intch; int ct = 0;while ((ch =getchar()) != EOF)ct++;printf("%d characters read\n", ct);return0;}PE 8--‐3/* Programming Exercise 8-3 *//* Using ctype.h eliminates need to assume consecutive coding */#include<stdio.h>#include<ctype.h> intmain(void){ int ch;unsigned longuct = 0;unsigned longlct = 0;unsigned longoct = 0;while ((ch =getchar()) != EOF)if (isupper(ch))uct++; else if(islower(ch))lct++; elseoct++;printf("%lu uppercase characters read\n", uct); printf("%lu lowercase characters read\n", lct); printf("%lu other characters read\n", oct);return0;}/* or you coulduse 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) { inthigh = 100; intlow = 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 yournumber %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 doit!\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 // ratefor 2nd tier #define RATE30.25 // rate for 3rd tier intgetfirst(void); void menu(void);int main(void){ double hours;doublegross;doublenet;doubletaxes;doublepay;charresponse;menu();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 hoursworked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS)gross = hours * pay; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME; if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1+ AMT2)taxes = AMT1 * RATE1 + (gross -AMT1) * RATE2; elsetaxes = 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");return0;}void menu(void){printf("********************************************************""*********\n");printf("Enter the letter corresponding to thedesired 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){intch;ch = getchar();while(isspace(ch))ch = getchar();while(getchar() != '\n')continue;return ch;}Chapter 9 Programming ExercisesPE 9--‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double,double); intmain(void){double x, y;printf("Enter two numbers (q to quit): "); while(scanf("%lf %lf", &x, &y) ==2){ printf("The smaller numberis %f.\n", min(x,y)); printf("Next two values (q to quit): ");}printf("Bye!\n");return0;}double min(double a, double b){return a < b ? a : b;}/* alternativeimplementation doublemin(double a, double b){ if (a< b)return a;elsereturn b;}*/PE 9--‐3/* Programming Exercise 9-3 */#include <stdio.h>void chLineRow(char ch, intc, int r); int main(void){ char ch; int col, row;printf("Enter a character (# toquit): "); 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");return0;}// start rows and cols at0 void chLineRow(charch, 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");return0;}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 Exercise9-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 thispower trip -- bye!\n"); return 0;} double power(double a, int b) /* function definition */{ double pow =1; int i;if (b ==0)== 0)printf("0 to the 0 undefined; using 1 as thevalue\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> voidto_base_n(int x, int base); intmain(void) { int number; intb; int count; printf("Enteran integer (q to quit):\n");while (scanf("%d", &number)== 1){ printf("Enter numberbase (2-10): "); while((count = scanf("%d",&b))== 1&& (b < 2 || b > 10)){printf("base should be in the range 2-10: ");(count !=1)break;printf("Base %dequivalent: ", 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 ofmonths in a year #define YRS 5// number of years of data intmain(void){// initializing rainfall data for 2010- 2014 const floatrain[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 foreach 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 AVERAGES:\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 rainfallover years */ for (year = 0, subtot =0;year < YRS; year++) subtot +=*(*(rain + year) + month); printf("%4.1f", subtot/YRS);}printf("\n"); return0;}PE 10--‐3/* Programming Exercise 10-3 */ #include <stdio.h>#define LEN 10int max_arr(const intar[], int n); voidshow_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 = largestvalue\n", max);return0;}int max_arr(const int ar[], int n)。

C++Primer Plus(第6版)中文版编程练习答案--第六章

C++Primer Plus(第6版)中文版编程练习答案--第六章
5
cout<<"请输入捐款者数目:"<<endl; cin>>n_of_donation; donation* list=new donation[n_of_donation]; //创建动态分配的结构数组
for(int i=0;i<n_of_donation;i++) //输入捐款者的信息 { cout<<"输入第"<<i+1<<"位捐款者的信息:"<<endl; cout<<"名字:"; cin.sync(); getline(cin,list[i].name); cout<<"数目:"; cin>>list[i].money; } int temp=0; //记录有没有人的捐款大于一万元 cout<<"重要捐款人:"<<endl; for(int i=0;i<n_of_donation;i++) { if(list[i].money>10000) { cout<<list[i].name<<" "<<list[i].money<<endl; temp++; } } if(temp==0) cout<<"此项目没有人。"<<endl; temp=0; cout<<"捐款人:"<<endl; for(int i=0;i<n_of_donation;i++) { if(list[i].money<=10000) { cout<<list[i].name<<" "<<list[i].money<<endl; temp++; } } if(temp==0) cout<<"此项目没有人。"<<endl; delete list; getchar(); getchar(); return 0; }

C++-primer-plus(第6版)中文版-编程练习答案(word版)

C++-primer-plus(第6版)中文版-编程练习答案(word版)

第二章:开始学习C++ n”;}<<endl; return 0;}double C2F(double t){return *t+32;}<<endl; return 0;}double convert(double t){return 63240*t;n"; return 0;}style(miles per gallon):"<<endl; cout<<Euro_style<<"L/100Km = "<<*Euro_style<<" mpg\n"; return 0;}Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):Converts to . style(miles per gallon):L/100Km = mpgPress any key to continuestyle(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< *US_style<<"L/100Km\n"; return 0;}style(miles per gallon):19Converts to European style(miles pergallon): 19 mpg = 100KmPress any key to continue第四章复合类型n";return 0;}rand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}rand="A";eight=;snack[0].calory=200;snack[1].brand="B";snack[1].weight=;snack[1].calory=400;snack[2].brand="C";snack[2].weight=;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand<< endl; cout << " weight: " <<snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}et(); car* ps=newcar[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";cout<<"Please enter the make: ";getline(cin,ps[i].name); c out<<"Pleaseenter the year made: ";(cin>>ps[i].year).get();}cout<<"Here is your collection:\n";for(int i=0;i<num;++i)cout<<ps[i].year<<" "<<ps[i].name<<endl;delete [] ps;return 0;}#include <iostream>#include <string> usingnamespace std; structcar{string maker; intyear;};int main(){int number;cout << "How many cars do you wish to catalog "; cin >>number;car* a = new car[number];for (int i = 0; i < number; i++){cout << "Car #" << i+1 << ": " << endl; cout <<"Please enter the maker: "; ();getline(cin,a[i].maker);cout << "Please enter the year made: "; cin >>a[i].year;}cout << "Here is your collection: " << endl; for (inti = 0; i < number; i++)cout << a[i].year << " " << a[i].maker <<endl; delete [] a;return 0;}#include <iostream> usingnamespace std; struct car{char maker[20];int year;};int main(){int number;cout << "How many cars do you wish to catalog "; cin >>number;car* a = new car[number];for (int i = 0; i < number; i++){cout << "Car #" << i+1 << ": " << endl; cout <<"Please enter the maker: "; ();(a[i].maker, 20);cout << "Please enter the year made: "; cin >>a[i].year;}cout << "Here is your collection: " << endl; for (int i = 0; i < number; i++)cout << a[i].year << " " << a[i].maker <<endl; delete [] a;return 0;}n"; return 0;}n";return 0;}和的区别是:word != "done",因为当 word = done 一样时,返回值为1,不一样时才是返回0.;for(int k=0;k<=i;++k)cout<<"*";cout<<endl;}return 0;}第六章分支语句和逻辑运算符n"; break;case 'p':cout<<"A maple is a pianist.\n";break;case 't':cout<<"A maple is a tree.\n";break;case 'g':cout<<"A maple is a game.\n";}return 0;}#include <iostream> usingnamespace std; void show();int main(){show();char choice;while (cin >> choice){switch(choice){case 'c' : cout << "It's a carnivore.\n"; break;case 'p' : cout << "It's a pianist.\n"; break;case 't' : cout << "A maple is a tree.\n"; break;case 'g' : cout << "It's a game.\n"; break;default : cout << "Please enter a c, p, t, or g:";}}return 0;}void show(){cout << "Please enter one of the following choices: \n" "c) carnivore p) pianist\n""t) tree g) game\n";}display by name b. display by title\n"<<"c. display by bopname d. diplay by preference\n"<<"q. quit\n";char ch;bop member[5]={{"Wimp Macho","English Teacher","DEMON",0},{"Raki Rhodes","Junior Programmer","BOOM",1},{"Celia Laiter","Super Star","MIPS",2},{"Hoppy Hipman","Analyst Trainee","WATEE",1},{"Pat Hand","Police","LOOPY",2}};cout<<"Enter your choice:";while(cin>>ch&&ch!='q'){switch(ch){case 'a':for(int i=0;i<5;i++)cout<<member[i].fullname<<endl;break;case 'b':for(int i=0;i<5;i++)cout<<member[i].title<<endl; break;case 'c':for(int i=0;i<5;i++)cout<<member[i].bopname<<endl; break;case 'd':for(int i=0;i<5;i++){if(member[i].preference==0)cout<<member[i].fullname<<endl;else if(member[i].preference==1)cout<<member[i].title<<endl; e lseif(member[i].preference==2)cout<<member[i].bopname<<endl;}break;}cout<<"Next choice: ";}cout<<"Bye!\n";return 0;}#include <iostream> usingnamespace std; const intstrsize = 30; struct bop{char fullname[strsize];char title[strsize]; charbopname[strsize]; intpreference;};void show(); intmain(){bop A[5] ={{"Wimp Macho", "Teacher", "HAHA", 0},{"Raki Rhodes", "Junior Programmer", "LIAR", 1},{"Celia", "engineer", "MIPS", 2},{"Hoppy Hipman", "Analyst Trainee", "WAHU", 1},{"Pat Hand", "Student", "LOOPY", 2}};cout << "Benevolent Order of Programmers Report\n"; show();cout << "Enter your choice: "; charchoice;cin >> choice;while (choice != 'q'){switch(choice){case 'a' : cout << A[0].fullname << endl << A[1].fullname << endl<< A[2].fullname << endl << A[3].fullname << endl<< A[4].fullname << endl; break;case 'b' : cout << A[0].title << endl << A[1].title << endl<< A[2].title << endl << A[3].title << endl<< A[4].title << endl;break;case 'c' : cout << A[0].bopname << endl << A[1].bopname << endl<< A[2].bopname << endl << A[3].bopname << endl<< A[4].bopname << endl; break;case 'd' : cout << A[0].fullname << endl << A[1].title << endl<< A[2].bopname << endl << A[3].title << endl<< A[4].bopname << endl;break;default : cout << "That's not the proper choice.\n";}cout << "Next choice: ";cin >> choice;}cout << "Bye!\n";return 0;}void show(){cout << "a. display by name b. display by title\n"<< "c. display by bopname d. display by preference\n"<< "q. quit\n";}ame); c out<<"请输入第"<<i+1<<"位捐款人捐款的数目:"; cin>>ps[i].money;();}cout<<"Grand Patrons:\n";for(int i=0;i<num;++i)if(ps[i].money>10000){cout<<ps[i].name<<"\n"<<ps[i].money<<endl;++temp;}if(temp==0)cout<<"none\n";cout<<"Patrons:\n";for(int i=0;i<num;++i)if(ps[i].money<=10000){cout<<ps[i].name<<"\n"<<ps[i].money<<endl;++temp;}if(temp==0)cout<<"none\n";delete [] ps;return 0;}#include <iostream>#include <string> usingnamespace std; structcharity{string name;double money;};int main(){int number; intcount = 0;cout << "Please enter the number of donator: "; cin >>number;charity *pt = new charity[number]; for(int i = 0; i < number; i++){cout << "Please enter your name: "; ();getline(cin, pt[i].name);cout << "Please enter the money you are going to donate: "; cin >>pt[i].money;if(pt[i].money > 10000)count++;}if(count == 0)cout << "None(money > 10000)"; else{cout << "Grand Patron\n"; for(int i =0; i < number; i++){if(pt[i].money > 10000)cout << pt[i].name << " " << pt[i].money << endl;}}cout << endl;if(10 - count == 0)cout << "None(money < 10000)"; else {cout << "Patron\n";for(int i = 0; i < number; i++){if(pt[i].money < 10000)cout << pt[i].name << " " << pt[i].money << endl;}}return 0;}n"; exit(EXIT_FAILURE);}inFile>>ch; while()){++sum;inFile>>ch;}if())cout<<"End of file reached.\n";else if())cout<<"Input terminated by data mismatch.\n";elsecout<<"Input terminated for unkonwn reason.\n";cout<<"总共有"<<sum<<"个字符在这个文件中。

C-Primer-Plus第6版编程练习答案(已下载)

C-Primer-Plus第6版编程练习答案(已下载)

Chapter 2 Programming ExercisesPE 2---1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n"); return0;}PE 2---3/* Programming Exercise 2-3 */#include <stdio.h> intmain(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); intmain(void){ jolly();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> intmain(void){ inttoes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes);printf("toes squared = %d\n", toes * toes); return0;}/* 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(void);void two(void); intmain(void){printf("starting now:\n");one_three();printf("done!\n"); return0;}void one_three(void){printf("one\n");two();printf("three\n");}void two(void){printf("two\n");}Chapter 3 Programming ExercisesPE 3---2/* Programming Exercise 3-2 */#include <stdio.h> intmain(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> intmain(void){ floatnum;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;}。

(完整word版)c++primerplus(第六版)课后编程练习答案

(完整word版)c++primerplus(第六版)课后编程练习答案
#include<iostream>
void show();
main()
{
using namespace std;
show();
return 0;
}
void show()
{
using namespace std;
int h,m;
cout<<"enter the number of hours:";
cin>>h;
#include<iostream>
const int inch_per_feet=12;
const double meter_per_inch=0.0254;
const double pound_per_kilogram=2.2;
int main()
{
using namespace std;
cout<<"Please enter your height:"<<endl;
{
cout<<"three blind mice"<<endl;
}
void see()
{
cout<<"see how they run"<<endl;
}
//ex2.4
#include<iostream>
int main()
{
using namespace std;
cout<<"Enter your age:";
cout<<light_years<<" light_years = "<<astro_units<<" astronomical units."<<endl;

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

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

Chapter 2 Programming ExercisesPE 2--‐1/* Programming Exercise 2-1 */#include<stdio.h> intmain(void){ printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n");return 0;}PE 2--‐3/* Programming Exercise 2-3 */#include<stdio.h> intmain(void){ int ageyears;/* age in years */int agedays; /*age in days *//* large ages may requirethe 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>voidjolly(void);voidde ny (v oi d); int m ai n( vo id) {jo lly ( ) ; jo lly ( ) ; jo lly();deny();return;}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> intmain(void){inttoes;toes=1;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>voidone_three(void);voidtwo(void);intmain(void){printf("startingnow:\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> intmain(void){intascii;printf("Enter an ASCIIcode: "); 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> intmain(void){floatnum;printf("Enter a floating-pointvalue: "); scanf("%f", &num);printf("fixed-pointnotation: %f\n", num);printf("exponentialnotation: %e\n", num);printf("p notation: %a\n",num); return 0;}PE 3--‐6/* Programming Exercise 3-6 */#include<stdio.h> intmain(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 ofwater: "); 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> intmain(void){charfname[4];charlname[4];printf("Enteryour first name: ");scanf("%s",fname);printf("Enter yourlast name: ");scanf("%s",lname);printf("%s, %s\n",lname, fname);return 0;}PE 4--‐4/* Programming Exercise 4-4 */ #include<stdio.h> intmain(void){floatheight;charname[4];printf("Enter yourheight 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;}PE 4--‐7/* Programming Exercise 4-7 */#include<stdio.h>#include<float.h> intmain(void){ floatot_f = 1.0/ 3.0;doubleot_d =1.0 / 3.0;printf("floatvalues: ");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 ExercisesPE 5--‐1/* Programming Exercise 5-1 */#include<stdio.h> intmain(void){ constintminperhour= 60; intminutes,hours, mins;printf("Enter the number ofminutes 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;}PE 5--‐3/* Programming Exercise 5-3 */ #include<stdio.h> intmain(void){ constintdaysperweek = 7; intdays,weeks,day_rem;printf("Enter thenumber of days: ");scanf("%d", &days);while (days > 0){ weeks =days /daysperweek;day_rem =days %daysperweek;printf("%d days are %d weeksand %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/* ProgrammingExercise 5-5 */#include <stdio.h>int main(void) /* finds sum of first n integers */ {intcount,sum;intn;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 Exercise5-7 */#include<stdio.h>voidshowCube(double x);int main(void) /* finds cube of entered number */{doubleval;printf("Enter afloating-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>#defineSIZE 26 intmain( void ){ charlcase[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> intmain( void ){charlet='F';charstart;charend;for (end = let; end >= 'A'; end--) {for (start = let; start >= end; start--)printf("%c", start);printf("\n");}return;}PE 6--‐6/*pe6-6.c*/#include<stdio.h> intmain( void ){ intlower,upper,index;int square,cube;printf("Enter starting integer: "); scanf("%d",&lower);printf("Enterending 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;}PE 6--‐8 /*pe6-8.c*/#include<stdio.h> intmain( void ){doublen,m;doubleres;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># d e f i n eS I Z E 8i n t m a i n ( v o i d ) {intvals[SIZE];inti;printf("Please enter %dintegers.\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< s t d i o . h ># d e f i n eS I Z E8i n t m a i n(void){inttwopows[SIZE];int i;int value = 1; /* 2 to the 0 */ for (i = 0; i < SIZE; i++) { twopows[i] =value;value *=2;}i=;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>#defineSIZE8intmain(void){ dou blearr[SIZE ]; doublearr_cumul[SIZE];int i;printf("Enter %dnumbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value#%d: ", i + 1);scanf("%lf",&arr[i]); /* orscanf("%lf", arr +i); */}arr_cumul[0] = arr[0]; /* setfirst 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 #defineRATE_COMP0.05#defineINIT_AMT100.0intmain( void ){doubledaphne =INIT_AMT;doubledeidre =INIT_AMT; intyears = 0;while (deidre <= daphne) { daphne += RATE_SIMP *INIT_AMT;deidre +=RATE_COMP *deidre;++years;}printf("Investment valuesafter %d years:\n", years);printf("Daphne: $%.2f\n", daphne);printf("Deidre: $%.2f\n", deidre);return 0;}Chapter 7 Programming Exercises PE 7--‐1/*Programming Exercise7-1 */#include<stdio.h>intmain(void){charch;intsp_ct=0;intnl_ct=0;intother=0; while((ch=getchar())!='#'){if (ch== ' ')sp_ct++;else if (ch== '\n')nl_ct++;elseother++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other);return;}PE 7--‐3/* Programming Exercise 7-3 */#include<stdio.h> intmain(void){ intn;doublesumeven = 0.0;intct_even= 0;doublesumodd= 0.0;intct_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 ofevens: %d", ct_even);if (ct_even > 0)printf(" average: %g", sumeven / ct_even);putchar('\n');printf("Number ofodds: %d", ct_odd); if(ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar('\n');printf("\ndone\n");return;}PE 7--‐5/* Programming Exercise 7-5 */ #include<stdio.h> intmain(void){charch;intct1=; intct2=; w hile((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;}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 #defineRATE3 0.25 // rate for3rd tier int main(void){doublehours;doublegross;doublenet;doubletaxes;printf("Enter the number of hoursworked this week: "); scanf("%lf",&hours); if (hours <= BASEHRS)gross = hours * BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if(gross <= AMT1) taxes = gross * RATE1;else if (gross <= AMT1 + AMT2)taxes = AMT1 * RATE1 +(gross - AMT1) * RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes; printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net);return;}PE 7--‐9/* Programming Exercise 7-9 */#include<stdio.h>#include<stdb ool.h> int main( void) {intlimit;intnum;intdiv;bool numIsPrime; // use int if stdbool.h not availableprintf("Enter a positiveinteger: "); while(scanf("%d", &limit) == 1&& limit > 0){if (limit > 1)printf("Here are the prime numbers up through %d\n", limit); elseprintf("Noprimes.\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> intmain(void){const doubleprice_artichokes =2.05; const doubleprice_beets = 1.15;const doubleprice_carrots =1.09; const double DISCOUNT_RATE = 0.05; constdouble under5 =6.50; const doubleunder20 = 14.00;const doublebase20 = 14.00;const doubleextralb = 0.50;charch;double lb_artich okes = 0; doublelb_beets = 0; doublelb_carrot s = 0; doublelb_temp; doublelb_total; double cost_ar tichoke s; double cost_b eets; double cost_c arrots; double cost_total;doublefinal_total;doublediscount;doubleshipping;printf("Enter a to buyartichokes, 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("Enterpounds of beets: ");scanf("%lf", &lb_temp);lb_beets += lb_temp;break;case 'c' : printf("Enterpounds 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; elseshipping = base20 +extralb * lb_total; if(cost_total > 100.0)discount =DISCOUNT_RATE *cost_total; elsediscount = 0.0;final_total = cost_total + shipping - discount; printf("Your order:\n");printf("%.2f lbs of artichokes at $%.2fper pound:$ %.2f\n",lb_artichokes, price_artichokes,cost_artichokes); printf("%.2f lbs ofbeets 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("Totalcharges: $%.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);。

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

第二章:开始学习C++//ex2.1--display your name and address#include<iostream>int main(void){using namespace std;cout<<"My name is liao chunguang and I live in hunan chenzhou.\n”;}//ex2.2--convert the furlong units to yard uints-把浪单位换位码单位#include<iostream>double fur2yd(double);int main(){using namespace std;cout<<"enter the distance measured by furlong units:";double fur;cin>>fur;cout<<"convert the furlong to yard"<<endl;double yd;yd=fur2yd(fur);cout<<fur<<" furlong is "<<yd<<" yard"<<endl;return 0;}double fur2yd(double t){return 220*t;}//ex2.3-每个函数都被调用两次#include<iostream>void mice();void see();using namespace std;int main(){mice();mice();see();see();return 0;}void mice(){cout<<"three blind mice"<<endl;}void see(){cout<<"see how they run"<<endl;}//ex2.4#include<iostream>int main(){using namespace std;cout<<"Enter your age:";int age;cin>>age;int month;month=age*12;cout<<age<<" years is "<<month<<" months"<<endl;return 0;}//ex2.5---convert the Celsius valve to Fahrenheit value#include<iostream>double C2F(double);int main(){using namespace std;cout<<"please enter a Celsius value:";double C;cin>>C;double F;F=C2F(C);cout<<C<<" degrees Celsius is "<<F<<" degrees Fahrenheit."<<endl; return 0;}double C2F(double t){return 1.8*t+32;}//ex2.6---convert the light years valve to astronomical units--把光年转换为天文单位#include<iostream>double convert(double);//函数原型int main(){using namespace std;cout<<"Enter the number of light years:";double light_years;cin>>light_years;double astro_units;astro_units=convert(light_years);cout<<light_years<<" light_years = "<<astro_units<<" astronomical units."<<endl; return 0;}double convert(double t){return 63240*t;//1 光年=63240 天文单位}//ex2.7--显示用户输入的小时数和分钟数#include<iostream>void show();main(){using namespace std;show();return 0;}void show(){using namespace std;int h,m;cout<<"enter the number of hours:";cin>>h;cout<<"enter the number of minutes:";cin>>m;cout<<"Time:"<<h<<":"<<m<<endl;}第三章:处理数据//ex3.1—将身高用英尺(feet)和英寸(inch)表示#include<iostream>const int inch_per_feet=12;// const常量--1feet=12inches--1英尺=12英寸int main(){using namespace std;cout<<"please enter your height in inches:___\b\b\b";// \b表示为退格字符int ht_inch;cin>>ht_inch;int ht_feet=ht_inch/inch_per_feet;//取商int rm_inch=ht_inch%inch_per_feet;//取余cout<<"your height is "<<ht_feet<<" feet,and "<<rm_inch<<" inches\n";return 0;}//ex3.2--计算相应的body mass index(体重指数)#include<iostream>const int inch_per_feet=12;const double meter_per_inch=0.0254;const double pound_per_kilogram=2.2;int main(){using namespace std;cout<<"Please enter your height:"<<endl;cout<<"First,enter your height of feet part(输入你身高的英尺部分):_\b";int ht_feet;cin>>ht_feet;cout<<"Second,enter your height of inch part(输入你身高的英寸部分):_\b";int ht_inch;cin>>ht_inch;cout<<"Now,please enter your weight in pound:___\b\b\b";double wt_pound;cin>>wt_pound;int inch;inch=ht_feet*inch_per_feet+ht_inch;double ht_meter;ht_meter=inch*meter_per_inch;double wt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram;cout<<endl;cout<<"Your pensonal body information as follows:"<<endl;cout<<"身高:"<<inch<<"(英尺inch)\n"<<"身高:"<<ht_meter<<"(米meter)\n"<<"体重:"<<wt_kilogram<<"(千克kilogram)\n";double BMI;BMI=wt_kilogram/(ht_meter*ht_meter);cout<<"your Body Mass Index(体重指数) is "<<BMI<<endl;return 0;}//ex3.3 以度,分,秒输入,以度输出#include<iostream>const int minutes_per_degree=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter a latitude in degrees,minutes,and seconds:\n";cout<<"First,enter the degrees:";int degree;cin>>degree;cout<<"Next,enter the minutes of arc:";int minute;cin>>minute;cout<<"Fianlly,enter the seconds of arc:";int second;cin>>second;double show_in_degree;show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/mi nutes_per_degree/seconds_per_minute;cout<<degree<<" degrees,"<<minute<<" minutes,"<<second<<"seconds ="<<show_in_degree<<" degrees\n";return 0;}//ex3.4#include<iostream>const int hours_per_day=24;const int minutes_per_hour=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter the number of seconds:";long seconds;cin>>seconds;int Day,Hour,Minute,Second;Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day;Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day;Minute=seconds/seconds_per_minute%minutes_per_hour;Second=seconds%seconds_per_minute;cout<<seconds<<"seconds = "<<Day<<" days,"<<Hour<<" hours,"<<Minute<<" minutes,"<<Second<<" seconds\n";return 0;}//ex3.5#include<iostream>int main(){using namespace std;cout<<"Enter the world population:";long long world_population;cin>>world_population;cout<<"Enter the population of the US:";long long US_population;cin>>US_population;double percentage;percentage=(double)US_population/world_population*100;cout<<"The population of the US is "<<percentage<<"% of the world population.\n";return 0;}//ex3.6 汽车耗油量-美国(mpg)or欧洲风格(L/100Km)#include<iostream>int main(){using namespace std;cout<<"Enter the miles of distance you have driven:";double m_distance;cin>>m_distance;cout<<"Enter the gallons of gasoline you have used:";double m_gasoline;cin>>m_gasoline;cout<<"Your car can run "<<m_distance/m_gasoline<<" miles per gallon\n";cout<<"Computing by European style:\n";cout<<"Enter the distance in kilometers:";double k_distance;cin>>k_distance;cout<<"Enter the petrol in liters:";double k_gasoline;cin>>k_gasoline;cout<<"In European style:"<<"your can used "<<100*k_gasoline/k_distance<<" liters of petrol per 100 kilometers\n";return 0;}//ex3.7 automobile gasoline consumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"European style(liters per 100 kilometers):";double Euro_style;cin>>Euro_style;cout<<"Converts to U.S. style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<62.14*3.875/Euro_style<<" mpg\n";return 0;}// Note that 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters.//Thus, 19 mpg is about 12.4 L/100Km, and 27 mpg is about 8.7 L/100Km.Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):12.4Converts to U.S. style(miles per gallon):12.4 L/100Km = 19.4187 mpgPress any key to continue// ex3.7 automobile gasoline consumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"U.S. style(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< 62.14*3.875/US_style<<"L/100Km\n";return 0;}// Enter the automobile gasoline consumption figure inU.S. style(miles per gallon):19Converts to European style(miles per gallon):19 mpg = 12.6733L/100KmPress any key to continue第四章复合类型//ex4.1 display the information of student#include<iostream>const int Asize=20;using namespace std;struct student//定义结构描述{char firstname[Asize];char lastname[Asize];char grade;int age;};void display(student);//函数原型放在结构描述后int main(){cout<<"what is your first name?"<<endl;student lcg;//创建结构变量(结构数据对象)cin.getline(lcg.firstname,Asize);cout<<"what is your last name?"<<endl;cin.getline(stname,Asize);cout<<"what letter grade do you deserve?"<<endl;cin>>lcg.grade;cout<<"what is your age?"<<endl;cin>>lcg.age;display(lcg);return 0;}void display(student name){cout<<"Name: "<<name.firstname<<","<<stname<<endl;cout<<"Grade:"<<char(name.grade+1)<<endl;cout<<"Age:"<<name.age<<endl;}//ex4.2 use the string-class instead of char-array#include<iostream>#include<string>int main(){using namespace std;string name,dessert;cout<<"Enter your name: \n";getline(cin,name);cout<<"Enter your favorite dessert: \n";getline(cin,dessert);cout<<"I have some delicious "<<dessert;cout<<" for you, "<<name<<".\n";return 0;}//有时候会遇到需要按下两次回车键才能正确的显示结果,这是vc++6.0的一个BUG,更改如下:else if (_Tr::eq((_E)_C, _D)){_Chg = true;_I.rdbuf()->sbumpc();//修改后的break; }ex4.3 输入其名和姓,并组合显示#include<iostream>#include<cstring>const int Asize=20;int main(){using namespace std;char fname[Asize];char lname[Asize];char fullname[2*Asize+1];cout<<"Enter your first name:";//输入名字,存储在fname[]数组中cin.getline(fname,Asize);cout<<"Enter your last name:";//输入姓,存储在lname[]数组中cin.getline(lname,Asize);strncpy(fullname,lname,Asize);//把姓lname复制到fullname空数组中strcat(fullname,", ");//把“,”附加到上述fullname尾部strncat(fullname,fname,Asize);//把fname名字附加到上述fullname尾部fullname[2*Asize]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here's the information in a single string:"<<fullname<<endl;//显示组合结果return 0;}//ex4.4 使用string对象存储、显示组合结果#include<iostream>#include<string>int main(){using namespace std;string fname,lname,attach,fullname;cout<<"Enter your first name:";getline(cin,fname);//note:将一行输入读取到string类对象中使用的是getline(cin,str)//它没有使用句点表示法,所以不是类方法cout<<"Enter your last name:";getline(cin,lname);attach=", ";fullname=lname+attach+fname;cout<<"Here's the information in a single string:"<<fullname<<endl;return 0;}//ex4.5 declare a struct and initialize it 声明结果并创建一个变量#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack={"Mocha Munch",2.3,350};cout<<"Here's the information of snack:\n";cout<<"brand:"<<snack.brand<<endl;cout<<"weight:"<<snack.weight<<endl;cout<<"calory:"<<snack.calory<<endl;return 0;}//ex4.6 结构数组的声明及初始化#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack[3]={{"Mocha Munch",2.3,350},{"XuFuJi",1.1,300},{"Alps",0.4,100}};for(int i=0;i<3;i++)//利用for循环来显示snack变量的内容{cout<<snack[i].brand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}//ex4.7 pizza披萨饼#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza pie;//创建一个名为pie的结构变量cout<<"What's the name of pizza company:";cin.getline(pany,Size);cout<<"What's the diameter of pizza:";cin>>pie.diameter;cout<<"What's the weight of pizza:";cin>>pie.weight;cout<<"company:"<<pany<<endl;cout<<"diameter:"<<pie.diameter<<"inches"<<endl;cout<<"weight:"<<pie.weight<<"ounches"<<endl;return 0;}//ex4.8 pizza pie 披萨饼使用new创建动态结构#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza *pie=new pizza;//使用new创建动态结构cout<<"What's the diameter of pizza:";cin>>pie->diameter;cin.get();//读取下一个字符cout<<"What's the name of pizza company:";cin.get(pie->company,Size);cout<<"What's the weight of pizza:";cin>>pie->weight;cout<<"diameter:"<<pie->diameter<<" inches"<<endl;cout<<"company:"<<pie->company<<endl;cout<<"weight:"<<pie->weight<<" ounches"<<endl;delete pie;//delete释放内存return 0;}//ex.4.9 使用new动态分配数组—方法1#include<iostream>#include<string>using namespace std;struct CandyBar{string brand;double weight;int calory;};int main(){CandyBar *snack= new CandyBar[3];snack[0].brand="A";//单个初始化由new动态分配的内存snack[0].weight=1.1;snack[0].calory=200;snack[1].brand="B";snack[1].weight=2.2;snack[1].calory=400;snack[2].brand="C";snack[2].weight=4.4;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}//ex.4.10 数组—方法1#include <iostream>int main(){using namespace std;const int Size = 3;int success[Size];cout<<"Enter your success of the three times 40 meters running:\n";cin >> success[0]>>success[1]>>success[2];cout<<"success1:"<<success[0]<<endl;cout<<"success2:"<<success[1]<<endl;cout<<"success3:"<<success[2]<<endl;double average=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<endl;return 0;}//ex.4.10 array—方法2#include <iostream>#include <array>int main(){using namespace std;array<double,4>ad={0};cout<<"Enter your success of the three times 40 meters running:\n";cin >> ad[0]>>ad[1]>>ad[2];cout<<"success1:"<<ad[0]<<endl;cout<<"success2:"<<ad[1]<<endl;cout<<"success3:"<<ad[2]<<endl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<endl;return 0;}第五章循环和关系表达式//ex.5.1#include <iostream>int main(){using namespace std;cout<<"Please enter two integers: ";int num1,num2;cin>>num1>>num2;int sum=0;for(int temp=num1;temp<=num2;++temp)//or temp++sum+=temp;cout<<"The sum from "<<num1<<" to "<<num2<<" is "<<sum<<endl; return 0;}//ex.5.2#include <iostream>#include<array>int main(){using namespace std;array<long double,101>ad={0};ad[1]=ad[0]=1L;for(int i=2;i<101;i++)ad[i]=i*ad[i-1];for(int i=0;i<101;i++)cout<<i<<"! = "<<ad[i]<<endl;return 0;}//ex.5.3#include <iostream>int main(){using namespace std;cout<<"Please enter an integer: ";int sum=0,num;while((cin>>num)&&num!=0){sum+=num;cout<<"So far, the sum is "<<sum<<endl;cout<<"Please enter an integer: ";}return 0;}//ex.5.4#include <iostream>int main(){using namespace std;double sum1,sum2;sum1=sum2=0.0;int year=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}cout<<"经过"<<year<<"年后,Cleo的投资价值才能超过Daphne的投资价值。

相关文档
最新文档