国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷5
(总分:68.00,做题时间:90分钟)
一、 选择题(总题数:34,分数:68.00)
1.有如下程序: #inc1ude<iostream> using namespace std; int main() { char str[100],*p; cout<<"Please input a string:"; cin;str; p==str; for(int i=0; *p!='\0'; p++,i++); cout<<"i"<<end1; retum 0; } 运行这个程序时,若输入字符串为: abcdefg abcd 则输出结果是( )。
(分数:2.00)
(分数:2.00)
A.7 √
B.12
C.13
D.100
解析:解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第…个非空白字符开始到下一个空白字符结束”,而输入数据为abcdefg abcd,其中abcdefg后有空格。所以输入后str中的字符串为“abcdefg”;主函数中接下来for语句的作用是计算字符串p的长度,故最终输出字符串“abcdefg”的长度7。
2.if语句的语法格式可描述为: 格式1:if(<条件>)<语句> 或 格式2:if(<条件>)<语句1> else<语句2> 关于上面的语法格式,下列表述中错误的是( )。
(分数:2.00)
(分数:2.00)
A.<条件>部分可以是一个if语句,例如if(if(a==0)…)… √
B.<语句>部分可以是一个if语句,例如if(…)if(…)…
C.如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变
D.<语句>部分可以是一个循环语句,例如if(…)while(…)…
解析:解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。
3.若x和y是程序中的两个整型变量,则下列if语句中正确的是( )。
(分数:2.00)
(分数:2.00)
A.if(x==0)y=1;else y=2; √
数组定义时初始化 B.if(x=0)theny=l else y=2;
C.if (x=0)y=1 else y=2;
D.if(x==0)y=1;else y=2;
解析:解析:if else语句的形式为:if(<条件>)<语句1> else<语句2>所符合以上形式的if else语句为选项A)。
4.下列语句中,与语句“n=(a>b?(b>c?1:0):0);”的功能等价的是( )。
(分数:2.00)
(分数:2.00)
A.if(a<=b)n=0;
B.if((a>b)||(b>c))n=1; else n=0;
C.if(a>b)if(b>c)n=1; else n=0; else n=0, √
D.if(a>b)n=1;else if(b<=c)n=i; else if(b>c)n=1; else n=0;
解析:解析:条件表达式(a>b?(b>c?1:0):0)的含义是,如果a>b成立,则此表达式的值等于条件表达式(b>c?1:0)的值,否则其值等于0。而条件表达式(b>c?1:0)的含义是,如果b>c成立,其值等于1,否则其值等于0。
5.有如下程序 #inc1ude<iostream> using namespace std; int main(){ char a; cin>>a; if(a='*')cout<<"***"<<end1, eLse cout<<"###"<<end1; retum 0; }输入字符+时,程序的运行结果是( )。
(分数:2.00)
(分数:2.00)
A.*** √
B.###
C.***###
D.无输出
解析:解析:本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算if后表达式的值,如果表达式的值为非零,则执行if后面的分支,否则执行与其匹配的else后面的分支。本题执行时虽然输入变量a的值为‘+’,但是在执行if后括号内表达式(a='*')的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值'*',其ASCII码的值非零,执行if后面的输出语句“***”后回车。
6.执行语句序列 int i=0; while(i<25)i+=3; cout<<i; 输出结果是( )。
(分数:2.00)
(分数:2.00)
A.24
B.25
C.27 √
D.28
解析:解析:此题考查的是循环语句while的使用。i为3的倍数,当r=4时,i<5,执行while的循环体i+=3,则1=27,不满足i<25的条件,结束循环。
7.有如下程序: int x=3; do{ x—=2; cout<<x, }while(!(——x)); 执行这个程序的输出结果是( )。
(分数:2.00)
(分数:2.00)
A.1
B.30
C.1—2 √
D.死循环
解析:解析:此题考查的是do—while循环语句。do—while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x—=2”,while语句中“——x”即x为0,取反为非0,循环继续执行:执行“x—=2”和“——x”取反后,循环结束程序退出。
8.执行下列语句段后,输出字符“*”的个数是( )。 for(int i=50;i>1:——i)cout<<'*';
(分数:2.00)
(分数:2.00)
A.48
B.49 √
C.50
D.51
解析:解析:此题考查的是for循环语句。For循环中i从50开始逐渐递减,直到i=l时退出,而此时没有机会执行到循环体,因此一共执行了49次循环体,所以最终输出的是49个字符'*'。
9.执行下列语句段后,输出字符“*”的个数是( )。 for (int i=50; 1>1;I一=2)cout<<'*';
(分数:2.00)
(分数:2.00)
A.24
B.25 √
C.26
D.50
解析:解析:此题考查的是for循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个'*'。
10.有如下程序: #inc1ude<iostream> using namespace std; int main(){ int sum; for(int i=0; i<6; i+=3){ sum=i; for(int j=i;j<6; j++)sum+=j; } cout<<sum<<end1; retum 0; } 运行时的输出结果是( )。
(分数:2.00)
(分数:2.00)
A.3
B.10
C.12
D.15 √
解析:解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后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.有如下程序段: int i=5; while (int i=0){cout<<'*';i——,) 运行时输出“*”的个数是( )。
(分数:2.00)
(分数:2.00)
A.。 √
B.1
C.5
D.无穷
解析:解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”的个数是0。
12.有如下程序段: int i=1, while(1){ i++; if(i=10) break; if(i%2==0) couK<'*'; } 执行这个程序段输出字符*的个数是( )。
(分数:2.00)
(分数:2.00)
A.10
B.3
C.4 √
D.5
解析:解析:这段程序代码的功能是计算在1—10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’共有4个偶数,所以共输出4个‘*’。
13.下列循环语句中有语法错误的是( )。
(分数:2.00)
(分数:2.00)
A.int i;for(i=1; i<10, 1++)cout<<'*';
B.int i,j; for(i=l,j=0; 1<10; i++,j++)cout<<'*';
C.int i=0; for(; i<10; 1++)cout<<'*';
D.f.or(1)cout<<'*'; √
解析:解析:这道题目主要考查for循环语句的语法。for循环语句的语法格式如下:for<表达式1>;<表达式2>.<表达式3><语句>,在三个表达式都省略的情况下,其格式如下for(∷),这时for循环语句是一个死循环。
14.有如下程序: #inc1ude <iostream> using namespace std; int main() { int f,f1=0,f2=1;
for (int i=3;i<=6;i++){ f=f1+f2; f1=f2;f2=f; } cout<<f<<end1; return 0; } 运行时的输出结果是( )。
(分数:2.00)
(分数:2.00)
A.2
B.3
C.5 √
D.8
解析:解析:在主函数中for循环语句执行4次,第一次循环结束时,变量f的值等于l,f1的值等于1,f2的值等于1:第二次循环结束时,变量f的值等于2,fl的值等于1,f2的值等于2;第三次循环结束时,变量f的值等于3,f1的值等于2,f2的值等于3;第四次循环结束时,变量f的值等于5,f1的值等于3,f2的值等于5;结束循环。
15.有如下程序: #inc1ude <iostream> using namespace std; int main(){ int a[6]={23,15,
64,33,40,58}; int s1,s2; s1=s2=a[0]; for(int*p=a+1;p<a+6;p++) { if(sl>*p)s1=*p; if(s2<*p)s2=*p; } cout<<s1+s2<<end1; retum 0; } 运行时的输出结果是( )。
(分数:2.00)
(分数:2.00)
A.23
B.58
C.64
D.79 √
解析:解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量sl;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量sl,s2的值不会再发生变化,最终值为15+64=79。
16.有如下程序: #inc1ude<iostream> using namespace std; int main0{ int i,s=0; for(i=l;
s<20;i+=2)s+=i*i; cout<<i<<end1; retum 0; } 运行这个程序的输出结果是( )。
(分数:2.00)
(分数:2.00)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论