首页 C-Primer-Plus第六版中文版习题答案

C-Primer-Plus第六版中文版习题答案

举报
开通vip

C-Primer-Plus第六版中文版习题答案CPrimerPlus第六版中文版习题答案Github:https://github.com/zhayujie/C-Primer-PlusEmail:yjzha1996@163.com第一章1.#include<stdio.h>intmain(void){doubleinch,cm;printf("Pleaseinputtheinches:");scanf("%lf",&inch);cm=inch*2.54;printf("%gcm\n"...

C-Primer-Plus第六版中文版习题答案
CPrimerPlus第六版中文版习题答案Github:https://github.com/zhayujie/C-Primer-PlusEmail:yjzha1996@163.com第一章1.#include<stdio.h>intmain(void){doubleinch,cm;printf("Pleaseinputtheinches:");scanf("%lf",&inch);cm=inch*2.54;printf("%gcm\n",cm);return0;}第二章3.#include<stdio.h>intmain(void){intdays,years=21;days=years*365;printf("我的年龄是%d岁,%d天\n",years,days);return0;}4.#include<stdio.h>voidjolly(void);voiddeny(void);intmain(void){jolly();jolly();deny();return0;}voidjolly(void){printf("Forhe'sajollygoodfellow!\n");}voiddeny(void){printf("Whichnobodycandeny!\n");}5.#include<stdio.h>voidbr(void);voidic(void);intmain(void){br();printf(",");ic();printf("\n");ic();printf("\n");br();printf("\n");return0;}voidbr(void){printf("Brazil,Russia");}voidic(void){printf("India,China");}6.#include<stdio.h>intmain(void){inttoes=10;inttoes_2,toes2;toes_2=2*toes;toes2=toes*toes;printf("toes是%d,toes的两倍是%d,toes的平方是%d\n",toes,toes_2,toes2);return0;}8.#include<stdio.h>voidone_three(void);voidtwo(void);intmain(void){printf("startingnow\n");one_three();}voidone_three(void){printf("one\n");two();printf("three\n");printf("done!\n");}voidtwo(void){printf("two\n");}第三章2.#include<stdio.h>intmain(void){charch;printf("pleaseinputanumber:");scanf("%d",&ch);printf("%c\n",ch);return0;}4.#include<stdio.h>intmain(void){floata;printf("Enterafloating-pointvalue:");scanf("%f",&a);printf("fixed-pointnotation:%f\n",a);printf("exponentialnotation:%e\n",a);return0;}5.#include<stdio.h>intmain(void){intage;doubleseconds;printf("pleaseinputyourage:");scanf("%d",&age);seconds=age*3.156e7;printf("thecorrespondingsecondsare:%e\n",seconds);return0;}7.#include<stdio.h>intmain(void){floatinches,cms;printf("inputyourheight(inch):");scanf("%f",&inches);cms=inches*2.54;printf("yourheight(cm):%f\n",cms);return0;}8.#include<stdio.h>intmain(void){floatpint,ounce,soupspoon,teaspoon,cup;printf("inputthenumberofcups:");scanf("%f",&cup);pint=cup/2;ounce=cup*8;soupspoon=ounce*2;teaspoon=soupspoon*3;printf("theyareequivalentof:\n%fpint\n%founce\n%fsoupspoons\n%fteaspoons\n",pint,ounce,soupspoon,teaspoon);return0;}第四章1.#include<stdio.h>intmain(void){charfirstname[40],lastname[40];printf("Inputyourfirstname:");scanf("%s",firstname);printf("Inputyourlastname:");scanf("%s",lastname);printf("Yournameis%s,%s\n",firstname,lastname);return0;}2.#include<stdio.h>#include<string.h>intmain(void){charname[40];intwidth;printf("Inputyourname:");scanf("%s",name);width=strlen(name)+3;printf("%*s\n",width,name);//输入的名和姓中间不能分隔return0;}4.#include<stdio.h>intmain(void){floatheight;charname[40];printf("Inputyourheight(cm)andname:");scanf("%f%s",&height,name);height=height/100;printf("%s,youare%.3fmtall\n",name,height);return0;}5.#include<stdio.h>intmain(void){floatspeed,size,time;printf("Inputthedownloadspeed(Mb/s)andthefilesize(MB):\n");scanf("%f%f",&speed,&size);time=size/speed*8.0;printf("At%.2fmegabitspersecond,afileof%.2fmegabytes\n",speed,size);printf("downloadsin%.2fseconds.\n",time);return0;}6.#include<stdio.h>#include<string.h>intmain(void){charfirstname[40],lastname[40];printf("Inputyourfirstname:");scanf("%s",firstname);printf("Inputyourlastname:");scanf("%s",lastname);printf("%s%s\n",firstname,lastname);printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(lastname),strlen(lastname));printf("%s%s\n",firstname,lastname);printf("%*d%*d\n",-strlen(firstname),strlen(firstname),-strlen(lastname),strlen(lastname));return0;}7.#include<stdio.h>#include<float.h>intmain(void){doublea=1.0/3.0;floatb=1.0/3.0;printf("%.6f%.6f\n",a,b);//左侧double型右侧float型printf("%.12f,%.12f\n",a,b);printf("%.16f,%.16f\n",a,b);printf("DBL_DIG:%d\n",DBL_DIG);printf("FLT_DIG:%d\n",FLT_DIG);return0;}8.#include<stdio.h>#defineGALLON3.758//1gallon=3.785liters#defineMILE1.609//1mile=1.609kilometersintmain(void){floatgallon,mile;printf("Inputmilesandgallons:");scanf("%f%f",&mile,&gallon);printf("Milespergallon:%.1f\n",mile/gallon);printf("Litreper100kilometers:%.1f\n",gallon*GALLON/(mile*MILE)*100);return0;}第五章1.#include<stdio.h>#defineH_P_M60//1h=60minintmain(void){inthour,min,left;printf("Enterthenumberofminutes:");scanf("%d",&min);while(min>0){hour=min/H_P_M;left=min%H_P_M;printf("%dminutesis%dhoursand%dminutes.\n",min,hour,left);printf("Enteryournextvalue:");scanf("%d",&min);}printf("Goodbye!\n");return0;}2.#include<stdio.h>intmain(void){intnum,count;printf("Inputainteger:");scanf("%d",&num);count=0;while(count++<11){printf("%d",num);num++;}printf("\n");return0;}3.#include<stdio.h>#defineDAYS_PER_WEEK7//一周7天intmain(void){intday,week,left;printf("Inputthenumberofdays:");scanf("%d",&day);while(day>0){week=day/DAYS_PER_WEEK;left=day%DAYS_PER_WEEK;printf("%ddaysare%dweeks,%ddays.\n",day,week,left);printf("Nextinput:");scanf("%d",&day);}return0;}4.#include<stdio.h>#defineCM_PER_FEET30.48//1feet=30.48cm#defineCM_PER_INCH2.54//1inch=2.54cmintmain(void){intfeet;floatcm,inch;printf("Enteraheightincentimeters:");scanf("%f",&cm);while(cm>0){feet=(int)(cm/CM_PER_FEET);inch=(cm-feet*CM_PER_FEET)/CM_PER_INCH;printf("%.1fcm=%dfeet,%.1finches\n",cm,feet,inch);printf("Enteraheightincentimeters(<=0toquit):");scanf("%f",&cm);}printf("bye\n");return0;}5.#include<stdio.h>intmain(void){intcount,sum,days;printf("Inputthenumberofdays:");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count;printf("Themoneyyouearned:%d\n",sum);return0;}6.#include<stdio.h>intmain(void){intcount,sum,days;printf("Inputthenumberofdays:");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count*count;printf("Themoneyyouearned:%d\n",sum);return0;}7.#include<stdio.h>voidcube(doublen);intmain(void){doublenum;printf("Inputanumber:");scanf("%lf",&num);cube(num);}voidcube(doublen){printf("Thecubeof%fis%f\n",n,n*n*n);}8.#include<stdio.h>intmain(void){intnum1,num2;printf("Thisprogramcomputesmoduli.\n");printf("Enteranintegertoserveasthesecondoperand:");scanf("%d",&num1);printf("Nowenterthefirstoperand:");scanf("%d",&num2);while(num2>0){printf("%d%%%dis%d\n",num2,num1,num2%num1);printf("Enternextnumberforfirstoperand(<=0toquit):");scanf("%d",&num2);}printf("Done\n");}9.#include<stdio.h>voidTemperatures(doublefah);intmain(void){doublefah,cel,kel;//华氏温度,摄氏温度,开氏温度printf("InputtheFahrenheittemperature:");while(scanf("%lf",&fah)==1){Temperatures(fah);printf("Nextinput:");}printf("Done.\n");}voidTemperatures(doublefah){constdoublea=5.0,b=9.0,c=32.0,d=276.13;printf("%.2f℉is%.2f℃,%.2fK.\n",fah,a/b*(fah-c),a/b*(fah-c)+d);}第六章1.#include<stdio.h>#defineSIZE26intmain(void){charch[SIZE];intindex;for(index=0;index<SIZE;index++){ch[index]='a'+index;printf("%c",ch[index]);}printf("\n");return0;}2.#include<stdio.h>intmain(void){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf("$");printf("\n");}return0;}3.#include<stdio.h>intmain(void){inti,j;for(i=1;i<=6;i++){for(j=0;j<i;j++)printf("%c",'F'-j);printf("\n");}return0;}4.#include<stdio.h>#defineROWS6intmain(void){charch;inti,j;for(ch='A',i=0;i<ROWS;i++){for(j=0;j<=i;j++)printf("%c",ch++);printf("\n");}return0;}5.#include<stdio.h>#defineROWS5intmain(void){charch='A';inti,j;for(i=1;i<=ROWS;i++){for(j=1;j<=ROWS-i;j++)printf("");for(j=0;j<i;j++)printf("%c",ch+j);for(j=i-2;j>=0;j--)printf("%c",ch+j);printf("\n");}return0;}6.#include<stdio.h>intmain(void){intmax,min,num;printf("Inputtheminandmax:");scanf("%d%d",&min,&max);printf("%10s%10s%10s\n","number","square","cube");for(num=min;num<=max;num++)printf("%10d%10d%10d\n",num,num*num,num*num*num);return0;}7.//与题目不同打印的是句子#include<stdio.h>#include<string.h>#defineSIZE40intmain(void){inti,index=-1;charch[SIZE];printf("Inputaword:");do{index++;scanf("%c",&ch[index]);}while(ch[index]!='\n');for(i=index+1;i<=40;i++)ch[i]='\0';for(index=strlen(ch);index>=0;index--)printf("%c",ch[index]);printf("\n");return0;}8.#include<stdio.h>intmain(void){doublen1,n2;printf("Inputtwonumbers:");while(2==scanf("%lf%lf",&n1,&n2)){printf("%f\n",(n1-n2)/n1*n2);printf("Inputyournextpairofnumbers:");}printf("Bye!\n");return0;}9.#include<stdio.h>doublecalculate(doublen1,doublen2);intmain(void){doublenum1,num2;printf("Inputtwonumbers:");while(2==scanf("%lf%lf",&num1,&num2))//输入两个浮点数{printf("%f\n",calculate(num1,num2));//函数调用printf("Inputyournextpairofnumbers:");}printf("Bye!\n");return0;}doublecalculate(doublen1,doublen2){return((n1-n2)/(n1*n2));//返回运算结果}10.#include<stdio.h>intmain(void){intlower,upper;intnum,sum;printf("Enterlowerandupperintegerlimits:");scanf("%d%d",&lower,&upper);while(lower<upper){for(sum=0,num=lower;num<=upper;num++)sum=sum+num*num;//计算平方和printf("Thesumsofthesquaresfrom%dto%dis%d\n",lower*lower,upper*upper,sum);//输出结果printf("Enternextsetoflimits:");scanf("%d%d",&lower,&upper);//下一次输入}printf("Done\n");return0;}11.#include<stdio.h>#defineSIZE8intmain(void){intnum[SIZE];intindex;printf("Enter8integers:");for(index=0;index<SIZE;index++)//输入8个整数scanf("%d",&num[index]);for(index=SIZE-1;index>=0;index--)//倒序输出printf("%d",num[index]);printf("\n");return0;}12.#include<stdio.h>intmain(void){doublesum1=0,sum2=0;intcount,items,sign;printf("Entertheitems:");scanf("%d",&items);//输入序列的项数for(count=1,sign=1;count<=items;count++,sign*=-1){sum1+=1.0/count;sum2+=1.0*sign/count;}//分别计算两序列的和printf("1.0+1.0/2.0+1.0/3.0+1.0/4.0+...=%f\n",sum1);printf("1.0-1.0/2.0+1.0/3.0-1.0/4.0+...=%f\n",sum2);return0;}13.#include<stdio.h>#defineSIZE8intmain(void){intindex,count,num[SIZE];for(index=0,count=1;index<SIZE;index++){count*=2;num[index]=count;}//for循环将数组元素设为2的前8次幂index=0;//初始化index的值doprintf("%d",num[index++]);while(index<SIZE);//dowhile循环显示数组元素的值printf("\n");return0;}14.#include<stdio.h>#defineSIZE8intmain(){doublenum1[SIZE],num2[SIZE];intindex1,index2,index;printf("Enter8numberstothefirstarray:\n");for(index1=0;index1<SIZE;index1++)scanf("%lf",&num1[index1]);//向第一个数组输入8个数num2[0]=num1[0];for(index1=1,index2=1;index1<SIZE;index1++,index2++)num2[index2]=num2[index2-1]+num1[index1];//为第二个数组赋值(是第一个数组对应的元素之和)printf("Thefirstarray:");for(index=0;index<SIZE;index++){printf("%6.2f",num1[index]);}//输出第一个数组的内容printf("\nThesecondarray:");for(index=0;index<SIZE;index++){printf("%6.2f",num2[index]);//输出第二个数组的内容}printf("\n");return0;}15.#include<stdio.h>#include<string.h>#defineSIZE255intmain(void){intindex;charch[SIZE];printf("Enteraline:");for(index=0,scanf("%c",&ch[0]);ch[index]!='\n';){index++;scanf("%c",&ch[index]);}//输入内容到字符数组中,回车时结束for(index+=1;index<SIZE;index++)ch[index]='\0';//将数组剩余空间补充为'\0'for(index=strlen(ch);index>=0;index--)printf("%c",ch[index]);//倒序输出内容printf("\n");return0;}16.#include<stdio.h>#defineRATE_DAPHNE0.1#defineRATE_DEIRDRE0.05//两人的利率#defineMONEY100intmain(void){intyear;doubledaphne=MONEY,deirdre=MONEY;//两人的初始投资额相同for(year=1;daphne>=deirdre;year++){daphne+=MONEY*RATE_DAPHNE;deirdre+=deirdre*RATE_DEIRDRE;}//计算Deirdre投资额超过Daphne需要的年数和当时的金额printf("After%dyear,Deirdre'sinvestmentwillbemorethanDaphne's,\n""Daphne'sinvestmentwillbe$%lf,\nandDeirdre'sinvestmentwillbe$%lf.\n",year,daphne,deirdre);//输出结果return0;}17.#include<stdio.h>#defineINITIAL_MONEY100//账户初始金额为100万元#defineANNUAL_RATE0.08//年利率为8%intmain(void){intyear;doublemoney;for(year=1,money=INITIAL_MONEY;money>0;year++)money+=money*ANNUAL_RATE-10;//计算每年年终的账户余额printf("After%dyears,Chuckiewilldrawallmoneyfromhisaccount.\n",year);return0;}18.#include<stdio.h>#defineINITIAL_NUMBER5//初始朋友数为5人#defineDUNBAR_NUMBER150//邓巴数intmain(void){intweek;intnumber=INITIAL_NUMBER;for(week=1;number<=DUNBAR_NUMBER;week++){number=(number-week)*2;//计算每周的朋友数量printf("After%dweek,thenumberofRabnud'sfriendsis%d\n",week,number);}return0;}第七章1.#include<stdio.h>intmain(void){charch;intn_space=0;//空格数intn_newline=0;//换行数intn_others=0;//其他字符数printf("Entersometext;Enter#toquit.\n");while((ch=getchar())!='#'){if(ch=='')n_space++;elseif(ch=='\n')n_newline++;elsen_others++;}printf("Spaces:%d,newlines:%d,others:%d\n",n_space,n_newline,n_others);return0;}2.#include<stdio.h>#defineCHARS_PER_LINE8//每行字符数intmain(void){charch;intn_chars=1;//字符数printf("Entersomecharacters(#toquit):\n");while((ch=getchar())!='#'){printf("%3c(%3d)",ch,ch);if(n_chars++%CHARS_PER_LINE==0)printf("\n");}printf("\n");return0;}3.#include<stdio.h>intmain(void){intnum;intn_even=0,n_odd=0;//偶数和奇数个数intsum_even=0,sum_odd=0;//偶数和奇数和printf("Entersomeintegers(0toquit):\n");scanf("%d",&num);while(num!=0){if(num%2==0){n_even++;sum_even+=num;}//计算偶数个数和偶数和else{n_odd++;sum_odd+=num;}//计算奇数个数和奇数和scanf("%d",&num);}printf("Thenumberofevennumbersis%d,""andtheeverageofevennumbersis%.2f\n",n_even,(n_even==0)?0:(float)sum_even/n_even);printf("Thenumberofoddnumbersis%d,""andtheeverrageofoddnumersis%.2f\n",n_odd,(n_odd==0)?0:(float)sum_odd/n_odd);return0;}4.#include<stdio.h>intmain(void){charch;intn_repl=0;//替换次数printf("Entersometexts(#toquit):\n");while((ch=getchar())!='#'){if(ch=='.'){ch='!';n_repl++;}//替换句号elseif(ch=='!'){printf("!");n_repl++;}//替换感叹号printf("%c",ch);}printf("\n%dsubstitutionsweremade.\n",n_repl);return0;}5.#include<stdio.h>intmain(void){charch;intn_repl=0;//替换次数printf("Entersometexts(#toquit):\n");while((ch=getchar())!='#'){switch(ch){case'.':ch='!';n_repl++;break;case'!':printf("!");n_repl++;break;default:break;}//利用switch语句进行替换printf("%c",ch);}printf("\n%dsubstitutionsweremade.\n",n_repl);return0;}6.#include<stdio.h>intmain(void){charch;charlast_ch=0;//前一个字符intcount=0;printf("Entersometexts(#toquit):\n");while((ch=getchar())!='#'){if((ch=='i')&&(last_ch=='e'))count++;last_ch=ch;//出现ei时,计数+1}printf("\"ei\"appeared%dtimes.\n",count);return0;}7.#include<stdio.h>#defineBASE1000//基本工资100美元/h#defineTIME40//超过40h为加班#defineMUL1.5//加班时间算作平时的1.5倍#defineRATE10.15//前300美元的税率#defineRATE20.2//300-450美元的税率#defineRATE30.25//大于450美元的税率#defineBREAK1300//税率的第一个分界点#defineBREAK2450//税率的第二个分界点intmain(void){doublehour,tax,gross;printf("Inputyourworkhoursinaweek:");scanf("%lf",&hour);if(hour<=TIME)gross=hour*BASE;elsegross=TIME*BASE+(hour-TIME)*MUL*BASE;//计算总收入if(gross<=BREAK1)tax=gross*RATE1;elseif(gross<=BREAK2)tax=BREAK1*RATE1+(gross-BREAK1)*RATE2;elsetax=BREAK1*RATE1+(BREAK2-BREAK1)*RATE2+(gross-BREAK2)*RATE3;//计算税金printf("Yourgrossincomeis$%.2lf\nYourtaxis$%.2lf\n""Yournetincomeis$%.2lf\n",gross,tax,(gross-tax));return0;8.#include<stdio.h>#defineBASE18.75#defineBASE29.33#defineBASE310.00#defineBASE411.20//四种等级的基本工资#defineTIME40//超过40h为加班#defineMUL1.5//加班时间算作平时的1.5倍#defineRATE10.15//前300美元的税率#defineRATE20.2//300-450美元的税率#defineRATE30.25//大于450美元的税率#defineBREAK1300//税率的第一个分界点#defineBREAK2450//税率的第二个分界点intmain(void){doublebase,hour,tax,gross;intcount,num;constintLENGTH=65;//*的长度printpart:for(count=0;count<LENGTH;count++)printf("*");printf("\nEnterthenumbercorrespondingtothedesiredpayrateoraction:\n");printf("%-36s%s","1)$8.75/hr","2)$9.33/hr\n");printf("%-36s%s","3)$10.00/hr","4)$11.20/hr\n");printf("%s\n","5)quit");for(count=0;count<LENGTH;count++)printf("*");printf("\n");//打印 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 while(scanf("%d",&num)==1){switch(num){case1:base=BASE1;break;case2:base=BASE2;break;case3:base=BASE3;break;case4:base=BASE4;break;case5:printf("quit.\n");return0;default:printf("Pleaseinputtherightoption.\n");gotoprintpart;}//选择基本工资等级printf("Inputyourworkhoursinaweek:");scanf("%lf",&hour);if(hour<=TIME)gross=hour*base;elsegross=TIME*base+(hour-TIME)*MUL*base;//计算总收入if(gross<=BREAK1)tax=gross*RATE1;elseif(gross<=BREAK2)tax=BREAK1*RATE1+(gross-BREAK1)*RATE2;elsetax=BREAK1*RATE1+(BREAK2-BREAK1)*RATE2+(gross-BREAK2)*RATE3;//计算税金printf("Yourgrossincomeis$%.2lf\nYourtaxis$%.2lf\n""Yournetincomeis$%.2lf\n",gross,tax,(gross-tax));printf("\nYournextchoice:\n");}return0;}9.#include<stdio.h>intmain(void){intdiv,prime;intnum,count;intflag;printf("Inputapositiveinteger:");scanf("%d",&num);printf("Theprimenumbersinrange:\n");for(prime=2;prime<=num;prime++)//外层循环显示所有素数{flag=1;for(div=2;(div*div)<=prime;div++){if(prime%div==0)flag=0;}//内层循环检验是否为素数if(flag)//利用标记flag判断printf("%d",prime);}printf("\n");return0;}10.#include<stdio.h>#defineRATE10.15#defineRATE20.28#defineSINGLE17850//单身人群的税率分界点#defineHOST23900//户主人群的税率分界点#defineMAR_SHA29750//已婚共有人群的分界点#defineMAR_DEV14875//已婚离异人群的分界点intmain(void){intnum;doubleincome,tax_break,tax;printpart:printf("PleaseenterCorresponding""figurestoselectthetype\n");printf("1single,2host,3marriedandshared,""4marriedbutdevocedand5toquit.\n");scanf("%d",&num);switch(num){case1:tax_break=SINGLE;break;case2:tax_break=HOST;break;case3:tax_break=MAR_SHA;break;case4:tax_break=MAR_DEV;break;case5:printf("quit.\n");return0;default:printf("Pleaseinputrightnumber.");gotoprintpart;//回到输入阶段}printf("Enteryourincome:");//指定种类和收入while(scanf("%lf",&income)==1){if(income<=tax_break)tax=income*RATE1;elsetax=tax_break*RATE1+(income-tax_break)*RATE2;//计算税金printf("Thetaxis$%.2lf.\n",tax);printf("Yournextinput:\n");gotoprintpart;//回到输入阶段}return0;}11.#include<stdio.h>#include<ctype.h>#defineARTICHOKE2.05//洋蓟2.05美元/磅#defineBEET1.15//甜菜1.15美元/磅#defineCARROT1.09//胡萝卜1.09美元/磅#defineDISCOUNT_LIMIT100//包装费和运费打折 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 订单100美元#defineDISCOUNT_RATE0.05//折扣为%5#defineBREAK15#defineBREAK220//装运费的分界点#defineFEE16.5#defineFEE214#defineFEE3_RATE0.5//不同重量区间的装运费,其中超过20磅的每续重一磅//增加0.5元intmain(void){doubleweight;doubleweight_artichoke=0;doubleweight_beet=0;doubleweight_carrot=0;//购买三种蔬菜的重量doubletotal_weight;//总重量doubleveg_cost;//三种蔬菜总共花费doubleorder_cost;//订单总额doubletotal_cost;//费用总额doublepack_tran_fee;//装运费doublediscount;intcount=0;charch;printf("Pleaseselectthevegetablesyouwanttobuy:\n");printf("a:artichoke$%.2f/lb\n",ARTICHOKE);printf("b:beet$%.2f/lb\n",BEET);printf("c:carrot$%.2f/lb\n",CARROT);printf("q:quit.\n");//打印选择信息while((ch=tolower(getchar()))!='q'){//if(ch=='\n')//continue;//滤掉回车switch(ch){case'a':printf("Inputtheweightofartichokeinpound:");scanf("%lf",&weight);weight_artichoke+=weight;count++;printf("Continueenteringa,b,corq:");break;case'b':printf("Inputtheweightofbeetinpound:");scanf("%lf",&weight);weight_beet+=weight;count++;printf("Continueenteringa,b,corq:");break;case'c':printf("Inputtheweightofcarrotinpound:");scanf("%lf",&weight);weight_carrot+=weight;count++;printf("Continueenteringa,b,corq:");break;default:printf("Pleaseentertherightcharacter.");}while(getchar()!='\n')continue;//滤掉输入重量后面的所有字符}if(!count){printf("Bye.\n");return0;}//开始输出q,直接退出total_weight=weight_artichoke+weight_beet+weight_carrot;veg_cost=weight_artichoke*ARTICHOKE+weight_beet*BEET+weight_carrot*CARROT;discount=0;if(veg_cost>=DISCOUNT_LIMIT){discount=veg_cost*DISCOUNT_RATE;order_cost=veg_cost-discount;}elseorder_cost=veg_cost;//折扣计算if(total_weight<=BREAK1)pack_tran_fee=FEE1;elseif(total_weight<=BREAK2)pack_tran_fee=FEE2;elsepack_tran_fee=FEE2+(total_weight-BREAK2)*FEE3_RATE;//装运费计算total_cost=order_cost+pack_tran_fee;printf("\nHereiswhatyouchoose:\n");if(weight_artichoke){printf("artichokePrice:$%.2f/lbweight:%.2fpoundscost:$%.2f\n",ARTICHOKE,weight_artichoke,weight_artichoke*ARTICHOKE);}if(weight_beet){printf("beetPrice:$%.2f/lbweight:%.2fpoundscost:$%.2f\n",BEET,weight_beet,weight_beet*BEET);}if(weight_carrot){printf("carrotPrice:$%.2f/lbweight:%.2fpoundscost:$%.2f\n",CARROT,weight_carrot,weight_carrot*CARROT);}printf("Theordercost:$%.2f\n",veg_cost);if(discount)printf("Youhave%%%.fdiscount,andthereducedmoneyis$%.2f\n",DISCOUNT_RATE*100,discount);printf("Thepackingandtranspotingfeeis$%.2f\n",pack_tran_fee);printf("Thetotalcostis$%.2f\n",total_cost);//输出订单信息return0;}第八章1.#include<stdio.h>intmain(void){intch;intcount=0;while((ch=getchar())!=EOF)count++;printf("Thenumberofcharactersis%d\n",count);return0;}2.#include<stdio.h>#defineSPACE32#defineCTRL64#defineCOL10//每行打印10对intmain(void){charch;intcount=0;while((ch=getchar())!=EOF){count++;//打印字符输出if(ch>=SPACE)printf("%c",ch);//换行符和制表符的输出elseif(ch=='\n'||ch=='\t')printf("%s",ch=='\n'?"\\n":"\\t");//一般控制字符的输出elseprintf("^%c",ch+CTRL);printf("%-5d",ch);if(ch=='\n')count=0;if(count%COL==0)//10对换行printf("\n");}return0;}3.#include<stdio.h>#include<ctype.h>intmain(void){intlower=0,upper=0;charch;printf("Inputsometexts:\n");while((ch=getchar())!=EOF){if(islower(ch))lower++;if(isupper(ch))upper++;}printf("lower:%d,upper:%d\n",lower,upper);return0;}4.#include<stdio.h>#include<ctype.h>intmain(void){charch;intinword=0;//在单词中为1否则为0intwords=0;//单词数intchars=0;//字符数printf("Pleaseentersomewords:\n");while((ch=getchar())!=EOF){if(!isspace(ch)&&!ispunct(ch))chars++;//开始一个新的单词if(!isspace(ch)&&!ispunct(ch)&&!inword){inword=1;words++;}//单词末尾if(isspace(ch)||ispunct(ch)&&inword)inword=0;}printf("Thereare%dwordsand%dletters\n",words,chars);printf("Theaveragenumberoflettersof");printf("eachwordis%.2f.\n",((double)chars/(double)words));return0;}5.#include<stdio.h>#defineLOW1//初始下限#defineHIGH100//初始上限intget_guess(void);intmain(void){charresponse;intguess;intlow=LOW;inthigh=HIGH;guess=(low+high)/2;printf("Pickanintegerfrom%dto%d.Iwilltrytoguess",LOW,HIGH);printf("it.\nRespondwithayifmyguessisright,withansifit\n");printf("issmallandwithabifitisbig.\n");printf("Uh...isyournumber%d?\n",guess);while((response=getchar())!='y'){if(response=='s'){low=guess;guess=(guess+high)/2;}elseif(response=='b'){high=guess;guess=(guess+low)/2;}elseprintf("Sorry,Iunderstandonlyy,sandb.\n");printf("Well,then,isit%d?\n",guess);//跳过剩余输入行while(getchar()!='\n')continue;//使取值能到达上限if(guess==HIGH-1)guess++;}printf("Iknewicoulddoit!\n");return0;}6.#include<stdio.h>#include<ctype.h>charget_first(void);intmain(void){charch;while((ch=get_first())!=EOF){putchar(ch);printf("\n");}return0;}charget_first(void){charch;while(isspace(ch=getchar()))continue;while(getchar()!='\n')continue;returnch;}7.#include<stdio.h>#defineBASE18.75#defineBASE29.33#defineBASE310.00#defineBASE411.20//四种等级的基本工资#defineTIME40//超过40h为加班#defineMUL1.5//加班时间算作平时的1.5倍#defineRATE10.15//前300美元的税率#defineRATE20.2//300-450美元的税率#defineRATE30.25//大于450美元的税率#defineBREAK1300//税率的第一个分界点#defineBREAK2450//税率的第二个分界点#defineLENGTH65//*的长度charget_choice(void);voidcalculate(doublebase);intmain(void){doublebase;charchoice;while((choice=get_choice())!='q'){switch(choice){case'a':base=BASE1;break;case'b':base=BASE2;break;case'c':base=BASE3;break;case'd':base=BASE4;break;default:printf("Pleaserespondwitha,b,c,dorq.\n");break;}if(choice>='a'&&choice<='d')calculate(base);}return0;}//计算和输出结果的函数voidcalculate(doublebase){doublehour,gross,tax;printf("Inputyourworkhoursinaweek:");scanf("%lf",&hour);while(getchar()!='\n')continue;//跳过回车if(hour<=TIME)gross=hour*base;elsegross=TIME*base+(hour-TIME)*MUL*base;//计算总收入if(gross<=BREAK1)tax=gross*RATE1;elseif(gross<=BREAK2)tax=BREAK1*RATE1+(gross-BREAK1)*RATE2;elsetax=BREAK1*RATE1+(BREAK2-BREAK1)*RATE2+(gross-BREAK2)*RATE3;//计算税金printf("Yourgrossincomeis$%.2lf\nYourtaxis$%.2lf\n""Yournetincomeis$%.2lf\n",gross,tax,(gross-tax));printf("\n");}//打印选择界面并让用户输入的函数charget_choice(void){charch;intcount;for(count=0;count<LENGTH;count++)printf("*");printf("\nEnterthelettercorrespondingtothedesiredpayrateoraction:\n");printf("%-36s%s","a)$8.75/hr","b)$9.33/hr\n");printf("%-36s%s","c)$10.00/hr","d)$11.20/hr\n");printf("%s\n","q)quit");for(count=0;count<LENGTH;count++)printf("*");printf("\n");ch=getchar();while(getchar()!='\n')continue;//跳过输出行剩余内容returnch;}8.#include<stdio.h>floatget_float(void);charget_choice(void);charget_first(void);intmain(void){charchoice;floatnum1,num2;while((choice=get_choice())!='q'){printf("Enterfirstnumber:");num1=get_float();printf("Entersecondnumber:");num2=get_float();switch(choice){case'a':printf("%.2f+%.2f=%.2f\n",num1,num2,num1+num2);break;case's':printf(".2%f-%.2f=%.2f\n",num1,num2,num1-num2);break;case'm':printf("%.2f*%.2f=%.2f\n",num1,num2,num1*num2);break;case'd':if(!num2){printf("Enteranumberotherthan0:");num2=get_float();}printf("%.2f/%.2f=%.2f\n",num1,num2,num1/num2);break;default:printf("Programerror!\n");break;}}printf("Bye.\n");return0;}//打印界面和让用户选择的函数charget_choice(void){charch;printf("Entertheoperationofyourchoice:\n");printf("%-36s%s\n","a.add","s.subtract");printf("%-36s%s\n","m.multiply","d.divide");printf("q.quit\n");ch=get_first();while(ch!='a'&&ch!='s'&&ch!='m'&&ch!='d'&&ch!='q'){printf("Pleaseentera,s,m,dorq.\n");ch=get_first();}returnch;}//获得输入值并处理错误输入的函数floatget_float(void){floatinput;charch;while(scanf("%f",&input)!=1){while((ch=getchar())!='\n')putchar(ch);printf("isnotannumber.\n");printf("Pleaseenteranumber,suchas2.5,-1.78E8,or3:");}while(getchar()!='\n')continue;returninput;}//读取输入行的第一个字符charget_first(void){charch;ch=getchar();while(getchar()!='\n')continue;returnch;}第九章1.#include<stdio.h>doublemin(doublex,doubley);intmain(void){doublenum1,num2;printf("Entertwonumbers:");scanf("%lf%lf",&num1,&num2);printf("Thesmalleroneis:%f\n",min(num1,num2));return0;}doublemin(doublen1,doublen2){return(n1<n2?n1:n2);}2.#include<stdio.h>voidchline(charch,inti,intj);intmain(void){introw,col;charch;printf("Inputacharacteryouwanttoprint:");ch=getchar();printf("Inputthenumberofrowsandcolumns:");scanf("%d%d",&row,&col);chline(ch,row,col);return0;}voidchline(charch,inti,intj){introw,col;for(row=1;row<=i;row++){for(col=1;col<=j;col++)putchar(ch);putchar('\n');}return;}4.#include<stdio.h>doublehar_mean(doublenum1,doublenum2);intmain(void){doublenum1,num2;printf("Entertwonumbers:");scanf("%lf%lf",&num1,&num2);printf("Theharmonicmeanis:%f\n",har_mean(num1,num2));}doublehar_mean(doublenum1,doublenum2){return1/(1/num1+1/num2);}5.#include<stdio.h>voidlarger_of(double*x,double*y);intmain(void){doublenum1,num2;printf("Inputtwonumbers:");scanf("%lf%lf",&num1,&num2);printf("Originally,num1=%f,num2=%f\n",num1,num2);larger_of(&num1,&num2);printf("Now,num1=%f,num2=%f\n",num1,num2);return0;}voidlarger_of(double*x,double*y){*x>*y?(*y=*x):(*x=*y);}6.#include<stdio.h>voidsort(double*x,double*y,double*z);intmain(void){doublenum1,num2,num3;printf("Enter3numbers:");scanf("%lf%lf%lf",&num1,&num2,&num3);printf("Originally\nnum1=%.2f,num2=%.2f,num3=%.2f\n",num1,num2,num3);sort(&num1,&num2,&num3);printf("Now\nnum1=%.2f,num2=%.2f,num3=%.2f\n",num1,num2,num3);return0;}voidsort(double*x,double*y,double*z){doubletemp;if(*y<*x){temp=*y;*y=*x;*x=temp;}if(*z<*x){temp=*z;*z=*x;*x=temp;}if(*z<*y){temp=*z;*z=*y;*y=temp;}}7.#include<stdio.h>#include<ctype.h>intget_ch(charch);intmain(void){charch;printf("Inputsometexts:\n");while((ch=getchar())!=EOF)printf("%d",get_ch(ch));return0;}intget_ch(charch){if(isalpha(ch))returntolower(ch)-'a'+1;elsereturn-1;}8.#include<stdio.h>doublepower(doublen,intp);intmain(void){doublex,xpow;intexp;printf("Enteranumberandtheintergerpower(qtoquit):\n");while(scanf("%lf%d",&x,&exp)==2){xpow=power(x,exp);printf("%.3gtothepower%dis%g\n",x,exp,xpow);printf("Enterthenextpairofnumbersorqtoquit.\n");}printf("Bye.\n");}doublepower(doublen,intp){intcount;doublepow=1;if(p==0)if(n==0){pow=1;printf("Itisnotdefined,sothevalueistreatedas1\n");}elsepow=1;elseif(p>0)for(count=0;count<p;count++)pow*=n;elseif(n!=0)for(count=0;count>p;count--)pow/=n;elsepow=0;returnpow;}9.#include<stdio.h>doublepower(doublen,intp);intmain(void){doublex,xpow;intexp;printf("Enteranumberandtheintergerpower(qtoquit):\n");while(scanf("%lf%d",&x,&exp)==2){xpow=power(x,exp);printf("%.3gtothepower%dis%g\n",x,exp,xpow);printf("Enterthenextpairofnumbersorqtoquit.\n");}printf("Bye.\n");}doublepower(doublen,intp){intcount;doublepow;if(p>0)pow=n*power(n,p-1);elseif(p<0)if(n!=0)pow=(1.0/n)*power(n,p+1);elsepow=0;elsepow=1;returnpow;}10.#include<stdio.h>voidto_base_n(unsignedlongn,unsignedintbase);intmain(void){unsignedlongnum;unsignedintbase;printf("Enteranintegerandthebasefrom2to10(qtoquit):");while(scanf("%lu%u",&num,&base)==2){printf("Equivalentnumberonthebaseof%u:",base);to_base_n(num,base);printf("\nEnteryournextpairofnumbers(qtoquit):");}printf("Done.\n");return0;}voidto_base_n(unsignedlongn,unsignedintbase){intr;r=n%base;if(n>=base)to_base_n(n/base,base);printf("%d",r);}11.#include<stdio.h>unsignedlongFibonacci(unsignedn);intmain(void){unsignedintnum;intcount;printf("Inputthenumberoftheitems(qtoquit):");while(scanf("%u",&num)==1){for(count=1;count<=num;count++)printf("%lu",Fibonacci(count));printf("\nYournextinput(qtoquit):");}printf("Bye.\n");return0;}unsignedlongFibonacci(unsignedn){intcount,temp;intn1=1,n2=1;if(n>2)for(count=3;count<=n;count++){temp=n1+n2;n1=n2;n2=temp;}elsen2=1;returnn2;}第十章1.#include<stdio.h>#defineMONTHS12//一年的月份数#defineYEARS5//一年的年数intmain(void){//用2010~2014年的降水量数据初始化数组constfloatrain[YEARS][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<YEARS;year++){//每一年,个月降水量总和for(month=0,subtot=0;month<MONTHS;month++)subtot+=*(*(rain+year)+month);printf("%5d%15.1f\n",2010+year,subtot);total+=subtot;//5年的总降水量}printf("\nTheyearlyaverageis%.1finches.\n\n",total/YEARS);printf("MONTHLYAVERAGES:\n\n");printf("JanFebMarAprMayJunJulAugSepOct");printf("NovDec\n");for(month=0;month<MONTHS;month++){for(year=0,subtot=0;year<YEARS;year++)subtot+=*(*(rain+year)+month);printf("%4.1f",subtot/YEARS);}printf("\n");return0;}2.#include<stdio.h>#defineSIZE5voidcopy_arr(doublear1[],doublear[],intn);voidcopy_ptr(double*ar2,double*ar,intn);voidcopy_ptrs(double*ar3,double*ar,double*end);voidprint_array(doublear[],intn);//打印数组的函数intmain(void){doublesource[SIZE]={1.1,2.2,3.3,4.4,5.5};doubletarget1[SIZE];doubletarget2[SIZE];doubletarget3[SIZE];copy_arr(target1,source,SIZE);copy_ptr(target2,source,SIZE);copy_ptrs(target3,source,source+SIZE);print_array(target1,SIZE);print_array(target2,SIZE);print_array(target3,SIZE);return0;}voidcopy_arr(doublear1[],doublear[],intn){intindex;for(index=0;index<n;index++)ar1[index]=ar[index];}voidcopy_ptr(double*ar2,double*ar,intn){inti;for(i=0;i<n;i++)*(ar2++)=*(ar++);}voidcopy_ptrs(double*ar3,double*ar,double*end){inti;for(i=0;ar<end;i++)*(ar3++)=*(ar++);}voidprint_array(doublear[],intn){intindex;for(index=0;index<n;index++)printf("%g",ar[index]);printf("\n");}3.#include<stdio.h>intmax(intar[],intn);intmain(void){intnum[]={23,2,32,66,3,5,25,7,3,20};printf("Thebiggestnumberis%d\n",max(num,10));return0;}intmax(intar[],intn){inti,max;for(i=0,max=ar[0];i<n;i++){if(max<ar[i])max=ar[i];}returnmax;}4.#include<stdio.h>intmax_index(double*ar,intn);intmain(void){doublearray[]={1.5,3.75,4.3,2.6,2.15,6.66};printf("Theindexofthemaximumnumberis:%d\n",max_index(array,6));return0;}intmax_index(doublear[],intn){inti,max;for(max=0,i=1;i<n;i++)if(ar[max]<ar[i])max=i;returnmax;}5.#include<stdio.h>doublegap(doublear[],intn);intmain(void){doublearray[]={1.5,3.75,4.3,2.6,2.15,6.66};printf("Thedifferencebetweenthemaximumandminimum""valuesis:\n%g\n",gap(array,6));return0;}doublegap(doublear[],intn){inti;doublemax,min;max=min=ar[0];for(i=0;i<n;i++){if(max<ar[i])max=ar[i];if(min>ar[i])min=ar[i];}return(max-min);}6.#include<stdio.h>#defineSIZE6voidreverse(doublear[],intn);voidprint_ar(doublear[],intn);//打印数组的函数intmain(void){doublearray[]={1.5,3.75,4.3,2.6,2.15,6.66};printf("Theoriginalarray:\n");print_ar(array,SIZE);reverse(array,SIZE);//使数据倒序排列printf("Thepresentarray:\n");print_ar(array,SIZE);return0;}voidreverse(doublear[],intn){inti;doubletemp;for(i=0;i<n/2;i++){temp=ar[i];ar[i]=ar[n-i-1];ar[n-i-1]=temp;}}voidprint_ar(doublear[],intn){inti;for(i=0;i<n;i++)printf("%g",ar[i]);printf("\n");}7.#include<stdio.h>#defineROWS3#defineCOLS2voidcopy_ar(doublear1[],doublear[],intn);//拷贝数组的函数voidprint_ar(doublear[][COLS],introws);//打印数组的函数intmain(void){introws;doubletarget[ROWS][COLS];doublesource[ROWS][COLS]={{1.2,2.3},{4.6,5.2},{7.8,8.6}};printf("Theoriginalarray:\n");print_ar(source,ROWS);for(rows=0;rows<ROWS;rows++)copy_ar(target[rows],source[rows],COLS);printf("Thecopiedarray:\n");print_ar(target,ROWS);return0;}voidcopy_ar(doublear1[],doublear[],intn){intindex;for(index=0;index<n;index++)ar1[index]=ar[index];}voidprint_ar(doublear[][COLS],introws){intr,c;for(r=0;r<rows;r++){for(c=0;c<COLS;c++)printf("%g",ar[r][c]);printf("\n");}}8.#include<stdio.h>#defineSIZE_SOU7//源数组元素个数#defineSIZE_TAR3//待拷贝元素个数voidcopy_ptr(double*ar2,double*ar,intn);intmain(void){inti;doubletarget[SIZE_TAR];doublesouce[SIZE_SOU]={1.5,3.75,4.3,2.6,2.15,3.27,6.66};copy_ptr(target,souce+2,SIZE_TAR);for(i=0;i<SIZE_TAR;i++)printf("%g",target[i]);printf("\n");return0;}voidcopy_ptr(double*ar2,double*ar,intn){inti;for(i=0;i<n;i++)*(ar2++)=*(ar++);}9.#include<stdio.h>#defineROWS3#defineCOLS5voidcopy_ar(doublear1[][COLS],doublear[][COLS],intn);//拷贝数组的函数voidprint_ar(doublear[][COLS],introws);//打印数组的函数intmain(void){doubletarget[ROWS][COLS];doublesource[ROWS][COLS]={{1.2,2.3,2.6,3.5,3.2},{4.6,5.2,2.8,3.3,2.1},{7.8,8.6,7.2,3.9,6.6}};printf("Theoriginalarray:\n");print_ar(source,ROWS);copy_ar(target,source,ROWS);printf("Thecopiedarray:\n");print_ar(target,ROWS);return0;}voidcopy_ar(doublear1[][COLS],doublear[][COLS],introws){intr,c;for(r=0;r<rows;r++)for(c=0;c<COLS;c++)ar1[r][c]=ar[r][c];}voidprint_ar(doublear[][COLS],introws){intr,c;for(r=0;r<rows;r++){for(c=0;c<COLS;c++)printf("%g",ar[r][c]);printf("\n");}}10.#include<stdio.h>#defineSIZE4voidprint_ar(doublear[],intn);//打印数组元素的函数//将两个数组相加放入第三个数组的函数voidadd_ar(doublear1[],doublear2[],doublear3[],intn);intmain(void){doublear1[SIZE]={2,4,5,8};doublear2[SIZE]={1,0,4,6};doublear3[SIZE];printf("Thefirstarray:");print_ar(ar1,SIZE);printf("Thesecondarray:");print_ar(ar2,SIZE);add_ar(ar1,ar2,ar3,SIZE);printf("Thethirdarray:");print_ar(ar3,SIZE);return0;}voidprint_ar(doublear[],intn){inti;for(i=0;i<n;i++)printf("%g",ar[i]);printf("\n");}voidadd_ar(doublear1[],doublear2[],doublear3[],intn){inti;for(i=0;i<n;i++)ar3[i]=ar1[i]+ar2[i];}11.#include<stdio.h>#defineROWS3#defineCOLS5voidchange_ar(intar[][COLS],introws);//变化数组的函数voidprint_ar(intar[][COLS],introws);//打印数组的函数intmain(void){intarray[ROWS][COLS]={{1,2,6,3,3},{6,5,2,3,2},{7,8,7,3,6}};printf("Theoriginalarray:\n");print_ar(array,ROWS);change_ar(array,ROWS);printf("Thepresentarray:\n");print_ar(array,ROWS);return0;}voidchange_ar(intar[][COLS],introws){intr,c;for(r=0;r<rows;r++)for(c=0;c<COLS;c++)ar[r][c]*=2;}voidprint_ar(intar[][COLS],introws){intr,c;for(r=0;r<rows;r++){for(c=0;c<COLS;c++)printf("%3d",ar[r][c]);printf("\n");}}12.#include<stdio.h>#defineMONTHS12//一年的月份数#defineYEARS5//一年的年数voidrainfall(floatrain[][MONTHS],intyears);intmain(void){//用2010~2014年的降水量数据初始化数组constfloatrain[YEARS][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}};rainfall(rain,YEARS);return0;}voidrainfall(floatrain[][MONTHS],intyears){floatsubtot,total;inty,m;printf("YEARRAINFALL(inches)\n");for(y=0,total=0;y<years;y++){//每一年,各月降水量总和for(m=0,subtot=0;m<MONTHS;m++)subtot+=rain[y][m];printf("%5d%15.1f\n",2010+y,subtot);total+=subtot;//5年的总降水量}printf("\nTheyearlyaverageis%.1finches.\n\n",total/YEARS);printf("MONTHLYAVERAGES:\n\n");printf("JanFebMarAprMayJunJulAugSepOct");printf("NovDec\n");for(m=0;m<MONTHS;m++){for(y=0,subtot=0;y<years;y++)subtot+=rain[y][m];printf("%4.1f",subtot/years);}printf("\n");}13.#include<stdio.h>#defineROWS3#defineCOLS5#defineNUM15//共计15个数voidget_num(doublear[][COLS],introws);//把用户输入的数据储存在数组中doubleaver_row(doublear[]);//计算每组数据的平均值doubleaver_all(doublear[][COLS],introws);//计算所有数据的平均值doublemax_num(doublear[][COLS],introws);//找出15个数据的最大值//打印结果voidprint_result(doublear[][COLS],introws);intmain(void){doublearray[ROWS][COLS];get_num(array,ROWS);print_result(array,ROWS);return0;}voidget_num(doublear[][COLS],introws){intr,c;doublea=1.0;//是为了让vc6.0编译器链接浮点链接库printf("Pleaseenter3groupsofnumbers,andthere\n""are5numbersineachgroup:\n");for(r=0;r<rows;r++)for(c=0;c<COLS;c++)scanf("%lf",&ar[r][c]);}doubleaver_row(doublear[]){intc;doublesub;for(c=0,sub=0.0;c<COLS;c++)sub+=ar[c];return(sub/COLS);}doubleaver_all(doublear[][COLS],introws){intr,c;doubletotal;for(r=0,total=0.0;r<rows;r++)for(c=0;c<COLS;c++)total+=ar[r][c];return(total/NUM);}doublemax_num(doublear[][COLS],introws){intr,c;doublemax;for(r=0,max=ar[0][0];r<rows;r++)for(c=0;c<COLS;c++)if(max<ar[r][c])max=ar[r][c];returnmax;}voidprint_result(doublear[][COLS],introws){intr,c,row;//打印数组printf("Thearray:\n");for(r=0;r<rows;r++){for(c=0;c<COLS;c++)printf("%-5g",ar[r][c]);printf("\n");}//输出每组平均值for(row=0;row<ROWS;row++)printf("Theaveragevalueinrow%dis:%g\n",row,aver_row(ar[row]));//输出所有数据平均值printf("Theaveragevalueinthearrayis:%g\n",aver_all(ar,ROWS));//输出15个数据的最大值printf("Themaximumnumberinthearrayis:%g\n",max_num(ar,ROWS));printf("Bye.\n");}第十一章1.#include<stdio.h>#defineSIZE40char*gets_n(charar[],intn);intmain(void){charstr[SIZE];gets_n(str,10);puts(str);return0;}char*gets_n(charar[],intn){intcount=0;while(count<n)ar[count++]=getchar();ar[count]='\0';returnar;}2.#include<stdio.h>#include<ctype.h>#defineSIZE80char*gets_n(char*ar,intn);intmain(void){charstr[SIZE];printf("Entersomecharacters:\n");gets_n(str,10);puts(str);return0;}char*gets_n(char*ar,intn){inti;for(i=0;i<n;i++){*(ar+i)=getchar();if(isspace(*(ar+i)))break;}*(ar+i)='\0';returnar;}3.#include<stdio.h>#include<ctype.h>#defineSIZE40voidget_words(char*ar);intmain(void){charstr[SIZE];printf("Entersomecharacters:\n");get_words(str);puts(str);return0;}voidget_words(char*ar){charch;while(isspace(ch=getchar()))continue;do*ar++=ch;while(!isspace(ch=getchar()));*ar='\0';}4.#include<stdio.h>#include<ctype.h>#defineSIZE10voidget_words(char*ar,intn);intmain(void){charstr[SIZE];printf("Entersomecharacters:\n");get_words(str,SIZE);puts(str);return0;}voidget_words(char*ar,intn){charch;inti=0;while(isspace(ch=getchar()))continue;do{*(ar+i)=ch;i++;}while(!isspace(ch=getchar())&&i<(n-1));*(ar+i)='\0';}5.#include<stdio.h>#include<string.h>#defineQUIT"quit"#defineSIZE80//搜索字符在字符串中首次出现的位置char*str_ch(char*str,charc);intmain(void){charstr[SIZE];charch;char*ret_val;printf("Inputastring(typequittoquit):\n");gets(str);while(strcmp(str,QUIT)){printf("Inputacharacter:");scanf("%c",&ch);while(getchar()!='\n')//跳过剩余输入部分continue;ret_val=str_ch(str,ch);if(ret_val!=NULL)printf("Find!Thestringstartwiththe%c:\n""%s\n",ch,ret_val);elseprintf("Can'tfind!\n");printf("Inputastring(typequittoquit):\n");gets(str);}printf("Bye.\n");return0;}char*str_ch(char*str,charc){intflag=0;intcount=0;while(count++<strlen(str))if(*str++==c){flag=1;break;}if(flag)returnstr-1;elsereturnNULL;}6.#include<stdio.h>#include<string.h>#defineQUIT"quit"#defineSIZE80//搜索字符在字符串中首次出现的位置intis_within(char*str,charc);intmain(void){charstr[SIZE];charch;printf("Inputastring(typequittoquit):\n");while(strcmp(gets(str),QUIT)){printf("Inputacharacter:");scanf("%c",&ch);while(getchar()!='\n')//跳过剩余输入部分continue;if(is_within(str,ch))printf("Find!\n");elseprintf("Can'tfind!\n");printf("Inputastring(typequittoquit):\n");}printf("Bye.\n");return0;}intis_within(char*str,charc){intflag=0;size_tcount=0;while(count++<strlen(str))if(*str++==c){flag=1;break;}returnflag;}7.#include<stdio.h>#include<string.h>#defineQUIT"quit"#defineSIZE40char*mystrncpy(char*p1,char*p2,intn);intmain(void){chars1[SIZE];chars2[SIZE];intnum;printf("Inputthefirststring(typequittoquit):\n");while(strcmp(gets(s1),QUIT))//输入quit结束{printf("Inputthesecondstring:\n");gets(s2);printf("Inputthenumberofcharcopiedfroms2:");scanf("%d",&num);getchar();//跳过回车//当s2的长度大于或等于要拷贝的字符数时,要给s1末尾加上'\0',//并且注意要在调用函数之前,不然strlen(s1)会发生改变if(strlen(s2)>=num)s1[strlen(s1)+num]='\0';puts(mystrncpy(s1,s2,num));//输出拷贝后的字符串s1printf("Inputthefirststring(typequittoquit):\n");}printf("Bye.\n");}char*mystrncpy(char*p1,char*p2,intn){inti=1;char*p=p1;while(*p1++)continue;//p1指针指向位置已经超过空字符*--p1=*p2;while(i<n&&*p2){*++p1=*++p2;i++;}returnp;}8.#include<stdio.h>#include<string.h>#defineSIZE40#defineQUIT"quit"char*s_gets(char*st,intn);//读取字符串输入的函数char*string_in(char*s1,char*s2);intmain(void){charstr1[SIZE];charstr2[SIZE];char*ret_val;printf("Inputthefirststring(typequittoquit):\n");while(strcmp(s_gets(str1,SIZE),QUIT))//输入quit结束{printf("Inputthesecondstring:\n");s_gets(str2,SIZE);ret_val=string_in(str1,str2);if(ret_val){printf("Find!\n");puts(ret_val);}elseprintf("Can'tfind!\n");printf("Inputthefirststring(typequittoquit):\n");}printf("Bye.\n");}//自定义的字符串输入函数char*s_gets(char*st,intn){inti=0;if(fgets(st,n,stdin))//即返回值st不等于NULL{while(st[i]!='\n'&&st[i]!='\0')i++;if(st[i]=='\n')st[i]='\0';elsewhile(getchar()!='\n')continue;}returnst;}//在s1中检测s2char*string_in(char*s1,char*s2){inti;while(*s1){i=0;while(s1[i]==s2[i]){i++;if(!s2[i])returns1;}s1++;}returnNULL;}9.#include<stdio.h>#include<string.h>#defineSIZE40#defineQUIT"quit"char*s_gets(char*st,intn);voidreverse(char*st);intmain(void){charstr[SIZE];while(strcmp(s_gets(str,SIZE),QUIT))//输入quit结束{reverse(str);puts(str);}return0;}//自定义的字符串输入函数char*s_gets(char*st,intn){inti=0;printf("Inputthefirststring(typequittoquit):\n");if(fgets(st,n,stdin))//即返回值st不等于NULL{while(st[i]!='\n'&&st[i]!='\0')i++;if(st[i]=='\n')st[i]='\0';elsewhile(getchar()!='\n')continue;}returnst;}//使字符串倒序的函数voidreverse(char*st){unsignedinti;chartemp;size_tlength=strlen(st);for(i=0;i<length/2;i++){temp=st[length-i-1];st[length-i-1]=st[i];st[i]=temp;}st[length]='\0';}10.#include<stdio.h>#defineSIZE40char*s_gets(char*st,intn);voiddelete_space(char*st);intmain(void){charstr[SIZE];while(*s_gets(str,SIZE)!='\n')delete_space(str);printf("Bye.\n");return0;}//删除空格的函数voiddelete_space(char*st){inti;char*p=st;printf("\nTheoriginalstringis:\n");puts(st);while(*st){//如果遇到空格,后面所有字符往前进一格if(*st=='')for(i=0;st[i]!='\0';i++)st[i]=st[i+1];elsest++;}printf("Now,thestringis:\n");puts(p);printf("\n");}//自定义的字符串输入函数char*s_gets(char*st,intn){inti=0;printf("Inputthefirststring(blanklinetoquit):\n");if(fgets(st,n,stdin)!=NULL&&st[0]!='\n')//即返回值st不等于NULL{while(st[i]!='\n'&&st[i]!='\0')i++;if(st[i]=='\n')st[i]='\0';elsewhile(getchar()!='\n')continue;}returnst;}11.#include<stdio.h>#include<string.h>#include<ctype.h>#defineLIM10#defineSIZE80char*s_gets(char*st,intn);//获取字符串输入charget_choice(void);//获取选择voidprint_sour(char*st[],intn);//打印源字符串voidprint_ascii(char*st[],intn);//按ASCII码顺序打印voidprint_length(char*st[],intn);//按长度顺序打印voidprint_first_word(char*st[],intn);//按第一个单词的长度顺序打印intfirst_word(char*st);//计算第一个单词数intmain(void){charstr[LIM][SIZE];char*ptr[LIM];introw=0;//输入的字符串数量charchoice;//用户输入的选择字符printf("InputsomestringsbeforeEOF(nomorethan10):\n");while(row<LIM&&s_gets(str[row],SIZE)!=NULL){ptr[row]=str[row];//设置指针指向字符串row++;}while((choice=get_choice())!='q'){printf("\n");switch(choice){case'a':print_sour(ptr,row);break;case'b':print_ascii(ptr,row);break;case'c':print_length(ptr,row);break;case'd':print_first_word(ptr,row);break;default:printf("Error!\n");break;}printf("\n");}printf("Bye.\n");return0;}//获取用户选择charget_choice(void){charch;printf("a.printthesoursestrings.b.printinorderofASCII.\n");printf("c.printinorderoflength.d.printinorderofthefirstword'slength.\n");printf("q.quit.\n");printf("Enteracharacter(a,b,c,dorq):");ch=getchar();while(getchar()!='\n')continue;while(ch<'a'||ch>'d'&&ch!='q'){printf("Pleaseinputtherightoption(a,b,c,dorq):");ch=getchar();while(getchar()!='\n')continue;}returnch;}//打印源字符串voidprint_sour(char*st[],intn){inti;for(i=0;i<n;i++)puts(st[i]);}//按ASCII中的顺序打印字符串voidprint_ascii(char*st[],intn){inti,j;char*temp;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strcmp(st[i],st[j])>0){temp=st[j];st[j]=st[i];st[i]=temp;}for(i=0;i<n;i++)puts(st[i]);}//按长度顺序打印voidprint_length(char*st[],intn){inti,j;char*temp;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(st[i])>strlen(st[j])){temp=st[j];st[j]=st[i];st[i]=temp;}for(i=0;i<n;i++)puts(st[i]);}//按第一个单词的长度顺序打印voidprint_first_word(char*st[],intn){inti,j;char*temp;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(first_word(st[i])>first_word(st[j])){temp=st[j];st[j]=st[i];st[i]=temp;}for(i=0;i<n;i++)puts(st[i]);}//计算第一个单词的长度intfirst_word(char*st){inti=0;intcount=0;while(!isalpha(st[i]))i++;while(isalpha(st[i])){i++;count++;}returncount;}//自定义的输入函数char*s_gets(char*st,intn){inti=0;if(fgets(st,n,stdin)!=NULL)//即返回值st不等于NULL{while(st[i]!='\n'&&st[i]!='\0')i++;if(st[i]=='\n')st[i]='\0';elsewhile(getchar()!='\n')continue;returnst;}elsereturnNULL;}12.#include<stdio.h>#include<ctype.h>intmain(void){charch;intword=0,upper=0,lower=0;intpunct=0,digit=0,inword=0;while((ch=getchar())!=EOF){if(!isspace(ch)&&(!ispunct(ch))&&!inword){inword=1;word++;}if(isspace(ch)||ispunct(ch)&&inword)inword=0;if(isupper(ch))upper++;if(islower(ch))lower++;if(ispunct(ch))punct++;if(isdigit(ch))digit++;}printf("words:%d,upper:%d,lower:%d,punct:%d,digit:%d.\n",word,upper,lower,punct,digit);return0;}13.#include<stdio.h>intmain(intargc,char*argv[]){intcount;for(count=argc-1;count>0;count--)printf("%s",argv[count]);return0;}14.#include<stdio.h>#include<stdlib.h>doublemypower(doublen,intexp);intmain(intargc,char*argv[]){printf("Theresultis:%g",mypower(atof(argv[1]),atoi(argv[2])));}doublemypower(doublen,intexp){doublepow;if(exp>0)for(pow=1;exp>0;exp--)pow*=n;elseif(exp<0){if(!n)printf("It'snotdefined!\n");for(pow=1;exp<0;exp++)pow*=(1/n);}elseif(n)pow=1;else{pow=1/n;printf("It'snotdefined!\n");}returnpow;}15.#include<stdio.h>#include<ctype.h>intmyatoi(char*st);intmain(void){charstr[40];gets(str);printf("%d\n",myatoi(str));}intmyatoi(char*st){intsum=0;while(*st){//把字符数字逐位转化为数值if(isdigit(*st))sum=10*sum+(*st-'0');elsereturn0;//不是纯数字则返回0st++;}returnsum;}16.#include<stdio.h>#include<string.h>#include<ctype.h>#defineSIZE80#defineLIM10intmain(intargc,char*argv[]){intcol;inti;introw=0;charstr[LIM][SIZE];while(row<LIM&&fgets(str[row],SIZE,stdin)!=NULL){if(argc==1);elseif(!strcmp(argv[1],"-p"));elseif(!strcmp(argv[1],"-u"))for(col=0;str[row][col]!='\0';col++)str[row][col]=toupper(str[row][col]);elseif(!strcmp(argv[1],"-l"))for(col=0;str[row][col]!='\0';col++)str[row][col]=tolower(str[row][col]);row++;}for(i=0;i<row;i++)fputs(str[i],stdout);return0;}第十二章1.#include<stdio.h>intcritic(void);intmain(void){intunits;printf("Howmanypoundstoafirkinofbutter?\n");scanf("%d",&units);while(units!=56)units=critic();printf("Youmusthavelookeditup!\n");return0;}intcritic(void){intanswer;printf("Noluck,myfriend.Tryagain.\n");scanf("%d",&answer);returnanswer;}2.//pe12-2a.h头文件voidset_mode(intmode);voidget_info(void);voidshow_info(void);//pe12-2a.c#include<stdio.h>#include"pe12-2a.h"intmain(void){intmode;printf("Enter0formetricmode,1forUSmode:");scanf("%d",&mode);while(mode>=0){set_mode(mode);get_info();show_info();printf("Enter0formetricmode,1forUSmode");printf("(-1toquit):");scanf("%d",&mode);}printf("Done.\n");return0;}//pe12-2b.c#include<stdio.h>staticintlast_mode;staticdoubledistance;staticdoublefuel;voidset_mode(intmode){if(mode!=0&&mode!=1){printf("Invalidmodespecified.Mode%sused.\n",last_mode==0?"0(metric)":"1(US)");}elselast_mode=mode;}voidget_info(void){printf("Enterdistancetraveledin%s:",last_mode==0?"kilometers":"miles");scanf("%lf",&distance);printf("Enterfuelconsumedin%s:",last_mode==0?"liters":"gallons");scanf("%lf",&fuel);}voidshow_info(void){printf("Fuelconsumptionis");if(last_mode==0)printf("%.2flitersper100km.\n",fuel/distance*100);elseprintf("%.1fmilespergallon.\n",distance/fuel);}3.//pe12-3a.c#include<stdio.h>voidget_info(intmode);intmain(void){intmode;printf("Enter0formetricmode,1forUSmode:");scanf("%d",&mode);while(mode>=0){get_info(mode);printf("Enter0formetricmode,1forUSmode");printf("(-1toquit):");scanf("%d",&mode);}printf("Done.\n");return0;}//pe12-3b.c#include<stdio.h>intset_mode(intmode);voidshow_info(double*distance,double*fuel,intmode);intset_mode(intmode){intlast_mode=0;if(mode!=0&&mode!=1){printf("Invalidmodespecified.Mode%sused.\n",last_mode==0?"0(metric)":"1(US)");}elselast_mode=mode;returnlast_mode;}voidget_info(intmode){double*p1,*p2;doubledistance,fuel;printf("Enterdistancetraveledin%s:",set_mode(mode)==0?"kilometers":"miles");scanf("%lf",&distance);printf("Enterfuelconsumedin%s:",set_mode(mode)==0?"liters":"gallons");scanf("%lf",&fuel);p1=&distance;p2=&fuel;show_info(p1,p2,mode);}voidshow_info(double*distance,double*fuel,intmode){printf("Fuelconsumptionis");if(set_mode(mode)==0)printf("%.2flitersper100km.\n",*fuel/*distance*100);elseprintf("%.1fmilespergallon.\n",*distance/*fuel);}4.#include<stdio.h>#defineTIMES20voidcalled_count(void);staticintcount;intmain(void){inti;for(i=0;i<TIMES;i++)called_count();printf("Thetimesis%d.\n",count);}voidcalled_count(void){count++;}5.#include<stdio.h>#include<stdlib.h>#include<time.h>#defineSIZE100voidprint_ar(intar[],intn);//打印数组元素的函数intmain(void){inti,j,temp;intdigit[SIZE];srand((unsignedint)time(0));for(i=0;i<SIZE;i++){digit[i]=rand()%10+1;}printf("Theoriginalnumbers:\n");print_ar(digit,SIZE);for(j=0;j<SIZE-1;j++)for(i=j+1;i<SIZE;i++)if(digit[j]<digit[i]){temp=digit[i];digit[i]=digit[j];digit[j]=temp;}printf("\nThenumbersinreverseorder:\n");print_ar(digit,SIZE);}voidprint_ar(intar[],intn){inti;for(i=0;i<n;i++){printf("%3d",ar[i]);if(i%10==9)printf("\n");}}6.#include<stdio.h>#include<stdlib.h>#defineSIZE1000#defineSIZE_N10#defineSIZE_S10intmain(void){inti,j;intcount[SIZE_N];//各随机数出现次数的数组unsignedintseed[SIZE_S]={1,2,3,4,5,6,7,8,9,10};for(j=0;j<SIZE_S;j++){for(i=0;i<SIZE_N;i++)count[i]=0;srand(seed[j]);printf("seed=%d:\n",seed[j]);for(i=0;i<SIZE;i++)count[rand()%10]++;for(i=0;i<SIZE_N;i++){printf("%d:%-5d",i+1,count[i]);if(i==4)printf("\n");}printf("\n");}return0;}7.#include<stdio.h>#include<stdlib.h>#include<time.h>voidroll_count(intsets,intsides,intdice);intmain(void){intsets;intsides,dice;srand((unsignedint)time(0));printf("Enterthenumberofsets;enterqtostop:");while(scanf("%d",&sets)==1){printf("Howmanysidesandhowmanydice?");scanf("%d%d",&sides,&dice);printf("Hereare%dsetsof%d%d-sidedthrows.\n",sets,dice,sides);roll_count(sets,sides,dice);printf("Howmanysets?Enterqtostop:");}printf("Bye.\n");}voidroll_count(intsets,intsides,intdice){inti,j;introll;if(sides<2){printf("Needatleast2sides.\n");return;}if(dice<1){printf("Needatleast1die.\n");return;}srand((unsignedint)time(0));for(i=0;i<sets;i++){roll=0;for(j=0;j<dice;j++)roll+=rand()%sides+1;printf("%d",roll);}printf("\n");}8.#include<stdio.h>#include<stdlib.h>int*make_array(intelem,intval);voidshow_array(constintar[],intn);intmain(void){int*pa;intsize;intvalue;printf("Enterthenumberofelements:");while(scanf("%d",&size)==1&&size>0){printf("Entertheinitializationvalue:");scanf("%d",&value);pa=make_array(size,value);if(pa){show_array(pa,size);free(pa);}printf("Enterthenumberofelements(<1toquit):");}printf("Done.\n");return0;}int*make_array(intelem,intval){int*pt;inti;pt=(int*)malloc(elem*sizeof(int));for(i=0;i<elem;i++)pt[i]=val;returnpt;}voidshow_array(constintar[],intn){inti;for(i=0;i<n;i++){printf("%d",ar[i]);if(i%8==7)printf("\n");}printf("\n");}9.#include<stdio.h>#include<stdlib.h>#include<ctype.h>#defineSIZE40char**mal_ar(intn);intmain(void){intwords,i;char**st;printf("Howmanywordsdoyouwishtoenter?");scanf("%d",&words);getchar();//滤掉回车printf("Enter%dwordsnow:\n",words);st=mal_ar(words);printf("Hereareyourwords:\n");for(i=0;i<words;i++){puts(st[i]);free(st[i]);//释放每个指针指向的内存}free(st);//释放指针数组return0;}char**mal_ar(intn){char**pt;inti,j;charch;//给n个指针分配动态内存空间,返回指针的指针pt=(char**)malloc(n*sizeof(char*));for(i=0;i<n;i++){//给每个指针指向的地址分配内存空间pt[i]=(char*)malloc(SIZE*sizeof(char));//可以仅用scanf("%s",pt[i]);while(isspace(ch=getchar()))//处理单词之前的空格符continue;pt[i][0]=ch;//单词首字符j=1;while(!isspace(pt[i][j]=getchar()))j++;pt[i][j]='\0';//将末尾的空格替换为\0'}returnpt;}第十三章1.#include<stdio.h>#include<string.h>#include<stdlib.h>#defineSIZE40char*s_gets(char*st,intn);intmain(void){charname[SIZE];charch;unsignedlongcount=0;FILE*fp;printf("Enterthefilename:");s_gets(name,SIZE);if((fp=fopen(name,"r"))==NULL){printf("Can'topen%s\n",name);exit(EXIT_FAILURE);}while((ch=getc(fp))!=EOF){putc(ch,stdout);count++;}fclose(fp);printf("File%shas%lucharacters\n",name,count);return0;}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;}returnret_val;}2.#include<stdio.h>#include<stdlib.h>#defineSIZE256intmain(intargc,char*argv[]){FILE*fs;//原始文件指针FILE*fa;//目标文件指针chartemp[SIZE];size_tbytes;//检查命令行参数if(argc<3){fprintf(stderr,"Usage:%sfilename\n",argv[0]);exit(EXIT_FAILURE);}//以读模式打开原始文件if((fs=fopen(argv[1],"rb"))==NULL){fprintf(stderr,"Icouldn'topenthefile\"%s\"\n",argv[1]);exit(EXIT_FAILURE);}//以读写模式打开目标文件if((fa=fopen(argv[2],"wb"))==NULL){fprintf(stderr,"Icouldn'topenthefile\"%s\"\n",argv[2]);exit(EXIT_FAILURE);}//拷贝数据{while((bytes=fread(temp,sizeof(char),SIZE,fs))>0)fwrite(temp,sizeof(char),bytes,fa);}fclose(fs);fclose(fa);return0;}3.#include<stdio.h>#include<ctype.h>#include<string.h>#defineSIZE40char*s_gets(char*st,intn);intmain(void){FILE*fs;//原始文件指针FILE*ft;//目标文件指针charname_s[SIZE];charname_t[SIZE];charch;//输入原始文件和目标文件名fprintf(stdout,"Pleaseenterthesourcefilename:\n");s_gets(name_s,SIZE);fprintf(stdout,"Pleaseenterthetargetfilename:\n");s_gets(name_t,SIZE);//打开原始文件和目标文件if((fs=fopen(name_s,"r"))==NULL)fprintf(stderr,"Couldnotopenthe%s\n",name_s);if((ft=fopen(name_t,"w"))==NULL)fprintf(stderr,"Couldnotopenthe%s\n",name_t);//拷贝数据while((ch=getc(fs))!=EOF)putc(toupper(ch),ft);fclose(fs);fclose(ft);return0;}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;//处理多余输入}returnret_val;}4.#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){charch;inti;FILE*fp;for(i=1;i<argc;i++){printf("File%d:\n",i);if((fp=fopen(argv[i],"r"))==NULL){fprintf(stderr,"Couldnotopen%s.\n",argv[i]);exit(EXIT_FAILURE);}while((ch=getc(fp))!=EOF)putchar(ch);printf("\n");}return0;}5.//命令行参数argv[1]代表目标文件名,后面几个为源文件名//该程序把多个源文件加到源文件末尾#include<stdio.h>#include<stdlib.h>#include<string.h>#defineBUFSIZE4096#defineSLEN81voidappend(FILE*source,FILE*dest);char*s_gets(char*st,intn);intmain(intargc,char*argv[]){FILE*fs,*fa;//fs指向源文件,fa指向目标文件inti;intfiles=0;charch;if(argc<3){fprintf(stderr,"Usage:%sfilename\n",argv[0]);exit(EXIT_FAILURE);}if((fa=fopen(argv[1],"a+"))==NULL){fprintf(stderr,"Couldnotopen%s.\n",argv[1]);exit(EXIT_FAILURE);}if(setvbuf(fa,NULL,_IOFBF,BUFSIZE)!=0){fputs("Can'tcreatoutputbuffer\n",stderr);exit(EXIT_FAILURE);}for(i=2;i<argc;i++){if(strcmp(argv[1],argv[i])==0){fputs("Can'tappendfiletoitself\n",stderr);}elseif((fs=fopen(argv[i],"r"))==NULL){fprintf(stderr,"Couldnotopen%s.\n",argv[i]);}else{if(setvbuf(fs,NULL,_IOFBF,BUFSIZE)!=0){fputs("Can'tcreatinputbuffer\n",stderr);continue;}append(fs,fa);if(ferror(fs)!=0)fprintf(stderr,"Errorinreadingfile%s.\n",argv[i]);if(ferror(fa)!=0)fprintf(stderr,"Errorinwritingfile%s.\n",argv[1]);fclose(fs);printf("File%sappended.\n",argv[i]);}}printf("%scontents:\n",argv[1]);rewind(fa);while((ch=getc(fa))!=EOF)putchar(ch);puts("Donedisplaying.");fclose(fa);return0;}//附加文件的函数voidappend(FILE*source,FILE*dest){size_tbytes;staticchartemp[BUFSIZE];while((bytes=fread(temp,sizeof(char),BUFSIZE,source))>0)fwrite(temp,sizeof(char),bytes,dest);}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;//处理多余输入}returnret_val;}6.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSIZE40char*s_gets(char*st,intn);intmain(void){FILE*fs,*fa;//fs指向源文件,fa指向目标文件charch;charname_source[SIZE];charname_dest[SIZE];intcount=0;//输入源文件和目标文件名fprintf(stdout,"Pleaseenterthesourcefilename:\n");s_gets(name_source,SIZE);fprintf(stdout,"Pleaseenterthedestinationfilename:\n");s_gets(name_dest,SIZE);//打开源文件和目标文件if((fs=fopen(name_source,"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_source);exit(EXIT_FAILURE);}if((fa=fopen(name_dest,"w"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_dest);exit(EXIT_FAILURE);}//将源文件每3个字符的第1个字符输出到目标文件while((ch=getc(fs))!=EOF){if(count++%3==0)putc(ch,fa);}//收尾工作if(fclose(fs)!=0||fclose(fa)!=0)fprintf(stderr,"Errorinclosingfiles\n");return0;}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;//处理多余输入}returnret_val;}7.a#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSIZE40#defineSLEN81char*s_gets(char*st,intn);intmain(void){FILE*f1,*f2;charst[SLEN];charname_f1[SIZE];charname_f2[SIZE];char*ret_val1;char*ret_val2;intcount=0;//依次输入两个文件的文件名fprintf(stdout,"Pleaseenterthefirstfilename:\n");s_gets(name_f1,SIZE);fprintf(stdout,"Pleaseenterthesecondfilename:\n");s_gets(name_f2,SIZE);//依次输入两个文件if((f1=fopen(name_f1,"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_f1);exit(EXIT_FAILURE);}if((f2=fopen(name_f2,"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_f2);exit(EXIT_FAILURE);}do{if((ret_val1=fgets(st,SLEN,f1))!=NULL){fputs(st,stdout);}if((ret_val2=fgets(st,SLEN,f2))!=NULL){fputs(st,stdout);}}while(ret_val1!=NULL||ret_val2!=NULL);fclose(f1);fclose(f2);return0;}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;//处理多余输入}returnret_val;}7.b#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSIZE40#defineSLEN81char*s_gets(char*st,intn);intmain(void){FILE*f1,*f2;charname_f1[SIZE];charname_f2[SIZE];charch1,ch2;//依次输入两个文件的文件名fprintf(stdout,"Pleaseenterthefirstfilename:\n");s_gets(name_f1,SIZE);fprintf(stdout,"Pleaseenterthesecondfilename:\n");s_gets(name_f2,SIZE);//依次输入两个文件if((f1=fopen(name_f1,"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_f1);exit(EXIT_FAILURE);}if((f2=fopen(name_f2,"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s\n",name_f2);exit(EXIT_FAILURE);}do{while((ch1=getc(f1))!=EOF&&ch1!='\n'){putchar(ch1);}while((ch2=getc(f2))!=EOF&&ch2!='\n'){putchar(ch2);}putchar('\n');}while(ch1!=EOF||ch2!=EOF);fclose(f1);fclose(f2);return0;}//自定义读取文件名的函数char*s_gets(char*st,intn){char*find;char*ret_val;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');//查找换行符if(find)*find='\0';//替换为空字符elsewhile(getchar()!='\n')continue;//处理多余输入}returnret_val;}8.#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){inti;charch;FILE*fp;intcount=0;if(argc<2){fprintf(stderr,"thewrongnumberofarguments.");exit(EXIT_FAILURE);}if(argc==2){printf("Inputsometexts:\n");while((ch=getchar())!=EOF){if(ch==argv[1][0])count++;}printf("the\"%s\"inyourinput:%dtimes.",argv[1],count);}else{for(i=2;i<argc;i++){count=0;if((fp=fopen(argv[i],"r"))==NULL){fprintf(stderr,"Couldnotopenthe%s.",argv[i]);continue;}while((ch=getc(fp))!=EOF){if(ch==argv[1][0])count++;}fprintf(stdout,"the\"%s\"in%s:%dtimes.\n",argv[1],argv[i],count);}}return0;}9.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX41intmain(void){FILE*fp;charwords[MAX];charname[MAX];intcount=0;printf("Pleaseinputthefilename:\n");gets(name);if((fp=fopen(name,"a+"))==NULL){fprintf(stderr,"can'topen\"%s\"file.\n",name);exit(EXIT_FAILURE);}puts("Enterwordstoaddtothefile;pressthe#");puts("keyatthebeginningofalinetoterminate.");while((fscanf(stdin,"%40s",words)==1)&&(words[0]!='#'))fprintf(fp,"%s\n",words);puts("Filecontents:");rewind(fp);while(fscanf(fp,"%s",words)!=EOF){count++;fprintf(stdout,"%d.%s\n",count,words);}puts("Done!");if(fclose(fp)!=0)fprintf(stderr,"Errorclosingfile\n");return0;}10.#include<stdio.h>#include<stdlib.h>#defineLEN41intmain(void){charname[LEN];charwords[LEN];FILE*fp;longoffset;//偏移量printf("Pleaseinputthefilename:\n");gets(name);if((fp=fopen(name,"r"))==NULL){fprintf(stderr,"can'topen\"%s\"file.\n",name);exit(EXIT_FAILURE);}printf("Pleaseinputapositioninthefile(negativenumberor""Nonnumericcharactertoquit):\n");while(scanf("%ld",&offset)==1&&offset>0){getchar();fseek(fp,offset,SEEK_SET);fscanf(fp,"%40s",words);fprintf(stdout,"%s\n",words);printf("Pleaseinputapositioninthefile(negativenumberor\n""Nonnumericcharactertoquit):\n");}fclose(fp);return0;}11.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSIZE256intmain(intargc,char*argv[]){FILE*fp;charwords[SIZE];if(argc<3){fprintf(stderr,"Wrongnumberofarguments.\n");exit(EXIT_FAILURE);}if((fp=fopen(argv[2],"r"))==NULL){fprintf(stderr,"Couldnotopen%s.",argv[2]);exit(EXIT_FAILURE);}while(fgets(words,SIZE,fp)!=NULL){if(strstr(words,argv[1])!=NULL)fputs(words,stdout);}if(fclose(fp)!=0)fprintf(stderr,"Errorforclosingfile.\n");return0;}12.#include<stdio.h>#include<stdlib.h>#defineLEN40#defineROW20#defineCOL30intmain(void){FILE*fs,*fd;//fs指向源文件,fd指向目标文件charname[LEN];chardigit[ROW][COL];charresult[ROW][COL+1];charch[]={".':~*=%#"};//数字字符对应的符号inti,j;printf("Pleaseenterthesourcefilename:\n");gets(name);//打开源文件if((fs=fopen(name,"r"))==NULL){fprintf(stderr,"Couldnotopen%s.",name);exit(EXIT_FAILURE);}//将文件内容读入20*30的int数组中//并且转化成相应符号放入20*31的字符数组中for(i=0;i<ROW;i++){for(j=0;j<COL;j++){fscanf(fs,"%d",&digit[i][j]);result[i][j]=ch[digit[i][j]];}result[i][j]='\0';}printf("Enterthedestinationfilename:\n");gets(name);//打开目标文件if((fd=fopen(name,"w"))==NULL){fprintf(stderr,"Couldnotopen%s.",name);exit(EXIT_FAILURE);}//将结果打印出来并写入目标文件for(i=0;i<ROW;i++){fprintf(stdout,"%s\n",result[i]);fprintf(fd,"%s\n",result[i]);}//关闭文件if(fclose(fs)!=0||fclose(fd)!=0)fprintf(stderr,"Errorforclosingfile.\n");return0;}14.#include<stdio.h>#include<stdlib.h>#include<math.h>#defineLEN40#defineROW20#defineCOL30intmain(void){FILE*fs,*fd;//fs指向源文件,fd指向目标文件charname[LEN];chardig[ROW][COL];charres[ROW][COL+1];charch[]={".':~*=%#"};//数字字符对应的符号inti,j;printf("Pleaseenterthesourcefilename:\n");gets(name);//打开源文件if((fs=fopen(name,"r"))==NULL){fprintf(stderr,"Couldnotopen%s.",name);exit(EXIT_FAILURE);}//将文件内容读入20*30的int数组中//并且转化成相应符号放入20*31的字符数组中for(i=0;i<ROW;i++){for(j=0;j<COL;j++){fscanf(fs,"%d",&dig[i][j]);}}for(i=0;i<ROW;i++){for(j=0;j<COL;j++){if((i==0&&j==0)||(i==0&&j==29)||(i==19&&j==0)||(i==19&&j==29));elseif(i==0){if((abs(dig[i][j]-dig[i][j-1])>1)&&(abs(dig[i][j]-dig[i][j+1])>1)&&(abs(dig[i][j]-dig[i+1][j])>1))dig[i][j]=(dig[i][j-1]+dig[i][j+1]+dig[i+1][j])/3.0+0.5;}elseif(j==0){if((abs(dig[i][j]-dig[i-1][j])>1)&&(abs(dig[i][j]-dig[i][j+1])>1)&&(abs(dig[i][j]-dig[i+1][j])>1))dig[i][j]=(dig[i-1][j]+dig[i][j+1]+dig[i+1][j])/3.0+0.5;}elseif(i==19){if((abs(dig[i][j]-dig[i][j-1])>1)&&abs((dig[i][j]-dig[i][j+1])>1)&&(abs(dig[i][j]-dig[i-1][j])>1))dig[i][j]=(dig[i-1][j]+dig[i][j-1]+dig[i][j+1])/3.0+0.5;}elseif(j==29){if((abs(dig[i][j]-dig[i][j-1])>1)&&(abs(dig[i][j]-dig[i+1][j])>1)&&(abs(dig[i][j]-dig[i-1][j])>1))dig[i][j]=(dig[i-1][j]+dig[i][j-1]+dig[i+1][j])/3.0+0.5;}else{if((abs(dig[i][j]-dig[i][j-1])>1)&&(abs(dig[i][j]-dig[i][j+1])>1)&&(abs(dig[i][j]-dig[i-1][j])>1)&&(abs(dig[i][j]-dig[i+1][j])>1))dig[i][j]=(dig[i-1][j]+dig[i+1][j]+dig[i][j-1]+dig[i][j+1])/4.0+0.5;}}}for(i=0;i<ROW;i++){for(j=0;j<COL;j++){res[i][j]=ch[dig[i][j]];}res[i][j]='\0';}printf("Enterthedestinationfilename:\n");gets(name);//打开目标文件if((fd=fopen(name,"w"))==NULL){fprintf(stderr,"Couldnotopen%s.\n",name);exit(EXIT_FAILURE);}//将结果打印出来并写入目标文件for(i=0;i<ROW;i++){fprintf(stdout,"%s\n",res[i]);fprintf(fd,"%s\n",res[i]);}//关闭文件if(fclose(fs)!=0||fclose(fd)!=0)fprintf(stderr,"Errorforclosingfile.\n");return0;}第十四章1.#include<stdio.h>#include<string.h>#include<ctype.h>#defineNAMELEN10#defineABBLEN4#defineMONTHS12char*s_gets(char*st,intn);intget_days(char*st);structmonth{charname[NAMELEN];charabbrev[ABBLEN];intdays;intmonumb;};structmonthmonths[12]={{"january","jan",31,1},{"february","feb",28,2},{"march","mar",31,3},{"april","apr",30,4},{"may","may",31,5},{"june","jun",30,6},{"july","jul",31,7},{"august","aug",31,8},{"september","sep",30,9},{"october","oct",31,10},{"november","nov",30,11},{"december","dec",31,12}};intmain(void){charst[NAMELEN];printf("Pleaseinputthemonthname(emptylinetoquit):\n");while(s_gets(st,NAMELEN)!=NULL&&st[0]!='\0'){if(get_days(st)==0)printf("Themonthnameiswrong.\n");elseprintf("Thedaysuntill%s:%d\n",st,get_days(st));printf("Nextinput(emptylinetoquit):\n");}printf("Bye.\n");return0;}intget_days(char*st){inttotal=0;inti=0;intcount;while(st[i]){st[i]=tolower(st[i]);i++;}for(i=0;i<MONTHS;i++){if(strcmp(st,months[i].name)==0)break;}if(i<MONTHS){for(count=0;count<=i;count++)total+=months[count].days;}returntotal;}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}2.#include<stdio.h>#include<string.h>#include<ctype.h>#defineNAMELEN10#defineABBLEN4#defineMONTHS12structmonth{charname[NAMELEN];charabbrev[ABBLEN];intdays;intmonumb;};structmonthmonths[MONTHS]={{"january","jan",31,1},{"february","feb",28,2},{"march","mar",31,3},{"april","apr",30,4},{"may","may",31,5},{"june","jun",30,6},{"july","jul",31,7},{"august","aug",31,8},{"september","sep",30,9},{"october","oct",31,10},{"november","nov",30,11},{"december","dec",31,12}};intget_res(void);voidget_years(void);intget_months(void);intget_days(int);intmain(void){inttotal_days;total_days=get_res();printf("Thenumberofdaysbeforethespecifiedday");printf("is%d\n",total_days);return0;}//得到结果的函数intget_res(void){intn_months;intn_days;inti;inttotal=0;get_years();n_months=get_months();n_days=get_days(n_months);for(i=0;i<n_months-1;i++){total+=months[i].days;}total+=n_days;returntotal;}//输入并处理年数voidget_years(void){intn_years;printf("Pleaseinputaparticularyear:");while(scanf("%d",&n_years)!=1){while(getchar()!='\n')continue;printf("Pleaseinputainteger:");}if(n_years%4==0)months[1].days=29;elsemonths[1].days=28;}//输入并处理月份intget_months(void){intn_months;printf("Inputthemonth:");while(scanf("%d",&n_months)!=1||(n_months<0||n_months>12)){while(getchar()!='\n')continue;printf("Pleaseinputaintegerfrom1to12:");}returnn_months;}//输入并处理天数intget_days(intn){intn_days;printf("Inputthedays:");while(scanf("%d",&n_days)!=1||(n_days<1||n_days>months[n-1].days)){while(getchar()!='\n')continue;printf("Pleaseinputaintegerfrom1to%d:",months[n-1].days);}returnn_days;}3.#include<stdio.h>#include<string.h>#defineMAXTITL40#defineMAXAUTL40#defineMAXBKS100structbook{chartitle[MAXTITL];charauthor[MAXAUTL];floatvalue;};voidsort_by_input(conststructbooklibrary[],intn);voidsort_by_title(structbooklibrary[],intn);voidsort_by_price(structbooklibrary[],intn);char*s_gets(char*st,intn);intmain(void){staticstructbooklibrary[MAXBKS];intcount=0;printf("Pleaseenterthebooktitle(emptylinetostop):\n");while(count<MAXBKS&&s_gets(library[count].title,MAXTITL)!=NULL&&library[count].title[0]!='\0'){printf("Nowentertheauthor.\n");s_gets(library[count].author,MAXTITL);printf("Nowenterthevalue.\n");scanf("%f",&library[count++].value);while(getchar()!='\n')continue;if(count<MAXBKS)printf("Enterthenexttitle.\n");}if(count>0){printf("Thelistofbooksinorderofyourinput:\n");sort_by_input(library,count);printf("Thelistofbooksinorderoftitle:\n");sort_by_title(library,count);printf("Thelistofbooksinorderofprice:\n");sort_by_price(library,count);}return0;}voidsort_by_input(conststructbooklibrary[],intn){inti;for(i=0;i<n;i++)printf("%sby%s:$%.2f\n",library[i].title,library[i].author,library[i].value);printf("\n");}voidsort_by_title(structbooklibrary[],intn){inti,j;structbooktemp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++)if(strcmp(library[i].title,library[j].title)>0){temp=library[i];library[i]=library[j];library[j]=temp;}}for(i=0;i<n;i++)printf("%sby%s:$%.2f\n",library[i].title,library[i].author,library[i].value);printf("\n");}voidsort_by_price(structbooklibrary[],intn){inti,j;structbooktemp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++)if(library[i].value>library[j].value){temp=library[i];library[i]=library[j];library[j]=temp;}}for(i=0;i<n;i++)printf("%sby%s:$%.2f\n",library[i].title,library[i].author,library[i].value);printf("\n");}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}4.a#include<stdio.h>#defineSSN20#defineLEN10structnames{charlast_name[LEN];charmid_name[LEN];charfir_name[LEN];};structperson{charnumber[SSN];structnamesname;};voidprint_info(structpersoninfo[],intn);intmain(void){structpersoninfo[5]={{"B51414029",{"Jie","Yu","Zha"}},{"B51414010",{"Xiang","Xiang","Pan"}},{"B51414025",{"Jie","Wen","Jiang"}},{"B51414031",{"Ming","Cheng","Liu"}},{"B51414044",{"Qiang","","Sha"}}};print_info(info,5);return0;}voidprint_info(structpersoninfo[],intn){inti;for(i=0;i<n;i++){printf("%s,%s%c%c--%s",info[i].name.last_name,info[i].name.fir_name,info[i].name.mid_name[0],(info[i].name.mid_name[0]=='')?'':'.',info[i].number);printf("\n");}}4.b#include<stdio.h>#defineSSN20#defineLEN10structnames{charlast_name[LEN];charmid_name[LEN];charfir_name[LEN];};structperson{charnumber[SSN];structnamesname;};voidprint_info(structpersoninfo);intmain(void){intindex;structpersoninfo[5]={{"B51414029",{"Jie","Yu","Zha"}},{"B51414010",{"Xiang","Xiang","Pan"}},{"B51414025",{"Jie","Wen","Jiang"}},{"B51414031",{"Ming","Cheng","Liu"}},{"B51414044",{"Qiang","","Sha"}}};for(index=0;index<5;index++)print_info(info[index]);return0;}voidprint_info(structpersoninfo){printf("%s,%s%c%c--%s",info.name.last_name,info.name.fir_name,info.name.mid_name[0],(info.name.mid_name[0]=='')?'':'.',info.number);printf("\n");}5.#include<stdio.h>#defineLEN10#defineNUM3#defineCSIZE4#defineN_SCORES3structname{charfirst_name[LEN];charlast_name[LEN];};structstudent{structnamenames;floatgrade[NUM];floataverage;};voidget_score(structstudentinfo[],intn);voidget_aver(structstudentinfo[],intn);voidprint_info(structstudentinfo[],intn);voidget_all_aver(structstudentinfo[],intn);intmain(void){structstudentscore[CSIZE]={{{"Zha","Yujie"},{0,0,0},0},{{"Jiang","Wenjie"},{0,0,0},0},{{"Liu","Chengming"},{0,0,0},0},{{"Pan","Xiangxiang"},{0,0,0},0}};get_score(score,CSIZE);get_aver(score,CSIZE);print_info(score,CSIZE);get_all_aver(score,CSIZE);return0;}voidget_score(structstudentinfo[],intn){inti,j;for(i=0;i<n;i++){printf("Inputthescoresof3coursesof%s%s\n",info[i].names.first_name,info[i].names.last_name);for(j=0;j<N_SCORES;j++){scanf("%f",&info[i].grade[j]);}}}voidget_aver(structstudentinfo[],intn){inti,j;floatsum;for(i=0;i<n;i++){for(j=0,sum=0.0;j<N_SCORES;j++){sum+=info[i].grade[j];}info[i].average=sum/N_SCORES;}}voidprint_info(structstudentinfo[],intn){inti,j;printf("Name%15s%s%saverage\n","score1","score2","score3");for(i=0;i<n;i++){printf("%5s%-10s",info[i].names.first_name,info[i].names.last_name);for(j=0;j<N_SCORES;j++)printf("%6g",info[i].grade[j]);printf("%11.2f\n",info[i].average);}}voidget_all_aver(structstudentinfo[],intn){inti;floattotal=0;for(i=0;i<n;i++){total+=info[i].average;}printf("Theaveragescoreofallstudentsis%.2f.\n",total/CSIZE);}6.#include<stdio.h>#include<string.h>#include<stdlib.h>#defineLEN10#defineNLEN20#defineSIZE20structmember{intnum;charfname[LEN];charlname[LEN];intplay;inthit;intwalk;intrbi;};voidget_initial_val(structmember*,intn);voidget_data(structmember*,intn);voidprint_info(structmember*,intn);intmain(void){staticstructmembermembers[SIZE];get_initial_val(members,SIZE);get_data(members,SIZE);print_info(members,SIZE);return0;}voidget_initial_val(structmember*pst,intn){inti;for(i=0;i<n;i++,pst++){pst->num=0;strcpy(pst->fname,"");strcpy(pst->lname,"");pst->play=0;pst->hit=0;pst->walk=0;pst->rbi=0;}}voidget_data(structmember*pst,intn){intnumber,play_times,hit_times,walk_times,rbi_num;FILE*fp;charname[NLEN];charf_name[LEN],l_name[LEN];printf("Pleaseenterthefilename:");scanf("%s",name);if((fp=fopen(name,"r"))==NULL){fprintf(stderr,"Can'topen%s\n",name);exit(EXIT_FAILURE);}while(fscanf(fp,"%d%s%s%d%d%d%d",&number,f_name,l_name,&play_times,&hit_times,&walk_times,&rbi_num)==7){pst[number].num=number;strcpy(pst[number].fname,f_name);strcpy(pst[number].lname,l_name);pst[number].play+=play_times;pst[number].hit+=hit_times;pst[number].walk+=walk_times;pst[number].rbi+=rbi_num;}fclose(fp);}voidprint_info(structmember*pst,intn){inti;for(i=0;i<n;i++){if(pst[i].fname[0]!='\0'){printf("%d%s%s%d%d%d%d",pst[i].num,pst[i].fname,pst[i].lname,pst[i].play,pst[i].hit,pst[i].walk,pst[i].rbi);printf("\n");}elsebreak;}}7.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineLEN20#defineMAXTITL40#defineMAXAUTH40#defineMAXBKS10intcount=0;//外部变量, 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 的数目structbook{chartitle[MAXTITL];charauthor[MAXAUTH];floatvalue;};char*s_gets(char*st,intn);//输入字符串的函数charget_choice(void);//获取用户选择voidadd(structbook*);//添加若干本书voidchange(structbook*);//替换一本书voiddel(structbook*);//删除一本书voidprint(structbook*);//打印书单voidwrite_file(structbook*,char*);//将数据写入文件intmain(void){charname[LEN];structbooklibrary[MAXBKS];charch;FILE*fp;//打开文件并读取其中内容到结构体printf("Pleaseinputthefilename:");s_gets(name,LEN);if((fp=fopen(name,"a+b"))==NULL){fprintf(stderr,"Can'topen%s",name);exit(EXIT_FAILURE);}rewind(fp);while(count<MAXBKS&&fread(&library[count],sizeof(structbook),1,fp)==1){count++;//当前文件数}fclose(fp);//打印文件中已有数据printf("Thereare%dbooks:\n",count);print(library);//让用户输入选项while((ch=get_choice())!='q'){switch(ch){case'a':add(library);break;case'c':change(library);break;case'd':del(library);break;case'p':print(library);break;default:printf("Programerror.\n");break;}}//将数据输出至文件中write_file(library,name);return0;}charget_choice(void){charch;printf("Pleaseinputyourchoice:\n");printf("a.addsomebooksc.changeabook\n");printf("d.deleteabookp.printallbooks\n");printf("q.quit.\n");while((ch=getchar())!='a'&&ch!='c'&&ch!='d'&&ch!='p'&&ch!='q'){while(getchar()!='\n')continue;printf("Pleaseinputtherightcharacter.\n");}while(getchar()!='\n')continue;returnch;}voidadd(structbook*ps){if(count==MAXBKS)printf("Sorry,thelistisfull.\n");else{printf("Pleaseinputthetitle(emptylinetoquit):\n");while(count<MAXBKS&&s_gets(ps[count].title,MAXTITL)!=NULL&&ps[count].title[0]!='\0'){printf("Inputtheauthor:\n");s_gets(ps[count].author,MAXAUTH);printf("Inputthevalue:\n");scanf("%f",&ps[count].value);getchar();printf("Now,nexttitle(emptylinetoquit):\n");count++;}}}voidchange(structbook*ps){inti;charname[MAXTITL];if(count==0)printf("Sorry,thelistisempty.\n");else{printf("Pleaseinputthetitleofbookyouwanttochange:\n");s_gets(name,MAXTITL);for(i=0;i<count;i++){if(!strcmp(name,ps[i].title)){printf("Pleaseinputthetitleofnewbook:\n");s_gets(ps[i].title,MAXTITL);printf("Inputtheauthor:\n");s_gets(ps[i].author,MAXAUTH);printf("Inputthevalue:\n");scanf("%f",&ps[i].value);getchar();break;}}if(i==count)printf("Sorry,wecan'tfindthebookyouinput.\n");}}voiddel(structbook*ps){charname[MAXTITL];inti,j;if(count==0)printf("Sorry,thelistisempty.\n");printf("Pleaseinputthetitleofbookyouwanttodelete:\n");s_gets(name,MAXTITL);for(i=0;i<count;i++){if(!strcmp(name,ps[i].title)){for(j=i+1;j<count;j++)ps[j-1]=ps[j];count--;strcpy(ps[count].title,"");strcpy(ps[count].author,"");ps[count].value=0;break;}}if(i==count)printf("Sorry,wecan'tfindthebookyouinput.\n");}voidprint(structbook*ps){inti;for(i=0;i<count;i++){printf("%sby%s:$%g\n",ps[i].title,ps[i].author,ps[i].value);}}voidwrite_file(structbook*ps,char*st){FILE*fp;fp=fopen(st,"w+b");fwrite(ps,sizeof(structbook),count,fp);fclose(fp);}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}8.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineLEN20#defineLEN20#defineMAX12structseat{intnum;intisassign;charfname[LEN];charlname[LEN];};voidread_file(structseat*ps);//从文件读取voidinitialize(structseat*ps);//初始化结构charget_choice(void);//用户输入选择voidshow_number(structseat*ps);//空位置的个数voidshow_empty(structseat*ps);//打印所有空位置voidshow_list(structseat*ps);//打印所有位置信息voidassign_seat(structseat*ps);//预订一个位置voiddelete_seat(structseat*ps);//删除一个位置voidwrite_file(structseat*ps);//数据写入文件char*s_gets(char*st,intn);//输入字符串intmain(void){charch;structseatcustomer[MAX];initialize(customer);read_file(customer);//用户输入选项while((ch=get_choice())!='f'){switch(ch){case'a':show_number(customer);break;case'b':show_empty(customer);break;case'c':show_list(customer);break;case'd':assign_seat(customer);break;case'e':delete_seat(customer);break;default:printf("Programerror.\n");break;}}//将数据输出至文件中write_file(customer);}voidinitialize(structseat*ps){inti;for(i=0;i<MAX;i++){ps[i].num=i+1;ps[i].isassign=0;strcpy(ps[i].fname,"");strcpy(ps[i].lname,"");}}voidread_file(structseat*ps){FILE*fp;if((fp=fopen("seat.txt","a+b"))==NULL){fprintf(stderr,"Can'topenseat.txt.\n");exit(EXIT_FAILURE);}fread(ps,sizeof(structseat),MAX,fp);}charget_choice(void){charch;printf("Tochooseafunction,enteritsletterlabel:\n");printf("a)Shownumberofemptyseats\n");printf("b)Showlistofemptyseats\n");printf("c)Showalphabeticallistofseats\n");printf("d)Assignacustomertoaseatassignment\n");printf("e)Deleteaseatassignment\n");printf("f)Quit\n");while((ch=getchar())<'a'||ch>'f'){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}voidshow_number(structseat*ps){inti;intcount=0;for(i=0;i<MAX;i++){if(ps[i].isassign==0)count++;}printf("Thenumberofemptyseatsis%d\n",count);}voidshow_empty(structseat*ps){inti;printf("Thelistofemptyseats:\n");for(i=0;i<MAX;i++){if(!ps[i].isassign)printf("%d",ps[i].num);}printf("\n");}voidshow_list(structseat*ps){inti;printf("Thelistofseats:\n");for(i=0;i<MAX;i++){printf("%d%s%s\n",ps[i].num,ps[i].fname,ps[i].lname);}}voidassign_seat(structseat*ps){intnumber;intret_val;printf("Pleaseinputthenumberofseatyouwanttobook(1to12):\n");while((ret_val=scanf("%d",&number))!=1||number<1||number>12||ps[number-1].isassign==1){if(ret_val!=1||number<1||number>12)printf("Sorry,pleaseinputaintegerfrom1to12.\n");elseprintf("Sorry,theseatisassigned,pleasereselect:\n");while(getchar()!='\n')continue;}while(getchar()!='\n')continue;printf("Now,inputyourfirstname:\n");s_gets(ps[number-1].fname,LEN);printf("Inputyourlastname:\n");s_gets(ps[number-1].lname,LEN);ps[number-1].isassign=1;printf("OK.\n");}voiddelete_seat(structseat*ps){intnumber;printf("Pleaseinputthenumberofseatyouwanttodelete(1to12):\n");while(scanf("%d",&number)!=1||number<1||number>12||ps[number-1].isassign==0){if(ps[number-1].isassign==1)printf("Sorry,theseatisempty,pleasereselect:\n");elseprintf("Sorry,pleaseinputaintegerfrom1to12.\n");while(getchar()!='\n')continue;}getchar();strcpy(ps[number-1].fname,"");strcpy(ps[number-1].lname,"");ps[number-1].isassign=0;printf("OK.\n");}voidwrite_file(structseat*ps){FILE*fp;fp=fopen("seat.txt","w+b");fwrite(ps,sizeof(structseat),MAX,fp);fclose(fp);}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}9.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineLEN20#defineLEN20#defineMAX12#defineMAXFL5structseat{intnum;intisassign;charfname[LEN];charlname[LEN];};voidread_file(structseat*ps);//从文件读取voidinitialize(structseat*ps);//初始化结构charget_flight(void);//用户选择航班charget_choice(void);//用户输入选择voidshow_number(structseat*ps);//空位置的个数voidshow_empty(structseat*ps);//打印所有空位置voidshow_list(structseat*ps);//打印所有位置信息voidassign_seat(structseat*ps);//预订一个位置voiddelete_seat(structseat*ps);//删除一个位置voidwrite_file(structseat*ps);//数据写入文件char*s_gets(char*st,intn);//输入字符串voidis_confirmed(void);//确认座位分配//全局变量,值为1时表示被确认,值为0时未确认intisconf;charflight_num[MAXFL];intmain(void){charch,flight;structseatcustomer[MAX];initialize(customer);read_file(customer);//用户输入选项while((flight=get_flight())!='q'){isconf=0;while((ch=get_choice())!='g'){switch(ch){case'a':show_number(customer);break;case'b':show_empty(customer);break;case'c':show_list(customer);break;case'd':assign_seat(customer);break;case'e':delete_seat(customer);break;case'f':is_confirmed();break;default:printf("Programerror.\n");break;}}//将数据输出至文件中if(isconf)write_file(customer);}return0;}voidinitialize(structseat*ps){inti;for(i=0;i<MAX;i++){ps[i].num=i+1;ps[i].isassign=0;strcpy(ps[i].fname,"");strcpy(ps[i].lname,"");}}voidread_file(structseat*ps){FILE*fp;if((fp=fopen("seat.txt","a+b"))==NULL){fprintf(stderr,"Can'topenseat.txt.\n");exit(EXIT_FAILURE);}fread(ps,sizeof(structseat),MAX,fp);}charget_flight(void){charch;printf("Tochooseaflight,enteritsletterlabal:\n");printf("a).102b).311\n");printf("c).444d).519\n");printf("q).quit.\n");while((ch=getchar())<'a'||ch>'d'&&ch!='q'){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter(a,b,c,dorq).\n");}while(getchar()!='\n')continue;if(ch=='a')strcpy(flight_num,"102");elseif(ch=='b')strcpy(flight_num,"311");elseif(ch=='c')strcpy(flight_num,"444");elseif(ch=='d')strcpy(flight_num,"519");returnch;}charget_choice(void){charch;printf("Thenumberoftheflightis%s.Tochooseafunction,""enteritsletterlabel:\n",flight_num);printf("a)Shownumberofemptyseats\n");printf("b)Showlistofemptyseats\n");printf("c)Showalphabeticallistofseats\n");printf("d)Assignacustomertoaseatassignment\n");printf("e)Deleteaseatassignment\n");printf("f)Confirmedtheseatassignment\n");printf("g)Quit\n");while((ch=getchar())<'a'||ch>'g'){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}voidshow_number(structseat*ps){inti;intcount=0;for(i=0;i<MAX;i++){if(ps[i].isassign==0)count++;}printf("Thenumberofemptyseatsis%d\n",count);}voidshow_empty(structseat*ps){inti;printf("Thelistofemptyseatsin%sflight:\n",flight_num);for(i=0;i<MAX;i++){if(!ps[i].isassign)printf("%d",ps[i].num);}printf("\n");}voidshow_list(structseat*ps){inti;printf("Thelistofseatsin%sflight:\n",flight_num);for(i=0;i<MAX;i++){printf("%d%s%s\n",ps[i].num,ps[i].fname,ps[i].lname);}printf("Theseatassignmentisnotconfirmed.\n");}voidassign_seat(structseat*ps){intnumber;intret_val;printf("Pleaseinputthenumberofseatyouwanttobook(1to12)""in%sflight:\n",flight_num);while((ret_val=scanf("%d",&number))!=1||number<1||number>12||ps[number-1].isassign==1){if(ret_val!=1||number<1||number>12)printf("Sorry,pleaseinputaintegerfrom1to12.\n");elseprintf("Sorry,theseatisassigned,pleasereselect:\n");while(getchar()!='\n')continue;}while(getchar()!='\n')continue;printf("Now,inputyourfirstname:\n");s_gets(ps[number-1].fname,LEN);printf("Inputyourlastname:\n");s_gets(ps[number-1].lname,LEN);ps[number-1].isassign=1;printf("OK.\n");}voiddelete_seat(structseat*ps){intnumber;printf("Pleaseinputthenumberofseatyouwanttodelete(1to12)""in%sflight:\n",flight_num);while(scanf("%d",&number)!=1||number<1||number>12||ps[number-1].isassign==0){if(ps[number-1].isassign==1)printf("Sorry,theseatisempty,pleasereselect:\n");elseprintf("Sorry,pleaseinputaintegerfrom1to12.\n");while(getchar()!='\n')continue;}getchar();strcpy(ps[number-1].fname,"");strcpy(ps[number-1].lname,"");ps[number-1].isassign=0;printf("OK.\n");}voidis_confirmed(void){isconf=1;printf("Theseatassignmentisconfirmed.\n");}voidwrite_file(structseat*ps){FILE*fp;fp=fopen("seat.txt","w+b");fwrite(ps,sizeof(structseat),MAX,fp);fclose(fp);}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}10.#include<stdio.h>#include<stdio.h>#include<string.h>#include<ctype.h>#defineLEN81#defineSIZE4char*s_gets(char*st,intn);charget_choice(void);voidToUpper(char*st);voidToLower(char*st);voidTranspos(char*st);voidDummy(char*st);intmain(void){charst[LEN];charcopy[LEN];charch;//函数指针数组void(*fp[SIZE])(char*)={ToUpper,ToLower,Transpos,Dummy};intindex;puts("Enterastring(emptylinetoquit):");while(s_gets(st,LEN)!=NULL&&st[0]!='\0'){while((ch=get_choice())!='q'){switch(ch){case'a':index=0;break;case'b':index=1;break;case'c':index=2;break;case'd':index=3;break;default:printf("Programerror.\n");break;}strcpy(copy,st);(*(fp[index]))(copy);puts(copy);}printf("Enterastring(emptylinetoquit):\n");}puts("Bye.");return0;}charget_choice(void){charch;printf("Tochooseafunction,enteritsletterlabal:\n");printf("a).upperb).lower\n");printf("c).transposedd).original\n");printf("q).quit.\n");while((ch=getchar())<'a'||ch>'d'&&ch!='q'){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter(a,b,c,dorq).\n");}while(getchar()!='\n')continue;returnch;}voidToUpper(char*st){while(*st){*st=toupper(*st);st++;}}voidToLower(char*st){while(*st){*st=tolower(*st);st++;}}voidTranspos(char*st){while(*st){if(islower(*st))*st=toupper(*st);elseif(isupper(*st))*st=tolower(*st);st++;}}voidDummy(char*st){}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}11.#include<stdio.h>#include<math.h>#definePSIZE4#defineSIZE100voidtransform(double[],double[],int,double(*)(double));doubleoppsite_val(double);doubledouble_val(double);intmain(void){inti,j;doublesource[SIZE],target[SIZE];double(*p[PSIZE])(double)={sin,sqrt,oppsite_val,double_val};printf("Thesourcearray:\n");for(i=0;i<SIZE;i++){source[i]=i;printf("%7g",source[i]);if(i%10==9)printf("\n");}printf("\n");for(i=0;i<PSIZE;i++){printf("Thesourcearray%d:\n",i+1);transform(source,target,SIZE,p[i]);for(j=0;j<SIZE;j++){printf("%7.2f",target[j]);if(j%10==9)printf("\n");}printf("\n");}return0;}voidtransform(doublesource[],doubletarget[],intsize,double(*pf)(doublenum)){inti;for(i=0;i<size;i++){target[i]=(*pf)(source[i]);}}doubleoppsite_val(doublenum){return(-1*num);}doubledouble_val(doublenum){return(2*num);}第十五章1.#include<stdio.h>#include<string.h>intbtoi(char*st);intmain(void){char*pbin="01001001";printf("Thedecimalnumber:%d.\n",btoi(pbin));return0;}intbtoi(char*st){intnum=0;while(*st)num=(num<<1)+(*st++-'0');returnnum;}2.#include<stdio.h>#include<stdlib.h>#include<limits.h>#defineSIZE5intbtoi(char*st);//二进制字符串转化为整数的函数char*itob(char*st,intn);//整数转化为二进制字符串的函数voidshow_bstr(constchar*st);//4位一组显示二进制字符串intmain(intargc,char*argv[]){intnum1,num2;charbin_st[CHAR_BIT*sizeof(int)+1];if(argc!=3){fprintf(stderr,"Thenumberofargumentsiswrong.\n");exit(EXIT_FAILURE);}num1=btoi(argv[1]);num2=btoi(argv[2]);show_bstr(itob(bin_st,~num1));show_bstr(itob(bin_st,~num2));show_bstr(itob(bin_st,num1&num2));show_bstr(itob(bin_st,num1|num2));show_bstr(itob(bin_st,num1^num2));return0;}intbtoi(char*st){intnum=0;while(*st)num=(num<<1)+(*st++-'0');returnnum;}char*itob(char*st,intn){inti;conststaticintsize=CHAR_BIT*sizeof(int);for(i=size-1;i>=0;i--,n>>=1)st[i]=(01&n)+'0';st[size]='\0';returnst;}voidshow_bstr(constchar*st){inti=0;while(st[i]){putchar(st[i]);if(++i%4==0&&st[i])putchar('');}printf("\n");}3.#include<stdio.h>#include<limits.h>#defineMASK01intcount_bit_on(intnum);intmain(void){intnum;printf("Pleaseinputainteger:\n");scanf("%d",&num);printf("Thenumberofbitonis:%d\n",count_bit_on(num));return0;}intcount_bit_on(intnum){inti;intcount=0;intsize=CHAR_BIT*sizeof(int);for(i=0;i<size;i++){if(num&MASK){count++;}num>>=1;}returncount;}4.#include<stdio.h>#defineMASK01intcheck_bit(intnum,intbit);intmain(void){intnum,bit;printf("Pleaseinputainteger:\n");scanf("%d",&num);printf("Nowinputtheposition:\n");scanf("%d",&bit);printf("Thenumberinyourpositionis:%d.\n",check_bit(num,bit));return0;}intcheck_bit(intnum,intbit){inti;for(i=0;i<bit;i++){num>>=1;}returnnum&MASK;}5.#include<stdio.h>#include<limits.h>#defineMASK01#defineSIZECHAR_BIT*sizeof(unsignedint)char*itob(char*st,unsignedintn);voidshow_bstr(constchar*st);unsignedintmove_left(unsignedint,int);intmain(void){unsignedintnum;intbit;charst[SIZE+1];printf("Pleaseinputaintegerandthenumberofbitstomove:\n");scanf("%u%d",&num,&bit);printf("Theoriginalbinarystring:\n");show_bstr(itob(st,num));//把所有位向左移动num=move_left(num,bit);printf("Thepresentbinarystring:\n");show_bstr(itob(st,num));}unsignedintmove_left(unsignedintn,intbit){inti;for(i=0;i<bit;i++){n=(n<<1)+((n>>(SIZE-1))&MASK);}returnn;}char*itob(char*st,unsignedintn){inti;for(i=SIZE-1;i>=0;i--,n>>=1)st[i]=(01&n)+'0';st[SIZE]='\0';returnst;}voidshow_bstr(constchar*st){inti=0;while(st[i]){putchar(st[i]);if(++i%4==0&&st[i])putchar('');}printf("\n");}6.#include<stdio.h>#include<string.h>structword{unsignedintfont:8;unsignedintsize:7;unsignedintalignment:2;unsignedintbold:1;unsignedintitalic:1;};constchar*align[3]={"left","center","right"};constchar*open[2]={"off","on"};charget_choice(void);charget_select(void);voidprint(structword*);intmain(void){structwordtype={1,12,0,0,0};charchoice;charch;intnum;print(&type);while((choice=get_choice())!='q'){switch(choice){case'f':printf("EnterfontID(0-256):");scanf("%u",&num);getchar();type.font=num;break;case's':printf("EnterfontID(0-127):");scanf("%u",&num);getchar();type.size=num;break;case'a':printf("Selectalignment:\n");printf("l)leftc)centerr)right\n");if((ch=get_select())=='l')type.alignment=0;elseif(ch=='c')type.alignment=1;elsetype.alignment=2;break;case'b':type.bold=!type.bold;break;case'i':type.italic=!type.italic;break;default:break;}print(&type);}printf("Bye.\n");return0;}charget_choice(void){charch;printf("f)changefont\ts)changesize\ta)changealignment\n");printf("b)togglebold\ti)toggleitalic\nq)quit\n");while(strchr("fsabiq",ch=getchar())==NULL){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}charget_select(void){charch;while(strchr("lcr",ch=getchar())==NULL){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}voidprint(structword*pst){printf("\nIDSIZEALIGNMENTBI\n");printf("%3u",pst->font);printf("%5u",pst->size);printf("%10s",align[pst->alignment]);printf("%7s",open[pst->bold]);printf("%5s\n\n",open[pst->italic]);}7.#include<stdio.h>#include<string.h>#defineID_MASK0xff//括号缺失会出错#defineSIZE_MASK(0x7f<<8)#defineALIGN_MASK(0x3<<15)#defineCENTER(0x1<<15)#defineRIGHT(0x2<<15)#defineBOLD(0x1<<17)#defineITALIC(0x1<<18)constchar*align[3]={"left","center","right"};constchar*open[2]={"off","on"};charget_choice(void);charget_select(void);voidprint(unsignedlong);intmain(void){unsignedlongtype=0;charchoice;charch;intnum;print(type);while((choice=get_choice())!='q'){switch(choice){case'f':printf("EnterfontID(0-256):");scanf("%lu",&num);getchar();type&=~ID_MASK;//把表示字体ID的位清空type|=num;//重置字体IDbreak;case's':printf("EnterfontID(0-127):");scanf("%lu",&num);getchar();type&=~SIZE_MASK;type|=(num<<8);break;case'a':type&=~ALIGN_MASK;printf("Selectalignment:\n");printf("l)leftc)centerr)right\n");if((ch=get_select())=='c')type|=CENTER;elseif(ch=='r')type|=RIGHT;break;case'b':type^=BOLD;break;case'i':type^=ITALIC;break;default:break;}print(type);}printf("Bye.\n");return0;}charget_choice(void){charch;printf("f)changefont\ts)changesize\ta)changealignment\n");printf("b)togglebold\ti)toggleitalic\nq)quit\n");while(strchr("fsabiq",ch=getchar())==NULL){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}charget_select(void){charch;while(strchr("lcr",ch=getchar())==NULL){while(getchar()!='\n')continue;printf("Pleaseinputtherightletter.\n");}while(getchar()!='\n')continue;returnch;}voidprint(unsignedlongnum){printf("\nIDSIZEALIGNMENTBI\n");printf("%3u",num&ID_MASK);printf("%5u",(num&SIZE_MASK)>>8);printf("%10s",align[(num&ALIGN_MASK)>>15]);printf("%7s",open[(num&BOLD)>>17]);printf("%5s\n\n",open[(num&ITALIC)>>18]);}第十六章2.#include<stdio.h>#defineHORMONIC(x,y)(1/(1/(x)+1/(y)))intmain(void){doublenum1,num2;printf("Pleaseinputtwonumber('q'toquit):");while(scanf("%lf%lf",&num1,&num2)==2){printf("Thehormonicaverage:%.2f\n",HORMONIC(num1,num2));printf("Pleaseinputtwonumber('q'toquit):");}return0;}3.#include<stdio.h>#include<math.h>#defineDEG_TO_RED((4*atan(1))/180)typedefstructpolar_v{doublemagnitude;doubleangle;}Polar_V;typedefstructrect_v{doublex;doubley;}Rect_V;Rect_Vpolar_to_rect(Polar_Vpv);intmain(void){Polar_Vinput;Rect_Vresult;puts("Entermagnitudeandangle;enterqtoquit:");while(scanf("%lf%lf",&input.magnitude,&input.angle)==2){result=polar_to_rect(input);printf("x=%.2f,y=%.2f\n",result.x,result.y);puts("Nextinput(qtoquit):");}puts("Bye.");return0;}Rect_Vpolar_to_rect(Polar_Vpv){Rect_Vrv;rv.x=pv.magnitude*cos(pv.angle*DEG_TO_RED);rv.y=pv.magnitude*sin(pv.angle*DEG_TO_RED);returnrv;}4.#include<stdio.h>#include<time.h>voiddelay(doubletime);intmain(void){doubletime;printf("Pleaseinputthetime(inseconds)todelay""(qtoquit):\n");while(scanf("%lf",&time)==1){delay(time);printf("Timeisout.\n");printf("Yournextinput(qtoquit):\n");}return0;}voiddelay(doubletime){doublet;t=(double)clock()/CLOCKS_PER_SEC;while((double)clock()/CLOCKS_PER_SEC-t<time);}5.#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#defineSIZE10voidrandom(constintar[],intsize,intn);intmain(void){intar[SIZE]={1,2,3,6,7,9,10,13,26,17};inti;intnum;srand((unsignedint)time(NULL));printf("Theoriginalarray:\n");for(i=0;i<SIZE;i++)printf("%d",ar[i]);printf("\nPleaseinputthenumberofintegers(nomorethan10)\n");printf("youwanttotake(qtoquit):\n");while(scanf("%d",&num)==1){random(ar,SIZE,num);printf("Yournextinput(qtoquit):\n");}puts("Bye.");return0;}voidrandom(constintar[],intsize,intn){inti;intcount;intindex;intacpy[SIZE];//创建一个数组副本,避免修改原始数组memcpy(acpy,ar,SIZE*sizeof(int));if(n>size)printf("Thenumberistoobig.\n");else{for(count=0;count<n;count++){index=rand()%size;printf("%d",acpy[index]);for(i=index;i<size-1;i++){acpy[i]=acpy[i+1];}size--;}printf("\n");}}6.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSIZE40#defineNUM5structnames{charfirst[SIZE];charlast[SIZE];};intcomp(constvoid*p1,constvoid*p2);intmain(void){inti;structnamesstaff[NUM]={{"zha","yujie"},{"xia","yufeng"},{"bu","jianqiang"},{"xu","feifan"},{"ding","bing"}};qsort(staff,NUM,sizeof(structnames),comp);for(i=0;i<NUM;i++){printf("%s%s\n",staff[i].first,staff[i].last);}return0;}intcomp(constvoid*p1,constvoid*p2){conststructnames*ps1=(conststructnames*)p1;conststructnames*ps2=(conststructnames*)p2;intres;res=strcmp(ps1->first,ps2->first);if(res)returnres;elsereturnstrcmp(ps1->last,ps2->last);}7.#include<stdio.h>#include<stdlib.h>#include<stdarg.h>#defineSIZE40voidshow_array(constdoublear[],intn);double*new_d_array(intn,...);intmain(){double*p1;double*p2;p1=new_d_array(5,1.2,2.3,3.4,4.5,5.6);p2=new_d_array(4,100.0,20.00,8.08,-1890.0);show_array(p1,5);show_array(p2,4);free(p1);free(p2);return0;}voidshow_array(constdoublear[],intn){inti;for(i=0;i<n;i++)printf("%g",ar[i]);printf("\n");}double*new_d_array(intn,...){inti;double*p=(double*)malloc(n*sizeof(double));va_listap;va_start(ap,n);for(i=0;i<n;i++)*(p+i)=va_arg(ap,double);va_end(ap);returnp;}第十七章1.#include<stdio.h>#include<stdlib.h>#include<string.h>#defineTSIZE45typedefstructfilm{chartitle[TSIZE];intrating;structfilm*prev;structfilm*next;}Node;char*s_gets(char*st,intn);intmain(void){Node*head=NULL;Node*pre=NULL;Node*end;Node*current;charinput[TSIZE];//储存信息puts("Enterfirstmovietitle:");while(s_gets(input,TSIZE)!=NULL&&input[0]!='\0'){current=(Node*)malloc(sizeof(Node));if(head==NULL)head=current;else{pre->next=current;}current->prev=pre;current->next=NULL;strcpy(current->title,input);puts("Enteryourrating<0-10>:");scanf("%d",&current->rating);while(getchar()!='\n')continue;puts("Enternextmovietitle(emptytostop):");pre=current;}end=pre;if(head==NULL){fprintf(stderr,"Nodataentered.\n");exit(1);}elseprintf("Hereisthemovielistinpositiveorder:\n");//正序显示电影列表current=head;while(current!=NULL){printf("Movie:%sRating:%d\n",current->title,current->rating);current=current->next;}//逆序显示电影列表printf("Hereisthemovielistinreverseorder:\n");current=end;while(current!=NULL){printf("Movie:%sRating:%d\n",current->title,current->rating);current=current->prev;}return0;}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}2.//含2.c和move.c两个文件//2.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"movie.h"voidshow_list(Itemitem);char*s_gets(char*st,intn);intmain(void){Listmovies;Itemtemp;//初始化InitializeList(&movies);if(ListIsFull(&movies)){fprintf(stderr,"Nomemoryavailable.\n");exit(1);}//储存数据printf("Pleaseinputthetitleofmovie:\n");while(s_gets(temp.titile,TSIZE)!=NULL&&temp.titile[0]!='\0'){printf("Enteryourrating<0-10>:\n");scanf("%d",&temp.rating);while(getchar()!='\n')continue;if(AddItem(&movies,temp)==0){fprintf(stderr,"Alloctingmemoryerror.\n");break;}if(ListIsFull(&movies)){fprintf(stderr,"Sorry,thelistisfull.\n");break;}printf("Inputthenexttitle(Emptylinetostop):\n");}//显示数据if(ListIsEmpty(&movies)){fprintf(stderr,"Sorry,thelistisempty.\n");return0;}printf("Hereisthemovielist:\n");Traverse(&movies,show_list);printf("Youentered%umovies.\n",ListItemCount(&movies));//清空数据DeleteAll(&movies);printf("Bye.\n");return0;}voidshow_list(Itemitem){printf("Movie:%sRating:%d\n",item.titile,item.rating);}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}//movie.c#include<stdio.h>#include<stdlib.h>#include"movie.h"//初始化链表为空voidInitializeList(List*plist){plist->head=NULL;plist->end=NULL;}//链表为空,返回1intListIsEmpty(constList*plist){if(plist->head==NULL)return1;elsereturn0;}//链表为满,返回1intListIsFull(constList*plist){Node*pt;intfull;pt=(Node*)malloc(sizeof(Node));if(pt==NULL)full=1;elsefull=0;free(pt);returnfull;}//为链表添加项,成功返回1intAddItem(List*plist,Itemitem){Node*pnew;pnew=(Node*)malloc(sizeof(Node));if(pnew==NULL)return0;pnew->next=NULL;pnew->item=item;if(plist->head==NULL)plist->head=pnew;elseplist->end->next=pnew;plist->end=pnew;return1;}//确定链表的项数unsignedintListItemCount(List*plist){unsignedintcount=0;Node*pnode=plist->head;while(pnode!=NULL){pnode=pnode->next;count++;}returncount;}//遍历链表voidTraverse(constList*plist,void(*pfun)(Itemitem)){Node*pnode=plist->head;while(pnode!=NULL){(*pfun)(pnode->item);pnode=pnode->next;}}//清空链表voidDeleteAll(List*plist){Node*pnode;while(plist->head!=NULL){pnode=plist->head;plist->head=plist->head->next;free(pnode);}}3.//3.cmovie2.cmovie2.h3个文件//3.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"movie2.h"voidshow_list(Itemitem);char*s_gets(char*st,intn);intmain(void){Listmovies;Itemtemp;//初始化InitializeList(&movies);if(ListIsFull(&movies)){fprintf(stderr,"Nomemoryavailable.\n");exit(1);}//储存数据printf("Pleaseinputthetitleofmovie:\n");while(s_gets(temp.titile,TSIZE)!=NULL&&temp.titile[0]!='\0'){printf("Enteryourrating<0-10>:\n");scanf("%d",&temp.rating);while(getchar()!='\n')continue;if(AddItem(&movies,temp)==0){fprintf(stderr,"Alloctingmemoryerror.\n");break;}if(ListIsFull(&movies)){fprintf(stderr,"Sorry,thelistisfull.\n");break;}printf("Inputthenexttitle(Emptylinetostop):\n");}//显示数据if(ListIsEmpty(&movies)){fprintf(stderr,"Sorry,thelistisempty.\n");return0;}printf("Hereisthemovielist:\n");Traverse(&movies,show_list);printf("Youentered%umovies.\n",ListItemCount(&movies));//清空数据DeleteAll(&movies);printf("Bye.\n");return0;}voidshow_list(Itemitem){printf("Movie:%sRating:%d\n",item.titile,item.rating);}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}//movie2.h#ifndefMOVIE_H_#defineMOVIE_H_#defineTSIZE45#defineMAXSIZE5typedefstructfilm{chartitile[TSIZE];intrating;}Item;typedefstructlist{Itementries[MAXSIZE];intitems;}List;//初始化链表为空voidInitializeList(List*plist);//链表为空,返回1intListIsEmpty(constList*plist);//链表为满,返回1intListIsFull(constList*plist);//为链表添加项,成功返回1intAddItem(List*plist,Itemitem);//确定链表的项数unsignedintListItemCount(List*plist);//遍历链表voidTraverse(constList*plist,void(*pfun)(Itemitem));//清空链表voidDeleteAll(List*plist);#endif//movie2.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include"movie2.h"//初始化链表为空voidInitializeList(List*plist){inti;for(i=0;i<MAXSIZE;i++){strcpy((plist->entries[i]).titile,"");(plist->entries[i]).rating=0;plist->items=0;}}//链表为空,返回1intListIsEmpty(constList*plist){if(plist->items==0)return1;elsereturn0;}//链表为满,返回1intListIsFull(constList*plist){if(plist->items==MAXSIZE)return1;elsereturn0;}//为链表添加项,成功返回1intAddItem(List*plist,Itemitem){if(plist->items==MAXSIZE){fprintf(stderr,"Thelistisfull.\n");return0;}plist->entries[plist->items]=item;(plist->items)++;return1;}//确定链表的项数unsignedintListItemCount(List*plist){returnplist->items;}//遍历链表voidTraverse(constList*plist,void(*pfun)(Itemitem)){inti;for(i=0;i<plist->items;i++){(*pfun)(plist->entries[i]);}}//清空链表voidDeleteAll(List*plist){inti;for(i=0;i<plist->items;i++){strcpy((plist->entries[i]).titile,"");(plist->entries[i]).rating=0;plist->items=0;}}4.//4.cqueue.hqueue.c3个文件//4.c#include<stdio.h>#include<stdlib.h>#include<time.h>#include"queue.h"#defineMIN_PER_HOUR60intnewcustomer(doublex);Itemcustomertime(longwhen);Queueline1;Queueline2;Itemtemp;inthours;//模拟的小时数intcust_per_hour;//平均每小时来的顾客数intwait_time1=0;//摊位1从当前到空闲的时间intwait_time2=0;//摊位2从当前到空闲的时间longcycle;//循环次数longcyclelimit;//循环的最大数longturnaways=0;//被拒的顾客数longcustomers=0;//加入队列的顾客数longserved=0;//接受服务的顾客数longsum_line=0;//累计队列总长longline_wait=0;//累计队列等候时间doublemin_per_cust;//顾客到来的平均间隔时间intmain(void){printf("Enterthenumberofsimulationhours:\n");scanf("%d",&hours);printf("Entertheaveragenumberofcustomersperhour:\n");scanf("%d",&cust_per_hour);cyclelimit=MIN_PER_HOUR*hours;min_per_cust=MIN_PER_HOUR/cust_per_hour;InitializeQueue(&line1);InitializeQueue(&line2);srand((unsignedint)time(0));for(cycle=0;cycle<cyclelimit;cycle++){if(newcustomer(min_per_cust))//如果一分钟内有顾客来{if(QueueIsFull(&line1)&&QueueIsFull(&line2))turnaways++;else{customers++;temp=customertime(cycle);if(line1.items>line2.items)EnQueue(&line2,temp);elseif(line1.items<line2.items)EnQueue(&line1,temp);else(rand()%2)?EnQueue(&line1,temp):EnQueue(&line2,temp);}}if(wait_time1<=0&&!QueueIsEmpty(&line1)){DeQueue(&line1,&temp);wait_time1=temp.processtime;line_wait+=cycle-temp.arrive;served++;}if(wait_time2<=0&&!QueueIsEmpty(&line2)){DeQueue(&line2,&temp);wait_time2=temp.processtime;line_wait+=cycle-temp.arrive;served++;}if(wait_time1>0)wait_time1--;if(wait_time2>0)wait_time2--;sum_line+=(long)QueueItemCount(&line1)+(long)QueueItemCount(&line2);}if(customers>0){printf("customersaccepted:%ld\n",customers);printf("customersserved:%ld\n",served);printf("turnaways:%ld\n",turnaways);printf("averagequeuesize:%.2f\n",(double)sum_line/cyclelimit);printf("averagewaittime:%.2fminutes\n",(double)line_wait/served);}elseputs("Nocustomers!");DeleteAll(&line1);DeleteAll(&line2);puts("Bye!");return0;}//一分钟之内有顾客来,返回1intnewcustomer(doublex){if(x*rand()/RAND_MAX<1)return1;elsereturn0;}Itemcustomertime(longwhen){Itemcust;cust.arrive=when;cust.processtime=rand()%3+1;returncust;}//queue.h#ifndefQUEUE_H_#defineQUEUE_H_#defineMAXSIZE10typedefstructitem{longarrive;intprocesstime;}Item;typedefstructnode{Itemitem;structnode*next;}Node;typedefstructqueue{Node*head;Node*end;intitems;}Queue;//初始化队列voidInitializeQueue(Queue*pq);//确定队列为空intQueueIsEmpty(constQueue*pq);//确定队列为满intQueueIsFull(constQueue*pq);//确定队列项数unsignedintQueueItemCount(constQueue*pq);//给队列末尾添加项intEnQueue(Queue*pq,Itemitem);//从队列开头删除项intDeQueue(Queue*pq,Item*pitem);//清空队列voidDeleteAll(Queue*pq);#endif//queue.c#include<stdio.h>#include<stdlib.h>#include"queue.h"staticvoidAddItem(Node*pq,Itemitem);staticvoidCopyItem(Node*pnode,Item*pitem);//接口函数//初始化队列voidInitializeQueue(Queue*pq){pq->head=NULL;pq->end=NULL;pq->items=0;}//确定队列为空intQueueIsEmpty(constQueue*pq){if(pq->items==0)return1;elsereturn0;}//确定队列为满intQueueIsFull(constQueue*pq){if(pq->items==MAXSIZE)return1;elsereturn0;}//确定队列项数unsignedintQueueItemCount(constQueue*pq){returnpq->items;}//给队列末尾添加项intEnQueue(Queue*pq,Itemitem){Node*pnode;if(QueueIsFull(pq)){fprintf(stderr,"Thequeueisfull.\n");return0;}pnode=(Node*)malloc(sizeof(Node));if(pnode==NULL){fprintf(stderr,"Can'tallocmemory.\n");return0;}AddItem(pnode,item);pnode->next=NULL;pq->items++;if(pq->head==NULL){pq->head=pnode;}elsepq->end->next=pnode;pq->end=pnode;return1;}//从队列开头删除项intDeQueue(Queue*pq,Item*pitem){Node*pnode;if(QueueIsEmpty(pq)){fprintf(stderr,"thequeueisempty.\n");return0;}CopyItem(pq->head,pitem);pnode=pq->head;pq->head=pq->head->next;free(pnode);pq->items--;if(pq->items==0)pq->end=NULL;return1;}//清空队列voidDeleteAll(Queue*pq){Itemitem;while(!QueueIsEmpty(pq))DeQueue(pq,&item);}//局域函数staticvoidAddItem(Node*pnode,Itemitem){pnode->item=item;}staticvoidCopyItem(Node*pnode,Item*pitem){*pitem=pnode->item;}5.//含5.cstack.hstack.c3个文件//5.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"stack.h"#defineSIZE40char*s_gets(char*st,intn);intmain(void){Stackstack;Itemtemp[SIZE];Itemch;inti;InitializeStack(&stack);//将用户输入数据压入栈中printf("Enterastring:\n");while(s_gets(temp,SIZE)!=NULL&&temp[0]!='\0'){for(i=0;temp[i]!='\0';i++){if(AddItem(&stack,temp[i])==0){break;}}if(StackIsFull(&stack)){fprintf(stderr,"Thestackisfull.\n");break;}printf("Yournextstring(emptylinetostop):\n");}//从栈中弹出数据并输出if(StackIsEmpty(&stack)){fprintf(stderr,"Thereisnodata.\n");exit(1);}printf("Youinput%dcharcters.\n",StackItemCount(&stack));printf("Thestringinreverseorder:\n");while(StackIsEmpty(&stack)!=1){DelItem(&stack,&ch);putchar(ch);}printf("\nBye.\n");return0;}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}//stack.h#ifndefSTACK_H_#defineSTACK_H_#defineSMAX100typedefcharItem;typedefstructstack{Itemitem[SMAX];intitems;}Stack;//初始化栈voidInitializeStack(Stack*ps);//确定栈为空intStackIsEmpty(constStack*ps);//确定栈为满intStackIsFull(constStack*ps);//统计栈内项数intStackItemCount(constStack*ps);//从栈顶压入项intAddItem(Stack*ps,Itemitem);//从栈顶弹出项intDelItem(Stack*ps,Item*pitem);//清空项voidEmptyItem(Stack*ps);#endif//stack.c#include<stdio.h>#include"stack.h"//初始化栈voidInitializeStack(Stack*ps){ps->items=0;}//确定栈为空intStackIsEmpty(constStack*ps){return(ps->items==0)?1:0;}//确定栈为满intStackIsFull(constStack*ps){return(ps->items==SMAX)?1:0;}//统计栈内项数intStackItemCount(constStack*ps){returnps->items;}//从栈顶压入项intAddItem(Stack*ps,Itemitem){if(StackIsFull(ps))return0;else{ps->item[ps->items]=item;ps->items++;return1;}}//从栈顶弹出项intDelItem(Stack*ps,Item*pitem){if(StackIsEmpty(ps))return0;else{*pitem=ps->item[ps->items-1];ps->item[ps->items-1]='\0';ps->items--;return1;}}6.#include<stdio.h>#defineSIZE8intfind(intar[],intsize,intn);intmain(void){intn;intarray[SIZE]={1,3,6,7,9,10,13,15};printf("Pleaseinputtheintegeryouwanttosearch:\n");while(scanf("%d",&n)==1){if(find(array,SIZE,n))printf("Find.\n");elseprintf("Can'tfind.\n");printf("Yournextinput(qtoquit):\n");}return0;}intfind(int*ar,intsize,intn){inthead=0;intend=size-1;intmid;while(head<=end){mid=(head+end)/2;if(n<ar[mid])end=mid-1;elseif(n>ar[mid])head=mid+1;elsereturn1;}return0;}7.//含7.cword.hword.c3个文件//7.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include"word.h"#defineLEN40#defineSIZE40charget_choice(void);char*s_gets(char*st,intn);voidcount_word(Tree*pt,Item*item);voidprint_word(Itemtemp);intmain(void){Treewords;Itemtemp;FILE*fp;charch;charname[LEN];charword[SIZE];//打开文件printf("Pleaseinputthefilename:\n");s_gets(name,LEN);if((fp=fopen(name,"r"))==NULL){fprintf(stderr,"Can'topenthefile.\n");exit(1);}//从文件读取单词InitializeTree(&words);while(fscanf(fp,"%s",word)==1){strcpy(temp.word,word);temp.num=1;AddItem(&words,&temp);if(TreeIsFull(&words)){fprintf(stderr,"Thetreeisfull.\n");break;}}fclose(fp);while((ch=get_choice())!='q'){if(ch=='a'){if(TreeIsEmpty(&words))printf("Thereisnoword.\n");elseTraverse(&words,print_word);}elsecount_word(&words,&temp);}DeleteAll(&words);printf("Bye.\n");return0;}charget_choice(void){charch;printf("\na.showwordlist\n");printf("b.findaword\n");printf("q.quit\n");ch=getchar();while(strchr("abq",tolower(ch))==NULL){while(getchar()!='\n')continue;printf("Pleaseinputthea,b,orq.\n");ch=getchar();}while(getchar()!='\n')continue;returnch;}voidprint_word(Itemtemp){printf("word:%s\t\t\tcount:%d\n",temp.word,temp.num);}voidcount_word(Tree*pt,Item*item){intcount;printf("Enterthewordyouwanttosearch:\n");s_gets(item->word,SIZE);item->num=1;count=ItemCount(pt,item);if(!count)printf("Can'tfindtheword.\n");elseprintf("count:%d\n",ItemCount(pt,item));}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}//word.h#ifndefWORD_H_#defineWORD_H_#defineLEN40#defineMAX100typedefstructitem{charword[LEN];intnum;}Item;typedefstructtrnode{Itemitem;structtrnode*left;structtrnode*right;}Trnode;typedefstructtree{Trnode*root;intsize;}Tree;//初始化树voidInitializeTree(Tree*ptree);//确认树为满intTreeIsFull(constTree*ptree);//确认树为空intTreeIsEmpty(constTree*ptree);//统计项数intTreeItemCount(constTree*ptree);//查找项intInTree(constTree*ptree,constItem*pi);//添加项intAddItem(Tree*ptree,constItem*pi);//删除项intDelItem(Tree*ptree,constItem*pi);//遍历树voidTraverse(constTree*ptree,void(*pfun)(Itemitem));//清空树voidDeleteAll(Tree*ptree);//对某一项计数intItemCount(constTree*ptree,constItem*item);#endif//word.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"word.h"//局域数据类型typedefstructpair{Trnode*parent;Trnode*child;}Pair;//局域函数声明staticPairSeekItem(constTree*ptree,Item*pi);staticintToLeft(Item*p1,Item*p2);staticintToRight(Item*p1,Item*p2);staticTrnode*MakeNode(Item*item);staticvoidAddNode(Trnode*new_node,Trnode*root);staticvoidDeleteNode(Trnode**ptr);staticvoidInOrder(Trnode*root,void(*pfun)(Itemitem));staticvoidDeleteAllNodes(Trnode*root);//接口函数//初始化树voidInitializeTree(Tree*ptree){ptree->root=NULL;ptree->size=0;}//确认树为满intTreeIsFull(constTree*ptree){if(ptree->size==MAX)return1;elsereturn0;}//确认树为空intTreeIsEmpty(constTree*ptree){if(ptree->size==0)return1;elsereturn0;}//统计项数intTreeItemCount(constTree*ptree){returnptree->size;}//查找项intInTree(constTree*ptree,constItem*pi){Pairlook;look=SeekItem(ptree,pi);if(look.child!=NULL)return1;elsereturn0;}//添加项intAddItem(Tree*ptree,constItem*pi){Pairlook;Trnode*new_node;if(TreeIsFull(ptree))return0;look=SeekItem(ptree,pi);if(look.child!=NULL){(look.child->item.num)++;return1;}else{new_node=MakeNode(pi);if(new_node==NULL){fprintf(stderr,"Could'teatenode\n");return0;}ptree->size++;if(ptree->root==NULL)ptree->root=new_node;elseAddNode(new_node,ptree->root);}return1;}//删除项intDelItem(Tree*ptree,constItem*pi){Pairlook;look=SeekItem(ptree,pi);if(look.child==NULL)return0;if(look.parent==NULL)DeleteNode(&ptree->root);elseif(look.parent->left==look.child)DeleteNode(&look.parent->left);elseDeleteNode(&look.parent->right);ptree->size--;return1;}//遍历树voidTraverse(constTree*ptree,void(*pfun)(Itemitem)){if(ptree!=NULL)InOrder(ptree->root,pfun);}//清空树voidDeleteAll(Tree*ptree){if(ptree!=NULL)DeleteAllNodes(ptree->root);ptree->root=NULL;ptree->size=0;}//每一项计数intItemCount(constTree*ptree,constItem*item){Pairlook;look=SeekItem(ptree,item);if(look.child==NULL)return0;elsereturnlook.child->item.num;}//局域函数//寻找项staticPairSeekItem(constTree*ptree,constItem*pi){Pairlook;look.parent=NULL;look.child=ptree->root;if(look.child==NULL)returnlook;while(look.child!=NULL){if(ToLeft(pi,&(look.child->item))){look.parent=look.child;look.child=look.child->left;}elseif(ToRight(pi,&(look.child->item))){look.parent=look.child;look.child=look.child->right;}elsebreak;}returnlook;}//项在左边staticintToLeft(Item*p1,Item*p2){if(strcmp(p1->word,p2->word)<0)return1;elsereturn0;}//项在右边staticintToRight(Item*p1,Item*p2){if(strcmp(p1->word,p2->word)>0)return1;elsereturn0;}staticTrnode*MakeNode(Item*item){Trnode*pnode;pnode=(Trnode*)malloc(sizeof(Trnode));if(pnode!=NULL){pnode->item=*item;pnode->left=NULL;pnode->right=NULL;}returnpnode;}staticvoidAddNode(Trnode*new_node,Trnode*root){if(ToLeft(&(new_node->item),&(root->item))){if(root->left==NULL)root->left=new_node;elseAddNode(new_node,root->left);}elseif(ToRight(&(new_node->item),&(root->item))){if(root->right==NULL)root->right=new_node;elseAddNode(new_node,root->right);}else{fprintf(stderr,"locationerrorinAddNode().\n");exit(1);}}//ptr是父节点指向目标节点的指针的地址staticvoidDeleteNode(Trnode**ptr){Trnode*pnode;if((*ptr)->left==NULL){pnode=*ptr;*ptr=(*ptr)->right;free(pnode);}elseif((*ptr)->right==NULL){pnode=*ptr;*ptr=(*ptr)->left;free(pnode);}else{for(pnode=(*ptr)->left;pnode->right!=NULL;pnode=pnode->right)continue;pnode->right=(*ptr)->right;pnode=(*ptr);*ptr=(*ptr)->left;free(pnode);}}staticvoidInOrder(Trnode*root,void(*pfun)(Itemitem)){if(root!=NULL){InOrder(root->left,pfun);(*pfun)(root->item);InOrder(root->right,pfun);}}staticvoidDeleteAllNodes(Trnode*root){Trnode*pright;if(root!=NULL){pright=root->right;DeleteAllNodes(root->left);free(root);DeleteAllNodes(pright);}}8.//含8.cpet.hpet.c3个文件//8.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include"pet.h"charget_choice(void);char*s_gets(char*st,intn);voidaddpet(Tree*pt);voidprintpet(Itemtemp);voidfindpet(constTree*pt);voiddroppet(Tree*pt);voidshowpet(constTree*pt);intmain(void){Treepet;charch;InitializeTree(&pet);while((ch=get_choice())!='q'){switch(ch){case'a':addpet(&pet);break;case'l':showpet(&pet);break;case'f':findpet(&pet);break;case'n':printf("%dpetsinclub.\n",TreeItemCount(&pet));break;case'd':droppet(&pet);break;default:puts("Swithingerror");}printf("\n");}DeleteAll(&pet);printf("Bye.\n");return0;}charget_choice(void){charch;puts("NerfvillePetClubMembershipProgram");puts("Enterthelettercorrespondingtoyourchoice:");puts("a)addapetl)showlistofpets");puts("n)numberofpetsf)findpets");puts("d)deleteapetq)quit");ch=getchar();while(strchr("alnfdq",tolower(ch))==NULL){while(getchar()!='\n')continue;printf("Pleaseinputthea,b,orq.\n");ch=getchar();}while(getchar()!='\n')continue;returnch;}voidshowpet(constTree*pt){if(TreeIsEmpty(pt))printf("Nopetinclub.\n");elseTraverse(pt,printpet);}voidfindpet(constTree*pt){Itemtemp;if(TreeIsEmpty(pt))puts("Nopetintheclub.\n");else{printf("Enterthenameofpet:\n");s_gets(temp.name,LEN);FindItem(pt,&temp);}}voidaddpet(Tree*pt){Itemtemp;if(TreeIsFull(pt))puts("Noroomintheclub.\n");else{printf("Enterthenameofpet:\n");s_gets(temp.name,LEN);printf("Enterthekindofpet:\n");s_gets(temp.kind[0],LEN);temp.num=1;AddItem(pt,&temp);}}voiddroppet(Tree*pt){Itemtemp;if(TreeIsEmpty(pt)){puts("Noentries.\n");return;}printf("Enterthenameofpet:\n");s_gets(temp.name,LEN);if(DelItem(pt,&temp)==0){printf("Can'tfindthepet.\n");}}voidprintpet(Itemtemp){inti;printf("name:%s\t\tkind:",temp.name);for(i=0;i<temp.num;i++)printf("%s",temp.kind[i]);printf("\n");}char*s_gets(char*st,intn){char*ret_val;char*find;ret_val=fgets(st,n,stdin);if(ret_val){find=strchr(st,'\n');if(find)*find='\0';elsewhile(getchar()!='\n')continue;}returnret_val;}//pet.h#ifndefWORD_H_#defineWORD_H_#defineMAX10#defineLEN40#defineSIZE100typedefstructitem{charname[LEN];charkind[MAX][LEN];intnum;}Item;typedefstructtrnode{Itemitem;structtrnode*left;structtrnode*right;}Trnode;typedefstructtree{Trnode*root;intsize;}Tree;//初始化树voidInitializeTree(Tree*ptree);//确认树为满intTreeIsFull(constTree*ptree);//确认树为空intTreeIsEmpty(constTree*ptree);//统计项数intTreeItemCount(constTree*ptree);//查找项voidFindItem(constTree*ptree,constItem*item);//添加项intAddItem(Tree*ptree,constItem*pi);//删除项intDelItem(Tree*ptree,constItem*pi);//遍历树voidTraverse(constTree*ptree,void(*pfun)(Itemitem));//清空树voidDeleteAll(Tree*ptree);#endif//pet.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"pet.h"//局域数据类型typedefstructpair{Trnode*parent;Trnode*child;}Pair;//内部链接,文件作用域staticintcount=0;//局域函数声明staticPairSeekItem(constTree*ptree,Item*pi);staticintToLeft(Item*p1,Item*p2);staticintToRight(Item*p1,Item*p2);staticTrnode*MakeNode(Item*item);staticvoidAddNode(Trnode*new_node,Trnode*root);staticvoidDeleteNode(Trnode**ptr);staticvoidInOrder(Trnode*root,void(*pfun)(Itemitem));staticvoidDeleteAllNodes(Trnode*root);staticvoidCountItem(Trnode*root);//接口函数//初始化树voidInitializeTree(Tree*ptree){ptree->root=NULL;ptree->size=0;}//确认树为满intTreeIsFull(constTree*ptree){if(ptree->size==SIZE)return1;elsereturn0;}//确认树为空intTreeIsEmpty(constTree*ptree){if(ptree->size==0)return1;elsereturn0;}//统计项数intTreeItemCount(constTree*ptree){count=0;CountItem(ptree->root);returncount;}//查找项voidFindItem(constTree*ptree,constItem*pi){Pairlook;inti;look=SeekItem(ptree,pi);if(look.child!=NULL){printf("name:%s\t\tkind:",look.child->item.name);for(i=0;i<look.child->item.num;i++)printf("%s",look.child->item.kind[i]);printf("\n");}elseprintf("Can'tfindthepet.\n");}//添加项intAddItem(Tree*ptree,constItem*pi){Pairlook;Trnode*new_node;if(TreeIsFull(ptree))return0;look=SeekItem(ptree,pi);if(look.child!=NULL){strcpy(look.child->item.kind[look.child->item.num],pi->kind[0]);(look.child->item.num)++;return1;}else{new_node=MakeNode(pi);if(new_node==NULL){fprintf(stderr,"Could'teatenode\n");return0;}ptree->size++;if(ptree->root==NULL)ptree->root=new_node;elseAddNode(new_node,ptree->root);}return1;}//删除项intDelItem(Tree*ptree,constItem*pi){Pairlook;look=SeekItem(ptree,pi);if(look.child==NULL)return0;if(look.parent==NULL)DeleteNode(&ptree->root);elseif(look.parent->left==look.child)DeleteNode(&look.parent->left);elseDeleteNode(&look.parent->right);ptree->size--;return1;}//遍历树voidTraverse(constTree*ptree,void(*pfun)(Itemitem)){if(ptree!=NULL)InOrder(ptree->root,pfun);}//清空树voidDeleteAll(Tree*ptree){if(ptree!=NULL)DeleteAllNodes(ptree->root);ptree->root=NULL;ptree->size=0;}//局域函数//寻找项staticPairSeekItem(constTree*ptree,constItem*pi){Pairlook;look.parent=NULL;look.child=ptree->root;if(look.child==NULL)returnlook;while(look.child!=NULL){if(ToLeft(pi,&(look.child->item))){look.parent=look.child;look.child=look.child->left;}elseif(ToRight(pi,&(look.child->item))){look.parent=look.child;look.child=look.child->right;}elsebreak;}returnlook;}//项在左边staticintToLeft(Item*p1,Item*p2){if(strcmp(p1->name,p2->name)<0)return1;elsereturn0;}//项在右边staticintToRight(Item*p1,Item*p2){if(strcmp(p1->name,p2->name)>0)return1;elsereturn0;}staticTrnode*MakeNode(Item*item){Trnode*pnode;pnode=(Trnode*)malloc(sizeof(Trnode));if(pnode!=NULL){pnode->item=*item;pnode->left=NULL;pnode->right=NULL;}returnpnode;}staticvoidAddNode(Trnode*new_node,Trnode*root){if(ToLeft(&(new_node->item),&(root->item))){if(root->left==NULL)root->left=new_node;elseAddNode(new_node,root->left);}elseif(ToRight(&(new_node->item),&(root->item))){if(root->right==NULL)root->right=new_node;elseAddNode(new_node,root->right);}else{fprintf(stderr,"locationerrorinAddNode().\n");exit(1);}}//ptr是父节点指向目标节点的指针的地址staticvoidDeleteNode(Trnode**ptr){Trnode*pnode;if((*ptr)->left==NULL){pnode=*ptr;*ptr=(*ptr)->right;free(pnode);}elseif((*ptr)->right==NULL){pnode=*ptr;*ptr=(*ptr)->left;free(pnode);}else{for(pnode=(*ptr)->left;pnode->right!=NULL;pnode=pnode->right)continue;pnode->right=(*ptr)->right;pnode=(*ptr);*ptr=(*ptr)->left;free(pnode);}}staticvoidInOrder(Trnode*root,void(*pfun)(Itemitem)){if(root!=NULL){InOrder(root->left,pfun);(*pfun)(root->item);InOrder(root->right,pfun);}}staticvoidDeleteAllNodes(Trnode*root){Trnode*pright;if(root!=NULL){pright=root->right;DeleteAllNodes(root->left);free(root);DeleteAllNodes(pright);}}staticvoidCountItem(Trnode*root){if(root!=NULL){CountItem(root->left);count+=root->item.num;CountItem(root->right);}}结束2017年3月11日22:58全文完2017年12月16日22:28完善了缩进、字体、间距等格式问题
本文档为【C-Primer-Plus第六版中文版习题答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥10.8 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
壹笑先生
致力于服务广大学子、教师、社考人员等一份学习的资料!
格式:doc
大小:461KB
软件:Word
页数:0
分类:工学
上传时间:2020-08-25
浏览量:526