国家二级C++机试(基本控制结构、数组、指针与引用)模拟试卷5
选择题
1.有如下程序:
#inc1ude<iostream>
using namespace std;
int main()
{
char str[100],*p;
cout<<\\(A)
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>
关于上面的语法格式,下列表述中错误的是( )。(A)
A. <条件>部分可以是一个if语句,例如if(if(a==0)…)…
B. <语句>部分可以是一个if语句,例如if(…)if(…)…
C. 如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变
D. <语句>部分可以是一个循环语句,例如if(…)while(…)…
解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。
3.若x和y是程序中的两个整型变量,则下列if语句中正确的是( )。(A)
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);”的功能等价的是( )。(C)
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<<\\(A)
A. ***
B. ###
C. ***###
D. 无输出
解析:本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算if后表达式的值,如果表达式的值为非零,则执行if后面的分支,否则执行与其匹配的else后面的分支。本题执行时虽然输入变量a的值为‘+’,但是在执行if后括号内表达式(a=’*’)的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值’*’,其ASCII码的值非零,执行if后面的输出语句“***”后回车。
6.有如下程序:
int x=3;
do{
x—=2;
cout<<x,
}while(!(——x));
执行这个程序的输出结果是( )。(C)
A. 1
B. 30
C. 1—2
D. 死循环
解析:此题考查的是do—while循环语句。do—while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。题目中do语句“x—=2”,while语句中“——x”即x为0,取反为非0,循环继续执行:执行“x—=2”和“——x”取反后,循环结束程序退出。
7.执行下列语句段后,输出字符“*”的个数是( )。
for(int i=50;i>1:——i)cout<<’*’;(B)
A. 48
B. 49
C. 50
D. 51
解析:此题考查的是for循环语句。For循环中i从50开始逐渐递减,直到i=l时退出,而此时没有机会执行到循环体,因此一共执行了49次循环体,所以最终输出的是49个字符’*’。
8.执行下列语句段后,输出字符“*”的个数是( )。
for (int i=50; 1>1;I一=2)cout<<’*’;(B)
A. 24
B. 25
C. 26
D. 50
解析:此题考查的是for循环语句。执行循环语句,变量i从50递减,每次减2,所以循环会执行25次,输出25个’*’。
9.有如下程序:
#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;
}
运行时的输出结果是( )。(D)
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。
10.有如下程序段:
int i=5;
while (int i=0){cout<<’*’;i——,)
运行时输出“*”的个数是( )。(A)
A. 。
B. 1
C. 5
D. 无穷
解析:因为while循环中,因为i的值等于0,所以while循环体一次也不执行。因而运行时输出“*”的个数是0。
11.有如下程序段:
int i=1,
while(1){
i++;
if(i=10) break;
if(i%2==0) couK<’*’;
本文档预览:3600字符,共9757字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载