C Primer Plus 第七章编程练习参考答案
cprimer plus第版编程练习答案已

Chapter 2Programming ExercisesPE 2--‐1/*ProgrammingExercise2-1*/#include<stdio.h>intmain(void){printf("GustavMahler\n");printf("Gustav\nMahler\n");printf("Gustav");printf("Mahler\n");return0;}PE 2--‐3/*ProgrammingExercise2-3*/#include<stdio.h>intmain(void){intageyears;/*ageinyears*/intagedays;/*ageindays*//*largeagesmayrequirethelongtype*/ageyears=101;agedays=365*ag eyears;printf("Anageof%dyearsis%ddays.\n",ageyears,agedays);return0; }PE 2--‐4/*ProgrammingExercise2-4*/#include<stdio.h>voidjolly(void);voiddeny(void);intmain(void){jolly();jolly();jolly();deny();return0;}voidjolly(void){printf("Forhe'sajollygoodfellow!\n");}voiddeny(void){printf("Whichnobodycandeny!\n");}PE 2--‐6/*ProgrammingExercise2-6*/#include<stdio.h>intmain(void){inttoes;toes=10;printf("toes=%d\n",toes);printf("Twicetoes=%d\n",2*toes);printf("toessquared=%d\n",toes*toes);return0;}/*orcreatetwomorevariables,setthemto2*toesandtoes*toes*/ PE 2--‐8/*ProgrammingExercise2-8*/#include<stdio.h>voidone_three(void);voidtwo(void);intmain(void){printf("startingnow:\n");one_three();printf("done!\n");return0;}voidone_three(void){printf("one\n");two();printf("three\n");}voidtwo(void){printf("two\n");}Chapter 3Programming ExercisesPE 3--‐2/*ProgrammingExercise3-2*/#include<stdio.h>intmain(void){intascii;printf("EnteranASCIIcode:");scanf("%d",&ascii);printf("%distheASCIIcodefor%c.\n",ascii,ascii);return0; }PE 3--‐4/*ProgrammingExercise3-4*/#include<stdio.h>intmain(void){floatnum;printf("Enterafloating-pointvalue:");scanf("%f",&num); printf("fixed-pointnotation:%f\n",num);printf("exponentialnotation:%e\n",num);printf("pnotation:%a\n",num);return0;}PE 3--‐6/*ProgrammingExercise3-6*/#include<stdio.h>intmain(void){floatmass_mol=3.0e-23;/*massofwatermoleculeingrams*/floatmass_qt=950;/*massofquartofwat eringrams*/floatquarts;floatmolecules;printf("Enterthenumberofquartsofwater:");scanf("%f",&quarts);molecules=quarts*mass_qt/mass_mol;printf("%fquartsofwatercontain%emolecules.\n",quarts,molecules);return0; }Chapter 4Programming ExercisesPE 4--‐1/*ProgrammingExercise4-1*/#include<stdio.h>intmain(void){charfname[40];charlname[40];printf("Enteryourfirstname:");scanf("%s",fname);printf("Enteryourlastname:");scanf("%s",lname);printf("%s,%s\n",lname,fname);return0;}PE 4--‐4/*ProgrammingExercise4-4*/#include<stdio.h>intmain(void){floatheight;charname[40];printf("Enteryourheightininches:");scanf("%f",&height);printf("Enteryourname:");scanf("%s",name);printf("%s,youare%.3ffeettall\n",name,height/12.0);return0;}PE 4--‐7/*ProgrammingExercise4-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("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);return0;}Chapter 5Programming ExercisesPE 5--‐1/*ProgrammingExercise5-1*/#include<stdio.h>intmain(void){constintminperhour=60;intminutes,hours,mins;printf("Enterthenumberofminutestoconvert:");scanf("%d",&minutes);while(minutes>0){hours=minutes/minperhour;mins=minutes%minperhour;printf("%dminutes=%dhours,%dminutes\n",minutes,hours,mins);printf("Enterne xtminutesvalue(0toquit):");scanf("%d",&minutes);}printf("Bye\n");return0;}PE 5--‐3/*ProgrammingExercise5-3*/#include<stdio.h>intmain(void){constintdaysperweek=7;intdays,weeks,day_rem;printf("Enterthenumberofdays:");scanf("%d",&days);while(days>0){weeks=days/daysperweek;day_rem=days%daysperweek;printf("%ddaysare%dweeksand%ddays.\n",days,weeks,day_rem);printf("Enterthenumberofdays(0orlesstoend):");scanf("%d",&days);}printf("Done!\n");return0;}PE 5--‐5/*ProgrammingExercise5-5*/#include<stdio.h>intmain(void)/*findssumoffirstnintegers*/{intcount,sum;intn;printf("Entertheupperlimit:");scanf("%d",&n);count=0;sum=0;while(count++<n)sum=sum+count;printf("sum=%d\n",sum);return0;}PE 5--‐7/*ProgrammingExercise5-7*/#include<stdio.h>voidshowCube(doublex);intmain(void)/*findscubeofenterednumber*/ {doubleval;printf("Enterafloating-pointvalue:");scanf("%lf",&val);showCube(val);r eturn0;}voidshowCube(doublex){printf("Thecubeof%eis%e.\n",x,x*x*x);}Chapter 6Programming ExercisesPE 6--‐1/*pe6-1.c*//*thisimplementationassumesthecharactercodes*/ /*aresequential,astheyareinASCII.*/#include<stdio.h>#defineSIZE26intmain(void){charlcase[SIZE];inti;for(i=0;i<SIZE;i++)lcase[i]='a'+i;for(i=0;i<SIZE;i++)printf("%c",lcase[i]);printf("\n");return0;}PE 6--‐3/*pe6-3.c*//*thisimplementationassumesthecharactercodes*/ /*aresequential,astheyareinASCII.*/#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");}return0;}PE 6--‐6/*pe6-6.c*/#include<stdio.h>intmain(void){intlower,upper,index;intsquare,cube;printf("Enterstartinginteger:");scanf("%d",&lower);printf("Enterendinginteger:");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){doublen,m;doubleres;printf("Enterapairofnumbers:");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("Enternextpair(non-numerictoquit):");}return0;}PE 6--‐11/*pe6-11.c*/#include<stdio.h>#defineSIZE8intmain(void){intvals[SIZE];inti;printf("Pleaseenter%dintegers.\n",SIZE);for(i=0;i<SIZE;i++)scanf("%d",&vals[i]);printf("Here,inreverseorder,arethevaluesyouentered:\n");for(i=SIZE -1;i>=0;i--)printf("%d",vals[i]);printf("\n");return0;}PE 6--‐13/*pe6-13.c*//*Thisversionstartswiththe0power*/#include<stdio.h>#defineSIZE8intmain(void){inttwopows[SIZE];inti;intvalue=1;/*2tothe0*/for(i=0;i<SIZE;i++){twopows[i]=value;value*=2;}i=0;do{printf("%d",twopows[i]);i++;}while(i<SIZE);printf("\n");return0;}PE 6--‐14/*pe-14.c*//*ProgrammingExercise6-14*/#include<stdio.h>#defineSIZE8intmain(void){doublearr[SIZE];doublearr_cumul[SIZE];inti;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];/*setfirstelement*/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");return0;}PE 6--‐16/*pe6-16.c*/#include<stdio.h>#defineRATE_SIMP0.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("Investmentvaluesafter%dyears:\n",years);printf("D aphne:$%.2f\n",daphne);printf("Deidre:$%.2f\n",deidre);return0;}Chapter 7Programming ExercisesPE 7--‐1/*ProgrammingExercise7-1*/#include<stdio.h>intmain(void){charch;intsp_ct=0;intnl_ct=0;intother=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/*ProgrammingExercise7-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%2iseither1or-1{sumodd+=n;++ct_odd;}}printf("Numberofevens:%d",ct_even);if(ct_even>0)printf("average:%g",sumeven/ct_even);putchar('\n');printf("Numberofodds:%d",ct_odd);if(ct_odd>0)printf("average:%g",sumodd/ct_odd);putchar('\n');printf("\ndone\n");return0;}PE 7--‐5/*ProgrammingExercise7-5*/#include<stdio.h>intmain(void){charch;intct1=0;intct2=0;while((ch=getchar())!='#'){switch(ch){case'.':putchar('!');++ct1;break;case'!':putchar('!');putchar('!');++ct2;break;default:putchar(ch);}}printf("%dreplacement(s)of.with!\n",ct1);printf("%dreplacement(s)of!with!!\n",ct2);return0;}PE 7--‐7//ProgrammingExercise7-7#include<stdio.h>#defineBASEPAY10//$10perhour#defineBASEHRS40//hoursatbasepay#defineOVERTIME1.5//1.5time#defineAMT1300//1stratetier#defineAMT2150//2stratetier#defineRATE10.15//ratefor1sttier#defineRATE20.20//ratefor2ndtier#defineRATE30.25//ratefor3rdtierintmain(void){doublehours;doublegross;doublenet;doubletaxes;printf("Enterthenumberofhoursworkedthisweek:");scanf("%lf",&hours);if(hours<=BASEHRS)gross=hours*BASEPAY;elsegross=BASEHRS*BASEPAY+(hours-BASEHRS)*BASEPAY*OVERTIME;if(gross<=AMT1)taxes=gross*RATE1;elseif(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/*ProgrammingExercise7-9*/#include<stdio.h>#include<stdbool.h>intmain(void){intlimit;intnum;intdiv;boolnumIsPrime;//useintifstdbool.hnotavailableprintf("Enterapositiveinteger:");while(scanf("%d",&limit)==1&&limit>0){if(limit>1)printf("Herearetheprimenumbersupthrough%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("%disprime.\n",num);}printf("Enterapositiveinteger(qtoquit):");}printf("Done!\n");return0;}PE 7--‐11/*pe7-11.c*//*ProgrammingExercise7-11*/#include<stdio.h>#include<ctype.h>intmain(void){constdoubleprice_artichokes=2.05;constdoubleprice_beets=1.15;constdoubleprice_carrots=1.09;constdoubleDISCOUNT_RATE=0.05;constdoubleunder5=6.50;constdoubleunder20=14.00;constdoublebase20=14.00;constdoubleextralb=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("Enteratobuyartichokes,bforbeets,");printf("cforcarrots,qtoquit:");while((ch=getchar())!='q'&&ch!='Q'){if(ch=='\n')continue;while(getchar()!='\n')continue;ch=tolower(ch);switch(ch){case'a':printf("Enterpoundsofartichokes:");scanf("%lf",&lb_ temp);lb_artichokes+=lb_temp;break;case'b':printf("Enterpoundsofbeets:");scanf("%lf",&lb_temp);lb_beets+=lb_temp;break;case'c':printf("Enterpoundsofcarrots:");scanf("%lf",&lb_t emp);lb_carrots+=lb_temp;break;default:printf("%cisnotavalidchoice.\n",ch);}printf("Enteratobuyartichokes,bforbeets,");printf("cforcarrots,q toquit:");}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;elseif(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;elsediscount=0.0;final_total=cost_total+shipping-discount;printf("Yourorder:\n");printf("%.2flbsofartichokesat$%.2fperpound:$%.2f\n",lb_artich okes,price_artichokes,cost_artichokes);printf("%.2flbsofbeetsat$%.2fperpound:$%.2f\n",lb_beets,price_beets,cost_beets);printf("%.2flbsofcarrotsat$%.2fperpound:$%.2f\n",lb_carrots,price_carrots,cost_carrots);printf("Totalcostofvegetables:$%.2f\n ",cost_total);if(cost_total>100)printf("Volumediscount:$%.2f\n",discount);printf("Shipping:$%.2f\n",shipping);printf("Totalcharges:$%.2f\n",final_total);return0;}Chapter 8Programming ExercisesPE 8--‐1/*ProgrammingExercise8-1*/#include<stdio.h>intmain(void){intch;intct=0;while((ch=getchar())!=EOF)ct++;printf("%dcharactersread\n",ct);return0;}PE 8--‐3/*ProgrammingExercise8-3*//*Usingctype.heliminatesneedtoassumeconsecutivecoding*/#include<stdio.h>#include<ctype.h>intmain(void){intch;unsignedlonguct=0;unsignedlonglct=0;unsignedlongoct=0;while((ch=getchar())!=EOF)if(isupper(ch))uct++;elseif(islower(ch))lct++;elseoct++;printf("%luuppercasecharactersread\n",uct);printf("%lulowercas echaractersread\n",lct);printf("%luothercharactersread\n",oct);return0;}/*oryoucoulduseif(ch>='A'&&ch<='Z')uct++;elseif(ch>='a'&&ch<='z')lct++;elseoct++;*/PE 8--‐5/*ProgrammingExercise8-5*//*binaryguess.c--animprovednumber-guesser*//*butreliesupontruthful,correctresponses*/#include<stdio.h>#include<ctype.h>intmain(void){inthigh=100;intlow=1;intguess=(high+low)/2;charresponse;printf("Pickanintegerfrom1to100.Iwilltrytoguess");printf("it.\nRespondw ithayifmyguessisright,with");printf("\nahifitishigh,andwithanlifitislow .\n");printf("Uh...isyournumber%d\n",guess);while((response=getchar())!='y')/*getresponse*/{if(response=='\n')continue;if(response!='h'&&response!='l')printf("Idon'tunderstandthatresponse.Pleaseenterhfor\n");printf("high,lfor low,oryforcorrect.\n");continue;}if(response=='h')high=guess-1;elseif(response=='l')low=guess+1;guess=(high+low)/2;printf("Well,then,isit%d\n",guess);}printf("IknewIcoulddoit!\n");return0;}PE 8--‐7/*ProgrammingExercise8-7*/#include<stdio.h>#include<ctype.h>#include<stdio.h>#defineBASEPAY18.75//$8.75perhour#defineBASEPAY29.33//$9.33perhour#defineBASEPAY310.00//$10.00perhour#defineBASEPAY411.20//$11.20perhour#defineBASEHRS40//hoursatbasepay#defineOVERTIME1.5//1.5time#defineAMT1300//1stratetier#defineAMT2150//2stratetier#defineRATE10.15//ratefor1sttier#defineRATE20.20//ratefor2ndtier#defineRATE30.25//ratefor3rdtierintgetfirst(void);voidmenu(void);intmain(void){doublehours;doublegross;doublenet;doubletaxes;doublepay;charresponse;menu();while((response=getfirst())!='q'){if(response=='\n')/*skipovernewlines*/continue;response=tolower(response);/*acceptAasa,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("Pleaseentera,b,c,d,orq.\n");menu();continue;//gotobeginningofloopprintf("Enterthenumberofhoursworkedthisweek:");scanf("%lf",&hours);if(hours<=BASEHRS)gross=hours*pay;elsegross=BASEHRS*pay+(hours-BASEHRS)*pay*OVERTIME;if(gross<=AMT1)taxes=gross*RATE1;elseif(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;}voidmenu(void){printf("********************************************************""*********\n");printf("Enterthelettercorrespondingtothedesiredpayrate""oraction:\n");printf("a)$%4.2f/hrb)$%4.2f/hr\n",BASEPAY1,BASEPAY2);printf("c)$%5.2f/hrd)$%5.2f/hr\n",BASEPAY3,BASEPAY4);printf("q)quit\n");printf("********************************************************""*********\n");}intgetfirst(void){intch;ch=getchar();while(isspace(ch))ch=getchar();while(getchar()!='\n')continue;returnch;}Chapter 9Programming ExercisesPE 9--‐1/*ProgrammingExercise9-1*/#include<stdio.h>doublemin(double,double);intmain(void){doublex,y;printf("Entertwonumbers(qtoquit):");while(scanf("%lf%lf",&x,&y)==2){printf("Thesmallernumberis%f.\n",min(x,y));printf("Nexttwovalues(qtoquit):");}printf("Bye!\n");return0;}doublemin(doublea,doubleb){returna<ba:b;}/*alternativeimplementationdoublemin(doublea,doubleb){if(a<b)returna;elsereturnb;}*/PE 9--‐3/*ProgrammingExercise9-3*/#include<stdio.h>voidchLineRow(charch,intc,intr);intmain(void){charch;intcol,row;printf("Enteracharacter(#toquit):");while((ch=getchar())!='#'){if(ch=='\n')continue;printf("Enternumberofcolumnsandnumberofrows:");if(scanf("%d%d" ,&col,&row)!=2)break;chLineRow(ch,col,row);printf("\nEnternextcharacter(#toquit):");}printf("Bye!\n");return0;}//startrowsandcolsat0voidchLineRow(charch,intc,intr){intcol,row;for(row=0;row<r;row++){for(col=0;col<c;col++)putchar(ch);putchar('\n');}return;}PE 9--‐5/*ProgrammingExercise9-5*/#include<stdio.h>voidlarger_of(double*p1,double*p2);intmain(void){doublex,y;printf("Entertwonumbers(qtoquit):");while(scanf("%lf%lf",&x,&y)==2){larger_of(&x,&y);printf("Themodifiedvaluesare%fand%f.\n",x,y);printf("Nexttwovalues(qtoq uit):");}printf("Bye!\n");return0;}voidlarger_of(double*p1,double*p2){if(*p1>*p2)*p2=*p1;else*p1=*p2;}//alternatively:/*voidlarger_of(double*p1,double*p2){*p1=*p2=*p1>*p2*p1:*p2;}*/PE 9--‐8/*ProgrammingExercise9-8*/#include<stdio.h>doublepower(doublea,intb);/*ANSIprototype*/intmain(void){doublex,xpow;intn;printf("Enteranumberandtheintegerpower");printf("towhich\nthenumberwillberaised.Enterq");printf("toquit.\n");while(scanf("%lf%d",&x,&n)==2){xpow=power(x,n);/*functioncall*/printf("%.3gtothepower%dis%.5g\n",x,n,xpow);printf("Enternextpairofnumbersorqtoquit.\n");}printf("Hopeyouenjoyedthispowertrip--bye!\n");return0;}doublepower(doublea,intb)/*functiondefinition*/{doublepow=1;inti;if(b==0){if(a==0)printf("0tothe0undefined;using1asthevalue\n");pow=1.0;}elseif(a==0)pow=0.0;elseif(b>0)for(i=1;i<=b;i++)pow*=a;else/*b<0*/pow=1.0/power(a,-b);returnpow;/*returnthevalueofpow*/}PE 9--‐10/*ProgrammingExercise9-10*/#include<stdio.h>voidto_base_n(intx,intbase);intmain(void){intnumber;intb;intcount;printf("Enteraninteger(qtoquit):\n");while(scanf("%d",&number)==1){printf("Enternumberbase(2-10):");while((count=scanf("%d",&b))==1&&(b<2||b>10)){printf("baseshouldbeintherange2-10:");}if(count!=1)break;printf("Base%dequivalent:",b);to_base_n(number,b);putchar('\n');printf("Enteraninteger(qtoquit):\n");}printf("Done.\n");return0;}voidto_base_n(intx,intbase)/*recursivefunction*/{intr;r=x%base;if(x>=base)to_base_n(x/base,base);putchar('0'+r);return;}Chapter 10 Programming ExercisesPE 10--‐1/*ProgrammingExercise10-1*/#include<stdio.h>#defineMONTHS12//numberofmonthsinayear#defineYRS5// numberofyearsofdataintmain(void){//initializingrainfalldatafor2010-2014constfloatrain[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}};intyear,month;floatsubtot,total;printf("YEARRAINFALL(inches)\n");for(year=0,total=0;year<YRS;year++){/*foreachyear,sumrainfallforeachmonth*/for(month=0,subtot=0;mont h<MONTHS;month++)subtot+=*(*(rain+year)+month);printf("%5d%15.1f\ n",2010+year,subtot);total+=subtot;/*totalforallyears*/}printf("\nTheyearlyaverageis%.1finches.\n\n",total/YRS);printf("MONTHLY AVERAGES:\n\n");printf("JanFebMarAprMayJunJulAugSepOct");printf("NovDec\n");for(month=0;month<MONTHS;month++){/*foreachmonth,sumrainfalloveryears*/for(year=0,subtot=0;year<YRS;year++)subtot+=*(*(rain+year)+month);printf("%4.1f",subtot/YRS);}printf("\n");return0;}PE 10--‐3/*ProgrammingExercise10-3*/#include<stdio.h>#defineLEN10intmax_arr(constintar[],intn);voidshow_arr(constintar[],intn);intmain(void){intorig[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);return0;}intmax_arr(constintar[],intn){inti;intmax=ar[0];/*don'tuse0asinitialmaxvalue--failsifallarrayvaluesareneg*/for(i=1;i<n;i++)if(max<ar[i])max=ar[i];returnmax;}voidshow_arr(constintar[],intn){inti;for(i=0;i<n;i++)printf("%d",ar[i]);putchar('\n');}PE 10--‐5/*ProgrammingExercise10-5*/#include<stdio.h>#defineLEN10doublemax_diff(constdoublear[],intn);voidshow_arr(constdoublear[],intn);intmain(void){doubleorig[LEN]={1.1,2,3,4,12,61.3,7,8,9,10};doublemax;show_arr(orig,LEN);max=max_diff(orig,LEN);printf("%g=maximumdifference\n",max);return0;}doublemax_diff(constdoublear[],intn){inti;doublemax=ar[0];doublemin=ar[0];for(i=1;i<n;i++){if(max<ar[i])max=ar[i];elseif(min>ar[i])min=ar[i];}returnmax-min;}voidshow_arr(constdoublear[],intn){inti;for(i=0;i<n;i++)printf("%g",ar[i]);putchar('\n');}PE 10--‐8/*ProgrammingExercise10-8*/#include<stdio.h>#defineLEN17#defineLEN23voidcopy_arr(intar1[],constintar2[],intn);voidshow_arr (constint[],int);intmain(void){intorig[LEN1]={1,2,3,4,5,6,7};intcopy[LEN2];show_arr(orig,LEN1);copy_arr(copy,orig+2,LEN2);show_arr(copy,LEN2);return0;}voidcopy_arr(intar1[],constintar2[],intn){inti;for(i=0;i<n;i++)ar1[i]=ar2[i];}voidshow_arr(constintar[],intn){inti;for(i=0;i<n;i++)printf("%d",ar[i]);putchar('\n');}PE 10--‐11/*ProgrammingExercise10-11*/#include<stdio.h>#defineROWS3#defineCOLS5voidtimes2(intar[][COLS],intr);voidshowarr2(intar[][COLS],intr);intmain(void){intstuff[ROWS][COLS]={{1,2,3,4,5},{6,7,8,-2,10},{11,12,13,14,15}};showarr2(stuff,ROWS);putchar('\n');times2(stuff,ROWS);showarr2(stuff,ROWS);return0;}voidtimes2(intar[][COLS],intr){introw,col;for(row=0;row<r;row++)for(col=0;col<COLS;col++)ar[row][col]*=2;}voidshowarr2(intar[][COLS],intr){introw,col;for(row=0;row<r;row++){for(col=0;col<COLS;col++)printf("%d",ar[row][col]);putchar('\n');}}PE 10--‐14/*ProgrammingExercise10-14*/#include<stdio.h>#defineROWS3#defineCOLS5voidstore(doublear[],intn);doubleaverage2d(introws,intcols,doublear[rows][cols]);doublemax2d(introws,intcols,doublear[rows][cols]);voidshowarr2(introws,intcols,doublear[rows][cols]);doubleaverage(constdoublear[],intn);intmain(void){doublestuff[ROWS][COLS];introw;for(row=0;row<ROWS;row++){printf("Enter%dnumbersforrow%d\n",COLS,row+1);store(stuff[row],COLS);}printf("arraycontents:\n");showarr2(ROWS,COLS,stuff);for(row=0;row<ROWS;row++)printf("averagevalueofrow%d=%g\n",row+1,average(stuff[row],COLS));printf("averagev alueofallrows=%g\n",average2d(ROWS,COLS,stuff));printf("largestvalue=%g\n",max2d(R OWS,COLS,stuff));printf("Bye!\n");return0;}voidstore(doublear[],intn){inti;for(i=0;i<n;i++){printf("Entervalue#%d:",i+1);scanf("%lf",&ar[i]);}}doubleaverage2d(introws,intcols,doublear[rows][cols]) {intr,c;doublesum=0.0;for(r=0;r<rows;r++)for(c=0;c<cols;c++)sum+=ar[r][c];if(rows*cols>0)returnsum/(rows*cols);elsereturn0.0;}doublemax2d(introws,intcols,doublear[rows][cols]) {intr,c;doublemax=ar[0][0];for(r=0;r<rows;r++)for(c=0;c<cols;c++)if(max<ar[r][c])max=ar[r][c];returnmax;}voidshowarr2(introws,intcols,doublear[rows][cols]) {introw,col;for(row=0;row<rows;row++){for(col=0;col<cols;col++)printf("%g",ar[row][col]);putchar('\n');}}doubleaverage(constdoublear[],intn){inti;doublesum=0.0;for(i=0;i<n;i++)sum+=ar[i];if(n>0)returnsum/n;elsereturn0.0;}Chapter 11 Programming ExercisesPE 11--‐1/*ProgrammingExercise11-1*/#include<stdio.h>#defineLEN10char*getnchar(char*str,intn);intmain(void){charinput[LEN];char*check;check=getnchar(input,LEN-1);if(check==NULL)puts("Inputfailed.");elseputs(input);puts("Done.\n");return0;}。
c++primerplus课后编程练习答案

第二章:开始学习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 per gallon):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=new car[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";cout<<"Please enter the make: ";getline(cin,ps[i].name);cout<<"Please enter 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;}n";return 0;}n";return 0;};for(int k=0;k<=i;++k)cout<<"*";cout<<endl;}return 0;}。
cprimerplus习题答案

cprimerplus习题答案cprimerplus习题答案C Primer Plus是一本经典的C语言教材,被广泛用于学习和教授C语言的人士。
这本书的习题是帮助读者巩固所学知识和提高编程能力的重要环节。
在这篇文章中,我将为大家提供一些C Primer Plus习题的答案,希望对正在学习C语言的读者有所帮助。
1. 习题1:编写一个程序,输出"Hello, World!"。
答案:```c#include <stdio.h>int main() {printf("Hello, World!");return 0;}```这是一个非常简单的程序,使用了C语言的标准库函数printf()来输出字符串。
2. 习题2:编写一个程序,输入两个整数,然后计算它们的和并输出。
答案:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("它们的和是:%d", sum);return 0;}```这个程序使用了scanf()函数来接收用户输入的两个整数,并使用加法运算符计算它们的和,最后使用printf()函数输出结果。
3. 习题3:编写一个程序,输入一个整数,然后判断它是否为偶数并输出结果。
答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("这是一个偶数。
c prime plus 编程练习答案

Chapter 2PE 2-1/* Programming Exercise 2-1 */#include <stdio.h>int main(void){printf("Anton Bruckner\n");printf("Anton\nBruckner\n");printf("Anton ");printf("Bruckner\n");return 0;}PE 2-3/* Programming Exercise 2-3 */#include <stdio.h>int main(void){int ageyears; /* age in years */int agedays; /* age in days *//* large ages may require the long type */ageyears = 44;agedays = 365 * ageyears;printf("An age of %d years is %d days.\n", ageyears, agedays);return 0;}PE 2-4/* Programming Exercise 2-4 */#include <stdio.h>void jolly(void);void deny(void);int main(void){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-5/* Programming Exercise 2-5 */#include <stdio.h>int main(void){int toes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes);printf("toes squared = %d\n", toes * toes);return 0;}/* or create two more variables, set them to 2 * toes and toes * toes */PE 2-7/* Programming Exercise 2-7 */#include <stdio.h>void one_three(void);void two(void);int main(void){printf("starting now:\n");one_three();printf("done!\n");return 0;}void one_three(void){printf("one\n");two();printf("three\n");}void two(void){printf("two\n");}Chapter 3PE 3-2/* Programming Exercise 3-2 */#include <stdio.h>int main(void){int ascii;printf("Enter an ASCII code: ");scanf("%d", &ascii);printf("%d is the ASCII code for %c.\n", ascii, ascii);return 0;}PE 3-4/* Programming Exercise 3-4 */#include <stdio.h>int main(void){float num;printf("Enter a floating-point value: ");scanf("%f", &num);printf("fixed-point notation: %f\n", num);printf("exponential notation: %e\n", num);return 0;}PE 3-6/* Programming Exercise 3-6 */#include <stdio.h>int main(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ float mass_qt = 950; /* mass of quart of water in grams */ float quarts;float molecules;printf("Enter the number of quarts of water: ");scanf("%f", &quarts);molecules = quarts * mass_qt / mass_mol;printf("%f quarts of water contain %e molecules.\n", quarts,molecules);return 0;}Chapter 4PE 4-1/* Programming Exercise 4-1 */#include <stdio.h>int main(void){char fname[40];char lname[40];printf("Enter your first name: ");scanf("%s", fname);printf("Enter your last name: ");scanf("%s", lname);printf("%s, %s\n", lname, fname);return 0;}PE 4-4/* Programming Exercise 4-4 */#include <stdio.h>int main(void){float height;char name[40];printf("Enter your height in inches: ");scanf("%f", &height);printf("Enter your name: ");scanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return 0;}PE 4-6/* Programming Exercise 4-6 */#include <stdio.h>#include <float.h>int main(void){float ot_f = 1.0 / 3.0;double ot_d = 1.0 / 3.0;printf(" float values: ");printf("%.4f %.12f %.16f\n", ot_f, ot_f, ot_f);printf("double values: ");printf("%.4f %.12f %.16f\n", ot_d, ot_d, ot_d);printf("FLT_DIG: %d\n", FLT_DIG);printf("DBL_DIG: %d\n", DBL_DIG);return 0;}Chapter 5PE 5-1/* Programming Exercise 5-1 */#include <stdio.h>int main(void){const int minperhour = 60;int minutes, hours, mins;printf("Enter the number of minutes to convert: ");scanf("%d", &minutes);while (minutes > 0 ){hours = minutes / minperhour;mins = minutes % minperhour;printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): ");scanf("%d", &minutes);}printf("Bye\n");return 0;}PE 5-3/* Programming Exercise 5-3 */#include <stdio.h>int main(void){const int daysperweek = 7;int days, weeks, day_rem;printf("Enter the number of days: ");scanf("%d", &days);weeks = days / daysperweek;day_rem = days % daysperweek;printf("%d days are %d weeks and %d days.\n", days, weeks, day_rem);return 0;}PE 5-5/* Programming Exercise 5-5 */#include <stdio.h>int main(void) /* finds sum of first n integers */ {int count, sum;int n;printf("Enter the upper limit: ");scanf("%d", &n);count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum = %d\n", sum);return 0;}PE 5-7/* Programming Exercise 5-7 */#include <stdio.h>void showCube(double x);int main(void) /* finds cube of entered number */{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 6PE 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 ){char lcase[SIZE];int i;for (i = 0; i < SIZE; i++)lcase[i] = 'a' + i;for (i = 0; i < SIZE; i++)printf("%c", lcase[i]);printf("\n");return 0;}PE 6-3/* pe6-3.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h>int main( void ){char let = 'F';char start;char end;for (end = let; end >= 'A'; end--){for (start = let; start >= end; start--)printf("%c", start);printf("\n");}return 0;}PE 6-5/* pe6-5.c */#include <stdio.h>int main( void ){int lower, upper, index;int square, cube;printf("Enter starting integer: ");scanf("%d", &lower);printf("Enter ending integer: ");scanf("%d", &upper);printf("%5s %10s %15s\n", "num", "square", "cube"); for (index = lower; index <= upper; index++){square = index * index;cube = index * square;printf("%5d %10d %15d\n", index, square, cube); }return 0;}6-6 编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词.#include <stdio.h>#include <string.h>int main(void){char word[256];int len;int i;printf("Please input a word(length max is 256):");scanf("%s",word);if((len = strlen(word)) > 256){printf("word is too long...\n");return 0;}printf("The word is %s\n",word);printf("End to start:");for(i=len; i>=0;i--)printf("%c",word[i]);printf("\n");return 0;}PE 6-7/* pe6-7.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-10/* pe6-10.c */#include <stdio.h>#define SIZE 8int main( void ){int vals[SIZE];int i;printf("Please enter %d integers.\n", SIZE);for (i = 0; i < SIZE; i++)scanf("%d", &vals[i]);printf("Here, in reverse order, are the values you entered:\n"); for (i = SIZE - 1; i > 0; i--)printf("%d ", vals[i]);printf("\n");return 0;}PE 6-12/* pe6-12.c *//* This version starts with the 0 power */#include <stdio.h>#define SIZE 8int main( void ){int twopows[SIZE];int i;int value = 1; /* 2 to the 0 */for (i = 0; i < SIZE; i++){twopows[i] = value;value *= 2;}i = 0;do{printf("%d ", twopows[i]);i++;} while (i < SIZE);printf("\n");return 0;}PE 6-13/* pe-13.c *//* Programming Exercise 6-13 */#include <stdio.h>#define SIZE 8int main(void){double arr[SIZE];double arr_cumul[SIZE];int i;printf("Enter %d numbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value #%d: ", i + 1);scanf("%lf", &arr[i]);/* or scanf("%lf", arr + i); */}arr_cumul[0] = arr[0]; /* set first element */for (i = 1; i < SIZE; i++)arr_cumul[i] = arr_cumul[i-1] + arr[i];for (i = 0; i < SIZE; i++)printf("%8g ", arr[i]);printf("\n");for (i = 0; i < SIZE; i++)printf("%8g ", arr_cumul[i]);printf("\n");return 0;}PE 6-15/* pe6-15.c */#include <stdio.h>#define RATE_SIMP 0.10#define RATE_COMP 0.05#define INIT_AMT 100.0int main( void ){double daphne = INIT_AMT;double deidre = INIT_AMT;int years = 0;while (deidre <= daphne){daphne += RATE_SIMP * INIT_AMT;deidre += RATE_COMP * deidre;++years;}printf("Investment values after %d years:\n", years); printf("Daphne: $%.2f\n", daphne);printf("Deidre: $%.2f\n", deidre);return 0;}Chapter 7PE 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++;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>int main(void){int n;double sumeven = 0.0;int ct_even = 0;double sumodd = 0.0;int ct_odd = 0;while (scanf("%d", &n) == 1 && n != 0){if (n % 2 == 1){sumodd += n;++ct_odd;}else{sumeven += n;++ct_even;}}printf("Number of evens: %d", ct_even);if (ct_even > 0)printf(" average: %g", sumeven / ct_even);putchar('\n');printf("Number of odds: %d", ct_odd);if (ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar('\n');printf("\ndone\n");return 0;}PE 7-5/* Programming Exercise 7-5 */#include <stdio.h>int main(void){char ch;int ct1 = 0;int ct2 = 0;while ((ch = getchar()) != '#'){switch(ch){case '.' : putchar('!');++ct1;break;case '!' : putchar('!');putchar('!');++ct2;break;default : putchar(ch);}}printf("%d replacements of . with !\n", ct1);printf("%d replacements of ! with !!\n", ct2);return 0;}PE 7-7/* Programming Exercise 7-7 */#include <stdio.h>#define BASEPAY 10 /* $10 per hour */ #define BASEHRS 40 /* hours at basepay */ #define OVERTIME 1.5 /* 1.5 time */ #define AMT1 300 /* 1st rate tier */ #define AMT2 150 /* 2st rate tier */ #define RATE1 0.15 /* rate for 1st tier */ #define RATE2 0.20 /* rate for 2nd tier */ #define RATE3 0.25 /* rate for 3rd tier */ int main(void){double hours;double gross;double net;double taxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours);if (hours <= BASEHRS)gross = hours * BASEPAY;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/* Programmming Exercise 7-9 */#include <stdio.h>#define NO 0#define YES 1int main(void){long num; /* value to be checked */long div; /* potential divisors */long lim; /* limit to values */int prime;printf("Please enter limit to values to be checked; ");printf("Enter q to quit.\n");while (scanf("%ld", &lim) == 1 && lim > 0){for (num = 2; num <= lim; num++){for (div = 2, prime = YES; (div * div) <= num; div++)if (num % div == 0)prime = NO; /* number is not prime */if (prime == YES)printf("%ld is prime.\n", num);}printf("Please enter another limit; ");printf("Enter q to quit.\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 = 1.25;const double price_beets = 0.65;const double price_carrots = 0.89;const double DISCOUNT_RATE = 0.05;char ch;double lb_artichokes;double lb_beets;double lb_carrots;double lb_total;double cost_artichokes;double cost_beets;double cost_carrots;double cost_total;double final_total;double discount;double shipping;printf("Enter a to buy artichokes, b for beets, ");printf("c for carrots, q to quit: ");while ((ch = getchar()) != 'q' && ch != 'Q'){if (ch == '\n')continue;while (getchar() != '\n')continue;ch = tolower(ch);switch (ch){case 'a' : printf("Enter pounds of artichokes: "); scanf("%lf", &lb_artichokes);break;case 'b' : printf("Enter pounds of beets: ");scanf("%lf", &lb_beets);break;case 'c' : printf("Enter pounds of carrots: ");scanf("%lf", &lb_carrots);break;default : printf("%c is not a valid choice.\n");}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 = 3.50;else if (lb_total < 20)shipping = 10.0;elseshipping = 8.0 + 0.1 * 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 8PE 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 ASCII coding */#include <stdio.h>#include <ctype.h>int main(void){int ch;int uct = 0;int lct = 0;while ((ch = getchar()) != EOF)if (isupper(ch))uct++;else if (islower(ch))lct++;printf("%d uppercase characters read\n", uct);printf("%d lowercase characters read\n", lct);return 0;}/*or you could useif (ch >= 'A' && ch <= 'Z')uct++;else if (ch >= 'a' && ch <= 'z')lct++;*/PE 8-5/* Programming Exercise 8-5 *//* binaryguess.c -- an improved number-guesser */#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>#define BASEPAY1 8.75 /* $8.75 per hour */#define BASEPAY2 9.33 /* $9.33 per hour */#define BASEPAY3 10.00 /* $10.00 per hour */#define BASEPAY4 11.20 /* $11.20 per hour */#define BASEHRS 40 /* hours at basepay */#define OVERTIME 1.5 /* 1.5 time */#define AMT1 300 /* 1st rate tier */#define AMT2 150 /* 2st rate tier */#define RATE1 0.15 /* rate for 1st tier */#define RATE2 0.20 /* rate for 2nd tier */#define RATE3 0.25 /* rate for 3rd tier */int getfirst(void);void menu(void);int main(void){double hours;double gross;double net;double taxes;double pay;char response;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 number 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 9PE 9-1/* Programming Exercise 9-1 */#include <stdio.h>double min(double a, double b);int main(void){double x, y;printf("Enter two numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == 2){printf("The smaller number is %f.\n", min(x,y));printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}double min(double a, double b){return a < b ? a : b;}/* alternative implementationdouble min(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;}void chLineRow(char ch, int c, int r){int col, row;for (row = 0; row < r ; row++){for (col = 0; col < c; col++)putchar(ch);putchar('\n');}return;}PE 9-5/* Programming Exercise 9-5 */#include <stdio.h>void larger_of(double *p1, double *p2);int main(void){double x, y;printf("Enter two numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == 2){larger_of(&x, &y);printf("The modified values are %f and %f.\n", x, y);printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}void larger_of(double *p1, double *p2){double temp = *p1 > *p2 ? *p1 : *p2;*p1= *p2 = temp;}PE 9-7/* Programming Exercise 9-7 */#include <stdio.h>double power(double a, int b); /* ANSI prototype */int main(void){double x, xpow;int n;printf("Enter a number and the integer power");printf(" to which\nthe number will be raised. Enter q");printf(" to quit.\n");while (scanf("%lf%d", &x, &n) == 2){xpow = power(x,n); /* function call */printf("%.3g to the power %d is %.5g\n", x, n, xpow);printf("Enter next pair of numbers or q to quit.\n");}printf("Hope you enjoyed this power trip -- bye!\n");return 0;}double power(double a, int b) /* function definition */{double pow = 1;int i;if (b == 0){if (a == 0)printf("0 to the 0 undefined; using 1 as the value\n"); pow = 1.0;}else if (a == 0)pow = 0.0;else if (b > 0)for(i = 1; i <= b; i++)pow *= a;else /* b < 0 */pow = 1.0 / power(a, - b);return pow; /* return the value of pow */}PE 9-9/* Programming Exercise 9-9 */#include <stdio.h>void to_base_n(int x, int base);int main(void){int number;int b;printf("Enter an integer (q to quit):\n");while (scanf("%d", &number) == 1){printf("Enter number base (2-10): ");scanf("%d", &b);printf("Base %d equivalent: ", b);to_base_n(number, b);putchar('\n');printf("Enter an integer (q to quit):\n");}return 0;}void to_base_n(int x, int base) /* recursive function */{int r;r = x % base;if (x >= 2)to_base_n(x / base, base);putchar('0' + r);return;}Chapter 10PE 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 1990 - 1994 */const float rain[YRS][MONTHS] = {{10.2, 8.1, 6.8, 4.2, 2.1, 1.8, 0.2, 0.3, 1.1, 2.3, 6.1, 7.4}, {9.2, 9.8, 4.4, 3.3, 2.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 5.2}, {6.6, 5.5, 3.8, 2.8, 1.6, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 4.2}, {4.3, 4.3, 4.3, 3.0, 2.0, 1.0, 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.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", 1990 + 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;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 10float max_diff(const float ar[], int n);void show_arr(const float ar[], int n);int main(void){float orig[LEN] = {1.1,2,3,4,12,6,7,8,9,10}; float max;show_arr(orig, LEN);max = max_diff(orig, LEN);printf("%g = maximum difference\n", max);return 0;}float max_diff(const float ar[], int n){int i;float max = ar[0];float 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 float ar[], int n){int i;for (i = 0; i < n; i++)printf("%g ", ar[i]);putchar('\n');}PE 10-7/* Programming Exercise 10-7 */#include <stdio.h>#define LEN1 7#define LEN2 3void copy_arr(int ar1[], const int ar2[], int n); void show_arr(const int ar[], int n);int main(void){int orig[LEN1] = {1,2,3,4,5,6,7};int copy[LEN2];。
C语言答案第7章

第7章[习题7-1]输入3个整数,按从小到大的顺序输出。
/*c7_1.c*/#include <stdio.h>void swap(int *p1,int *p2){i nt p;p=*p1;*p1=*p2;*p2=p;}void main(void){i nt n1,n2,n3;i nt *pointer1,*pointer2,*pointer3;p rintf("请输入三个整数 n1,n2,n3:");s canf("%d,%d,%d",&n1,&n2,&n3);p ointer1=&n1;p ointer2=&n2;p ointer3=&n3;i f(n1>n2) swap(pointer1,pointer2);i f(n1>n3) swap(pointer1,pointer3);if(n2>n3) swap(pointer2,pointer3);p rintf("排序后三个整数为:%d,%d,%d\n",n1,n2,n3);}[习题7-2]编写程序,输入一个十进制的正整数,将其对应的八进制数输出。
/*c7_2.c*/#include<stdio.h>#define N 10void main(void){i nt x;c har *p,result[N];p rintf("输入十进制正整数:");s canf("%d",&x);f or(p=result;x!=0;p++){*p=x%8+'0';x=x/8;}f or(p--;p>=result;p--)putchar(*p);p utchar('\n');}[习题7-3]输入一个字符串,用指针方式逐一显示字符,并求其长度。
【最新+免费】C+PRIMER+PLUS中文版(第五版)+的课后编程练习答案

【最新编排】---------------------------------------------------------------------------------------------------------------------- ?----------------------- Page £±-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen PrataChapter £²PE £²-£±/* Programming Exercise £²-£± */#include <stdio.h>int main(void){printf("Anton Bruckner\n");printf("Anton\nBruckner\n");printf("Anton ");printf("Bruckner\n");return 0;}PE £²-3/* Programming Exercise £²-3 */#include <stdio.h>int main(void){int ageyears; /* age in years */int agedays; /* age in days *//* large ages may require the long type */ageyears = 44;agedays = 365 * ageyears;printf("An age of %d years is %d days.\n", ageyears, agedays);return 0;}PE £²-4/* Programming Exercise £²-4 */#include <stdio.h>void jolly(void);void deny(void);int main(void){jolly();jolly();jolly();deny();sp Page £± of 88 August £²£±, £±999----------------------- Page £²-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratareturn 0;}void jolly(void){printf("For he's a jolly good fellow!\n");void deny(void){printf("Which nobody can deny!\n");}PE £²-5/* Programming Exercise £²-5 */#include <stdio.h>int main(void){int toes;toes = £±0;printf("toes = %d\n", toes);printf("Twice toes = %d\n", £² * toes);printf("toes squared = %d\n", toes * toes);return 0;}/* or create two more variables, set them to £² * toes and toes * toes */PE £²-7/* Programming Exercise £²-7 */#include <stdio.h>void one_three(void);void two(void);int main(void){printf("starting now:\n");one_three();printf("done!\n");return 0;}void one_three(void){printf("one\n");sp Page £² of 88 August £²£±, £±999----------------------- Page 3-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratatwo();printf("three\n");}void two(void){printf("two\n");}Chapter 3PE 3-£²/* Programming Exercise 3-£² */#include <stdio.h>int main(void){int ascii;printf("Enter an ASCII code: ");scanf("%d", &ascii);printf("%d is the ASCII code for %c.\n", ascii, ascii);return 0;}PE 3-4/* Programming Exercise 3-4 */#include <stdio.h>int main(void){float num;printf("Enter a floating-point value: ");scanf("%f", &num);printf("fixed-point notation: %f\n", num);printf("exponential notation: %e\n", num);return 0;}PE 3-6/* Programming Exercise 3-6 */#include <stdio.h>sp Page 3 of 88 August £²£±, £±999----------------------- Page 4-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataint main(void){float mass_mol = 3.0e-£²3; /* 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 4PE 4-£±/* Programming Exercise 4-£± */#include <stdio.h>int main(void){char fname¡¾40¡¿;char lname¡¾40¡¿;printf("Enter your first name: ");scanf("%s", fname);printf("Enter your last name: ");scanf("%s", lname);printf("%s, %s\n", lname, fname);return 0;}PE 4-4/* Programming Exercise 4-4 */#include <stdio.h>int main(void){float height;char name¡¾40¡¿;printf("Enter your height in inches: "); scanf("%f", &height);printf("Enter your name: ");sp Page 4 of 88 August £²£±, £±999----------------------- Page 5-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratascanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / £±£².0);return 0;}PE 4-6/* Programming Exercise 4-6 */#include <stdio.h>#include <float.h>int main(void){float ot_f = £±.0 / 3.0;double ot_d = £±.0 / 3.0;printf(" float values: ");printf("%.4f %.£±£²f %.£±6f\n", ot_f, ot_f, ot_f); printf("double values: ");printf("%.4f %.£±£²f %.£±6f\n", ot_d, ot_d, ot_d); printf("FLT_DIG: %d\n", FLT_DIG);printf("DBL_DIG: %d\n", DBL_DIG);return 0;}Chapter 5PE 5-£±/* Programming Exercise 5-£± */#include <stdio.h>int main(void){const int minperhour = 60;int minutes, hours, mins;printf("Enter the number of minutes to convert: ");scanf("%d", &minutes);while (minutes > 0 ){hours = minutes / minperhour;mins = minutes % minperhour;printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins);printf("Enter next minutes value (0 to quit): ");scanf("%d", &minutes);}sp Page 5 of 88 August £²£±, £±999----------------------- Page 6-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataprintf("Bye\n");return 0;}PE 5-3/* Programming Exercise 5-3 */#include <stdio.h>int main(void){const int daysperweek = 7;int days, weeks, day_rem;printf("Enter the number of days: ");scanf("%d", &days);weeks = days / daysperweek;day_rem = days % daysperweek;printf("%d days are %d weeks and %d days.\n", days, weeks, day_rem);return 0;}PE 5-5/* Programming Exercise 5-5 */#include <stdio.h>int main(void) /* finds sum of first n integers */ {int count, sum;int n;printf("Enter the upper limit: ");scanf("%d", &n);count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum = %d\n", sum);return 0;}PE 5-7/* Programming Exercise 5-7 */#include <stdio.h>void showCube(double x);int main(void) /* finds cube of entered number */{sp Page 6 of 88 August £²£±, £±999----------------------- Page 7-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratadouble 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 6PE 6-£±/* pe6-£±.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */ #include <stdio.h>#define SIZE £²6int main( void ){char lcase¡¾SIZE¡¿;int i;for (i = 0; i < SIZE; i++)lcase¡¾i¡¿ = 'a' + i;for (i = 0; i < SIZE; i++)printf("%c", lcase¡¾i¡¿);printf("\n");return 0;}PE 6-3/* pe6-3.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h>int main( void ){char let = 'F';char start;char end;for (end = let; end >= 'A'; end--)sp Page 7 of 88 August £²£±, £±999----------------------- Page 8-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata{for (start = let; start >= end; start--) printf("%c", start);printf("\n");}return 0;}PE 6-5/* pe6-5.c */#include <stdio.h>int main( void ){int lower, upper, index;int square, cube;printf("Enter starting integer: ");scanf("%d", &lower);printf("Enter ending integer: ");scanf("%d", &upper);printf("%5s %£±0s %£±5s\n", "num", "square", "cube"); for (index = lower; index <= upper; index++){square = index * index;cube = index * square;printf("%5d %£±0d %£±5d\n", index, square, cube); }return 0;}PE 6-7/* pe6-7.c */#include <stdio.h>int main( void ){double n, m;double res;printf("Enter a pair of numbers: ");while (scanf("%lf %lf", &n, &m) == £²){res = (n - m) / (n * m);printf("(%.3g - %.3g)/(%.3g*%.3g) = %.5g\n", n, m, n, m, res);sp Page 8 of 88 August £²£±, £±999----------------------- Page 9-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataprintf("Enter next pair (non-numeric to quit): ");}return 0;}PE 6-£±0/* pe6-£±0.c */#include <stdio.h>#define SIZE 8int main( void ){int vals¡¾SIZE¡¿;int i;printf("Please enter %d integers.\n", SIZE);for (i = 0; i < SIZE; i++)scanf("%d", &vals¡¾i¡¿);printf("Here, in reverse order, are the values you entered:\n"); for (i = SIZE - £±; i > 0; i--)printf("%d ", vals¡¾i¡¿);printf("\n");return 0;}PE 6-£±£²/* pe6-£±£².c *//* This version starts with the 0 power */#include <stdio.h>#define SIZE 8int main( void ){int twopows¡¾SIZE¡¿;int i;int value = £±; /* £² to the 0 */for (i = 0; i < SIZE; i++){twopows¡¾i¡¿ = value;value *= £²;}i = 0;do{printf("%d ", twopows¡¾i¡¿);i++;sp Page 9 of 88 August £²£±, £±999----------------------- Page £±0-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata} while (i < SIZE);printf("\n");return 0;}PE 6-£±3/* pe-£±3.c *//* Programming Exercise 6-£±3 */#include <stdio.h>#define SIZE 8int main(void){double arr¡¾SIZE¡¿;double arr_cumul¡¾SIZE¡¿;int i;printf("Enter %d numbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value #%d: ", i + £±);scanf("%lf", &arr¡¾i¡¿);/* or scanf("%lf", arr + i); */}arr_cumul¡¾0¡¿ = arr¡¾0¡¿; /* set first element */ for (i = £±; i < SIZE; i++)arr_cumul¡¾i¡¿ = arr_cumul¡¾i-£±¡¿ + 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-£±5/* pe6-£±5.c */#include <stdio.h>#define RATE_SIMP 0.£±0#define RATE_COMP 0.05#define INIT_AMT £±00.0int main( void )sp Page £±0 of 88 August £²£±, £±999----------------------- Page £±£±-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata{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: $%.£²f\n", daphne);printf("Deidre: $%.£²f\n", deidre);return 0;}Chapter 7PE 7-£±/* Programming Exercise 7-£± */#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++;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>int main(void)sp Page £±£± of 88 August £²£±, £±999----------------------- Page £±£²-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata{int n;double sumeven = 0.0;int ct_even = 0;double sumodd = 0.0;int ct_odd = 0;while (scanf("%d", &n) == £± && n != 0){if (n % £² == £±){sumodd += n;++ct_odd;}else{sumeven += n;++ct_even;}}printf("Number of evens: %d", ct_even);if (ct_even > 0)printf(" average: %g", sumeven / ct_even); putchar('\n');printf("Number of odds: %d", ct_odd);if (ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar ('\n');printf("\ndone\n");return 0;}PE 7-5/* Programming Exercise 7-5 */#include <stdio.h>int main(void){char ch;int ct£± = 0;int ct£² = 0;while ((ch = getchar()) != '#'){switch(ch){case '.' : putchar('!'); ++ct£±;break;case '!' : putchar('!');sp Page £±£² of 88 August £²£±, £±999----------------------- Page £±3-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataputchar('!');++ct£²;break;default : putchar(ch);}}printf("%d replacements of . with !\n", ct£±);printf("%d replacements of ! with !!\n", ct£²);return 0;}PE 7-7/* Programming Exercise 7-7 */#include <stdio.h>#define BASEPAY £±0 /* $£±0 per hour */ #define BASEHRS 40 /* hours at basepay */#define OVERTIME £±.5 /* £±.5 time */#define AMT£± 300 /* £±st rate tier */#define AMT£² £±50 /* £²st rate tier */ #define RATE£± 0.£±5 /* rate for £±st tier */ #define RATE£² 0.£²0 /* rate for £²nd tier */ #define RATE3 0.£²5 /* rate for 3rd tier */ int main(void){double hours;double gross;double net;double taxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours);if (hours <= BASEHRS)gross = hours * BASEPAY;elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME;if (gross <= AMT£±)taxes = gross * RATE£±;else if (gross <= AMT£± + AMT£²)taxes = AMT£± * RATE£± + (gross - AMT£±) * RATE£²;elsetaxes = AMT£± * RATE£± + AMT£² * RATE£² + (gross - AMT£± - AMT£²) * RATE3;net = gross - taxes;printf("gross: $%.£²f; taxes: $%.£²f; net: $%.£²f\n", gross, taxes, net);return 0;}PE 7-9sp Page £±3 of 88 August £²£±, £±999----------------------- Page £±4-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata/* Programmming Exercise 7-9 */#include <stdio.h>#define NO 0#define YES £±int main(void){long num; /* value to be checked */long div; /* potential divisors */long lim; /* limit to values */int prime;printf("Please enter limit to values to be checked; ");printf("Enter q to quit.\n");while (scanf("%ld", &lim) == £± && lim > 0){for (num = £²; num <= lim; num++){for (div = £², prime = YES; (div * div) <= num; div++)if (num % div == 0)prime = NO; /* number is not prime */ if (prime == YES)printf("%ld is prime.\n", num); }printf("Please enter another limit; "); printf("Enter q to quit.\n");}return 0;}PE 7-£±£±/* pe7-£±£±.c *//* Programming Exercise 7-£±£± */#include <stdio.h>#include <ctype.h>int main(void){const double price_artichokes = £±.£²5;const double price_beets = 0.65;const double price_carrots = 0.89;const double DISCOUNT_RATE = 0.05;char ch;double lb_artichokes;double lb_beets;double lb_carrots;double lb_total;double cost_artichokes;double cost_beets;double cost_carrots;double cost_total;double final_total;double discount;double shipping;sp Page £±4 of 88 August £²£±, £±999----------------------- Page £±5-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataprintf("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_artichokes);break;case 'b' : printf("Enter pounds of beets: ");scanf("%lf", &lb_beets);break;case 'c' : printf("Enter pounds of carrots: ");scanf("%lf", &lb_carrots);break;default : printf("%c is not a valid choice.\n");}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 = 3.50;else if (lb_total < £²0)shipping = £±0.0;elseshipping = 8.0 + 0.£± * lb_total;if (cost_total > £±00.0)discount = DISCOUNT_RATE * cost_total;elsediscount = 0.0;final_total = cost_total + shipping - discount;printf("Your order:\n");printf("%.£²f lbs of artichokes at $%.£²f per pound:$ %.£²f\n", lb_artichokes, price_artichokes, cost_artichokes);printf("%.£²f lbs of beets at $%.£²f per pound: $%.£²f\n",lb_beets, price_beets, cost_beets);printf("%.£²f lbs of carrots at $%.£²f per pound: $%.£²f\n",lb_carrots, price_carrots, cost_carrots);printf("Total cost of vegetables: $%.£²f\n", cost_total);if (cost_total > £±00)printf("Volume discount: $%.£²f\n", discount);printf("Shipping: $%.£²f\n", shipping);sp Page £±5 of 88 August £²£±, £±999----------------------- Page £±6-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prataprintf("Total charges: $%.£²f\n", final_total);return 0;}Chapter 8PE 8-£±/* Programming Exercise 8-£± */#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 ASCII coding */ #include <stdio.h>#include <ctype.h>int main(void){int ch;int uct = 0;int lct = 0;while ((ch = getchar()) != EOF)if (isupper(ch))uct++;else if (islower(ch))lct++;printf("%d uppercase characters read\n", uct); printf("%d lowercase characters read\n", lct);return 0;}/*or you could useif (ch >= 'A' && ch <= 'Z')sp Page £±6 of 88 August £²£±, £±999----------------------- Page £±7-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratauct++;else if (ch >= 'a' && ch <= 'z')lct++;*/PE 8-5/* Programming Exercise 8-5 *//* binaryguess.c -- an improved number-guesser */#include <stdio.h>#include <ctype.h>int main(void){int high = £±00;int low = £±;int guess = (high + low) / £²;char response;printf("Pick an integer from £± to £±00. 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 - £±;else if (response == 'l')low = guess + £±;guess = (high + low) / £²;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>#define BASEPAY£± 8.75 /* $8.75 per hour */#define BASEPAY£² 9.33 /* $9.33 per hour */#define BASEPAY3 £±0.00 /* $£±0.00 per hour */sp Page £±7 of 88 August £²£±, £±999----------------------- Page £±8-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Prata#define BASEPAY4 £±£±.£²0 /* $£±£±.£²0 per hour */ #define BASEHRS 40 /* hours at basepay */#define OVERTIME £±.5 /* £±.5 time */#define AMT£± 300 /* £±st rate tier */#define AMT£² £±50 /* £²st rate tier */ #define RATE£± 0.£±5 /* rate for £±st tier */ #define RATE£² 0.£²0 /* rate for £²nd tier */ #define RATE3 0.£²5 /* rate for 3rd tier */int getfirst(void);void menu(void);int main(void){double hours;double gross;double net;double taxes;double pay;char response;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 = BASEPAY£±; break;case 'b' : pay = BASEPAY£²; 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 <= AMT£±)taxes = gross * RATE£±;else if (gross <= AMT£± + AMT£²)taxes = AMT£± * RATE£± + (gross - AMT£±) * RATE£²;elsetaxes = AMT£± * RATE£± + AMT£² * RATE£² + (gross - AMT£± - AMT£²) *RATE3;net = gross - taxes;printf("gross: $%.£²f; taxes: $%.£²f; net: $%.£²f\n", gross, taxes,net);menu();}printf("Done.\n");sp Page £±8 of 88 August £²£±, £±999----------------------- Page £±9-----------------------Answers For Programming Exercises in C Primer Plus, 5rd Edition, by Stephen Pratareturn 0;}void menu(void){printf("********************************************************""*********\n");printf("Enter the number corresponding to the desired pay rate"" or action:\n");printf("a) $%4.£²f/hr b) $%4.£²f/hr\n", BASEPAY£±,BASEPAY£²);printf("c) $%5.£²f/hr d) $%5.£²f/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 9PE 9-£±/* Programming Exercise 9-£± */#include <stdio.h>double min(double a, double b);int main(void){double x, y;printf("Enter two numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == £²){printf("The smaller number is %f.\n", min(x,y));。
C++_Primer_Plus(第五版)习题解答
Chapter 2// pe2-2.cpp#include <iostream>int main(void){using namespace std;cout << "Enter a distance in furlongs: ";double furlongs;cin >> furlongs;double feet;feet = 220 * furlongs;cout << furlongs << " furlongs = "<< feet << " feet\n";return 0;}// pe2-3.cpp#include <iostream>using namespace std;void mice();void run();int main(){mice();mice();run();run();return 0;}void mice(){cout << "Three blind mice\n";}void run(){cout << "See how they run\n";}// pe2-4.cpp#include <iostream>double C_to_F(double);int main(){using namespace std;cout << "Enter a temperature in Celsius: "; double C;cin >> C;double F;F = C_to_F(C);cout << C << " degrees Celsius = "<< F << " degrees Fahrenheit\n";return 0;}double C_to_F(double temp){return 1.8 * temp + 32.0;}Chapter 3// pe3-1.cpp#include <iostream>const int Inch_Per_Foot = 12;int main(void){using namespace std;// Note: some environments don't support the backspace charactercout << "Please enter your height in inches: ___/b/b/b ";int ht_inch;cin >> ht_inch;int ht_feet = ht_inch / Inch_Per_Foot;int rm_inch = ht_inch % Inch_Per_Foot;cout << "Your height is " << ht_feet << " feet, ";cout << rm_inch << " inch(es).\n";return 0;}// pe3-3.cpp#include <iostream>const double MINS_PER_DEG = 60.0;const double SECS_PER_MIN = 60.0;int main(){using namespace std;int degrees;int minutes;int seconds;double latitude;cout << "Enter a latitude in degrees, minutes, and seconds:\n";cout << "First, enter the degrees: ";cin >> degrees;cout << "Next, enter the minutes of arc: ";cin >> minutes;cout << "Finally, enter the seconds of arc: ";cin >> seconds;latitude = degrees + (minutes + seconds / SECS_PER_MIN)/MINS_PER_DEG; cout << degrees << " degrees, " << minutes << " minutes, "<< seconds << " seconds = " << latitude << " degrees\n";return 0;}// pe3-5.cpp#include <iostream>int main(void){using namespace std;cout << "How many miles have you driven your car? ";float miles;cin >> miles;cout << "How many gallons of gasoline did the car use? ";float gallons;cin >> gallons;cout << "Your car got " << miles / gallons;cout << " miles per gallon.\n";return 0;}// pe3-6.cpp#include <iostream>const double KM100_TO_MILES = 62.14;const double LITERS_PER_GALLON = 3.875;int main ( void ){using namespace std;double euro_rating;double us_rating;cout << "Enter fuel consumption in liters per 100 km: ";cin >> euro_rating;// divide by LITER_PER_GALLON to get gallons per 100-km// divide by KM100_TO_MILES to get gallons per mile// invert result to get miles per gallonus_rating = (LITERS_PER_GALLON * KM100_TO_MILES) / euro_rating; cout << euro_rating << " liters per 100 km is ";cout << us_rating << " miles per gallon.\n";return 0;}Chapter 4// pe4-2.cpp -- storing strings in string objects#include <iostream>#include <string>int main(){using namespace std;string name;string dessert;cout << "Enter your name:\n";getline(cin, name); // reads through newlinecout << "Enter your favorite dessert:\n";getline(cin, dessert);cout << "I have some delicious " << dessert;cout << " for you, " << name << ".\n";return 0;}// pe4-3.cpp -- storing strings in char arrays#include <iostream>#include <cstring>const int SIZE = 20;int main(){using namespace std;char firstName[SIZE];char lastName[SIZE];char fullName[2*SIZE + 1];cout << "Enter your first name: ";cin >> firstName;cout << "Enter your last name: ";cin >> lastName;strncpy(fullName,lastName,SIZE);strcat(fullName, ", ");strncat(fullName, firstName, SIZE);fullName[SIZE - 1] = '\0';cout << "Here's the information in a single string: " << fullName << endl;return 0;}// pe4-5.cpp// a candybar structurestruct CandyBar {char brand[40];double weight;int calories;};#include <iostream>int main(){using namespace std; //introduces namespace stdCandyBar snack = { "Mocha Munch", 2.3, 350 };cout << "Brand name: " << snack.brand << endl;cout << "Weight: " << snack.weight << endl;cout << "Calories: " << snack.calories << endl;return 0;}// p#include <iostream>const int Slen = 70;struct pizza {char name[Slen];float diameter;float weight;};int main(void)using namespace std;pizza pie;cout << "What is the name of the pizza company? ";cin.getline(, Slen);cout << "What is the diameter of the pizza in inches? ";cin >> pie.diameter;cout << "How much does the pizza weigh in ounces? ";cin >> pie.weight;cout << "Company: " << << "\n";cout << "Diameter: " << pie.diameter << " inches\n";cout << "Weight: " << pie.weight << " ounces\n";return 0;}Chapter 5// pe5-2.cpp#include <iostream>int main(void){using namespace std;double sum = 0.0;double in;cout << "Enter a number (0 to terminate) : ";cin >> in;while (in != 0) {sum += in;cout << "Running total = " << sum << "\n";cout << "Enter next number (0 to terminate) : ";cin >> in;}cout << "Bye!\n";return 0;}// pe5-4.cpp// book sales#include <iostream>const int MONTHS = 12;const char * months[MONTHS] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};int main(){using namespace std; //introduces namespace stdint sales[MONTHS];int month;cout << "Enter the monthly sales for \"C++ for Fools\":\n";for (month = 0; month < MONTHS; month++){cout << "Sales for " << months[month] << ": ";cin >> sales[month];}double total = 0.0;for (month = 0; month < MONTHS; month++)total += sales[month];cout << "Total sales: " << total << endl;return 0;}// pe5-6.cpp#include <iostream>struct car { char name[20]; int year;};int main(void){using namespace std;int n;cout << "How many cars do you wish to catalog?: ";cin >> n;while(cin.get() != '\n') // get rid of rest of line;car * pc = new car [n];int i;for (i = 0; i < n; i++){cout << "Car #" << (i + 1) << ":\n";cout << "Please enter the make: ";cin.getline(pc[i].name,20);cout << "Please enter the year made: ";cin >> pc[i].year;while(cin.get() != '\n') // get rid of rest of line ;}cout << "Here is your collection:\n";for (i = 0; i < n; i++)cout << pc[i].year << " " << pc[i].name << "\n";delete [] pc;return 0;}// pe5-7.cpp -- count words using C-style string#include <iostream>#include <cstring> // prototype for strcmp()const int STR_LIM = 50;int main(){using namespace std;char word[STR_LIM];int count = 0;cout << "Enter words (to stop, type the word done):\n";while (cin >> word && strcmp("done", word))++count;cout << "You entered a total of " << count << " words.\n"; return 0;}// pe5-9.cpp//nested loops#include <iostream>int main(){using namespace std; //introduces namespace stdint rows;int row;int col;int periods;cout << "Enter number of rows: ";cin >> rows;for (row = 1; row <= rows; row++){periods = rows - row;for (col = 1; col <= periods; col++)cout << '.';// col already has correct value for next loopfor ( ; col <= rows; col++)cout << '*';cout << endl;}return 0;}Chapter 6// pe6-1.cpp#include <iostream>#include <cctype>int main( ){using namespace std; //introduces namespace stdchar ch;cin.get(ch);while(ch != '@'){if (!isdigit(ch)){if (isupper(ch))ch = tolower(ch);else if (islower(ch))ch = toupper(ch);cout << ch;}cin.get(ch);}return 0;}// pe6-3.cpp#include <iostream>int main(void){using namespace std;cout << "Please enter one of the following choices:\n";cout << "c) carnivore p) pianist\n"<< "t) tree g) game\n";char ch;cin >> ch;while (ch != 'c' && ch != 'p' && ch != 't' && ch != 'g'){cout << "Please enter a c, p, t, or g: ";cin >> ch;}switch (ch){case 'c' : cout << "A cat is a carnivore.\n";break;case 'p' : cout << "Radu Lupu is a pianist.\n";break;case 't' : cout << "A maple is a tree.\n";break;case 'g' : cout << "Golf is a game.\n";break;default : cout << "The program shouldn't get here!\n"; }return 0;}// pe6-5.cpp// Neutronia taxation#include <iostream>const double LEV1 = 5000;const double LEV2 = 15000;const double LEV3 = 35000;const double RATE1 = 0.10;const double RATE2 = 0.15;const double RATE3 = 0.20;int main( ){using namespace std;double income;double tax;cout << "Enter your annual income in tvarps: ";cin >> income;if (income <= LEV1)tax = 0;else if (income <= LEV2)tax = (income - LEV1) * RATE1;else if (income <= LEV3)tax = RATE1 * (LEV2 - LEV1) + RATE2 * (income - LEV2);elsetax = RATE1 * (LEV2 - LEV1) + RATE2 * (LEV3 - LEV2)+ RATE3 * (income - LEV3);cout << "You owe Neutronia " << tax << " tvarps in taxes.\n"; return 0;}// pe6-7.cpp#include <iostream>#include <string>int main(){using namespace std;string word;char ch;int vowel = 0;int consonant = 0;int other = 0;cout << "Enter words (q to quit):\n";cin >> word;while ( word != "q"){ch = tolower(word[0]);if (isalpha(ch)){if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')vowel++;elseconsonant++;}elseother++;cin >> word;}cout << vowel <<" words beginning with vowels\n";cout << consonant << " words beginning with consonants\n";cout << other << " others\n";return 0;}// pe6-8.cpp -- counting characters#include <iostream>#include <fstream> // file I/O suppport#include <cstdlib> // support for exit()const int SIZE = 60;int main(){using namespace std;char filename[SIZE];char ch;ifstream inFile; // object for handling file inputcout << "Enter name of data file: ";cin.getline(filename, SIZE);inFile.open(filename); // associate inFile with a fileif (!inFile.is_open()) // failed to open file{cout << "Could not open the file " << filename << endl;cout << "Program terminating.\n";exit(EXIT_FAILURE);}int count = 0; // number of items readinFile >> ch; // get first valuewhile (inFile.good()) // while input good and not at EOF {count++; // one more item readinFile >> ch; // get next value}cout << count << " characters in " << filename << endl;inFile.close(); // finished with the filereturn 0;}Chapter 7//pe7-1.cpp -- harmonic mean#include <iostream>double h_mean(double x, double y);int main(void){using namespace std;double x,y;cout << "Enter two numbers (a 0 terminates): ";while (cin >> x >> y && x * y != 0)cout << "harmonic mean of " << x << " and "<< y << " = " << h_mean(x,y) << "\n";/* or do the reading and testing in two parts:while (cin >> x && x != 0){cin >> y;if (y == 0)break;...*/cout << "Bye\n";return 0;}double h_mean(double x, double y){return 2.0 * x * y / (x + y);}// pe7-3.cpp#include <iostream>struct box {char maker[40];float height;float width;float length;float volume;};void showbox(box b);void setbox(box * pb);int main(void){box carton = {"Bingo Boxer", 2, 3, 5}; // no volume providedsetbox(&carton);showbox(carton);return 0;}void showbox(box b){using namespace std;cout << "Box maker: " << b.maker<< "\nheight: " << b.height<< "\nlwidth: " << b.width<< "\nlength: " << b.length<< "\nvolume: " << b.volume << "\n";}void setbox(box * pb){pb->volume = pb->height * pb->width * pb->length;}// pe7-4.cpp -- probability of winning#include <iostream>long double probability(unsigned numbers, unsigned picks);int main(){using namespace std;double total, choices;double mtotal;double probability1, probability2;cout << "Enter total number of game card choices and\n""number of picks allowed for the field:\n";while ((cin >> total >> choices) && choices <= total){cout << "Enter total number of game card choices ""for the mega number:\n";if (!(cin >> mtotal))break;cout << "The chances of getting all " << choices << " picks is one in "<< (probability1 = probability(total, choices) ) << ".\n";cout << "The chances of getting the megaspot is one in "<< (probability2 = probability(mtotal, 1) ) << ".\n";cout << "You have one chance in ";cout << probability1 * probability2; // compute the probability cout << " of winning.\n";cout << "Next set of numbers (q to quit): ";}cout << "bye\n";return 0;}// the following function calculates the probability of picking picks// numbers correctly from numbers choiceslong double probability(unsigned numbers, unsigned picks){long double result = 1.0; // here come some local variablesunsigned p;for (n = numbers, p = picks; p > 0; n--, p--)result = result * n / p ;return result;}// pe7-6.cpp#include <iostream>int Fill_array(double ar[], int size);void Show_array(const double ar[], int size);void Reverse_array(double ar[], int size);const int LIMIT = 10;int main( ){using namespace std;double values[LIMIT];int entries = Fill_array(values, LIMIT);cout << "Array values:\n";Show_array(values, entries);cout << "Array reversed:\n";Reverse_array(values, entries);Show_array(values, entries);cout << "All but end values reversed:\n";Reverse_array(values + 1, entries - 2);Show_array(values, entries);return 0;}int Fill_array(double ar[], int size){using namespace std;int n;cout << "Enter up to " << size << " values (q to quit):\n"; for (n = 0; n < size; n++){cin >> ar[n];if (!cin)break;}return n;}void Show_array(const double ar[], int size){using namespace std;int n;for (n = 0; n < size; n++){cout << ar[n];if (n % 8 == 7)cout << endl;elsecout << ' ';}if (n % 8 != 0)cout << endl;}void Reverse_array(double ar[], int size){int i, j;for (i = 0, j = size - 1; i < j; i++, j--){temp = ar[i];ar[i] = ar[j];ar[j] = temp;}}//pe7-9.cpp#include <iostream>double calculate(double x, double y, double (*pf)(double, double)); double add(double x, double y);double sub(double x, double y);double mean(double x, double y);int main(void){using namespace std;double (*pf[3])(double,double) = {add, sub, mean};char * op[3] = {"sum", "difference", "mean"};double a, b;cout << "Enter pairs of numbers (q to quit): ";int i;while (cin >> a >> b){// using function namescout << calculate(a, b, add) << " = sum\n";cout << calculate(a, b, mean) << " = mean\n";// using pointersfor (i = 0; i < 3; i++)cout << calculate(a, b, pf[i]) << " = "<< op[i] << "\n";}cout << "Done!\n";return 0;}double calculate(double x, double y, double (*pf)(double, double)) {return (*pf)(x, y);}double add(double x, double y){return x + y;}double sub(double x, double y){return x - y;}double mean(double x, double y){return (x + y) / 2.0;}Chapter 8// pe8-1.cpp#include <iostream>void silly(const char * s, int n = 0);int main(void){using namespace std;char * p1 = "Why me?\n";silly(p1);for (int i = 0; i < 3; i++){cout << i << " = i\n";silly(p1, i);}cout << "Done\n";return 0;}void silly(const char * s, int n){using namespace std;static int uses = 0;int lim = ++uses;if (n == 0)lim = 1;for (int i = 0; i < lim; i++)cout << s;}// pe8-4.cpp#include <iostream>#include <cstring> // for strlen(), strcpy()using namespace std;struct stringy {char * str; // points to a stringint ct; // length of string (not counting '\0')};void show(const char *str, int cnt = 1);void show(const stringy & bny, int cnt = 1);void set(stringy & bny, const char * str);int main(void){stringy beany;char testing[] = "Reality isn't what it used to be.";set(beany, testing); // first argument is a reference, // allocates space to hold copy of testing,// sets str member of beany to point to the// new block, copies testing to new block,// and sets ct member of beanyshow(beany); // prints member string onceshow(beany, 2); // prints member string twicetesting[0] = 'D';testing[1] = 'u';show(testing); // prints testing string onceshow(testing, 3); // prints testing string thrice show("Done!");return 0;}void show(const char *str, int cnt){while(cnt-- > 0){cout << str << endl;}}void show(const stringy & bny, int cnt){while(cnt-- > 0){cout << bny.str << endl;}}void set(stringy & bny, const char * str){bny.ct = strlen(str);bny.str = new char[bny.ct+1];strcpy(bny.str, str);}// pe8-5.cpp#include <iostream>template <class T>T max5(T ar[]){int n;T max = ar[0];for (n = 1; n < 5; n++)if (ar[n] > max)max = ar[n];return max;}const int LIMIT = 5;int main( ){using namespace std;double ard[LIMIT] = { -3.4, 8.1, -76.4, 34.4, 2.4}; int ari[LIMIT] = {2, 3, 8, 1, 9};double md;int mi;md = max5(ard);mi = max5(ari);cout << "md = " << md << endl;cout << "mi = " << mi << endl;return 0;}Chapter 9PE 9-1// pe9-golf.h - for pe9-1.cppconst int Len = 40;struct golf{char fullname[Len];int handicap;};// non-interactive version// function sets golf structure to provided name, handicap// using values passed as arguments to the functionvoid setgolf(golf & g, const char * name, int hc);// interactive version// function solicits name and handicap from user// and sets the members of g to the values entered// returns 1 if name is entered, 0 if name is empty stringint setgolf(golf & g);// function resets handicap to new valuevoid handicap(golf & g, int hc);// function displays contents of golf structurevoid showgolf(const golf & g);// pe9-golf.cpp - for pe9-1.cpp#include <iostream>#include "pe9-golf.h"#include <cstring>// function solicits name and handicap from user// returns 1 if name is entered, 0 if name is empty stringint setgolf(golf & g){std::cout << "Please enter golfer's full name: ";std::cin.getline(g.fullname, Len);if (g.fullname[0] == '\0')return 0; // premature terminationstd::cout << "Please enter handicap for " << g.fullname << ": "; while (!(std::cin >> g.handicap)){std::cin.clear();std::cout << "Please enter an integer: ";}while (std::cin.get() != '\n')continue;return 1;}// function sets golf structure to provided name, handicapvoid setgolf(golf & g, const char * name, int hc){std::strcpy(g.fullname, name);g.handicap = hc;}// function resets handicap to new valuevoid handicap(golf & g, int hc){g.handicap = hc;}// function displays contents of golf structurevoid showgolf(const golf & g){std::cout << "Golfer: " << g.fullname << "\n";std::cout << "Handicap: " << g.handicap << "\n\n";}// pe9-1.cpp#include <iostream>#include "pe9-golf.h"// link with pe9-golf.cppconst int Mems = 5;int main(void){using namespace std;golf team[Mems];cout << "Enter up to " << Mems << " golf team members:\n";int i;for (i = 0; i < Mems; i++)if (setgolf(team[i]) == 0)break;for (int j = 0; j < i; j++)showgolf(team[j]);setgolf(team[0], "Fred Norman", 5);showgolf(team[0]);handicap(team[0], 3);showgolf(team[0]);return 0;}PE 9-3//pe9-3.cpp -- using placement new#include <iostream>#include <new>#include <cstring>struct chaff{char dross[20];int slag;};// char buffer[500]; // option 1int main(){using std::cout;using std::endl;chaff *p1;int i;char * buffer = new char [500]; // option 2p1 = new (buffer) chaff[2]; // place structures in buffer std::strcpy(p1[0].dross, "Horse Feathers");p1[0].slag = 13;std::strcpy(p1[1].dross, "Piffle");p1[1].slag = -39;for (i = 0; i < 2; i++)cout << p1[i].dross << ": " << p1[i].slag << endl;delete [] buffer; // option 2return 0;}Chapter 10PE 10-1// pe10-1.cpp#include <iostream>#include <cstring>// class declarationclass BankAccount{private:char name[40];char acctnum[25];double balance;public:BankAccount(char * client = "no one", char * num = "0",double bal = 0.0); void show(void) const; void deposit(double cash); void withdraw(double cash); };// method definitionsBankAccount::BankAccount(char * client, char * num, double bal) {std::strncpy(name, client, 39);name[39] = '\0';std::strncpy(acctnum, num, 24);acctnum[24] = '\0';balance = bal;}void BankAccount::show(void) const{using std::cout;using std:: endl;cout << "Client: " << name << endl;cout << "Account Number: " << acctnum << endl;cout << "Balance: " << balance << endl;}void BankAccount::deposit(double cash){if (cash >= 0)balance += cash;elsestd::cout << "Illegal transaction attempted";}void BankAccount::withdraw(double cash){if (cash < 0)std::cout << "Illegal transaction attempted";else if (cash <= balance)balance -=cash;elsestd::cout << "Request denied due to insufficient funds.\n"; }// sample useint main(){BankAccount bird;BankAccount frog("Kermit", "croak322", 123.00);bird.show();frog.show();bird = BankAccount("Chipper", "peep8282", 214.00);bird.show();frog.deposit(20);frog.show();frog.withdraw(4000);frog.show();frog.withdraw(50);frog.show();}PE10-4// pe10-4.h#ifndef SALES__#define SALES__namespace SALES{const int QUARTERS = 4;class Sales{private:double sales[QUARTERS];double average;double max;double min;public:// default constructorSales();// copies the lesser of 4 or n items from the array ar// to the sales member and computes and stores the// average, maximum, and minimum values of the entered items;// remaining elements of sales, if any, set to 0Sales(const double ar[], int n);// gathers sales for 4 quarters interactively, stores them// in the sales member of object and computes and stores the// average, maximum, and minumum valuesvoid setSales();// display all information in objectvoid showSales();};}#endif。
C++primerplus编程练习答案
C++ primer plus编程练习答案注:本人暑假正在看这本书,顺便就把题目做了,均经过了编译器通过,无注释。
第二章1:#include<iostream>#define max 10using namespace std;void main(){char name[max],dizhi[max];cout<<"请输入: ";cin>>name;cout<<"请输入地址: ";cin>>dizhi;cout<<"--->"<<name<<"\t地址--->"<<dizhi<<endl;}2:#include<iostream>using namespace std;void main(){long juli;cout<<"请输入距离long(1 long 为220码):";cin>>juli;cout<<"按照您输入的距离是:"<<juli*220<<"码"<<endl;}3:#include<iostream>using namespace std;void blind(){cout<<"Three blind mice\n";}void run(){cout<<"See how they run\n";}void main(){for(int i=0;i<2;i++)blind();for(int j=0;j<2;j++)run();}4:#include<iostream>using namespace std;void month(int age){cout<<"该年龄一共包含"<<age*12<<"个月!\n"; }void main(){int age;cout<<"请输入年龄:";cin>>age;month(age);}5:#include<iostream>using namespace std;double fahrenheit(double celsius){return 1.8*celsius+32.0;}void main(){double celsius;cout<<"please enter a celsius value:";cin>>celsius;cout<<celsius<<" degrees celsius is "<<fahrenheit(celsius)<<" degrees fahrenheit.\n";}6:#include<iostream>using namespace std;double astronomical(double light){return 63240*light;}void main(){double light;cout<<"Enter the number of light years:";cin>>light;cout<<light<<" light years = "<<astronomical(light)<<" astronomical units.\n";}7:#include<iostream>using namespace std;void display(int hours,int minutes){cout<<"Time: "<<hours<<":"<<minutes<<endl;}void main(){int hour,minute;cout<<"please input the time of hour:";cin>>hour;cout<<"please input the time of minute:";cin>>minute;display(hour,minute);}第三章1:#include<iostream>using namespace std;const float danwei=0.0833333;void iswap(int cun){cout<<"您的身高为: "<<cun*danwei<<" 英尺!"<<endl;}void main(){int cun;cout<<"请输入英寸单位的身高(整数):_______\b\b\b\b\b\b";cin>>cun;iswap(cun);}2:#include<iostream>using namespace std;const double yingchi=12;const double bang=2.2;const double memter=0.0245;void caculate(double chi,double cun,double weight) {double BMI;double yingcun,mi,qianke;yingcun=cun+chi*yingchi;mi=yingcun*memter;qianke=weight/bang;BMI=qianke/(mi*mi);cout<<"您的BMI值为: "<<BMI<<endl;}void main(){double chi,cun,weight;cout<<"请输入身高(以几英尺几英寸方式输入): ";cin>>chi>>cun;cout<<"请输入体重(以磅为单位): ";cin>>weight;caculate(chi,cun,weight);}3:#include<iostream>using namespace std;void main(){double degrees,minutes,seconds,sum;cout<<"Enter a latitude in degrees,minutes,and seconds:"<<endl;cout<<"First,enter the degrees: ";cin>>degrees;cout<<"Next,enter the minutes of arc: ";cin>>minutes;cout<<"Finally,enter the seconds of arc: ";cin>>seconds;sum=degrees+minutes/60+seconds/3600;cout<<degrees<<" degrees,"<<minutes<<" minutes,"<<seconds<<" seconds= "<<sum<<" degrees."<<endl;}4:#include<iostream>using namespace std;const long m=60;const long h=60;const long d=24;int sumday(long seconds){long hour,minute;minute=seconds/m;hour=minute/h;return hour/d;}int sumhour(long seconds,int day){long minute;seconds=seconds-day*d*h*m;minute=seconds/m;return minute/h;}int summinute(long seconds,int day,int hour){seconds=seconds-(day*d*h*m+hour*h*m);return seconds/m;}int sumsecond(long seconds,int day,int hour,int minute) {returnseconds=seconds-(day*d*h*m+hour*h*m+minute*m); }void main(){long seconds;int day,hour,minute,second;cout<<"Enter the number of seconds: ";cin>>seconds;day=sumday(seconds);hour=sumhour(seconds,day);minute=summinute(seconds,day,hour);second=sumsecond(seconds,day,hour,minute);cout<<seconds<<" seconds = "<<day<<" days,"<<hour<<" hours,"<<minute<<" minutes,"<<second<<" seconds."<<endl;}5:#include<iostream>using namespace std;void main(){double world,us;cout<<"Enter the world's population: ";cin>>world;cout<<"Enter the population of the us: ";cin>>us;double bilv;bilv=us/world;cout<<"The population of the us is "<<bilv<<"% of the world population."<<endl;}6:#include<iostream>using namespace std;void main(){float memter,jialun;cout<<"以美国风格还是欧洲风格显示耗油量?m为美国,o 为欧洲!"<<endl;cout<<"请输入(m或o):";char c;cin>>c;if(c=='m'){cout<<"请输入驱车里程(英里):";cin>>memter;cout<<"请输入使用汽油量(加仑):";cin>>jialun;cout<<"汽车耗油量为:"<<memter/jialun<<"mpg."<<endl;}else{cout<<"请输入驱车里程(公里):";cin>>memter;cout<<"请输入使用汽油量(升):";cin>>jialun;float ofg;ofg=(100*jialun)/memter;cout<<"汽车耗油量为:"<<ofg<<"L/100Km."<<endl;}}7:include<iostream>using namespace std;void main(){cout<<"请输入欧洲风格的汽车耗油量(每100公里消耗的汽油量(升)):";float ofg;cin>>ofg;float jialun;jialun=ofg/3.875;float haoyou;haoyou=62.14/jialun;cout<<"转换成美国风格的耗油量(一加仑的里程,mpg):"<<haoyou<<"mpg."<<endl;}第四章待我上传。
C primer plus 编程练习答案
Chapter 2PE 2-1/* Programming Exercise 2-1 */#include <stdio.h>int main(void){printf("Anton Bruckner\n");printf("Anton\nBruckner\n");printf("Anton ");printf("Bruckner\n");return 0;}PE 2-3/* Programming Exercise 2-3 */#include <stdio.h>int main(void){int ageyears; /* age in years */int agedays; /* age in days *//* large ages may require the long type */ageyears = 44;agedays = 365 * ageyears;printf("An age of %d years is %d days.\n", ageyears, agedays);return 0;}PE 2-4/* Programming Exercise 2-4 */#include <stdio.h>void jolly(void);void deny(void);int main(void){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-5/* Programming Exercise 2-5 */#include <stdio.h>int main(void){int toes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes);printf("toes squared = %d\n", toes * toes);return 0;}/* or create two more variables, set them to 2 * toes and toes * toes */ PE 2-6/* Programming Exercise 2-6 */#include <stdio.h>void once();void main(void){once();once();once();printf("\n");once();once();printf("\n");once();printf("\n");}void once(){printf("Smile!");}PE 2-7/* Programming Exercise 2-7 */#include <stdio.h>void one_three(void);void two(void);int main(void){printf("starting now:\n");one_three();printf("done!\n");return 0;}void one_three(void){printf("one\n");two();printf("three\n");}void two(void){printf("two\n");}Chapter 3PE 3-2/* Programming Exercise 3-2(1) */#include <stdio.h>int main(void){int ascii;printf("Enter an ASCII code: ");scanf("%d", &ascii);printf("%d is the ASCII code for %c.\n", ascii, ascii);return 0;}/* Programming Exercise 3-2(2) */#include <stdio.h>int main(void){int num;printf("Please enter a num:");scanf("%d",&num);printf("The code for the num is %c\n",num);return 0;}PE 3-3#include <stdio.h>int main(void){printf("\a");printf("alarm and print a line of word\n");return 0;}PE 3-4/* Programming Exercise 3-4(1) */#include <stdio.h>int main(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);return 0;}/* Programming Exercise 3-4(2) */#include <stdio.h>int main(void){long float a;a=21.290000;printf("The input is %lf or %le.\n",a,a);return 0;}PE 3-5/* Programming Exercise 3-5 */#include <stdio.h>int main(void){long int age;printf("Please enter your age:\n");scanf("%d",&age);printf("Your age equals to %lf seconds.\n",age*3.156e7); return 0;}PE 3-6#include <stdio.h>int main(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ float mass_qt = 950; /* mass of quart of water in grams */ float quarts;float molecules;printf("Enter the number of quarts of water: ");scanf("%f", &quarts);molecules = quarts * mass_qt / mass_mol;printf("%f quarts of water contain %e molecules.\n", quarts,molecules);return 0;}PE 3-6/* Programming Exercise 3-7 */#include <stdio.h>int main(void){float height;printf("Please enter your height:\n");scanf("%fg",&height);printf("Your height equals to %f cm.\n",height*2.54);return 0;}Chapter 4PE 4-1/* Programming Exercise 4-1 */#include <stdio.h>int main(void){char fname[40];char lname[40];printf("Enter your first name: ");scanf("%s", fname);printf("Enter your last name: ");scanf("%s", lname);printf("%s, %s\n", lname, fname);return 0;}PE 4-4/* Programming Exercise 4-4 */#include <stdio.h>int main(void){float height;char name[40];printf("Enter your height in inches: ");scanf("%f", &height);printf("Enter your name: ");scanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / 12.0); return 0;}PE 4-6/* Programming Exercise 4-6 */#include <stdio.h>#include <float.h>int main(void){float ot_f = 1.0 / 3.0;double ot_d = 1.0 / 3.0;printf(" float values: ");printf("%.4f %.12f %.16f\n", ot_f, ot_f, ot_f);printf("double values: ");printf("%.4f %.12f %.16f\n", ot_d, ot_d, ot_d);printf("FLT_DIG: %d\n", FLT_DIG);printf("DBL_DIG: %d\n", DBL_DIG);return 0;}Chapter 5PE 5-1/* Programming Exercise 5-1 */#include <stdio.h>int main(void){const int minperhour = 60;int minutes, hours, mins;printf("Enter the number of minutes to convert: ");scanf("%d", &minutes);while (minutes > 0 ){hours = minutes / minperhour;mins = minutes % minperhour;printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): ");scanf("%d", &minutes);}printf("Bye\n");return 0;}PE 5-3/* Programming Exercise 5-3 */#include <stdio.h>int main(void){const int daysperweek = 7;int days, weeks, day_rem;printf("Enter the number of days: ");scanf("%d", &days);weeks = days / daysperweek;day_rem = days % daysperweek;printf("%d days are %d weeks and %d days.\n", days, weeks, day_rem);return 0;}PE 5-5/* Programming Exercise 5-5 */#include <stdio.h>int main(void) /* finds sum of first n integers */{int count, sum;int n;printf("Enter the upper limit: ");scanf("%d", &n);count = 0;sum = 0;while (count++ < n)sum = sum + count;printf("sum = %d\n", sum);return 0;}PE 5-7/* Programming Exercise 5-7 */#include <stdio.h>void showCube(double x);int main(void) /* finds cube of entered number */ {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 6PE 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 ){char lcase[SIZE];int i;for (i = 0; i < SIZE; i++)lcase[i] = 'a' + i;for (i = 0; i < SIZE; i++)printf("%c", lcase[i]);printf("\n");return 0;}PE 6-3/* pe6-3.c *//* this implementation assumes the character codes */ /* are sequential, as they are in ASCII. */ #include <stdio.h>int main( void ){char let = 'F';char start;char end;for (end = let; end >= 'A'; end--){for (start = let; start >= end; start--)printf("%c", start);printf("\n");}return 0;}PE 6-5/* pe6-5.c */#include <stdio.h>int main( void ){int lower, upper, index;int square, cube;printf("Enter starting integer: ");scanf("%d", &lower);printf("Enter ending integer: ");scanf("%d", &upper);printf("%5s %10s %15s\n", "num", "square", "cube");for (index = lower; index <= upper; index++){square = index * index;cube = index * square;printf("%5d %10d %15d\n", index, square, cube);}return 0;}PE 6-7/* pe6-7.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-10/* pe6-10.c */#include <stdio.h>#define SIZE 8int main( void ){int vals[SIZE];int i;printf("Please enter %d integers.\n", SIZE);for (i = 0; i < SIZE; i++)scanf("%d", &vals[i]);printf("Here, in reverse order, are the values you entered:\n"); for (i = SIZE - 1; i > 0; i--)printf("%d ", vals[i]);printf("\n");return 0;}PE 6-12/* pe6-12.c *//* This version starts with the 0 power */#include <stdio.h>#define SIZE 8int main( void ){int twopows[SIZE];int i;int value = 1; /* 2 to the 0 */for (i = 0; i < SIZE; i++){twopows[i] = value;value *= 2;}i = 0;do{printf("%d ", twopows[i]);i++;} while (i < SIZE);printf("\n");return 0;}PE 6-13/* pe-13.c *//* Programming Exercise 6-13 */#include <stdio.h>#define SIZE 8int main(void){double arr[SIZE];double arr_cumul[SIZE];int i;printf("Enter %d numbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value #%d: ", i + 1);scanf("%lf", &arr[i]);/* or scanf("%lf", arr + i); */}arr_cumul[0] = arr[0]; /* set first element */for (i = 1; i < SIZE; i++)arr_cumul[i] = arr_cumul[i-1] + arr[i];for (i = 0; i < SIZE; i++)printf("%8g ", arr[i]);printf("\n");for (i = 0; i < SIZE; i++)printf("%8g ", arr_cumul[i]);printf("\n");return 0;}PE 6-15/* pe6-15.c */#include <stdio.h>#define RATE_SIMP 0.10#define RATE_COMP 0.05#define INIT_AMT 100.0int main( void ){double daphne = INIT_AMT;double deidre = INIT_AMT;int years = 0;while (deidre <= daphne){daphne += RATE_SIMP * INIT_AMT;deidre += RATE_COMP * deidre;++years;}printf("Investment values after %d years:\n", years); printf("Daphne: $%.2f\n", daphne);printf("Deidre: $%.2f\n", deidre);return 0;}Chapter 7PE 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++;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>int main(void){int n;double sumeven = 0.0;int ct_even = 0;double sumodd = 0.0;int ct_odd = 0;while (scanf("%d", &n) == 1 && n != 0){if (n % 2 == 1){sumodd += n;++ct_odd;}else{sumeven += n;++ct_even;}}printf("Number of evens: %d", ct_even);if (ct_even > 0)printf(" average: %g", sumeven / ct_even);putchar('\n');printf("Number of odds: %d", ct_odd);if (ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar('\n');printf("\ndone\n");return 0;}PE 7-5/* Programming Exercise 7-5 */#include <stdio.h>int main(void){char ch;int ct1 = 0;int ct2 = 0;while ((ch = getchar()) != '#'){switch(ch){case '.' : putchar('!');++ct1;break;case '!' : putchar('!');putchar('!');++ct2;break;default : putchar(ch);}}printf("%d replacements of . with !\n", ct1);printf("%d replacements of ! with !!\n", ct2);return 0;}PE 7-7/* Programming Exercise 7-7 */#include <stdio.h>#define BASEPAY 10 /* $10 per hour */#define BASEHRS 40 /* hours at basepay */#define OVERTIME 1.5 /* 1.5 time */#define AMT1 300 /* 1st rate tier */#define AMT2 150 /* 2st rate tier */#define RATE1 0.15 /* rate for 1st tier */#define RATE2 0.20 /* rate for 2nd tier */#define RATE3 0.25 /* rate for 3rd tier */int main(void){double hours;double gross;double net;double taxes;printf("Enter the number of hours worked this week: "); scanf("%lf", &hours);if (hours <= BASEHRS)gross = hours * BASEPAY;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/* Programmming Exercise 7-9 */#include <stdio.h>#define NO 0#define YES 1int main(void){long num; /* value to be checked */long div; /* potential divisors */long lim; /* limit to values */int prime;printf("Please enter limit to values to be checked; ");printf("Enter q to quit.\n");while (scanf("%ld", &lim) == 1 && lim > 0){for (num = 2; num <= lim; num++){for (div = 2, prime = YES; (div * div) <= num; div++)if (num % div == 0)prime = NO; /* number is not prime */if (prime == YES)printf("%ld is prime.\n", num);}printf("Please enter another limit; ");printf("Enter q to quit.\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 = 1.25;const double price_beets = 0.65;const double price_carrots = 0.89;const double DISCOUNT_RATE = 0.05;char ch;double lb_artichokes;double lb_beets;double lb_carrots;double lb_total;double cost_artichokes;double cost_beets;double cost_carrots;double cost_total;double final_total;double discount;double shipping;printf("Enter a to buy artichokes, b for beets, ");printf("c for carrots, q to quit: ");while ((ch = getchar()) != 'q' && ch != 'Q'){if (ch == '\n')continue;while (getchar() != '\n')continue;ch = tolower(ch);switch (ch){case 'a' : printf("Enter pounds of artichokes: ");scanf("%lf", &lb_artichokes);break;case 'b' : printf("Enter pounds of beets: ");scanf("%lf", &lb_beets);break;case 'c' : printf("Enter pounds of carrots: ");scanf("%lf", &lb_carrots);break;default : printf("%c is not a valid choice.\n");}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 = 3.50;else if (lb_total < 20)shipping = 10.0;elseshipping = 8.0 + 0.1 * 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 8PE 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 ASCII coding */ #include <stdio.h>#include <ctype.h>int main(void){int ch;int uct = 0;int lct = 0;while ((ch = getchar()) != EOF)if (isupper(ch))uct++;else if (islower(ch))lct++;printf("%d uppercase characters read\n", uct);printf("%d lowercase characters read\n", lct);return 0;}/*or you could useif (ch >= 'A' && ch <= 'Z')uct++;else if (ch >= 'a' && ch <= 'z')lct++;*/PE 8-5/* Programming Exercise 8-5 *//* binaryguess.c -- an improved number-guesser */#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>#define BASEPAY1 8.75 /* $8.75 per hour */#define BASEPAY2 9.33 /* $9.33 per hour */#define BASEPAY3 10.00 /* $10.00 per hour */#define BASEPAY4 11.20 /* $11.20 per hour */#define BASEHRS 40 /* hours at basepay */#define OVERTIME 1.5 /* 1.5 time */#define AMT1 300 /* 1st rate tier */#define AMT2 150 /* 2st rate tier */#define RATE1 0.15 /* rate for 1st tier */#define RATE2 0.20 /* rate for 2nd tier */#define RATE3 0.25 /* rate for 3rd tier */int getfirst(void);void menu(void);int main(void){double hours;double gross;double net;double taxes;double pay;char response;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 number 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 9PE 9-1/* Programming Exercise 9-1 */#include <stdio.h>double min(double a, double b);int main(void){double x, y;printf("Enter two numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == 2){printf("The smaller number is %f.\n", min(x,y));printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}double min(double a, double b){return a < b ? a : b;}/* alternative implementationdouble min(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;}void chLineRow(char ch, int c, int r){int col, row;for (row = 0; row < r ; row++){for (col = 0; col < c; col++)putchar(ch);putchar('\n');}return;}PE 9-5/* Programming Exercise 9-5 */#include <stdio.h>void larger_of(double *p1, double *p2);int main(void){double x, y;printf("Enter two numbers (q to quit): ");while (scanf("%lf %lf", &x, &y) == 2){larger_of(&x, &y);printf("The modified values are %f and %f.\n", x, y);printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}void larger_of(double *p1, double *p2){double temp = *p1 > *p2 ? *p1 : *p2;*p1= *p2 = temp;}PE 9-7/* Programming Exercise 9-7 */#include <stdio.h>double power(double a, int b); /* ANSI prototype */int main(void){double x, xpow;int n;printf("Enter a number and the integer power");printf(" to which\nthe number will be raised. Enter q");printf(" to quit.\n");while (scanf("%lf%d", &x, &n) == 2){xpow = power(x,n); /* function call */printf("%.3g to the power %d is %.5g\n", x, n, xpow);printf("Enter next pair of numbers or q to quit.\n");}printf("Hope you enjoyed this power trip -- bye!\n");return 0;}double power(double a, int b) /* function definition */{double pow = 1;int i;if (b == 0){if (a == 0)printf("0 to the 0 undefined; using 1 as the value\n"); pow = 1.0;}else if (a == 0)pow = 0.0;else if (b > 0)for(i = 1; i <= b; i++)pow *= a;else /* b < 0 */pow = 1.0 / power(a, - b);return pow; /* return the value of pow */}PE 9-9/* Programming Exercise 9-9 */#include <stdio.h>void to_base_n(int x, int base);int main(void){int number;int b;printf("Enter an integer (q to quit):\n");while (scanf("%d", &number) == 1){printf("Enter number base (2-10): ");scanf("%d", &b);printf("Base %d equivalent: ", b);to_base_n(number, b);putchar('\n');printf("Enter an integer (q to quit):\n");}return 0;}void to_base_n(int x, int base) /* recursive function */{int r;r = x % base;if (x >= 2)to_base_n(x / base, base);putchar('0' + r);return;}Chapter 10PE 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 1990 - 1994 */const float rain[YRS][MONTHS] = {{10.2, 8.1, 6.8, 4.2, 2.1, 1.8, 0.2, 0.3, 1.1, 2.3, 6.1, 7.4}, {9.2, 9.8, 4.4, 3.3, 2.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 5.2}, {6.6, 5.5, 3.8, 2.8, 1.6, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 4.2}, {4.3, 4.3, 4.3, 3.0, 2.0, 1.0, 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.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", 1990 + 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;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 10float max_diff(const float ar[], int n);。
c++primerplus课后编程练习答案
第二章:开始学习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 per gallon):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=new car[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";cout<<"Please enter the make: ";getline(cin,ps[i].name);cout<<"Please enter 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;}n";return 0;}n";return 0;};for(int k=0;k<=i;++k) cout<<"*";cout<<endl;}return 0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* programming exercise 7-1 */ #include int main(void) { char ch; int sp_ct, nl_ct, other; sp_ct = nl_ct = other = 0;
while ((ch = getchar()) != '#') { if (ch == ' ') sp_ct++; else if (ch == '\n') nl_ct++; else other++; } printf("%d whitespace, %d newline, %d other.\n", sp_ct, nl_ct, other);
return 0; } /* programming exercise 7-2 */ #include int main(void) { char ch; int count = 0;
while ((ch = getchar()) != '#') { if (ch == '\n') continue; count ++; putchar(ch); printf("/%d ", ch); if (count % 8 == 0) printf("\n"); } printf("That's all!");
return 0; } /* programming exercise 7-3 */ #include int main(void) { int num; int e_ct, o_ct; double e_sum, o_sum; e_ct = o_ct = 0; e_sum = o_sum = 0.0;
printf("Enter the integer:(0 to quit).\n"); while (scanf("%d", &num) == 1 && num != 0) { if (num % 2 == 0) { e_ct++; e_sum += num; } else { o_ct++; o_sum += num; } printf("Enter next integer:(0 to quit).\n"); } printf("%d even entered.", e_ct); if (e_ct > 0) printf(" Average is %g.", e_sum / e_ct); putchar('\n'); printf("%d odd entered.", o_ct); if (o_ct > 0) printf(" Average is %g.", o_sum / o_ct); putchar('\n'); printf("Done!\n");
return 0; }
/* programming exercise 7-4 */ #include #define ECM '!' int main(void) { char ch; int fs_ct = 0; int em_ct = 0;
while ((ch = getchar()) != '#') { if (ch == '.') { putchar(ECM); fs_ct++; } else if (ch == '!') { putchar(ECM); putchar(ECM); em_ct++; } else putchar(ch); } printf("%d times fs to em, %d times em to double em.\n", fs_ct, em_ct); return 0; }
/* programming exercise 7-5 */ #include int main(void) { int num; int e_ct = 0, o_ct = 0; double e_sum = 0.0, o_sum = 0.0;
printf("Enter the integer:(0 to quit).\n"); while (scanf("%d", &num) == 1 && num != 0) { switch(num % 2) { case 0: e_ct++; e_sum += num; break; case 1: o_ct++; o_sum += num; break; } printf("Enter next integer:(0 to quit).\n"); } printf("%d even entered.", e_ct); if (e_ct > 0) printf(" Average is %g.", e_sum / e_ct); putchar('\n'); printf("%d odd entered.", o_ct); if (o_ct > 0) printf(" Average is %g.", o_sum / o_ct); putchar('\n'); printf("Done!\n");
return 0; }
/* programming exercise 7-6 */ #include int main(void) { char ch; char prev = 0; /* 记得对prev进行0填充, 否则有可能定义的内存的垃圾数据恰好为e */ int count = 0;
while ((ch = getchar()) != '#') { if (ch == 'i' && prev == 'e') count++; prev = ch; } switch (count) { case 0: printf("\"ei\" no apeared.\n"); break; case 1: printf("\"ei\" apeared 1 time.\n"); break; default: printf("\"ei\" apeared %d times", count); } return 0; }
/* programming exercise 7-7 */ #include #define BASEPAY 10 #define BASEHRS 40 #define OVERRATE 1.5 #define LEVEL1 300 #define LEVEL2 150 #define TAX1 0.15 #define TAX2 0.20 #define TAX3 0.25
int main(void) { float hours; float total, tax, net;
printf("Please enter your work time: "); scanf("%f", &hours); if (hours > BASEHRS) total = BASEPAY * (BASEHRS + (hours - BASEHRS) * OVERRATE); else total = hours * BASEPAY; if (total <= LEVEL1) tax = total * TAX1; else if (total <= (LEVEL1 + LEVEL2)) tax = LEVEL1 * TAX1 + (total - LEVEL1) * TAX2; else tax = LEVEL1 * TAX1 + LEVEL2 * TAX2 + (total - LEVEL1 - LEVEL2) * TAX3; net = total - tax; printf("total = %g, tax = %g, net = %g.\n", total, tax, net);
return 0; }
/* programming exercise 7-8 */ #include #define BASEHRS 40 #define OVERRATE 1.5 #define T_LEVEL1 300 #define T_LEVEL2 150 #define S_LEVEL1 8.75 #define S_LEVEL2 9.33 #define S_LEVEL3 10.00 #define S_LEVEL4 11.20 #define TAX1 0.15 #define TAX2 0.20 #define TAX3 0.25
int main(void) { float hours; float basepay; float total, tax, net; int choice;
printf("*****************************************************************\n"); printf("Enter the number corresponding to the desired pay