2010上半年计算机等考二级C语言真题及答案.doc_第1页
2010上半年计算机等考二级C语言真题及答案.doc_第2页
2010上半年计算机等考二级C语言真题及答案.doc_第3页
2010上半年计算机等考二级C语言真题及答案.doc_第4页
2010上半年计算机等考二级C语言真题及答案.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+语言程序设计第一次作业讲评说明:本次作业对应教材第一、二、三章的内容。【讲评】本章主要考核大家对C+语言的基本概念、基本数据类型和表达式、流程控制的掌握程度,其中有一些需要记忆的概念,但多数问题还是需要理解的,希望通过作业讲评能够帮助大家把学习中的难题一一解决。下面是对部分问题的讲评。一、填空题1C+语言中的每条基本语句以 ; 作为结束符,每条复合语句以 作为结束符。2用于输出表达式值的标准输出流对象是 cout ,用于从键盘上为变量输入值的标准输入流对象是 cin 。3当不需要函数返回任何值时,则应把该函数类型定义为 void 。4执行“cout143+18=143+18endl;”语句后得到的输出结果为 143+18=161 。【讲评】这里143、+、18和=分别是整型变量、字符常量、整型变量和字符常量,在通过cout输出语句时直接将其值输出,而143+18是一个表达式,需要计算加法后输出其值。5执行“cout“ning”“chen”38endl;”语句后得到的输出结果为 ningchen38 。6在每个C+程序中都必须包含有这样一个函数,该函数的函数名为 main 。7C+源程序文件的缺省扩展名为 .cpp ,由C+源程序文件编译而成的目标文件的缺省扩展名为 .obj ,由C+目标文件连接而成的可执行文件的缺省扩展名为 .exe 。8程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用 空格 或 回车 符号作为分隔符。9十进制数25表示成符合C+语言规则的八进制和十六进制数分别为 031 和 0x19 符号。10在C+语言中,用转义字符序列 n 或操纵符 endl 表示输出一个换行符。11执行“coutchar(b+2)endl;”语句后得到的输出结果为 d 。【讲评】首先需要理解这个表达式的含义,在表达式char(b+2)中,需要先处理括号内的表达式,b+2是字符型和整型数据相加,需要自动转换类型即将字符型b转换为整型数据,即b所对应的ASCII码(书中附录在351页)为98,计算98+2的值为100,那么现在就要处理char(100)的问题了,这是一个强制类型转换,需要把100转换为char字符型,那继续找到ASCII码表中,100所对应的字符是d。答题技巧:这个题目通过两次类型转换,字符到整型和整型到字符,这两个转换正好互逆,所以又恢复到最初的字符型,因此在答题时直接根据当前的字符常量b的值直接向后移动两位,就能得到结果为d。12执行“coutchar(K-3)endl;”语句后得到的输出结果为 H 。【讲评】用上面的答题技巧来做这个题看看结果是否跟你的一致。13已知AZ的ASCII码为6590,当执行“int x=H+5;”语句后x的值为 77 。14已知AZ的ASCII码为6590,当执行“char ch=16*5+2;coutchendl;语句序列后,得到的输出结果为 R 。15假定一个枚举类型的定义为“enum RAxa,xb,xc,xd;”,则执行“cout”xc=”xcendl;”语句得到的输出结果为 xc=2 。【讲评】枚举中的每个符号依次与0,1,2,3.对应,因此上面定义的枚举RA中的符号xa,xb,xc,xd依次对应0,1,2,3。16假定一个枚举类型的定义为“enum RBab,ac=3,ad,aex=ad;”则x的值为 4 。【讲评】可以用=为一个符号规定任意的对应整数,该整数增1就是下一个符号默认的对应整数。因此上面定义的枚举RB中的符号ab,ac,ad,ae依次对应0,3,4,5。17Char、short和int类型的大小分别为 1字节 、 2字节 和 4字节 。18float和double类型的大小分别为 4字节 和 8字节 。19十进制数128和-3.26的类型分别为 int 和 double 。20若需要定义一个标识符常量,并且使C+能够进行类型检查,则应在定义语句的开始用保留字 const 。【讲评】#define命令和const都能起到定义一个标识符常量的作用,但define没有类型检查。格式举例:const int MaxSize=100;/语句定义了一个整型符号常量MaxSize,用它代表整数100#define ABC 10 /宏命令定义了一个符号常量ABC,用它代表整数1021使用const语句定义一个标识符常量时,则必须对它同时进行 初始化 。22执行“int x=45,y=16;coutx/yx%yz的相反表达式为 x+y5& x10的相反表达式 x=10 。34逻辑表达式ab | | b= =5的相反表达式为 ay 和x=y的逻辑值分别为 false 和 true 。36假定x=5,则执行“a=(x? 10:4*2);”语句后a的值为 10 。【讲评】条件运算符(?:)是C+中唯一一个三目运算符,其使用格式为: ? : 当计算由条件运算符构成的表达式时,首先计算,若其值非0(为真)则计算出的值,这个值就是整个表达式的值;若的值为0(为假),则计算出的值,它就是整个表达式的值。本例中赋值运算的右边表达式x? 10:4*2就是一个条件运算,若x为真则把10的值作为表达式的值,否则把4*2的值作为表达式的值,因为这里x=5非0所以为真,因此表达式取值为10,所以a=1037假定a=5,则条件表达式“a= =0? 10:20”的值为 20 。38执行“typedef int DataType;”语句后,在使用int定义整型变量的地方都可以使用 DataType 定义整型变量。39设x和y均为bool量,x & & y为真的条件是 x、y都为true 。40设x和y均为bool量,则x | | y为假的条件是 x、y都为false 。二、写出下列程序运行后的输出结果1#include void SB (char ch) switch (ch) case A :case a: cout ”well!” ; break; case B: case b: cout ”good!” ;break; case C: case c: cout ”pass!” ;break; default : cout “bad!” ; break;void main () char al=b,a2=c,a3=f; SB(al);SB(a2);SB(a3);SB(A); cout endl;good!pass!bad!well!【讲评】本例是多分支语句的应用,这个程序包括一个子函数void SB (char ch)和主函数void main (),先分析子函数的功能:根据参数ch的值得到不同的输出结果。若ch的值为A 或a则输出一个字符串”well!”,并跳出分支,结束子函数返回主函数。若ch的值为B 或b则输出一个字符串”good!”,并跳出分支,结束子函数返回主函数。若ch的值为C 或c则输出一个字符串”pass!”,并跳出分支,结束子函数返回主函数。若ch的值不满足以上任一种情况,则输出一个字符串”bad!”,并跳出分支,结束子函数返回主函数。再回到主函数中,看程序的执行过程:首先,分别将a1,a2,a3赋值其次,先执行SB(al);这是一个函数调用,即调用前面介绍的子函数,将a1的值赋值给ch,然后就按照上面讲的功能得到一个输出结果。因为a1=b;所以结果输出good!继续执行SB(a2);这又是一个函数调用,方法同上,你可以自己分析后面的结果。注意:因为本例中每次函数调用的输出结果中没有输出换行,所以几个输出结果都在一行,注意具体问题具体分析。2、#include #includedouble SD(int a,int b,char op) double x; switch (op) case +:x=double(a) + b; break; case -: x=double (a) b; break; case * x=double (a) * b;break; case /:if (b) x=double (a)/b; else exit(1); break; default:exit(1); return x; void main ()int x=20 ,y=12;cout SD(x,y,-) ;cout SD(x,y,*) ;cout SD(x+y,y-2,/)endl;8 240 3.2【讲评】本例依然是多分支语句的应用,不再详述,只说一下子函数的功能,后面的结果自己分析。这个子函数为double SD(int a,int b,char op),它有三个参数分别是a,b和op,他们所担当的角色是运算数和运算符。根据op接收不同的字符进行不同的运算。若op的值为字符+,则对a和b所表示的数值进行加法运算,并退出分支;若op的值为字符-,则对a和b所表示的数值进行减法运算,并退出分支;若op的值为字符*,则对a和b所表示的数值进行乘法运算,并退出分支;若op的值为字符/,则对a和b所表示的数值进行除法(这里不是整除)运算,并退出分支;若op的值不满足以上任一种情况,则直接退出分支。返回x的值到主函数。3、#include void main () int s=0; for (int I=1;I6;I+) s+=I*I; cout ”s=”sendl;s=55【讲评】本例是for循环的应用。循环体只有一个语句即s+=I*I;主函数的功能是进行累加运算,s作为一个累加器赋初值为0,循环变量I的初值为1,进行I6判断,条件为真,进入循环体第一次进入循环进行s+=I*I的运算,这里是一个复合运算即s=s+I*I,那么此时s=0+1*1结果为1,进行I+的运算,I值为2,进行I6判断,条件为真,再次进入循环体第二次进入循环进行s+=I*I的运算,那么此时s=1+2*2结果为5,进行I+的运算,I值为3,进行I6判断,条件为真,再次进入循环体第三次进入循环进行s+=I*I的运算,那么此时s=5+3*3结果为14,进行I+的运算,I值为4,进行I6判断,条件为真,再次进入循环体第四次进入循环进行s+=I*I的运算,那么此时s=14+4*4结果为30,进行I+的运算,I值为5,进行I6判断,条件为真,再次进入循环体第五次进入循环进行s+=I*I的运算,那么此时s=30+5*5结果为55,进行I+的运算,I值为6,进行I6判断,条件为假,不能进入循环体,结束循环。运行输出语句,输出字符串“s=”和s的值55。4、# include void main () int s=0; for (int i=1;i+) if (s50) break; if (i%3= =0) s+=i; cout ”i,s=”i”,”s50吗,条件为假,不结束循环,判断i%3的结果为0吗,条件为假,不进行累加运算,进行i+;i=2第二次进入循环,此时s=0,判断s50吗,条件为假,不结束循环,判断i%3的结果为0吗,条件为假,不进行累加运算,进行i+;i=3第三次进入循环,此时s=0,判断s50吗,条件为假,不结束循环,判断i%3的结果为0吗,条件为真,进行累加运算,s=0+3,进行i+;i=4第三次进入循环,此时s=3,判断s50吗,条件为假,不结束循环,判断i%3的结果为0吗,条件为假,不进行累加运算,进行i+;后面的可以此类推,但更简单的办法是看出了循环的功能是将3的倍数进行累加,就直接判断临近s上限的情况。我们可大致推出累加情况s=3+6+9+12+15此时s值为45,i值为15,继续判断3的下一个倍数18,即i=18时,进入循环,此时判断s50吗,条件为假,不结束循环,计算s=45+18,s值为63,进行i+,i=19,继续进入循环,因此时判断s50吗,结果为真,则执行break语句,强制结束循环。输出结果为i值为19,s值为63。5、# include void main ()int s1=0,s2=0;for (int I=0;I10;I+) if (I%2) s1+=I; else s2 +=I;cout s1 s2endl;25 20【讲评】本例依然是for循环的应用。注意循环体是由一对if和else组成的,虽然没有用括起来,但是他们仍旧是一个整体。这个小程序的功能是用两个累加器s1和s2,分别累加10以内的奇数和偶数之和,同学们自己分析一下if语句,看看哪个是奇数累加器,哪个是偶数累加器。6、# include void main ()int n=10,y=1;while (n-)y+;+y;cout ”y*y=”y*yendl;y*y=441【讲评】本例是while循环的应用。注意这里循环条件n-的等价表达式为(n-)!=0,这个地方特别容易乱,你应注意到n-这个表达式,使得n减1,但求出的表达式的值是减法前的n的值下面给出几次循环过程:n=10,进行n-操作,使得n值为9,但要判断10是否为非0,结果为真,第一次进入循环,进行两次y的增1操作,即y=y+2此时y=3;n=9,进行n-操作,使得n值为8,但要判断9是否为非0,结果为真,第二次进入循环,进行y=y+2此时y=5;中间过程省去.n=1,进行n-操作,使得n值为0,但要判断1是否为非0,结果为真,第十次进入循环,进行y=y+2此时y=21;n=0,进行n-操作,使得n值为-1,但要判断0是否为非0,结果为假,结束循环。输出结果为 21*21的值三、写出下列每个函数的功能1include int SA(int a,int b) if(ab) return 1; else if(a= =b) return 0; else return 1;比较两个整数a和b的大小,若ab则返回1,若 a=b则返回0,若 a=b & a=c) return a;if(b=a & b=c) return b;if(c=a & c=b) return c;求出a,b,c三个数中的最大值并返回。【讲评】这个程序中用了三个if语句实现判断,注意这里没有else,那么每个if都要判断。3int SE(int n) / /n为大于等于1的整数int x;cinx;if(n= =1) return x;int m=x;while(n) cinx; m+=x;return m;计算并返回从键盘输入的n个整数的和。【讲评】这个小程序用n接收由主函数传递来的的个数,即若n为5,则需要从键盘上输入5个整数进行累加,若n为1,则需要从键盘上输入1个数不用累加了。变量x用于从键盘接受输入的值,变量m是累加器。循环结束后返回累计器m的值。4double SF (double x,int n) / /n为大于等于0的整数 double p=1,s=1; for(int i=1;i=n;i+ +) p* =x;s+ =p/(i+1); return s; 计算并返回的值。【讲评】这个题目在给出结果时看看参考答案的方式很直观。5includebool SG(int x) / /x为大于等于2的整数 int a=int(sqrt(x);/ /取x的平方根 int i=2; while(i=a) if(x%i= =0) break; i+ +; if(i=a)return 0;else return 1;判断整数x是否素数,若x是素数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论