还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
附录HI各章程序设计实践题答案第一章
1.编写程序***TurboC***程序如下ttincludestdio.h〃main
2.编写程序,用“*”输出字母的图案程序如下ttincludestdio.h〃mainprintf〃****〃;printf〃*〃;printf〃****〃;printf〃*〃;printf〃****〃;格—**第一早
1.编写程序,将“China”译成密码密码规律用原来的字母后面第4个字母代替原来的字母例如字母来”后面第4个字母是“E”用来”代替来”因此,“China应译为“Glmre”并输出程序如下ttinclude〃stdio.h〃maincharcl=Cc2-h,c3=ic4-nc5-a,;cl+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf〃密码是%c%c%c%c%c\n〃,clc2c3c4c5;相应的元素即可程序如下maininta[]
[4]={31687654321110810251227;intb
[3]ij1;fori=0;i=2;i++{l=a[i]
[0];forj=l;j=3;j++ifa[i][j]Dl=a[i][j];b[i]=l;}printf,z\narraya:\n〃;fori=0;i=2;i++{forj=0;j=3j++printf%5d〃a[i][j];printf〃\n〃;}printf,z\narrayb:\n〃;fori=0;i=2;i++printf〃/5d〃b[i];printf〃\n〃;程序中第一个for语句中又嵌套了一个for语句组成了双重循环外循环控制逐行处理并把每行的第列元素赋予1进入内循环后,把1与后面各列元素比较,并把比1大者赋予1内循环结束时1即为该行最大的元素,然后把1值赋予b[i]等外循环全部完成时数组b中已装入了a各行中的最大值后面的两个for语句分别输出数组a和数组b
3.输入五个国家的名称按字母顺序排列输出本题编程思路如下五个国家名应由一个二维字符数组来处理然而C语言规定可以把一个二维数组当成多个一维数组处理因此本题又可以按五个一维数组处理,而每一个一维数组就是一个国家名字符串用字符串比较函数比较各一维数组的大小,并排序,输出结果即可编程如下maincharst
[20]cs
[5]
[20];intijp;printfinputcountrysname:\n,z;fori=0;i5;i++getscs[i];printf〃\n〃;fori=0;i5;i++{p=i;strcpystcs[i];forj=i+l;j5;j++ifstrcmpcs[j]st0{p=j;strcpystcs[j];}ifp!=istrcpystcs[i];strcpycs[i]cs[p];strcpycs[p]st;}putscs[i];}printf〃\n〃;}本程序的第一个for语句中,用gets函数输入五个国家名字符串上面说过C语言允许把一个二维数组按多个一维数组处理,本程序说明cs
[5]
[20]为二维字符数组,可分为五个一维数组cs
[0]cs[l]cs
[2]cs
[3]cs
[4]o因此在gets函数中使用cs[i]是合法的在第二个for语句中又嵌套了一个for语句组成双重循环这个双重循环完成按字母顺序排序的工作在外层循环中把字符数组cs[i]中的国名字符串拷贝到数组st中,并把下标i赋予P进入内层循环后,把st与cs[i]以后的各字符串作比较,若有比st小者则把该字符串拷贝到st中,并把其下标赋予po内循环完成后如p不等于i说明有比cs[i]更小的字符串出现,因此交换cs[i]和st的内容至此已确定了数组cs的第i号元素的排序值然后输出该字符串在外循环全部完成之后即完成全部排序和输出第七章L编写程序,输入2个数,并调用自己编写的函数交换和6中的值ttincludestdio.hvoidswapint*pint*q;main{inta=10b=20;swapab;printf〃a=%db=%d\n,/ab;voidswapint*pint*q{intt=0;t=*p;*p=*q;*q=t;2•编写fac函数该函数的功能是计算n!再调用该函数,计算1!+3!+5!+……+19!的值4includestdio.hfloatfacintn;floatsumintn;main{floats=0;s=sum19;printf,zs=%.0f\n〃s;floatsumintn{inti=0;floats=
0.0;fori=l;i=n;i=i+2s=s+faci;returns;}floatfacintn{inti=0;floatf=l.0;fori=l;i=n;i++f=f*i;returnf;}
3.输入一个字符串,调用函数判断该字符串是不是同文所谓回文是顺序读和倒序读完全一样的字符串例如,字符串“eye”是回文^includestdio.hintfunpchar*p;main{chara
[80]={,\0}:intk=0;printfInputastring:\n,z;getsa;k=funpa;ifk==0printf〃\〃%s\〃isnotapalindromicstring.\n,a;elseprintf〃\〃%s\〃isapalindromicstring.\n,a;intfunpchar*p{char*q=p;while*q!=\0q++;q-;whilepqif*p!二*qreturn0;else{p++;q-;return1;第八章
1、使用指针变量求解2个整数的升序输出ttincludestdio.hmain{intnumlnum2;int*numl_p=nunil*num2_p=num2pointer;printfz,Inputthefirstnumber:〃;scanf〃%d〃,numl_p;printf〃〃;scanf〃%d〃num2_p;printf〃numl=%dnum2二%d\n〃,numlnum2;if*numl_p*num2_p/*如果numl〉num2则交换指针*/pointer二numl_pnuml_p=num2_pnum2_p=pointer;printfz,min=%dmax=%d\n/z*numl_p*num2_p;}程序运行时Inputthefirstnumber:19/Inputthesecondnumber:56/运行结果是numl=19num2=56min=19max=
562、编写一个程序,打入月份号,输出该月的英文名,例如,输入“3”则输出“March”要求用指针数组处理#includestdio.hmain{char*monthname
[13]={〃illegalmonth〃,“JanuaryFebruaryMarchApril”〃May〃,JuneJulyAugustSeptemberOctoberNovemberDecember};intn;printfinputmonth:\n〃;scanf〃%d〃n;ifn=12n=lprintfz,itis%s.\n〃,*monthname+n;elseprintfz,itiswrong.\n〃;}程序运行时Inputmonth:3/运行结果是itisMarch第九章
1、假设为学生选课提供的2门课程信息包括课程、课程名称、学分、任课教师编写程序,输出这2门课程的所有信息ttincludestdio.h〃ttincludestring.h〃structcourse{intnum;charname
[20];intere;chart
[10];;main{structcourseab;a.num=l;strcpya.name〃电路〃;cre-2;strcpya.t〃张三〃;num=2;strcpyb.name〃C语言〃;cre=4;strcpyb.t〃李四〃;printf,/%6d%15s%5d%10s\n,/a.numa.namea.erea.t;printfz,%6d%15s%5d%10s\n/zb.numb.nameb.ereb.t;
2、定义一个结构体变量包括年、月、日计算该日在本年中是第几天?注意闰年问题#includestdio.hstruct{intyear;intmonth;intday;}date;main{intdays;printfinputyearmonthday:〃;scanf〃%d%d%d〃date.yeardate.monthdate.day;switchdatemonth{case1:days=date.day;break;case2:days=date.day+31;break;case3:days二dateday+59;break;case4:days=dateday+90;break;case5:days=date.day+120;break;case6:days=date.day+151;break;case7:days=date.day+181;break;case8:days=date.day+212;break;case9:days=dateday+243;break;case10:days=dateday+273;break;case11:days=date.day+304;break;case12:days二dateday+334;break;}ifdate.year%4==0date.year%100!=0||date.year%400==0date.month=3days+=l;printf〃%d%disthe%dthdayin%d.\n〃datemonthdatedaydaysdateyear;程序运行时inputyearmonthday:输入200167运行结果是67isthe158thdayin
2001.第十章编写程序,用宏定义的方法求两个整数相除的余数4defineSURPLUSaba%bmainintab;printfinputtwointegers:z,;scanf〃%d%d〃ab;printfremainderis%d\n,zSURPLUSab;}.用有参宏,从3个数中找出最大数#defineMAXasbababmainintabc;printfenterthreeintegers:z/;scanf^d%d%d〃,abc;printf〃max=%d\n〃MAXMAXabc;}3编程序,用宏定义的方法判断输入的年份是否是闰年mainintyear;printf〃\ninputyear:z,;scanf〃%d〃year;ifLEAP_YEARyearprintfz,%disaleapyear.\n\year;elseprintf,z%disnotaleapyear.\nz,year;第十一章
1、编一程序,能把从终端读入的一个字符中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存用字符!表示输入字符串的结束ttincludestdio.hvoidmain{FILE*fp;charstr
[100];inti=0;iffp=fopen〃test〃,〃w〃=NULL{printfCantopenthisfile.\n〃;exit0;}printfz,Inputastring:\n〃;getsstr;whilestr[i]!=’!{ifstr[i[〉=astr[i]〈二zstr[i]=str[i]-32;fputcstr[i]fp;i++;}fclosefp;iffp=fopentestr〃=二NULL{printf//can,topentestr\n〃;exit0;}fgetsstrstrlenstr+lfp;printfOutputis:%s,zstr;fclosefp;
2、从键盘输入一行字符,将其中小写字母转换为大写字母ttincludestdio.h〃voidmainFILE*fp;charch;iffp=fopen〃c:\\ex
85.txt〃,〃w〃==NULL{printf〃不能创建文件c:\\ex
85.txt;exit1;printf〃请输入一行字符\n〃;whilech=getchar!=,\n{ifch=,ch〈二zch=ch-32;fputcchfp;}fclosefp;printf/,sucess,/;}
3、编写一个程序,以只读方式打开一个文本文件filea.txt,如果打开,将文件地址放在fp文件指针中,打不开,显示“Canntopenfilea.txtfile\n.,然后退出main{FILE*fp;Iffp=fopenfilea.txt〃,“r〃=NULLprintf,,Canntopenfilea.txtfile\n〃;exit0;2编写程序,将一个三位数整数256的个位、十位和百位分离后输出,输出结果为a=2b=5c=6o程序如下ttincludestdio.h〃mainintm=256;a=m/100;b=m-a*100/10;c=m%10;printf,,a=%db=%dc=%d\n〃abc;}
3.已知x=
3.6y=
4.2编写程序,求表达式x+y及intx%intx+y的值程序如下ttincludestdio.h〃mainfloatx=
3.6y=
4.2;intc;c=intx%intx+yprintf,,x+y=%fintx%intx+y=%d\n〃,x+yc;}第三章.已知银行定期存款的年利率rate为
2.25%并已知存款期为n年,存款本金为capital元,编写程序,计算n年后的本利之和deposito要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入程序如下ttincludemath.h〃ttincludestdio.h〃mainintn;doublerate;doublecapital;doubledeposit;printfPleaseenterrateyearcapital:;scanf%d%lf,zratenfecapital;deposit=capital*powl+raten;printfdeposit=%f\n〃,deposit;2已知圆半径为r编写程序,求圆的周长和面积要求圆的半径为r由键盘输入程序如下ttinclude〃stdio.h〃mainintr1s;scanf〃%d〃,r;1=2*
3.14*r;s=
3.14*r*r;printf/zl=%ds=%d〃,1s;}3编写程序,输入一个华氏温度,要求输出摄氏温度,公式为C=5/9F-32输出结果取两位小数程序如下ttinclude〃stdio.h〃mainfloatcf;printf〃请输入一个华氏温度\n〃;scanff;c=
5.0/
9.0*f-32;printf〃摄氏温度为:%
5.2f\n〃,c;}
4.已知a=3b=4c=5x=L2y=
2.4z=-
3.6u=51274n=128765cl=a,c2=b编写程序,使程序能得到以下的输出格式和结果a=3b=4c=5x=l.200000y=
2.400000z=-
3.600000x+y=
3.60y+z=-l.20z+x=-
2.40u=51274n=128765cl=aor97ASCIIc2=bor98ASCII程序如下ttinclude“stdio.h〃main{intabc;longintun;floatxyz;charclc2;a=3;b=4;c=5;x=l.2;y=
2.4;z=-
3.6;u=51274;n=128765;cl=a,;c2=,b,;printf〃\n〃;printf〃a=%2db=%2dc=%2d\n〃,abc;printf〃x=%
8.6fy=%
8.6fz=%
9.6f\n〃,xyz;printf〃x+y=%52fy+z=%5・2fz+x=%5・2f\n〃x+yy+zz+x;printf,,u=%61dn=%91d\n,zun;printfz/cl=,%cor%dASCII\nz,clcl;printf,,c2=,%cor%dASCII\n/zc2c2;}第四章
1.求一元二次方程ax2+bx+c=0的根分析求解一元二次方程的根首先要检查方程式二次项的系数a和一次项的系数b是否等于0来确定方程是否有解然后计算方程的判别式b2-4ac的值,根据该判别式的值来决定方程是1有一对实数根——当b2-4ac0时2有一对相等的实数根——当b-4ac=0时3有一对复数根——当b-4ac0时源码ttincludestdio.h〃mainfloatabcdxlx2pq;printf〃请输入的三个系数abc:\n〃;scanf〃%f%f%f〃abc;printf〃方程的解是\n〃;iffabsa=le-6printf〃不是一个二次方程〃;else{d=b*b-4*a*c;iffabsd=le-6printf〃有两个相同的实根%
7.3f\n〃,-b/2*a;elseifdle-6{xl=-b+sqrtd/2*a;x2二-b-sqrtd/2*a;printf〃有两个相异的实根:%
7.3fand%
7.3f\n〃,xlx2”;}else{p=-b/2*a;q=sqrt-d/2*a;printf〃有两个复根:\n〃;printf〃%
7.3f+%
7.3f\n〃,pq〃;printf,z%
7.3f-%
7.3f\n〃,pq〃;运行结果请输入的三个系数abc584方程的解是有两个复根-
0.800+
0.400i-
0.800-
0.400i请输入的三个系数abc12-15方程的解是有两个相异的实根
3.00and-
5.002计算器程序用户输入运算数和四则运算符,输出计算结果分析本例是四则运算求值问题根据输入运算符不同来进行不同的运算,是一个典型多分支选择结构,switch语句用于判断运算符,根据输入的运算符不同来执行不同的语句,然后输出运算值当输入运算符不是+、-、*、/时给出错误提示源码4includestdio.h〃main{intflf2;intresult;charch;scanf〃%c〃,ch;scanf〃%d〃,fl;scanf〃%d〃,f2;switchchcase:result=fl+f2;break;case」result=fl-f2;break;case:result=fl*f2;break;case:result=f1/f2;break;default:result=-9999;break;}ifresult!=-9999printf〃%d%c%d二%d\n〃,flchf2result;elseprintf〃输入运算符不正确!〃;输入+1324〈回车〉输出13+24=
373.输入学生某科成绩,输出其等级成绩[90100]为A等,成绩[8089]为B等,成绩
[6079]为C等60分以下为D等程序1用if语句文件名为ex4_
3.c#include〃conio.h〃mainintscorex;chargrade;clrscr;printfzz\nPleaseinputscore
[0100]:〃;scanf〃%d〃fescore;ifscore=90printf〃A〃;elseifscore=80printf〃B〃;elseifscore=60printf〃C〃;elseprintf〃D〃;}程序2用switch语句文件名为ex4_
4.c4include〃conio.h〃mainintscorex;chargrade;clrscr;printfz,\nPleaseinputscore
[0100]:〃;scanf〃%d〃fescore;x=score/10;switchxdefault:printfInputError!”;第五章L百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?分析设鸡翁、鸡母、鸡雏的个数分别为xyz题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程5x+3y+z/3=100x+y+z=100此问题可归结为求这个不定方程的整数解在分析确定方程中未知数变化范围的前提下可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解ttincludestdio.h〃mainintxyz;printf〃下面是百钱买百鸡的答案\n〃;forx=0;x〈=20;x++fory=0;y=33;y++{z=100-x-y;ifz%3=05*x*3+z/3=100printf〃%2d:公鸡二%2d母鸡二%2d雏鸡二%2d\n〃++jxyz;输出结果下面是百钱买百鸡的答案1:公鸡二0母鸡二25雏鸡二752:公鸡=4母鸡二18雏鸡二783:公鸡二8母鸡二H雏鸡二814:公鸡二12母鸡二14雏鸡二
84.对用户输入的所有整数进行累加,直到输出0为止分析S1用户输入整数存入变量aS1-1用户从键盘循环输入数据循环无需初值循环条件无数目限制,跳出循环用S2步完成因此用while1scanf〃%〃a;语句完成S2判断a为0否?不为0执行S3为0跳出循环,执行S4S2-1ifa==0S3:累加所有整数存入变量SoS4输出SoS4-1printf%d〃,s;源码ttincludestdio.h〃mainintas=0;while1scanf〃%d〃a;ifa==0break;elses=s+a;}printf〃s=%d\n〃,s;程序运行结果1〈回车》46〈回车》32〈回车》0〈回车s=
79.一辆卡车违反交通规则,撞人后逃跑现场有三人目击事件,但都没有记住车号,只记下车号的一些特征甲说牌照的前两位数字是相同的;乙说牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说四位的车号刚好是一个整数的平方请根据以上线索求出车号分析按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方源码#includestdio.h#includemath.hvoidmainintijkc;/*判断二位数字是否相异*/k=i*1000+i*100+j*10+j;/*计算出可能的整数*/forc=31;c*ck;c++;/*判断该数是否为另一整数的平方*/ifc*c=二kprintfLorry-No.is%d.\n〃,k;/*若是打印结果*/第六章L把一个整数按大小顺序插入已排好序的数组中为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置然后从数组最后一个元素开始到该元素为止,逐个后移一个单元最后把插入数赋予元素i即可如果被插入数比所有的元素值都小则插入最后位置mainintijpqsna[ll]={127362854688710516218;fori=0;i10;i++{p=i;q=a[i];forj=i+l;j10;j++ifqa[j]{p=j;q=a[j];ifp!=is=a[i];a[i]=a[p];a[p]=s;}printf〃%d〃,a[i];printfz,\ninputnumber:\n,z;scanf〃%d〃n;fori=0;i10;i++ifna[i]{fors=9;s=i;s--a[s+l]=a[s];break;}a[i]=n;fori=0;i=10;i++printf〃%d〃,a[i];printf〃\n〃;本程序首先对数组a中的10个数从大到小排序并输出排序结果然后输入要插入的整数n再用一个for语句把n和数组元素逐个比较,如果发现有na[i]时,则由一个内循环把i以下各元素值顺次后移一个单元后移应从后向前进行从武9]开始到a[i]为止后移结束跳出外循环插入点为i把n赋予a[i]即可如所有的元素均大于被插入数,则并未进行过后移工作此时i=10结果是把n赋于最后一个循环输出插入数后的数组各元素值程序运行时,输入数47从结果中可以看出47己插入到54和28之间2•在二维数组a中选出各行最大的元素组成一个一维数组ba=31687654321110810251237b=8710837本题的编程思路是,在数组A的每一行中寻找最大的元素,找到之后把该值赋予数组B{case10:case9:printf〃A〃;break;case8:printf〃B〃;break;case7:case6:printf〃C〃;break;case5:case4:case3:case2:case1:case0:printf〃D〃;break;。