国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共108题)_第1页
国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共108题)_第2页
国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共108题)_第3页
国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共108题)_第4页
国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共108题)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷1(共4套)(共108题)国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、if语句的语法格式可描述为:格式1=if(<条件>)<语句>或格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是()。A、<条件>部分可以是一个if语句,例如if(if(a=0)…)…B、<语句>部分可以是一个if语句,例如if(…)if(…)…C、如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变D、<语句>部分可以是一个循环语句,例如if(…)while(…)…标准答案:A知识点解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。2、若x和y是程序中的两个整型变量,则下列if语句中正确的是()。A、if(x==0)y=1;elsey=2;B、if(x==0)theny=1elsey=2;C、if(x==0)y=1elsey=2;D、if(x==0)y=1;elsey=2;标准答案:A知识点解析:ifelse语句的形式为:if(<条件>)<语句1>else<语句2>所以符合以上形式的ifelse语句为选项A)。3、+下列语句中,与语句“n=(a>b?(b>c?1:0):0);”的功能等价的是()。A、if(a<=b)n=0;B、if((a>b)‖(b>c))n=1;elsen=0;C、if(a>b)if(b>c)n=1;elsen=0;elsen=0;D、if(a>b)n=1;elseif(b<=c)n=1;elseif(b>c)n=1;elsen=0;标准答案:C知识点解析:条件表达式(a>b?(b>c?1:0):0)的含义是,如果a>b成立,则此表达式的值等于条件表达式(b>c?1:0)的值,否则其值等于0。而条件表达式(b>c?1:0)的含义是,如果b>c成立,其值等于1,否则其值等于0。4、有如下程序#include<iostream>usingnamespacestd;intmain(){chara;cin>>a;if(a=’*’)cout<<"***"<<endl;elsecout<<"###"<<endl;return0;}输入字符+时,程序的运行结果是()。A、***B、###C、***###D、无输出标准答案:A知识点解析:本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算if后表达式的值,如果表达式的值为非零,则执行if后面的分支,否则执行与其匹配的else后面的分支。本题执行时虽然输入变量a的值为‘+’,但是在执行if后括号内表达式(a=’*’)的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值’*’,其ASCII码的值非零,执行if后面的输出语句“***”后回车。5、执行语句序列()。inti=0;while(i<25)i+=3;cout<<i;输出结果是A、24B、25C、27D、28标准答案:C知识点解析:此题考查的是循环语句while的使用。i为3的倍数,当i=24时,i<25,执行while的循环体i+=3,则i=27,不满足i<25的条件,结束循环。6、有如下程序:intx=3;do{x-=2;cout<<x}while(!(--x));执行这个程序的输出结果是()。A、1B、30C、1-2D、死循环标准答案:C知识点解析:此题考查的是do-while循环语句。do-while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x-=2”,while语句中“--x”即x为0,取反为非0,循环继续执行;执行“x-=2”和“--x”取反后,循环结束程序退出。7、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>1:--i)cout<<’*’;A、48B、49C、50D、51标准答案:B知识点解析:此题考查的是for循环语句。For循环中i从50开始逐渐递减,直到i=1时退出,而此时没有机会执行到循环体,因此一共执行了49次循环体,所以最终输出的是49个字符‘*’。8、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>1;I-=2)cout<<’*’;A、24B、25C、26D、50标准答案:B知识点解析:此题考查的是for循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个‘*’。9、有如下程序:#include<iostream>usingnamespacestd;intmain(){intsum;for(inti=0;i<6;i+=3){sum=1;for(intj=i;j<6;j++)sum+=j;}cout<<sum<<endl;return0;}运行时的输出结果是()。A、3B、10C、12D、15标准答案:D知识点解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后sum和j都会被重新赋值,所以外层第二次循环如下:此时i=3,sum=3内层循环开始如下:j=3,j<6,sum=6;i=4,j<6,sum=10,j=5,j<6,sum=15,j=6退出内层循环。得到sum=15。10、有如下程序段:inti=5;while(inti=0){cout<<’*’;i--;}运行时输出“*”的个数是()。A、0+B、1C、5D、无穷标准答案:A知识点解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”,的个数是0。11、有如下程序段:inti=1;while(1){i++;if(i==10)break;if(i%2==0)cout<<’*’;}执行这个程序段输出字符*的个数是()。A、10B、3C、4D、5标准答案:C知识点解析:这段程序代码的功能是计算在1~10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’,共有4个偶数,所以共输出4个‘*’。12、下列循环语句中有语法错误的是()。A、inti;for(i=1;i<10;i++)cout<<’*’;B、inti,j;for(i=1,j=0;i<10;i++,j++)cout<<’*’;C、inti=0;for(;i<10;i++)cout<<’*’;D、for(1)cout<<’*’;标准答案:D知识点解析:这道题目主要考查for循环语句的语法。for循环语句的语法格式如下:for(<表达式1>;<表达式2>;<表达式3>)<语句>,在三个表达式都省略的情况下,其格式如下for(;;),这时for循环语句是一个死循环。13、有如下程序:#include<iostrearn>usingnamespacestd;intmain(){inta[6]={23,15,64,33,40,58};ints1,s2;s1=s2=a[0];for(int*p=a+1;p<a+6;p++){if(s1>*p)s1=*p;if(s2<*p)s2=*p;}cout<<s1+s2<<endl;return0;}运行时的输出结果是()。A、23B、58C、64D、79标准答案:D知识点解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量s1;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量s1,s2的值不会再发生变化,最终值为15+64=79。14、有如下程序:#include<iostrearn>usingnamespacestd;intmain(){inti,s=0;for(i=1;s<20;i+=2)s+=i*i;cout<<i<<endl;return0;}运行这个程序的输出结果是()。A、3B、5C、7D、9标准答案:C知识点解析:在这段程序中for循环共执行3次,每次循环变量i的值增2,在执行第三次循环语句时,变量s的值等于25,大于20而退出循环,此时再执行循环变量i加2运算,所以最后变量i的值等于7。15、要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是()。A、intvect[]={30,50,-88};B、intvect[]={30,50,-88,0,0};C、intvect[5]={30,50,-88};D、intvect[5]={30,50,-88,0,0};标准答案:A知识点解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。16、已知数组arr的定义如下:.intarr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()。A、cout<<arr+1<<endl;B、cout<<*(arr+1)<<endl;C、cout<<arr[1]<<endl;D、cout<<*art<<endl;标准答案:D知识点解析:因为一维数组arr[5]的首地址是第一数组元素的地址,所以选项D)中,输出*arr的值就是数组flit[5]中第一数组元素1。其他选项都输出数组arr[5]的第二元素2。17、要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是()。A、intx[3]={0,0,0};B、intx[]={0};C、statieintx[3]={0};D、intx[]={0,0,0};标准答案:B知识点解析:当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项B)定义数组x时,没有给出数组的大小,初始化时只给出了一个元素0。所以数组x只包含一个元素为0的元素。18、有如下语句序列:charstr[10];cin>>str;当从键盘输入"Ilovethisgame"时,str中的字符串是()。A、IlovethisgameB、IlovethiC、IloveD、I标准答案:D知识点解析:由于字符\0作为字符串的结束标志,所以当从键盘上输入“Ilovethisgame”时,只把字母I输入字符串str。19、字符串“a+b=12\n\t”的长度为()。A、12B、10C、8D、6标准答案:C知识点解析:题目给出的字符串含有7个字符,再加字符串的结束字符,所以共8个字符。20、下列语句中,错误的是()。A、constintbuffer=256;B、constdouble*point;C、intconstbuffer=256;D、double*constpoint;标准答案:D知识点解析:此题考查的是常指针和指针常量的概念。常指针是指向一个常量的指针变量,指针自身的内容可以改变但指针指向的内容不可以改变;指针常量是一个常量,即不能修改指针自身的内容,但可以通过指针修改其所指向的内容。D选项中指针常量point没有初始化,编译无法通过。21、语句int*p=&k;定义了指针p,与这个语句等效的语句序列是()。A、int*p;p=&k;B、int*p;p=k;C、int*p;*p=&k;D、int*p;*p==k标准答案:A知识点解析:此题考查的是指针的赋值。题目中的语句int*p=&k;定义了一个int类型的指针p,并将变量k的地址&k赋给指针p。所以等效语句是:int*p;p=&k;22、有如下定义:inta[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5的是()。A、a[2]B、a[3]C、*(p+2)D、*p+4标准答案:B知识点解析:此题考查的是指针引用数组元素。B选项中,a[3]是数组的第四个元素,即7;其它选项的引用均可得到5。23、下列语句中,正确的是()。A、char*myString="Hello-World!";B、charmyString="Hello-World!";C、charmyString[11]:="Hello-World!";D、charmyString[12]="Hello-World!";标准答案:A知识点解析:对于B来说,会造成溢出,对于C和D来说同样如此,因为“Hello-world!”一个是12个字符组成,加上空字符一共13个,所以都会造成溢出,只有A是将字符串的地址赋给字符型指针。24、下列定义语句中,错误的是()。A、intpx*;B、char*acp[10];C、char(*pac)[10];D、int(*p)();标准答案:A知识点解析:指针变量声明的一般形式为:<数据类型>*<变量名>,在选项A)中,*放在变量名的后面,所以是错误的。25、有如下程序段:inti=0,j=1;int&r=i;//①r=j;//②in*p=&i;//③*p=&r;//④其中会产生编译错误的语句是()。A、④B、③C、②D、①标准答案:A知识点解析:此题考查的是指针和引用。本题中,语句①是一条合法的引用声明语句,使得变量i被r引用;语句②通过引用r将变量j的值赋给变量i;语句③声明了指针变量p,并初始化指向变量i;语句④中*p代表了变量i的值,要将&r赋给*p,这会使编译器产生类型不符的错误提示。国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷第2套一、选择题(本题共27题,每题1.0分,共27分。)1、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){charstr[100],*p;cout<<"Pleaseinputastring:";cin;str;p=str;for(inti=0;*p!=’\0’;p++,i++);cout<<"i"<<endl;return0;}运行这个程序时,若输入字符串为:abcdefgabcd则输出结果是()。A、7B、12C、13D、100标准答案:A知识点解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第一个非空白字符开始到下一个空白字符结束”,而输入数据为abcdefgabcd,其中abcdefg后有空格。所以输入后str中的字符串为“abcdefg”:主函数中接下来for语句的作用是计算字符串p的长度,故最终输出字符串“abcdefg”的长度7。2、if语句的语法格式可描述为:格式1:if(<条件>)<语句>或格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是()。A、<条件>部分可以是一个if语句,例如if(if(a==0)…)…B、<语句>部分可以是一个if语句,例如if(…)if(…)…C、如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变D、<语句>部分可以是一个循环语句,例如if(…)while(…)…标准答案:A知识点解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。3、若x和y是程序中的两个整型变量,则下列if语句中正确的是()。A、if(x==0)y=1;elsey=2;B、if(x==0)theny=1elsey=2;C、if(x=0)y=1elsey=2;D、if(x=0)y=1;elsey=2;标准答案:A知识点解析:ifelse语句的形式为:if(<条件>)<语句1>else<语句2>所以符合以上形式的ifelse语句为选项A)。4、执行语句序列()。inti=0;while(i<25)i+=3;cout<<i;输出结果是A、24B、25C、27D、28标准答案:C知识点解析:此题考查的是循环语句while的使用。i为3的倍数,当i=24时,i<25,执行while的循环体1+一3,则1=27,不满足j<25的条件,结束循环。5、有如下程序:intx=3;do{x一=2;cout<<x,}while(!(一x));执行这个程序的输出结果是()。A、1B、30C、1一2D、死循环标准答案:C知识点解析:此题考查的是do一while循环语句。do一while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x一=2”,while语句中“一一x”即x为0,取反为非0,循环继续执行;执行“x一=2”和“一一x”取反后,循环结束程序退出。6、执行下列语句段后,输出字符“*”的个数是()。for(intl=50;i>1:一i)cout<<’*’;A、48B、49C、50D、51标准答案:B知识点解析:此题考查的是for循环语句。For循环中i从50开始逐渐递减,直到i=1时退出,而此时没有机会执行到循环体,因此一共执行了49次循环体,所以最终输出的是49个字符‘*’。7、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;1>1;I一=2)cout<<’*’;A、24B、25C、26D、50标准答案:B知识点解析:此题考查的是for循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个’*’。8、有如下程序段:int1=5;while(inti=0){cout<<’*’;i--;)运行时输出“*”的个数是()。A、0B、1C、5D、无穷标准答案:A知识点解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”的个数是0。9、有如下程序段:inti=1,while(1){i++;if(i==10)break;if(i%2==0)cout<<’*’;}执行这个程序段输出字符*的个数是()。A、10B、3C、4D、5标准答案:C知识点解析:这段程序代码的功能是计算在1—10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’,共有4个偶数,所以共输出4个‘*’。10、下列循环语句中有语法错误的是()。A、inti;for(i=1;i<10,1++)cout<<’*’;B、inti,j;for(i一l,j=0;i<10;i++,j++)cout<<’*’;C、inti=0;for(;i<10,1++)cout<<’*’;D、for(1)cout<<’*’;标准答案:D知识点解析:这道题目主要考查for循环语句的语法。for循环语句的语法格式如下:for(<表达式1>;<表达式2>;<表达式3>)<语句>,在三个表达式都省略的情况下,其格式如下for(;;),这时for循环语句是一个死循环。11、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){intf,f1=0,f2=1;for(inti.3;i<=6;i++){f=f1+f2:fl=f2;f2=f;}cout<<f<<endl;return0:}运行时的输出结果是()。A、2B、3C、5D、8标准答案:C知识点解析:在主函数中for循环语句执行4次,第一次循环结束时,变量f的值等于1,f1的值等于1,f2的值等于1;第二次循环结束时,变量f的值等于2,f1的值等于1,f2的值等于2;第三次循环结束时,变量f的值等于3,f1的值等于2,f2的值等于3:第四次循环结束时,变量f的值等于5,f1的值等于3,f2的值等于5;结束循环。12、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){.inta[6]={23,15,64,33,40,58};ints1,s2;sl=s2=a[0];for(int*p=a+l;p<a+6;p++){if(sl>*p)sl=*p;if(s2<*p)s2=*p;}cout<<sl+s2<<end1;return0;}运行时的输出结果是()。A、23B、58C、64D、79标准答案:D知识点解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量s1;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量s1,s2的值不会再发生变化,最终值为15+64=79。13、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){inti,s=0;for(i=1;s<20;1+=2)s+=i*i;cout<<i<<endl;retum0;}运行这个程序的输出结果是()。A、3B、5C、7D、9标准答案:C知识点解析:在这段程序中for循环共执行3次,每次循环变量i的值增2,在执行第三次循环语句时,变量s的值等于25,大于20而退出循环,此时再执行循环变量i加2运算,所以最后变量i的值等于7。14、要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,一88,0和0,则下列定义语句中错误的是()。A、intvect[]={30,50,一88};B、intvect[]={30,50,一88,0,0};C、intvect[5]={30,50,一88};D、intvect[5]={30,50,一88,0,0};标准答案:A知识点解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。15、已知有数组定义chara[3][4];下列表达式中错误的是()。A、a[2]="WIN"B、strcpy(a[2],"WIN")C、a[2][3]=’W’D、a[0][1]=a[0][1]标准答案:A知识点解析:本题主要是对字符数组的考查。选项A中a[2]为一个地址,所以不能用等号进行赋值操作。16、已知数组arr的定义如下:intarr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()。A、cout<<*arr+1<<end1;B、cout<<*(arr+1)<<end1;C、cout<<arr[1]<<end1,D、cout<<*art<<end1;标准答案:D知识点解析:因为一维数组arr[5]的首地址是第一数组元素的地址,所以选项D)中,输出*arr的值就是数组arr[5]中第一数组元素1。其他选项都输出数组arr[5]的第二元素2。17、有如下类定义:ciassA{char*a;public:A():a(0){}A(char*aa){∥把aa所指字符串拷贝到a所指向的存储空间a=___;strcpy(a,aa);}~A()(delete[]a;}};横线处应填写的表达式是()。A、newchar[strlen(aa)+1]B、char[strlen(aa)+1]C、char[strlen(aa)]一D、newchar[sizeof(aa)一1]标准答案:A知识点解析:函数strlen(aa)返回字符串aa中字符的个数,不包括末尾的空字符。所以在内存空间创建字符数组a时,需要字符数组的长度是strlen(aa)+1。18、要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是()。A、intx[3]={0,0,0};B、intx[]={0};C、staticintx[3]={0};D、intx[]={0,0,0};标准答案:B知识点解析:当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项B)定义数组x时,没有给出数组的大小,初始化时只给出了一个元素0。所以数组x只包含一个元素为0的元素。19、有如下语句序列:charstr[10];cin>>str;当从键盘输入"Ilovethisgame"时,str中的字符串是()。A、IlovethisgameB、IlovethiC、IloveD、"I"标准答案:D知识点解析:由于字符\0作为字符串的结束标志,所以当从键盘上输入“Ilovethisgame”时,只把字母I输入字符串str。20、字符串“a+b=12\n\t”的长度为()。A、12B、10C、8D、6标准答案:C知识点解析:题目给出的字符串含有7个字符,再加字符串的结束字符,所以共8个字符。21、下列有一维数组a的定义中,语法正确的是()。A、inta(10);B、intn=7,a[n];C、intn;cin>>n,inta[n];D、constintsi2e=10,inta[size],标准答案:D知识点解析:定义一维数组的一般格式为:类型标识符数组名[常量表达式];常量表达式的值表示元素的个数,即数组长度。常量表达式中可以包括常量、常变最和符号常量,但不能包含变量。也就是说,C++不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。22、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){int*p,*p=9;cout<<"Thevalueatp:"<<*p;return0;}编译运行程序将出现的情况是()。A、编译时出现语法错误,不能生成可执行文件B、运行时一定输出:Thevalueatp:9C、运行时一定输出:Thevalueatp:*9D、运行时有可能出错标准答案:D知识点解析:此题考查的是指针的使用。本题中,在给*p赋值前,指针p并没有指向一个具体的对象。此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。23、下列语句中,错误的是()。A、constintbuffeF256;B、constdouble*point;C、intconstbuffeF256;D、double*constpoint;标准答案:D知识点解析:此题考查的是常指针和指针常量的概念。常指针是指向一个常量的指针变量,指针自身的内容可以改变但指针指向的内容不可以改变;指针常量是一个常量,即不能修改指针自身的内容,但可以通过指针修改其所指向的内容。D选项中指针常量point没有初始化,编译无法通过。24、有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是()。A、*p+9B、*(p+8)C、*p+=9D、p+8标准答案:B知识点解析:此题考查的是指针的运用。选项A中,*p返回的是数组元素a[0]的值,所以最后结果是1+9=10;选项B是指针p后移8个单位位置处的值,即a[8]其值为9;选项C中表达式的值和选项A相同;选项D的值是一个地址值,该值无法确定。25、语句int*p=&k;定义了指针p,与这个语句等效的语句序列是()。A、int*p;p=&k;B、int*p;p=k;C、int*p;*p=&k;D、int*p;*p=k标准答案:A知识点解析:此题考查的是指针的赋值。题目中的语句int*p=&k;定义了一个int类型的指针p,并将变量k的地址&k赋给指针p。所以等效语句是:int*p;p=&k;。26、下列定义语句中,错误的是()。A、intpx*;B、char*acp[10];C、char(*pac)[10];D、int(*p)();标准答案:A知识点解析:指针变量声明的一般形式为:<数据类型>*<变量名>,在选项A)中,*放在变量名的后面,所以是错误的。27、若字符指针p所指向的字符串为"abcdefg",在执行语句()。char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为A、9B、8C、7D、6标准答案:B知识点解析:字符指针p所指向的字符串为”abcdefg”,所以函数strlen(p)的值等于7,再加l,等于8。国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷第3套一、选择题(本题共27题,每题1.0分,共27分。)1、有如下程序:#includeusingnamespacestd;intmain(){charstr[100],*p;cout<<"Pleaseinputastring:";cin;str;p=str;for(inti=0;*p!=’\0’;p++,i++);cout<<"i"<A、7B、12C、13D、100标准答案:A知识点解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第一个非空白字符开始到下一个空白字符结束”,而输入数据为abcdefgabcd,其中abcde龟后有空格。所以输入后s仃中的字符串为“abcdefg”;主函数中接下来for语句的作用是计算字符串p的长度,故最终输出字符串“abcdefg”的长度7。2、if语句的语法格式可描述为:格式1:if(<条件>)<语句>或格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是()。A、<条件>部分可以是一个if语句,例如if(if(a==0)…)…B、<语句>部分可以是一个if语句,例如if(…)if(…)…C、如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变D、<语句>部分可以是一个循环语句,例如if(…)while(…)…标准答案:A知识点解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。3、若x和y是程序中的两个整型变量,则下列if语句中正确的是()。A、if(x==0)y=1;elsey=2;B、if(x==0)theny=1elsey=2;C、if(x=)y=1elsey=2;D、if(x==0)y=1;elsey=2;标准答案:A知识点解析:ifelse语句的形式为:if(<条件>1<语句l>else<语句2>所以符合以上形式的ifelse语句为选项A)。4、下列语句中,与语句“n=(a>b?(b>c?l:0):0);”的功能等价的是()。A、if(a<=b)n=0;B、if((a>b)‖(b>c))n=1;elsen=0;C、if(a>b)if(b>c)n=1;elsen=0;elsen=0;D、if(a>b)n=1;elseif(b<=c)n=1;elseif(b>c)n=1;elsen=0;标准答案:C知识点解析:条件表达式(a>b?(b>c?1:0):0)的含义是,如果a>b成立,则此表达式的值等于条件表达式(b>c?1:0)的值,否则其值等于0。而条件表达式(b>c?1:0)的含义是,如果b>c成立,其值等于1,否则其值等于0。5、有如下程序#includeusingnamespacestd;intmain(){chara:cin>>a;if(a=’*’)cout<<"***"<A、***B、###C、***###D、无输出标准答案:A知识点解析:本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算if后表达式的值,如果表达式的值为非零,则执行if后面的分支,否则执行与其匹配的else后面的分支。本题执行时虽然输入变量a的值为‘+’,但是在执行if后括号内表达式(a=’*’)的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值’*’,其AscII码的值非零,执行if后面的输出语句“***”后回车。6、执行语句序列()。inti=0:while(i<25)i+=3;cout<A、24B、25C、27D、28标准答案:C知识点解析:此题考查的是循环语句while的使用。i为3的倍数,当i=24时,i<25,执行while的循环体i+=3,则i=27,不满足i<25的条件,结束循环。7、有如下程序:intx=3:do{x-=2:cout<A、1B、30C、1-2D、死循环标准答案:C知识点解析:此题考查的是do-while循环语句。do-while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x-=2”,while语句中“--x”即x为0,取反为非0,循环继续执行;执行“x-=2”和“--x”取反后,循环结束程序退出。8、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>1:--i)cout<<’*’;A、48B、49C、50D、51标准答案:B知识点解析:此题考查的是for循环语句。For循环中i从50开始逐渐递减,直到i=1时退出,而此时没有机会执行到循环体,因此一共执行了49次循环体,所以最终输出的是49个字符‘*’。9、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>1;I-=2)cout<<’*’;A、24B、25C、26D、50标准答案:B知识点解析:此题考查的是for循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个‘*’。10、有如下程序:#includeusingnamespacestd;intmain(){intsum;for(inti=0;i<6;i+=3){sum=i;for(intj=i;j<6;j++)sum+=j;}cout<A、3B、10C、12D、15标准答案:D知识点解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后sum和j都会被重新赋值,所以外层第二次循环如下:此时i=3,sum=3内层循环开始如下:j=3,j<6,sum=6;j=4,j<6,sum=10,j=5,j<6,sum=15,j=6退出内层循环。得到sum=15。11、有如下程序段:inti=5:while(inti=0){cout<<’*’;i--;}运行时输出“*”的个数是()。A、0B、1C、5D、无穷标准答案:A知识点解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”的个数是0。12、有如下程序段:inti=1;while(1){i++;if(i==10)break;if(i%2==0)cout<<’*’;}执行这个程序段输出字符*的个数是()。A、10B、3C、4D、5标准答案:C知识点解析:这段程序代码的功能是计算在1~10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’,共有4个偶数,所以共输出4个‘*’。13、有如下程序:#includeusingnamespacestd;intmain(){inti,s=0;for(i=1;s<20;i+=2)s+=i*i;cout<A、3B、5C、7D、9标准答案:C知识点解析:在这段程序中for循环共执行3次,每次循环变量i的值增2,在执行第三次循环语句时,变量s的值等于25,大于20而退出循环,此时再执行循环变量i加2运算,所以最后变量i的值等于7。14、要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,一88,0和0,则下列定义语句中错误的是()。A、intvect[]={30,50,一88};B、intvect[]={30,50,一88,0,0};C、intvect[5]={30,50,一88};D、intvect[5]={30,50,一88,0,0};标准答案:A知识点解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。15、已知有数组定义chara[3][4];下列表达式中错误的是()。A、a[2]="WIN"B、strcpy(a[2],"WIN")C、a[2][3]=’W’D、a[0][1]=a[0][1]标准答案:A知识点解析:本题主要是对字符数组的考查。选项A中a[2]为一个地址,所以不能用等号进行赋值操作。16、已知数组arr的定义如下:intarr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()。A、cout<<*arr+1<B、cout<<*(art+1)<C、cout<D、cout<<*art<标准答案:D知识点解析:因为一维数组arr[5]的首地址是第一数组元素的地址,所以选项D)中,输出*arr的值就是数组arr[5]中第一数组元素1。其他选项都输出数组arr[5]的第二元素2。17、有如下类定义:ciassA{char*a:public:A0:a(0){}A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间a=_________;strcpy(a,aa);}~A()(delete[]a;}};横线处应填写的表达式是()。A、newchar[strlen(aa)+1]B、char[strlen(aa)+1]C、char[strlen(aa)]D、newchar[sizeof(aa)一1]标准答案:A知识点解析:函数strlen(aa)返回字符串aa中字符的个数,不包括末尾的空字符。所以在内存空间创建字符数组a时,需要字符数组的长度是strlen(aa)+1。18、字符串“a+b=12kn\t”的长度为()。A、12B、10C、8D、6标准答案:C知识点解析:题目给出的字符串含有7个字符,再加字符串的结束字符,所以共8个字符。19、有如下程序:#includeusingnamespacestd;intmain(){int*p;*p=9:cout<<"Thevalueatp:"<<*p;return0;}编译运行程序将出现的情况是()。A、编译时出现语法错误,不能生成可执行文件B、运行时一定输出:Thevalueatp:9C、运行时一定输出:Thevalueatp:*9D、运行时有可能出错标准答案:D知识点解析:此题考查的是指针的使用。本题中,在给*p赋值前,指针p并没有指向一个具体的对象。此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。20、下列语句中,错误的是()。A、constintbuffer=256;B、constdouble*point;C、intconstbuffer=256;D、double*constpoint;标准答案:D知识点解析:此题考查的是常指针和指针常量的概念。常指针是指向一个常量的指针变量,指针自身的内容可以改变但指针指向的内容不可以改变;指针常量是一个常量,即不能修改指针自身的内容,但可以通过指针修改其所指向的内容。D选项中指针常量point没有初始化,编译无法通过。21、语句int*p=&k;定义了指针p,与这个语句等效的语句序列是()。A、int*p;p=&k;B、int*p;p=k;C、int*p;*p=&k;D、int*p;*p=k标准答案:A知识点解析:此题考查的是指针的赋值。题目中的语句int*p=&k;定义了一个int类型的指针p,并将变量k的地址&k赋给指针p。所以等效语句是:int*p;p=&k;。22、有如下定义:inta[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5的是()。A、a[2]B、a[3]C、*(p+2)D、*p+4标准答案:B知识点解析:此题考查的是指针引用数组元素。B选项中,a[3]是数组的第四个元素,即7;其它选项的引用均可得到5。23、下列语句中,正确的是()。A、char*myString="Hello-World!";B、charmyString="Hello-World!";C、charmyString[11]="Hello-World!";D、charmyString[12]="Hello-World!";标准答案:A知识点解析:对于B来说,会造成溢出,对于C和D来说同样如此,因为“Hello—world!”一个是12个字符组成,加上空字符一共13个,所以都会造成溢出,只有A是将字符串的地址赋给字符型指针。24、下列定义语句中,错误的是()。A、intpx*;B、char*acp[10];C、char(*pac)[10];D、int(*p)();标准答案:A知识点解析:指针变量声明的一般形式为:<数据类型>*<变量名>,在选项A)中,*放在变量名的后面,所以是错误的。25、有如下语句序列:intx=100,&r==x:cout<A、100-100B、100-0012FF7CC、0012FF7C-100D、0012FF7C-0012FF7C标准答案:A知识点解析:在语句intx=100,&r==x;中声明r初始化对x的引用,所以x和&r的值都是100。26、若字符指针p所指向的字符串为"abcdefg",在执行语句()。char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为A、9B、8C、7D、6标准答案:B知识点解析:字符指针p所指向的字符串为"abcdefg",所以函数strlen(p)的值等于7,再加1,等于8。27、有如下程序段:inti=0,j=1;int&r=i;//①r=j;//②int*p=&i://③*p=&r;//④其中会产生编译错误的语句是()。A、④B、③C、②D、①标准答案:A知识点解析:此题考查的是指针和引用。本题中,语句①是一条合法的引用声明语句,使得变量i被r引用;语句②通过引用r将变量j的值赋给变量i;语句③声明了指针变量p,并初始化指向变量i;语句④中*p代表了变量i的值,要将&r赋给*p,这会使编译器产生类型不符的错误提示。国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷第4套一、选择题(本题共29题,每题1.0分,共29分。)1、有如下程序:#includeusingnamespacestd;intmain(){charstr[100],*p;cout<<"Pleaseinputastring:";cin;str;p=str;for(inti=0;*p!=ˊ\0ˊ;p++,i++);cout<<"i"<A、7B、12C、13D、100标准答案:A知识点解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第一个非空白字符开始到下一个空白字符结束”,而输入数据为abcdefgabcd,其中abcdefg后有空格。所以输入后str中的字符串为“abcdefg”:主函数中接下来for语句的作用是计算字符串p的长度,故最终输出字符串“abcdefg”的长度7。2、if语句的语法格式可描述为:格式1:if(<条件>)<语句>或格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是()。A、<条件>部分可以是一个if语句,例如if(if(a==0)…)…B、<语句>部分可以是一个if语句,例如if(…)if(…)…C、如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变D、<语句>部分可以是一个循环语句,例如if(…)while(…)…标准答案:A知识点解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。3、若x和y是程序中的两个整型变量,则下列if语句中正确的是()。A、if(x==0)y=1;elsey=2;B、if(x==0)theny=1elsey=2;C、if(x==0)y=1elsey=2;D、if(x==0)y=1;elsey=2;标准答案:A知识点解析:ifelse语句的形式为:if(<条件>)<语句1>else<语句2>所以符合以上形式的ifelse语句为选项A)。4、执行语句序列()。inti=0;while(i<25)i+=3;cout<<i;输出结果是A、24B、25C、27D、28标准答案:C知识点解析:此题考查的是循环语句while的使用。i为3的倍数,当i=24时,i<25,执行while的循环体i+=3,则i=27,不满足j<25的条件,结束循环。5、有如下程序:intx=3;do{x=2;cout<<x;}while(!(-x));执行这个程序的输出结果是()。A、1B、30C、1-2D、死循环标准答案:C知识点解析:此题考查的是do-while循环语句。do-while循环首先执行do‘语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x=2”,while语句中“--x”即x为0,取反为非0,循环继续执行;执行“x=2”和“--x”取反后,循环结束程序退出。6、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>1-=2)cout<<ˊ*ˊ;A、24B、25C、26D、50标准答案:B知识点解析:此题考查的是for。循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个‘*’。7、有如下程序:#includeusingnamespacestd;intmain(){intsum;for(inti=0;i<6;i+=3){sum=i;for(intj=i;j<6;j++)sum+=j;}cout<<sum<A、3B、10C、12D、15标准答案:D知识点解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后sum和j都会被重新赋值,所以外层第二次循环如下:此时i=3,sum=3内层循环开始如下:j=3,j<6,sum=6;j=4,j<6,sum=10,j=5,j<6,sum=15,j=6退出内层循环。得到sum=15。8、有如下程序段:inti=5:while(inti=0){cout<<ˊ*ˊ;i--;}运行时输出“*”的个数是()。A、0B、1C、5D、无穷标准答案:A知识点解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”的个数是0。9、有如下程序段:inti=l;while(1){i++:if(i==10)break;if(i%2==0)cout<<’*’;}执行这个程序段输出字符木的个数是()。A、10B、3C、4D、5标准答案:C知识点解析:这段程序代码的功能是计算在1~10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’,共有4个偶数,所以共输出4个‘*’。10、有如下程序:#include<iostream>usingnamespacestd;intmain(){intf,fl=0,f2=1;for(inti=3;i<=6;i++){f=f1+f2;f1=f2;f2=f;}cout<<f<<endl;retum0:}运行时的输出结果是()。A、2B、3C、5D、8标准答案:C知识点解析:在主函数中for循环语句执行4次,第一次循环结束时,变量f的值等于1,f1的值等于1,f2的值等于1;第二次循环结束时,变量f的值等于2,f1的值等于1,f2的值等于2;第三次循环结束时,变量f的值等于3,f1的值等于2,f2的值等于3:第四次循环结束时,变量f的值等于5,f1的值等于3,f2的值等于5;结束循环。11、有如下程序:#includeusingnamespacestd;intmain(){.inta[6]={23,15,64,33,40,58);ints1,s2;s1=s2=a[0];for(int*p=a+1;p<a+6;p++){if(s1>*p)s1=*p;if(s2<*p)s2=*p;}cout<<s1+s2<<end1;return0;}运行时的输出结果是()。A、23B、58C、64D、79标准答案:D知识点解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量s1;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量s1,s2的值不会再发生变化,最终值为15+64=79。12、有如下程序:#includeusingnamespacestd;intmain(){inti,s=0;for(i=1;s<20;i+=2)s+=i*i;cout<<i<<endl;return0;}运行这个程序的输出结果是()。A、3B、5C、7D、9标准答案:C知识点解析:在这段程序中for循环共执行3次,每次循环变量i的值增2,在执行第三次循环语句时,变量s的值等于25,大于20而退出循环,此时再执行循环变量i加2运算,所以最后变量i的值等于7。13、要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是()。A、intvect[]={30,50,-88};B、intvect[]={30,50,-88,0,0};C、intvect[5]={30,50,-88};D、intvect[5]={30,50,-88,0,0};标准答案:A知识点解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。14、已知数组arr的定义如下:intarr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()。A、cout<<*arr+1<<endl;B、cout<<*(arr+1)<<endl;C、cout<<arr[1]<<endl;D、cout<<*art<<endl;标准答案:D知识点解析:因为一维数组arr[5]的首地址是第一数组元素的地址,所以选项D中,输出*arr的值就是数组art[5]中第一数组元素1。其他选项都输出数组art[5]的第二元素2。15、有如下类定义:ciassA{char*a;public:A():a(0){}A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间a=__________;strcpy(a,aa);}~A()(delete[]a;)};横线处应填写的表达式是()。A、newchar[strlen(aa)+1]B、char[strlen(aa)+1]C、char[strlen(aa)]D、newchar[sizeof(aa)-1]标准答案:A知识点解析:函数strlen(aa)返回字符串aa中字符的个数,不包括末尾的空字符。所以在内存空间创建字符数组a时,需要字符数组的长度是strlen(aa)+1。16、要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是()。A、intx[3]={0,0,0};B、intx[]={0};C、staticintx[3]={0};D、intx[]={0,0,0);标准答案:B知识点解析:当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项B定义数组x时,没有给出数组的大小,初始化时只给出了一个元素0。所以数组x只包含一个元素为0的元素。17、有如下语句序列:charstr[10];cin>>str;当从键盘输入”Ilovethisgame”时,str中的字符串是()。A、ˊˊIlovethisgameˊˊB、ˊˊIlovethiˊˊC、ˊˊIloveˊˊD、ˊˊIˊˊ标准答案:D知识点解析:由于字符\0作为字

温馨提示

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

评论

0/150

提交评论