c++模拟卷及答案.doc_第1页
c++模拟卷及答案.doc_第2页
c++模拟卷及答案.doc_第3页
c++模拟卷及答案.doc_第4页
c++模拟卷及答案.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

程序设计基础模拟试题A年级、专业: 考试日期: 年 月 日班级:_学号:_姓名:_题号一二三四五六总分得分评卷人一,判断题(每题1分,共10分)(1) 如果x的当前值为5,则执行语句“if(x=3)x=x+5”后,x的值仍为5。错,if(x=3)而不是if(x=3),所以这是有区别的。前者进行判断之前先做了赋值x=3,然后判断x是否为真(若x是非零,为真)显然是真,接着是进行加法运算x=8(2) 程序调试就是找出并改正C源程序中的语法错误。错,不仅仅是语法错误,也有算法错误等(3) C+源程序编译后,即生成后缀为.EXE的可执行文件。错,在连接后才产生exe(4) 执行语句“for(i=1;i=c*d ,因为运算符优先级,所以首先计算的是:c*dvuo,请参照预算符的优先级(10) 设a=3,则执行a+=a*=5后,a的值为18错,这又是优先级问题 +=和*=是同一等级,而且是从右至左的,所以先是a*=5,a=15,然后a+=a,所以a是30 二,单选题(每题2分,共20分)1. 下列语句定义x为指向int型变量a的指针,其中哪一个是正确的_B_A、int a,*a=a; B、int a,*x=&a; C、int *x=&a,a; D、int a,x=a;2声明语句为“char a10”,执行下列语句后的输出结果为_A_printf(“%d,%dn”,strcmp(“abc”,”aBc”),strlen(strcpy(a,”windows”);A、1,7 B、1,10 C、32,7 D、32,10介绍:l strcat(char,const char) 字符串连接函数,将第二个字符数组中的字符串连接到前面字符数组的字符串的后面l strcpy(char,const char) 字符串复制函数,将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖l strcmp(const char,const char) 字符串比较函数,字符串1字符串2,函数值为0; 函数值为一正整数; 函数值为一负数。l strlen(const char) 字符串长度函数,其函数值为字符串中的实际长度,不包括0在内。3若变量已经被正确定义,则语句_A_是不正确的。A、p=&(x+1) B、p=&xC、p=&x+1 D、p=&x;p+;解析:显然有&这个符号是取地址的意思,所以P一定是一个指针,而对于给指针赋值地址时,应该是把一个变量的地址给p,而一个值是不能的&还可以是“引用”,例如:int a; int &b=a; 声明b是a的引用,即b是a的别名。4执行语句for(s=1,i=0,j=0;i5;i+,j+)s=s+i*j;后s的值是_A_A、31 B、30 C、56 D、15解析:此循环条件是i66?65:67);后输出结果为_C_A、a ,65 B、97,a C、97,A D、97,C解析;这是C语言中的输出形式,d表示整型int ,c表示字符型char,所以根据这个,输出的是a的ASCII码,即97, a66?65:67是一个条件运算,条件为真所以输出的是ASCII码为67的字符即A。注:(ab)?a:b 如果条件(ab)为真,则条件表达式的值就取“?”后面的值,即a,否则取b。6不正确的赋值或赋初值的方式是_C_。A、char *p=”hello”; B、char s10=”hello”C、char s10;s=”hello”; D、char s5=h,e,l,l,o;解析:对于其他的选项的赋初值都是正确的,而对于C,不能用赋值语句对整个数组赋值,但是在字符串的初始化中可以。例如:char str=“I am happy”;char str=“I am happy”;char str=I, ,a,m, ,h,a,p,p,y;这都是可以的而对以A选项,他定义的是一个字符指针,所以当然是可以把一个常量的地址给他。7设有定义语句“int s =2,4,6,8,10,*p=s;”,则值为8的表达式是_D_。A、*p+3 B、*p+4 C、*(p+4) D、*(s+3)解析:这是有关数组与指针用指针和数组关系有以下一些:int a10;int *p;p=a;与p=a0;等价,都是将首元素的地址赋值给指针(1)p+i和a+i就是ai的地址(2)*(p+i)或*(a+i)都是ai,即p+i或a+i所指向的数组元素(3)指向数组元素的指针变量也可以带下标,如pi与*(p+i)等价对于多维数组与指针,表示的形式更加复杂,但是也是从一维数组中演化过来,由于维数多了,两者的表示又是相通的,所以形式多样,需要仔细判断。对于二维数组,*(*(a+0)+1)表示a018执行下列程序段后,x的值是_B_。int a=8,b=7,c=6,x=1;if(ab)if(b7)if(c8)x=2;else x=3;A、0 B、1 C、2 D、3解析:将整段代码分开:int a=8,b=7,c=6,x=1;if(ab)if(b7)if(c8)x=2;else x=3;这就是if与else的配对问题:在if语句的嵌套中:“else总是与它上面最近的、且未配对的if配对”。9下面函数的功能是_B_。Int fun(char*x)char *y=x; while(*y+); return(y-x-1);0A、比较两字符串的大小。 B、求字符串的长度。C、将字符串x复制到字符串y。 D、将字符串x连接到字符串y 后。解析:本题有几个要点,这个函数的参数用了指针,当一个字符串中的一些没有被赋值的元素为空,(即0)。本题就用了后面的这一点来判断该字符串是否结束,若为0,则表明是结尾了,但是长度的话要减去1。由此又想起了,在使用字符串时,要常注意的一件事就是字符串的长度,在定义时大小要实际的大小1,这样就可以减少相关的一些操作的错误,例如,在整个字符串输出时,是根据0结束的,当碰到0就结束,不论后面是否还有。10函数调用语句func(exp1,exp2),(exp3,exp4,exp5);中实参的个数为_B_。A、1 B、2 C、4 D、5解析:从该声明中来看,有两个括号,中间有一个逗号分开,所以是两个参数,至于括号里面的语句,这是逗号运算符,所以是往下进行,到最后。即func(exp2,exp5);三,程序改错 (每题5分,共10分)指出错误所在行号并改正1, 以下程序为从数组中找其中的最大值,请找出错误所在行号并改正。void main()1. int a=1,3,5,12,8,9,0,44,25,10;2. int i ; j ;3. max=99;4. for(i=0,ia i )max=a i ;6. printf(“max=%d,max”);7. 解析:首先是语法错误:1、 在定义数组时,它的分号是在语句的最后2、 在定义同一类型的多个变量时,它们之间是用逗号隔开3、 max在用之前没有定义4、 for语句的错误,之间不应该是逗号,而应该是分号然后是算法错误:1、 此算法是要找出最大值,所以需要全部扫描一遍,就需要一个变量去比较,就是max,但是它的初始值竟然不是数组里的一个值,是其他的,这就超出了范围,所以一般是把它初始为a02、 这个循环的条件语句也有错误,数组总共就10个元素,但是循环要在第十一个的时候结束,这就带来了未知数3、 还有就是循环中的元素大小判断,应该是把比max大的赋值给max,而不是比max小的改正后的代码:int a=1,3,5,12,8,9,0,44,25,10;int i,j;int max=a0;for(i=0;i10;i+)if(max=200;m+)4. k=sqrt(m);5. for(i=0;i=k;i+)6. if(m%i=0)continue;7. if(i=k)coutmendl;8. 解析:首先是语法错误:1、 在判断中的等于是用“=”表示,而不是“”2、 这个主函数中的第一个for循环其实是要包含以下的内容的,但是缺少了一个大括号其次是算法错误:1、 在算法中是以如果i增加到k都没有时就表明是素数,但是其实是i=k+1时内循环才结束,也就是说下面的if(i=k)的判断变得没有意义了,所以要判断i是否等于k+12、 在内循环中,判断是否有整数可以整除m的if语句也有错误,在于若真,执行语句错误,(continue的作用是在循环中忽略其后面的所有语句,继续循环;而对于break的作用是用在循环或者switch中,跳出该循环。)在本题中要用break,只要有一个可以整除就不符合,就可以结束3、 内循环中i的初始值有误,不可能为0。因为素数是不能被2根号m中的任何一个整除,所以可以从2开始改正后的代码:int m,k,i;for(m=100;m=200;m+)k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)break;if(i=k+1)coutmendl;注:类似的有关找素数的代码在C+程序设计P83有四, 程序填空 (10分)下列程序将数组中的N个数按相反顺序存放void inv(_char a,int x_)int temp , i , j , m=_x/2_;for(i=0;i=m;i+)j=_x-i-1_;temp=xi;_xi=xj_;xj=temp; main()int a10=3,7,9,11,0,6,7,5,4,2;inv(a,10);printf(“the inverted array:n”);for(i=0;i10;i+)printf(“%3d”,_ai_);解析:本题是主要考函数。函数是一个重要的考点,涉及的内容也是很多,但是重要的是:函数的是否需要声明(定义在main函数之前,不需要;在之后,需要在main函数前声明)、函数的参数(类型,个数,是形参还是引用)、函数的返回值类型、函数的重载、有默认参数的函数(默认参数从右至左)等。本题main函数中有调用该函数的语句:inv(a,10);从中可以知道,这个函数是有两个参数,第一个是一个数组,第二个是一个整数,所以:void inv(int x,int len);而此函数的作用是反序,这需要算法,就是把该数组的前一半的元素与对称的另一半交换值。代码:void inv(int x,int len)int temp , i , j , m=(len-1)/2;for(i=0;i=m;i+)j=len-i-1;/对应的位置temp=xi;xi=xj;xj=temp; int main()int a10=3,7,9,11,0,6,7,5,4,2;inv(a,10);printf(the inverted array:n);for(int i=0;i=A)&(*p=Z)*p=*p+32; else *p=*p-32; p+; coutaendl;解析:根据对整个程序的阅读,主要是一个循环,而作用是如果p指向的数组元素是大写的字母,就把该元素的值加32,也就是变成了小写;如果是小写,就减去32,也就变成了大写。把整个字符串都这样扫描一遍。所以这个函数是大小写互换。结果:zHEjIANGhANGzHOU2,int fun(int a)static int b=2;return a+b+;int main()int k,y;for(k=1;k4;k+)y=fun(k);coutyendl;解析:这个函数代码相当简单。主要难点:static的作用。在这里它定义的是一个局部静态变量,所以b的值是不会变的。结果:3573,main()char *s =“pen” , “book” , “eraser” ;int i ;for(i=0;i3;i+)printf(“%s,”,*(s+i)+1);printf(“%cn”,*(s+i);解析:这里就是考指针与二维数组。用指针表示数组 *(*(p+i)+k)=aik;所以在这里,就用到了。在第一个printf()中,*(s+i)+1表示的是地址,即ai1的地址,所以输出的是第一个元素之后的字符串。而对于第二个printf()来说,只是输出一个字符,ai0。所以得到的结果是字符串的第一个字符放到最后,并在之前输出一个逗号。结果:en,pook,braser,e4,int main()int m=18,s=0;do switch(m%7) case 2:m/=2;s+=2;break; case 3:m/=3;s+=3;break; case 5:m/=5;s+=5;break; default:m-;s-; ; couts0后,进行第二次,取余得3,所以m/=3;s+=3,得m=5,s=2;继续判断m0,进行第三次,取余得5,所以m/=5;s+=5,得m=1,s=7;m0,所以第四次,取余得1,属于default,即m-,s得m=0,s=6,判断后m0,所以退出循环。结果:-1276总结,对于阅读程序,其实相当简单,只要带入,执行几句,得出规律。有一些可能执行的次数并不多,所以可以直接进行。六, 程序设计题 (每题10分,共30分)1,设计程序:根据以下对应关系,对输入的x 求相应的y值。y=x-1 x=-1y=2x -1x2y=x(x+2) 2=x=10解析:此题相当简单,只是要判断x的范围,进行不同的运算,所以只需要几个判断语句就行。代码:#include using namespace std;int main()int x,y;cinx;if(x=-1)y=x-1;else if(x2)y=2*x;else if(x=10)y=x*(x+2);coutyendl;return 0;左2,编一个函数sum( ),统计3X3矩阵中左右对角线上元素之和。要求通过主函数输入矩阵数据并输出结果。解析:所谓的矩阵就类似于二维数组,呈行列。如右这是44矩阵,两条斜线是左右对角线所以需要用二维数组来实现这个,然后就是要考虑怎样实现这个函数,对于左对角线,

温馨提示

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

评论

0/150

提交评论