Dev-C++基础教程.docx

上传人:夺命阿水 文档编号:103351 上传时间:2022-12-13 格式:DOCX 页数:226 大小:704.35KB
返回 下载 相关 举报
Dev-C++基础教程.docx_第1页
第1页 / 共226页
Dev-C++基础教程.docx_第2页
第2页 / 共226页
Dev-C++基础教程.docx_第3页
第3页 / 共226页
Dev-C++基础教程.docx_第4页
第4页 / 共226页
Dev-C++基础教程.docx_第5页
第5页 / 共226页
点击查看更多>>
资源描述

《Dev-C++基础教程.docx》由会员分享,可在线阅读,更多相关《Dev-C++基础教程.docx(226页珍藏版)》请在课桌文档上搜索。

1、Dev-C+基础教程习题解答庄燕文王素琴王碧艳编著刖百这是一本与Dev-C+基础教程配套的习题解析。本书主要针对中小学生学习了DEV-C+语法、语义、常用算法后,引导学生用程序设计的思维和逻辑解决问题。木书的习题从题意出发,分析解题的思路和算法,然后给出参考程序,重点帮助读者理解算法原理,教会读者很多实用的编程技巧,培养良好的编程习惯。本书的习题内容丰富,读者可以自己动手实践编写程序,然后和题解中的方法比较,希望读者在理解该书题解的同时,能锐意开掘,探本索源,找到更好的解答办法,写出更高效的程序。该习题涵盖中学生信息学奥林匹克竞赛中的很多基础算法,可以做为中小学生学习程序设计的入门习题,也可以

2、做为本科生初学程序设计的课后习题。目录第1章Dev-C+入门第2章Dev-C+语言简介第3章顺序结构第4章选择结构第5章循环结构第6章函数第7章数组第8章指针第9章字符串第10章文件第U章输入与输出流第12章链表第1章Dev-C+入门1 .解析该题考察学生用DeV-C+编写简单的程序和C+的基本语法。参考程序预编译命令使用名字空间定义一个常数变量pi主程序/输出”输入半径的提示”/输入半径/计算面积/计算周长#includeusingnamespacestd;constfloatPI=3.14;intmain()(floats,rtc;coutr;s=PI*r*r;c=2*PI*r;cout,

3、s=,sendl;coutc=cendl;SyStem(pause);return0;I输出结果1/显示/用户输入,表示圆的半径/显示面积/显示周长pleaseinputradius:5s=78.5c=31.42 .问题分析凡是数学中已经定义的字母,在程序设计中一律沿用。如用a表示边长用S表示面积,用C表示周长。算法设计s=a*a,c=4*a.参考程序#includeusingnamespacestd;intmain()(floata,s,c;COUt输入正方形的边长:;cina;s=a*a;c=4*a;cout,s=,sendl;coutc=cendl;system(pause);retur

4、nO;第2章Dev-C+语言简介1 .解析C+标识符命名规则:(1)必须由一个字母(az,AZ)或下划线(_)开头(2)标识符的其它部分可以用字母,下划线或数字(09)组成(3)区分大小写(4)不能与C+关键字相同参考答案合法标识符:worth,begin,a34非法标识符:false,x*y,$we,char,.set2 .(1)31(5%2)解析1这是一个算术表达式。分析其计算结果时首先要掌握两点:算术运算符的优先级。C+的算术运算符中,()的优先级最高,*、/、的优先级比+、一高,且它们都是从左到右结合的运算符两侧类型不同的运算数,在运算中给出类型转换的规律。运算所得结果的类型与运算数类

5、型一致。在第一题中,括号的优先级最高,先求5%2=1,原表达式变成31/1,根据规定的除法运算规律,所得结果的类型与运算数类型一致,因为7”号两侧都是整型,因此结果也应该整型。求得31;答案31(2) 17-4*3/7解析按照优先级的高低,*的优先级比-高,先算*法,4*3=12,原表达式变成17-12/7。/的优先级比-高,再算12/7,根据规定的除法运算规律,所得结果的类型与运算数类型一致,因为“尸号两侧都是整型,因此结果也应该整型。计算得12/7=1,原表达式变成17-1,最后算17-1得16答案16(3) 31.0(5%2)解析括号的优先级最高,先算括号里面的,5%2=1,原表达式变成

6、31.0/1,当运算符两侧为一个为整型数,另一个为实型数时,系统首先把着整型数转换为实型数,使运算符两边的类型取得一致然后进行运算,经转换后表达式为31.0/1.0,最终结果是31.0答案31.0(4) 17-4*3.0/7解析由于*的运算级高于先算4*3=12.0,原表达式变成17-12.0/7,/的优先级比-高,计算12.0/7,当运算符两侧为一个为整型数,另一个为实型数时,系统首先把着整型数转换为实型数,使运算符两边的类型取得一致然后进行运算,12.0/7.0=1.71429,原表达式变成17-1.71429,当运算符两侧为一个为整型数,另一个为实型数时,系统首先把着整型数转换为实型数,

7、使运算符两边的类型取得一致然后进行运算,经转换后表达式为17.00000-1.71429,最终结果是15.2857答案15.28573 .(1)解析在初学者阶段,读者可能只接触到MAIN(主)函数,但作为基础知识,读者应该明确且牢记:c+程序是由函数组成的。每个c+语言的源程序可以包含多个函数,但只能有一个主函数。因此选A是片面的。在c+程序中不存在“过程”这一程序结构。在正确的程序设计中,要求对源程序有详尽的注释,以便于阅读和软件的维护:C+程序中的注释行,由/*开头,由*/结束:7”和”必须紧接养,在这两个字符之间不得插入空格。在选项D中“/“和”*”之间都插有空格,很多初学者常犯这样的错

8、误。以上分析可知,本题的正确答案是B。(2)解析将数学表达式写出c+语言表达式是编写c+程序的基本功之一。此例中给出了一个代数式,用c+语言表示应该是一个算术表达式。在书写算术表达式时,不允许使用分数的形式,只能按运算的先后顺序写在一行上,必须要添加圆括号以保证运算的正确性。由选项可知,同一个数学算式可以写成不同的c+语言表达式。选项A中,由于除号后的c*d两侧未加圆括号,按照运算规则,将先算出(a*b)的乘积,ab,d然后被C除,计算的结果再乘上d。它所描述的代数式为C,与原算式不符,显然是错误的。选项B中,按优先级应当先做(C*D)运算,然后将它去除a*b的乘积,因此是正确的。选项C中,按

9、从左到右的顺序,先做a/c的运算,描述的代数式为Cd,与原式等效。选项D中,按从左到右的顺序,先做a*b然后除c,再除d。运算的过程相当于代数式,11QDcd,因此与原算式等效。题目要求选出不正确的,所以本题的答案是A。(3)解析C+语言中的表达式种类较多,本章中涉及的就有算术表达式、强制类型转换表达式、赋值表达式以及逗号表达式等。读者应该记清它们各自的特征。本例中选项A末尾有一个分号,从而构成了赋值语句而不是表达式。选项B是由2个表达式构成的逗号表达式:第1个是赋值表达式、第2个是由自加运算符构成的表达式,语法上没有错误。选项C中使用了类型说明符血,若作为强制类型转换表达式,int两侧必须带

10、有圆括号,这里没有括号是不合法的。选项D从形式上看似乎是一个赋值表达式,因为C+语言中允许诸如a=b=2这类的赋值表达式。但C+语言也明确规定:赋值运算符(=)左侧只能是变量不允许是常量和算术表达式。选项D的a+7=c+d在赋值号左侧出现了算术表达式,因此是不合法的。本题的正确答案为B。4 .(1)解析C+语言规定:可以在定义的同时给变量赋初值。其形式为:类型名变量名=数值,变量名=数值,按此格式可得本例题所要求的定义语句;inta=0,b=0;需要提醒读者的是:对于定义时没有置初值的变量,其值是不确定的随机数,使用时特别加以注意。答案inta=0,b=0;(2)解析这是一个算术表达式。分析其

11、计算结果时首先要掌握两点:算术运算符的优先级。运算符两侧类型不同的运算数,在运算中给出类型转换的规律。本例中涉及了加、除以及求余三种运算。按运算的优先级先计算1/2,根据规定除法运算所得结果的类型与运算数类型一致,因为/”号两侧都是整型,因此结果也应该整型。故1/2的结果不是0.5而应舍去小数部分得到结果0;按优先级,接下来做求余运算56%10,56除10以后的余数是6,因此所得结果为整数6,现在表达式变成了3.5+0+6。按+号的综合性,应该自左至右进行运算,因此先做3.5+0,当运算符两侧为一个为整型数,另一个为实型数时,系统首先把着整型数转换为实型数,使运算符两边的类型取得一致然后进行运

12、算,如3.5+0+6,则首先把O转换为实型数0.0,然后进行运算,得3.5;接着进行3.5+6的运算,经转换后表达式为3.5+6.0,最终结果是9.5。(3)解析在c+语言中,凡是双目运算符都可以和赋值运算符一起组成复合运算符。在赋值表达式中可以包含这些复合运算符,且运算符按“自右至左”的组合顺序进行。因此,表达式k-=k-=k+l的求解过程为:先计算最右边的“k-=k+l,相当于k=k-(k+l),把7带入表达式中:k=7-(7+l),结果把-1赋给了ko再计算“k+=l”,相当于k=k(-l),把当前k的值(-1)带入表达式中,k=-l+(-l),最后把.2赋给了匕故本题的正确答案是2。(

13、4)解析先做a=a-a*a;把12带入得到a=12-12*12,a=-132.Ma=a+(-132),a=-132-132=-264故本题的正确答案是D。5 .(1)解析考察C+的基本语法。该题主要有两点问题。main函数是C+程序的主函数,函数名称后面要有0,函数名称前面有类型说明符int。完整的形式应为intmain()COUt插入符的方向有问题,应该为COUtVVV;答案#includeusingnamespacestd;intmain改成intmain()(inta,b,c,v;a=2,b=3,c=4v=a*b*c;COUtV;改成COUtV;system(pause);return0

14、;)(2)解析考察C+的基本语法。该题主要有两点需要注意的。C+的输入输出流头文件中规定了cin,cout是小写形式,若改成大写,系统会默认成变量处理,会出现语法错误C+变量是区分大小写的,所以使用时要多小心。不然会出现没有定义的错误。答案#includeusingnamespacestd;intmain()(floatL,W,H,V;CoUtLWH;改为cinLWHv=L*W*H;改为V=L*W*Hcoutvendl;改为coutVendl;system(pause);return0;)(3)解析考察C+的const常量。const常量必须在第一次声明时就初始化,用变量或常量初始化都可以,只

15、是初始化一次以后它的值就不能再改变了。若要改变它的值,使用普通变量即可。答案intmain()(constintw=5:/const常量不能修改,改为intw=5floata;a=2*w;w+;coutw,aendl;SyStem(pause”);return0;第3章顺序结构1解析考察变量间的交换,算法如下:(1)开辟工作单元E。(2)E-A;A-B;B-CC-D;D-E。交换过程读者可以参考教材第三章例3-1中图3-3。参考程序#include预编译命令usingnamespacestd;/使用名字空间intmain()主函数(inta=89,b=76,c=95,d=62,e;变量申明和初

16、始化couta=a,b=,b,c=Cd=dendl;输出变量的初始值e=a;a=b;b=c;c=d;d=e;couta=a,b=b,c=c,d=dendl;输出移动后变量的值SyStem(pause);return0;)输出结果a=89b=76c=95d=62交换前的值a=76b=95c=62d=89交换后的值2解析本题主要考察变量的格式化输出。C+标准库提供的支持格式输出的操作符函数有控制输出宽度、填充字符和精度的方法。需要注意的是在使用这些操作符函数时需要包含头文件iomanip。这里给读者介绍下输出宽度的函数:SetW(宽度值)和设置输出填充字符的函数:Setfm(填充字符)。输出宽度的

17、函数:seiw(宽度值),如输出COulsetw(5)3endl;就表示将整数3以宽度5的格式输出,当需要的宽度小于5时,左补0。这样就实现了在整数5左边输出4个空格的目的。运行结果为口口口口5。设置输出填充字符的函数:SetfiH(填充字符)此函数常与SetWO函数联合使用,达到向不满设置输出宽度的空间填入指定字符的目的,不设置则填充空格。coutsetw(5)setfill(#)123endl,指将整数123以宽度5的格式输出,运行结果为#123。读者可以参考第三章的例题3-3,34。这里列举直接输出空格和使用宽度函数输出空格的方法。参考程序方法一:#include预编译命令usingna

18、mespacestd;intmain()/使用名字空间主函数inta=l,b=2,c=3,d=4,e=5;coutabc/变量定义和初始化d,eendl;SyStem(pause);直接输出空格return0;I方法二:#include预编译命令#includeusingnamespacestd;/格式化输出函数的头文件/使用名字空间intmain()(inta=l,b=2,c=3,d=4,e=5;主函数变量定义和初始化coutsetw(1)asetw(3)bsetw(4)csetw(6)dsetw(10)eendI;使用输出宽度函数输出空格system(pauseM);return0;输出结

19、果12345显示结果3解析本题考察格式化输入输出,本题采用宽度函数设置输出宽度。读者可以参考本章习题的第2小题,参考程序#include#includeusingnamespacestd;intmain()inta,b,c;coutt4pleaseinputthevalueaandbf,endl;输入a.预编译命令格式化输出函数的头文件使用名字空间主函数变量申明b的提示信息cinab;coutsetw(8)aendl;cout,setw(7)bendl;coutendl;c=a+b;coutsetw(8)cendl;SyStem(pause);return0;I输出结果pleaseinputt

20、hevalueaandb:显示45872124用户输入4587+2124/输入a,b/设置a输出的格式/设置+输出的位置输出“”计算a+b的值赋给c设置输出的格式/显示加法结果67664解析本题主要考察输出精度,宽度等格式化输出。设置输出精度的函数:SetPreCiSion(有效位数)。此函数用来指明显示浮点型数据的有效位数,可用的最后位的值为是四舍五入的值。coutsetprecision(3)3.333333endl;运行结果为3.33。本题将输出精度和输出宽度结合就可以实现对齐的目的,读者可以参考第三章例题3-6o参考程序#include/预编译命令#includeusingnamesp

21、acestd;intmain()(floata,b,e;格式化输出函数的头文件使用名字空间主函数变量申明intc,d;变量申明cinabcd;输入变量coutsetiosflags(ios:fixed)setw(8)setprecision(c)aendl;coutsetiosflags(ios:fixed)+setw(8-c+d-1)setprecision(d)bendl;以上两行格式化输出a,,+,bcoutendl;/输出“”e=a+b;计算e的值coutsetw(8)eendl;格式化输出eSyStem(pause);return0;)输出结果1.23452.345633输入1.23

22、5输出+2.3463.5805解析本题主要考察小时和分钟的转化,转换方式如下:1小时=60分钟,若要用分钟最后的结果a=(m%24)*60+n0若要用小时和分钟表示分钟a,则小可以参考第三章例题3-10a表示m小时n分钟,时m = a/60,分钟 n = a-m*60o参考程序#include using namespace std;int main()(int a,b;cin a b;if(a = 24)a = a % 24;cout a * 60 + b endl;SySIem(pause);return O;I输出结果534输入小时和分钟334输出分钟表示的结果预编译命令使用名字空间主函

23、数变量申明,a代表小时,b代表分钟输入变量a,b过24点记为0.输出用分钟表示的结果6解析本题主要考察华氏温度和摄氏温度的转换。按照转换公式是:C=(59)(F-32)进行转换,这里需要注意的一点是,这里的5/9中/两边均是整数,如果将其中之一从整型数化为实型数的话,计算的结果会是0。若将5转化为5.0,原表达式变成C=(5.09)(F-32)计算5.0/9时,运算符两侧为一个为整型数,另一个为实型数时,系统首先把着整型数转换为实型数,使运算符两边的类型取得致然后进行运算。这样就能得到正确的转换结果。参考程序#include预编译命令usingnamespacestd;使用名字空间intmai

24、n()(floata,b,c,d,e;主函数变量申明cinabcde;/输入转换前的变量值COUt(float)(5.09)*(a-32),(float)(5.09)*(b-32)u,(float)(5.09)*(c-32)(float)(5.09)*(d-32)(float)(5.09)*(e-32)endl;输出转换后的变量值SySIem(pause);returnO;)输出结果-1001037100输入的华氏温度-23.3333-17.7778-12.22222.7777837.7778输出的摄氏温度第4章选择结构1.解析该题主要考察if-else来比较变量的大小的方法。参考教材第四章的

25、例4-2,例4-3,这里介绍四种方法。参考程序方法一:逐层判断,这种方法可以锻炼自己的逻辑思维的能力。参考程序如下:#includeusingnamespacestd;intmain()(floata,b,c;cinabc;if(ab)if(ac)预编译命令使用名字空间主函数变量申明输入变量值/比较求的中间值if(bc)coutbendl;elsecoutcendl;elsecoutac)(if(ac)coutaendl;elsecoutcendl;)elsecoutbendhsystem(pause);return0;)方法二:假设变量a中存放这些数中最大的值。如不是就交换,这样就保证变量a

26、中存放的是最大值。只要比较b和c,找出他们中的较大数值即可。参考程序如下:#include预编译命令usingnamespacestd;使用名字空间intmain()(floata,b,c,d;主函数变量申明cinabc;if(ba)/输入变量值d=a;a=b;b=d;if(ca)d=c;c=a;a=d;if(bc)coutbendl;以上四行表示用a存放变量最大值elsecoutcendl;system(pause);以上两行表示输出中间值return0;1方法三:假设b是之间的数,可能的所有情况。在考虑a是中间数的所有情况,最后考虑C是中间数的所有情况。参考程序如下:#include预编译

27、命令usingnamespacestd;使用名字空间intmain()主函数Ifloata,b,c;变量申明cinabc;输入变量值if(ab&bc)coutbb&ba)coutba&ac)coutaa&ab)coutac&cb)coutcc&ca)coutc0)coutbb&bc)coutbb&ba)coutbendl;参考程序如下:#include预编译命令usingnamespacestd;使用名字空间intmain()主函数Ifloata,b,c;变量申明cinabc;/输入变量值if(a-b)*(b-c)0)coutb0)coutaendl;输出中间值elsecoutcendl;输出

28、中间值system(pause);return0;)求最大值、最小值的方法同学们可以按照这四种思路编写程序。输出结果2.323.43.4输入的三个实数3.4输出的中间值2.解析该题主要考察一元二次方程求根需注意的地方,考察学生思维的严密性。要注意的地方是:(1)需分别讨论系数a为0和不为0的情况,利用a可以区分该方程是一元一次方程还是一元二次方程。(2)判别式b*b-4*a*c计算出来后赋值给一个变量,这样引用的时候就不需要重新计算,减少了计算时间。利用b*b-4*a*c可以判断该方程有没有实根。参考程序#include预编译命令#include加入求平方根函数的头文件usingnamespa

29、cestd;使用名字空间intmain()主函数ifloata,b,c;变量申明,分别表示方程的三个参数floatxl,x2;/变量申明,分别表示方程的两根cinabc;/输入变量a,b,cfloatd=b*b-4*a*c;求判别式的值if(a=0)(该方程为一元一次方程COUt此方程为一元一次方程=0)该方程为一元二次方程cout,X1=,(-b+sqrt(d)/(2*a)x2=,(-b-sqrt(d)/(2*a)endl;else(cout此方程没有实根”关系运算符逻辑运算符,(l)a为真,Ia为假,所以&操作结果为假;(2)a&b为假,!(a&b)为真,故整体表达式为真,(3)a为真,!

30、a为假,所以&操作结果为假,(4)=左边得1,右边也是1,故等号成立。答案(2),(4)4 .解析该题考察一种多路径分支控制语句。在执行多路径分支控制时,用SWitCh语句写出的程序比用if语句写的程序更简洁、清晰。且不易出错。其中SWitCh后的表达式的类型可以是整型、字符型,但不能是实型。所以这里需要注意的地方是将条件不等式转换为整数。根据题意中奖金税的条件不等式,可以知道根据奖金的千位值就可以得到其税率。其中,千位值可以通过奖金/1000得到,再利用SWitCh来求解。参考程序#include预编译命令usingnamespacestd;使用名字空间intmain()主函数intrewa

31、rds,n;cin rewards;if(rewards = 1000)变量申明输入奖金将某一范围内的奖金转换为整数n=0;elsen=rewards/1(X)0;switch(n)根据奖金,求税率(case0:coutn*0*1000endl;break;case 1: coutn*0.03*1000endl;break;case 2: coutn*0.05*1000endl;break;case 3: coutn*0.07*1000endl;break;case 4: coutn*0.09*1000endl;break;case 5: coutn*0.12*1000endl;break;c

32、ase 6: coutn*0.16*1000endl;break;case 7: coutn*0.18*1000endl;break;case 8: coutn*0.20*1000endl;break;case 9: coutn*0.22*1000endl;break;default:coutn*0.25*1000endl;system(pause);return0;)输出结果5500输入的奖金额660/输出的奖金税5 .解析1该题考察用switch来实现运算符的判断和操作。参考程序#include预编译命令usingnamespacestd;/使用名字空间intmain()主函数inta,b

33、,d;整型变量申明charc;字符型变量申明cin a b;输入要进行运算的两数cin c;/输入运算符switch(c)/根据不同的运算符,求运算结果couta + b endl; break;case-,cout a - b endl; break;case,*cout a * b endl; break;case7f(b= 0)cout ”除数不能为0 endl;elsecouta / b endl;system(pauseM);return0;输出结果输入的运算数和运算符输出的计算结果6 .解析1月份的天数除二月外,其他都是固定的,某个月所属的季节也是固定的。二月的天数需要判断当前年份

34、是否是闰年,该题考察闰年的判断方法,不同月份的日期天数,考察学生用合适的选择语句来实现。只要满足以下两个条件其中之一即为闰年:(1)该年份能被4且能被IOO整除;(2)该年份不能被400整除。参考程序#include#include using namespace std;int main()(int year,month,days;string season;cin year month;bool leap;if (month = 2 & month = 5 & month = 8 & month = 10) season = Autumn;else预编译命令字符串的头文件使用名字空间主函数

35、整型变量申明/string类型变量申明输入年份和月份布尔变量申明,表示是否为闰年根据月份判断季节season=Winter1;if(!(year%4)&(year%100)!(year%400)根据年份判断是否为闰年leap=1;elseleap=0;switch(month)根据月份得到该月的天数(case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:if(leap)days=29;elsedays=28;J输出该月的天数和季节coutday

36、s=days,seasonis,seasonendl;system(pause);return0;输出结果20114输入的年份和月份days=30seasonisSpring输出该月的天数和季节7.解析实足年龄是指该学生从出生到现在总共经历了的年月日数。所以只需将当前日期减去学生的生日。从最低位开始,如果相减后出现负值的话,只需从高位借1即可。例如一个学生的生日是1984年7月19日,当前日期是2011年4月6日,想减后的年数是27,月数是-3,日数是-13。这里的日期是负数,我们从月份借1,日期变成-13+30=17,月数变成-3/=-4,也是负数,所以需从年份借1,月数变成4+12=8,年

37、数就变成27/=26,所以该学生的实足年龄是26岁8月17天。参考程序#include编译命令usingnamespacestd;使用名字空间intmain()主函数d= dl-d;m = ml - m;y = yl -y;if(dO)/如果日期小于0,则从月份中借一位,日期加30,月份减1inty,m,d,yl,ml,dl,age;COUl”请输入此人的出生日期:”;cinymd;CoUtVV”请输入当前日期:“;cinylmldl;inty,m,d;变量申明提示信息输入学生的出生年月日输出提示信息输入当前的日期变量申明输出出生日期和当前日期的差距d=d+30;m-;Iif(m0)如果月份小

38、于0,则从年份中借一位,月份加12,年份减1m=m12;y-;)COUt年y月:vm日:vdendl;输出实足年月日SyStem(pause);return0;)输出结果请输入此人的出生日期:1947724输入的出生日期请输入当前日期201145输入的当前日期年:63月:8日:11输出的实足年龄8解析该题考察多条件选择语句的运用。参考程序预编译命令#includeusingnamespace std;int main()(int amount;float discount;cin amount;if(amount =200&amount=500&amountc&b+ca&a+cb就能构成三角形,因为abv

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号