一、单选题 (总分: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 参考答案: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 int i(1), sum(0); while ( ____(1) ____) { ____(2) ____; i++; } cout<<\"sum=\"< 4. 输入一个正整数,求该数的阶乘。 #include cout<<\"请输入一个正整数:\"; ____(1) ____ for(i=2;i<=n;i++) ____(2) ____ cout< 5. 以下程序显示输出倒三角图案。 #include 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 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: \"< 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 2. (本题分值:5.0) #include { int a(5),b(30),k; k=a*b; while (a!=b) { if (a>b) a-=b; if (acout<<\"k=\"< 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=\"< 1. (本题分值:10.0) 编程计算π的近似值,直到最后一项的绝对值小于10为止,近似公式为: 81111... 4357参考程序如下(加红颜色的代码是考生自己写的,其余代码是原来考试文件中本来有的): // ExamCProg.cpp : Defines the entry point for the console application. #include \"stdafx.h\" #include 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=\"< 因篇幅问题不能全部显示,请点此查看更多更全内容