C PRIMER PLUS 第七八正确答案.docx
《C PRIMER PLUS 第七八正确答案.docx》由会员分享,可在线阅读,更多相关《C PRIMER PLUS 第七八正确答案.docx(22页珍藏版)》请在冰豆网上搜索。
CPRIMERPLUS第七八正确答案
Chapter7
PE7-1
#include
intmain(void)
{
charch;
intsp_c,re_c,oc_c;
sp_c=re_c=oc_c=0;
printf("inuputastring,andthisprogramwilloutthecountof...\n");
while((ch=getchar())!
='#')
{
if('\n'==ch)
re_c++;
elseif(''==ch)
sp_c++;
else
oc_c++;
}
printf("%d%s,%d%s,%d%s",re_c+1,"newlines",sp_c,"spaces",oc_c,"othercharacters\n");
printf("Bye!
\n");
return0;
}
PE7-2
#include
intmain(void)
{
charch;
intcount=0;
printf("inuputastring,andthisprogramwilloutitandASCII\n(#toquit)...\n");
while((ch=getchar())!
='#')
{
if(ch=='\n'){
printf("\ninputanotherstring(#toquit):
\n");
continue;
}
while(count==8){
printf("\n");
count=0;
}
printf("%c,%d",ch,ch);
count++;
}
printf("\nBye!
\n");
return0;
}
PE7-3
#include
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==1)
{
sumodd+=n;
++ct_odd;
}
else
{
sumeven+=n;
++ct_even;
}
}
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;
}
PE7-4
#include
intmain(void)
{
charch;
intex_c,pe_c;
ex_c=pe_c=0;
printf("inuputastring,andthisprogramwillswitch.to!
and!
to!
!
\n(#toquit)...\n");
while((ch=getchar())!
='#')
{
if(ch=='.'){
printf("!
");
pe_c++;
continue;
}
elseif(ch=='!
'){
printf("!
!
");
ex_c++;
continue;
}
printf("%c",ch);
}
printf("\nthereare%dpeswitchingand%dexswitching",pe_c,ex_c);
printf("\nBye!
\n");
return0;
}
PE7-5
#include
intmain(void)
{
charch;
intct1=0;
intct2=0;
printf("inuputastring,andthisprogramwillswitch.to!
and!
to!
!
\n(#toquit)...\n");
while((ch=getchar())!
='#')
{
switch(ch)
{
case'.':
putchar('!
');
++ct1;
break;
case'!
':
putchar('!
');
putchar('!
');
++ct2;
break;
default:
putchar(ch);
}
}
printf("%dreplacementsof.with!
\n",ct1);
printf("%dreplacementsof!
with!
!
\n",ct2);
return0;
}
PE7-6
#include
intmain(void){
charch;
inte_c,i_c,st_c;
e_c=i_c=st_c=0;
printf("inputyourstringandthisprogramwilloutputthecount\n(#toquit):
\n");
while((ch=getchar())!
='#'){//当输入ei时st_c=10,i_c=10
if(ch!
='i'){//当输入ie时st_c=10,i_c=1,输入其他字符st_c=2
st_c=2;
if(ch=='e'){
st_c=10;
i_c=1;
}
}
if(ch=='i')
i_c=10;
if(st_c==i_c){//防止eii的bug
e_c++;
st_c=1;
}
}
printf("\nthereis%deiinyourstring!
\nbye!
\n",e_c);
return0;
}
PE7-7
#include
#defineBASEPAY10/*$10perhour*/
#defineBASEHRS40/*hoursatbasepay*/
#defineOVERTIME1.5/*1.5time*/
#defineAMT1300/*1stratetier*/
#defineAMT2150/*2stratetier*/
#defineRATE10.15/*ratefor1sttier*/
#defineRATE20.20/*ratefor2ndtier*/
#defineRATE30.25/*ratefor3rdtier*/
intmain(void)
{
doublehours;
doublegross;
doublenet;
doubletaxes;
printf("Enterthenumberofhoursworkedthisweek:
");
scanf("%lf",&hours);
if(hours<=BASEHRS)
gross=hours*BASEPAY;
else
gross=BASEHRS*BASEPAY+(hours-BASEHRS)*BASEPAY*OVERTIME;
if(gross<=AMT1)
taxes=gross*RATE1;
elseif(gross<=AMT1+AMT2)
taxes=AMT1*RATE1+(gross-AMT1)*RATE2;
else
taxes=AMT1*RATE1+AMT2*RATE2+(gross-AMT1-AMT2)*RATE3;
net=gross-taxes;
printf("gross:
$%.2f;taxes:
$%.2f;net:
$%.2f\n",gross,taxes,net);
return0;
}
PE7-8
#include
#include
#defineBASEPAY10/*$10perhour*/
#defineBASEHRS40/*hoursatbasepay*/
#defineOVERTIME1.5/*1.5time*/
#defineAMT1300/*1stratetier*/
#defineAMT2150/*2stratetier*/
#defineRATE10.15/*ratefor1sttier*/
#defineRATE20.20/*ratefor2ndtier*/
#defineRATE30.25/*ratefor3rdtier*/
intmain(void){
doublehours;
doublegross;
doublenet;
doubletaxes;
intchoose;inttest=1;
printf("*****************************************************************\n");
printf("Enterthenumbercorrespondingtothedesiredpayrateoraction:
\n");
printf("1)$8.75/hr\t\t2)$9.33/hr\n3)$10.00/hr\t\t4)$11.20/hr\n5)quit\n");
printf("*****************************************************************\n");
printf("Enterthenumberofhoursworkedthisweek:
");
while((scanf("%d",&choose))==1){
switch(choose){
case1:
hours=8.75;
break;
case2:
hours=9.33;
break;
case3:
hours=10.00;
break;
case4:
hours=11.20;
break;
case5:
test=0;
break;
default:
test=2;
printf("error!
tryagain:
\n");
break;
}
if(test==2){
test=1;
continue;
}
if(test==1){
if(hours<=BASEHRS)
gross=hours*BASEPAY;
else
gross=BASEHRS*BASEPAY+(hours-BASEHRS)*BASEPAY*OVERTIME;
if(gross<=AMT1)
taxes=gross*RATE1;
elseif(gross<=AMT1+AMT2)
taxes=AMT1*RATE1+(gross-AMT1)*RATE2;
else
taxes=AMT1*RATE1+AMT2*RATE2+(gross-AMT1-AMT2)*RATE3;
net=gross-taxes;
printf("gross:
$%.2f;taxes:
$%.2f;net:
$%.2f\nnext:
",gross,taxes,net);
}
elseif(test==0){
break;
}
}
printf("Bye!
\n");
return0;
}
PE7-9
#include
#defineNO0
#defineYES1
intmain(void)
{
longnum;/*valuetobechecked*/
longdiv;/*potentialdivisors*/
longlim;/*limittovalues*/
intprime;
printf("Pleaseenterlimittovaluestobechecked;");
printf("Enterqtoquit.\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;/*numberisnotprime*/
if(prime==YES)
printf("%ldisprime.\n",num);
}
printf("Pleaseenteranotherlimit;");
printf("Enterqtoquit.\n");
}
return0;
}
PE7-11
#include
#include
intmain(void)
{
constdoubleprice_artichokes=1.25;
constdoubleprice_beets=0.65;
constdoubleprice_carrots=0.89;
constdoubleDISCOUNT_RATE=0.05;
charch;
doublelb_artichokes;
doublelb_beets;
doublelb_carrots;
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_artichokes);
break;
case'b':
printf("Enterpoundsofbeets:
");
scanf("%lf",&lb_beets);
break;
case'c':
printf("Enterpoundsofcarrots:
");
scanf("%lf",&lb_carrots);
break;
default:
printf("%cisnotavalidchoice.\n");
}
printf("Enteratobuyartichokes,bforbeets,");
printf("cforcarrots,qtoquit:
");
}
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=3.50;
elseif(lb_total<20)
shipping=10.0;
else
shipping=8.0+0.1*lb_total;
if(cost_total>100.0)
discount=DISCOUNT_RATE*cost_total;
else
discount=0.0;
final_total=cost_total+shipping-discount;
printf("Yourorder:
\n");
printf("%.2flbsofartichokesat$%.2fperpound:
$%.2f\n",
lb_artichokes,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;
}
Chapter8
PE8-1
//Ctrl+z结束文件
#include
intmain(void)
{
intch;
intct=0;
while((ch=getchar())!
=EOF)
ct++;
printf("%dcharactersread\n",ct);
return0;
}
PE8-3
/*ProgrammingExercise8-3*/
/*Usingctype.heliminatesneedtoassumeASCIIcoding*/
#include
#include
intmain(void)
{
intch;
intuct=0;
intlct=0;
while((ch=getchar())!
=EOF)
if(isupper(ch))
uct++;
elseif(islower(ch))
lct++;
printf("%duppercasecharactersread\n",uct);
printf("%dlowercasecharactersread\n",lct);
return0;
}
/*
oryoucoulduse
if(ch>='A'&&ch<='Z')
uct++;
elseif(ch>='a'&&ch<='z')
lct++;
*/
PE8-5
/*ProgrammingExercise8-5*/
/*binaryguess.c--animprovednumber-guesser*/
#include
#include
intmain(void)
{
inthigh=100;
intlow=1;
intguess=(high+low)/2;
charresponse;
printf("Pickanintegerfrom1to100.Iwilltrytoguess");
printf("it.\nRespondwithayifmyguessisright,with");
printf("\nahifitishigh,andwithanlifitislow.\n");
printf("Uh...isyournumber