您的当前位置:首页正文

C++模考试卷1(含答案解析)

2022-07-11 来源:爱站旅游
导读C++模考试卷1(含答案解析)
C++模考试卷1(含答案解析)

一、单选题 (总分:20.0, 共20题)

1. (本题分值:1.0)

设a和b为整型变量,执行语句 b=(a=2+3,a*4),a+5;后,a和b的值为__________。 A.5,10 B.20,25 C.5,25 D.5,20 参考答案:D

2. (本题分值:1.0)下面哪一C++ 语言表达式不能正确表示数学关系a<x≤b。选项为__________。 A.a=x)&&!(x>b) D.a3. (本题分值:1.0)x为int型,s为float型,x=3,s=2.5。表达式s+x/2的值为________。 A.4 B.3.5 C.2.5 D.3

参考答案:B (因为x/2两个操作数均为整型,故结果也应该是整型,所以不是1.5而是1)

4. (本题分值:1.0)结构化程序由三种基本结构组成,不包括__________。 A.顺序结构 B.选择结构 C.控制结构 D.循环结构 参考答案:C

5. (本题分值:1.0)在以下选项中,与k=n++完全等价的表达式是__________。 A.k=n,++n; B.n=n+1,k=n; C.k=++n; D.k+=n+1;

参考答案:A (n++表达式中自增算符后置,故此表达式的值是n的原值,将表达式的值使用之后n再自增1)

6. (本题分值:1.0) 有定义: int a; double b; 则表达式a+4/b结果的数据类型为__________。 A.int B.double C.float D.unsigned 参考答案:B (表达式结果的数据类型总是取所有操作数中精度最高的类型)

7. (本题分值:1.0) 在C++中,运算对象必须为整型数的运算符是( )。 A.% B./ C.* D.%和* 参考答案:A

8. (本题分值:1.0) 以下程序段的输出结果是__________。 int x=5; do

{ cout << x-- ; } while ( !x );

A.54321 B.43210 C.5 D.4 参考答案:C (当x是0时,!x的值才是非0—true)

9. (本题分值:1.0) 下面的for语句的循环次数为__________。 for ( x=1, y=0; (y!=19 && x<6); x++ );

A.无限循环 B.循环次数不定 C.最多执行6次 D.最多执行5次

参考答案:D (当x取1、2、3、4、5时,循环条件(y!=19 && x<6)表达式值为true,故循环5次)

10. (本题分值:1.0) 有以下程序段 int k=0: while (k=1) k++; while循环执行的次数是

A. 无限次(死循环) B.有语法错,不能执行 C.一次也不执行 D.执行1次

参考答案:A (注意while后面的表达式(k=1)是赋值表达式,该表达式的值恒为1(true),并不是将k与1比较相不相等;比较运算是k==1这种形式)

11. (本题分值:1.0) C++语言中函数返回值的类型决定于 A.return语句中的表达式类型 B.调用函数的主调函数类型 C.调用函数时变量的类型 D.定义函数时所指定的函数类型 参考答案:D

12. (本题分值:1.0) 若有如下的函数定义: int sum( int a, float b) { return a+(int)b; }

则下列函数原型不正确的是( )。

A.int sum( int, float ); B.int sum( int x, float y ); C.int sum( int b, float a ); D.int sum( int a=10, float b );

参考答案:D (函数原型即函数声明的一种形式,可以只声明形参类型而省略形参名称,或形参名称可以任意;D选项是用带默认参数的函数定义形式做干扰)

13. (本题分值:1.0)有如下的函数定义:int Xfun(int x){ int y=x; {int x=10; y+=x;} return x+y;} 通过表达式Xfun(5)调用该函数,则得到的返回值为 A.20 B.10 C.5 D.15 参考答案:A

14. (本题分值:1.0)在定义int x[3][2]以后,对x元素的引用正确的是__________。 A.x[0, 0] B.x[3][1] C.x[2][2] D.x[0][0]

参考答案:D (注意下标不要越界,本题定义的数组,其行标最多到2,列标最多到1)

15. (本题分值:1.0)设有数组定义:char array[]=\"China\";,则数组array所占的空间为__________。 A.4个字节 B.5个字节 C.6个字节 D.7个字节

参考答案:C (字符串长度只算有效字符,不包括存储单元中的结束标记符’\\0’)

16. (本题分值:1.0) 两个数组a和b进行如下初始化: char a[ ]=“abcde”; char b[ ]={'a','b','c','d','e'};

则以下叙述正确的是__________。

A.a与b数组完全相同 B.a与b长度相同 C.a和b中都存放字符串 D.a数组比b数组长度长

参考答案:D (a数组存储的是一个字符串,字符串必须在末尾加一个空字符’\\0’,此空字符’\\0’也要被数组a存储。而数组b保存的是一些独立的字符,并非字符串,故不需要’\\0’做结束标记)

17. (本题分值:1.0)设有int a[20], *p=a; 则下面中哪个与a[1]不等价__________。 A.p[1] B.*++p C.*++a D.*(a+1)

参考答案:C (数组名是指针常量,不能施加++、--运算,也不能做赋值运算)

18. (本题分值:1.0)若有:int a,*p=&a; 则下面哪个表达式为假__________。 A.*p= =&a B.p= =&*p C.p= =&a D.*p= =a 参考答案:A (int a,*p=&a;是相当于:int a,*p; p=&a; )

19. (本题分值:1.0) 有关公用体与结构体不正确的说法是__________。 A.都可有多个成员 B.结构体可同一时刻保留多个数据 C.公用体同一时刻只能保留一个数据 D.结构体各成员的地址相同 参考答案:D

20. (本题分值:1.0)

某结构体变量定义如下,结构体变量的成员的引用形式正确的是__________。 struct str{ int m,n; float a,b; } s,*pt; pt=&s; A.s->m B.pt.n C.*pt.a D.pt->b 参考答案:D

二:填空题(总分:38.0,共19空)

1. 执行语句\"int a=12;a+=a-=a*a;\"后,a的值是________。

参考答案:-264 (赋值运算是先右后左,a-=a*a—> a= a-a*a, 得到新a值为-132;接下来原式子变成a+=-132,等价于:a= a+(-132), 得到新a值为a=-132+(-132),即:a=-264

2. 设有定义:int x,y; 则执行y=(x=1,++x,x+2);语句后,y的值是________。

参考答案:4 (小括号里面是三个子式构成逗号表达式,逗号表达式的求值是从左向右的)

3. 求自然数1~100之和,即计算sum=1+2+3+⋯+100。 #include using namespace std; int main() {

int i(1), sum(0); while ( ____(1) ____) {

____(2) ____; i++; }

cout<<\"sum=\"<参考答案:(1) i<=100, (2) sum+=i 或 sum=sum+i 或 sum=i+sum

4. 输入一个正整数,求该数的阶乘。

#include using namespace std; int main( ) { int i,n; long int fact=1;

cout<<\"请输入一个正整数:\"; ____(1) ____ for(i=2;i<=n;i++)

____(2) ____

cout<(1) cin>>n; (2) fact*=i; 或 fac=fac*i;

5. 以下程序显示输出倒三角图案。 #include void main( ) { int i,j; for(i=0;i<4;i++) {

for(j=0;j<____(1) ____; j++) cout<<\" \";

for(j=0;j<2*(3-i)-1;j++) cout<<\"*\";

cout<<____(2)____ //要求使用格式控制符 } }

参考答案:(1) i, (2) endl;

6. 完成以下语句,使得当x>10时,y值为5,否则y值为-5: int x,y; if (x>10)

y=5; ________

y=-5; 参考答案: else

7. 设有定义:char s[ ]=\"d\a\\101bc\"; 则调用函数strlen(s)的值为:________。 参考答案:6

8. 给定程序中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返回main函数。2/1+3/2+5/3+8/5+13/8+21/13 ⋯⋯ 例如,若n = 5,则应输出:8.391667。

#include ____ (1)____ {

int a, b, c, k; double s; s = 0.0; a = 2; b = 1;

for ( k = 1; k <= n; k++ ) { ____(2)____ c = a; a = a + b; b = c; } return s; }

void main( ) { int n = 5;

cout<<\"The value of function is: \"<参考答案:(1) double fun(int n)—函数定义的首行, (2) s =s+ (double)a / b;

9. 有以下声明: int f3(int a[ ],int n); int x[10],y;

要将数组名x、数组元素个数10作为函数参数的调用语句为: y=________; 参考答案:f3(x,10)

10. 若有float型二维数组a[3][4],则与数组元素的指针表示方式*(*(a+2)+3)等价的下标表示方式表示为_______。 参考答案:a[2][3]

11.假定一个一维数组的定义为“char a[8],b;”,若把该数组的最后一个元素赋值给b,采取的表达式是________。 参考答案:b=a[7];

12. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=′a′, g=′e′; 则表达式a[g-c] 的值是________。 参考答案:5 (即a[4])

13. 设有定义:char c[]=\"ab12cd34ef\"; 则c数组中ASCII码值为99的元素是:________。 参考答案:c[4]

14. 设有定义:char str[ ]=\"ABC\"; 则数组str有________个元素。 参考答案:4

15. 有下面的程序段 char *s=\"abcde\p=s+2; cout<则运行结果是________。

参考答案:cde (s指针指向字符串首地址,即字符a;p=s+2;使得p指向字符c,p存储了\"abcde\"中c字符的地址,“cout<<字符指针”这种句子要特别注意,它不是输出地址值,而是输出从该地址单元开始所对应的字符串。

三:判断题(总分:12.0,共12题)

1. (本题分值:1.0)只能对结构体变量中的成员赋值,而不能对结构体类型赋值。 正确

2. (本题分值:1.0)main函数能调用其它函数,其它函数也能调用main函数。 错误

3. (本题分值:1.0)

如果一个函数没有形式参数,调用该函数时,可以省略括号对( )。错误

4. (本题分值:1.0) 在一个程序中,全局变量的名称与局部变量的名称不能相同。错误

5. (本题分值:1.0)对于一维数组a,a与&a[0]都表示数组中首元素的存储地址,该地址称为数组的首地址。正确

6. (本题分值:1.0) 对于如下代码:char *cp; cp=\"I am a student.\";

该语句将字符串首字符所占字节的地址赋给cp,不是将字符串赋给cp。 正确

7. (本题分值:1.0) 若有定义:char s[ ]=\"student\"; 则s包含8个元素。 正确

8. (本题分值:1.0) 同一数组的各元素的数据类型相同。正确

9. (本题分值:1.0)类中的函数成员可以在类体中定义,也可以在类体之外定义。 正确

10. (本题分值:1.0)一个被调函数的函数体中又可以出现函数调用语句,这种调用现象称为函数的嵌套调用。 正确

11. (本题分值:1.0) 假设有:int a[5];则*a可表示a[0]。 正确

12. (本题分值:1.0) 在C++中,函数的指针就是函数的入口地址(或首条指令地址)。正确

四:问答题(总分:20.0,共4题)---即阅读程序写出运行结果

1. (本题分值:5.0)

#include #include using namespace std; const int N=10; int main() {int i=1; for(;i<=N;i++) { if(i%5!=0) continue; cout<参考答案:5 10

2. (本题分值:5.0) #include using namespace std; int main()

{ int a(5),b(30),k; k=a*b; while (a!=b) { if (a>b) a-=b; if (acout<<\"k=\"<参考答案:k=30

3. (本题分值:5.0) 若有下列函数及其相应的调用语句(若有......,表示该题有省略语句,但不影响对该程序结果的判断): ……… bool fun(long n)

{ int sqrtm=(int)sqrt(n); for (int i=2; i<=sqrtm;i++) if (n%i==0) return false; return true; } void main() { long a=10,b=20;

if (a%2==0) a++;

for (long m=a; m<=b; m+=2)

if (fun(m)) cout<}

则该程序的输出结果是( )。 参考答案:11 13 17 19

4. (本题分值:5.0) 若有下列函数及其相应的调用语句(若有......,表示该题有省略语句,但不影响对该程序结果的判断): …………… long int f( int a, int n) { int I, t, s=0; t=a;

for (i=1; i<=n; i++) { s=s+t; t=a*t; } return s; } void main()

{ cout<<\"result=\"<五:编程题 (总分:10.0,共1题)

1. (本题分值:10.0) 编程计算π的近似值,直到最后一项的绝对值小于10为止,近似公式为:

81111... 4357参考程序如下(加红颜色的代码是考生自己写的,其余代码是原来考试文件中本来有的): // ExamCProg.cpp : Defines the entry point for the console application. #include \"stdafx.h\" #include #include using namespace std;

int main(int argc, char* argv[ ] ) //原来的内容不要动

{ double t=1.0,s=0, pai; //t代表数列中的通项,s用来存放数列和,Pai用来存放圆周率的最终结果 int i=1; //i代表数列中的项序号,

while (fabs(t)>=10E-8) //当通项的绝对值大于等于10的负8次方时,才执行循环进行累加 { s=s+t; //将当前项累加到s中 i++; //求出下一项的序号

t=(double)1/(2*i-1); //求出下一项的绝对值(特别注意除法运算,操作数若都用整型数据,结果也会是整型数据,这样会丢失小数部分,当除法结果的小数部分不是0时从而带来误差) if (i%2= =0) //对偶数项另外做处理(因为偶数项的值是负数)

t = -t; }

pai=4*s; //Pai用来存放最终结果圆周率 cout<<\"pai=\"<

因篇幅问题不能全部显示,请点此查看更多更全内容