《c++程序设计测试(带答案)及习题(40页).doc》由会员分享,可在线阅读,更多相关《c++程序设计测试(带答案)及习题(40页).doc(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-c+程序设计测试(带答案)及习题-第 40 页1.一个最简单的C+程序,可以只有一个( )。 (C)(a) 库函数 (b) 自定义函数 (c) main函数 (d) 空函数2.用C+语言编制的源程序要变为目标程序必须要经过( )。 (D)(a) 解释 (b) 汇编 (c) 编辑 (d) 编译3. C+程序中的简单语句必须以( )结束。 (B)(a) 冒号 (b) 分号 (c) 空格 (d) 花括号4.有说明 int a=0; double x=5.16; 以下语句中,( )属于编译错误。 (C)(a) x=a/x; (b) x=x/a; (c) a=a%x; (d) x=x*a;5. 执行C
2、+程序时出现的“溢出”错误属于( )错误。 (D)(a) 编译 (b) 连接 (c) 运行 (d) 逻辑6.下列选项中,全部都是C+关键字的选项为( )。 (C) (a) while IF Static (b) break char go(c) sizeof case extern (d) switch float integer7. 按C+标识符的语法规定,合法的标识符是( )。 (A)(a) _abc (b) new (c) (d) “age“8下列选项中,( )不能作为C+的分隔符。 (A)(a) 标识符 (b) ; (c) : (d) +9下列正确的八进制整型常量表示是( )。 (B)
3、(a) 0a0 (b) 015 (c) 080 (d) 0x1010下列错误的十六进制整型常量表示是( )。 (C)(a) 0x11 (b) 0xaf (c) 0xg (d) 0x1f11 在下列选项中,全部都合法的浮点型数据的选项为( )。 (B)(a) -1e3.5 15. 2e-4 (b) 12.34 -1e+5 0.1E-12(c) 0.2e-2 -12345. e-5 (d) 5.0e(1+4) 0.1 8e+212下列正确的字符常量为( )。 (D)(a) “a” (b) name (c) a (d) 10113下列选项中,( )不能交换变量a和b的值。 (D)(a) t=b; b
4、=a; a=t; (b) a=a+b; b=a-b; a=ab;(c) t=a; a=b; b=t; (d) a=b; b=a; 14关于下列语句叙述错误的是( )。 (A)int i=10, *p=&i;(a) p的值为10 (b) p指向整型变量i(c) *p表示变量i的值 (d) p的值是变量i的地址15有以下变量声明,下面不正确的赋值语句是( )。 (B)int a=5, b=10, c; int *p1 = &a, *p2 = &b; (a) *p2 = b ; (b) p1 = a ;(c) p2 = p1 ; (d) c = *p1 *( *p2 ) ;16有以下变量声明,下面正
5、确的语句是( )。 (B) int a=10, b; int &pa=a, &pb=b; (a) &pb = a; (b) pb = pa; (c) pb = &pa; (d) *pb = *pa;17执行下面语句序列后,a和b的值分别为( )。 (B)int a = 5 , b = 3 , t ;int &ra = a ;int &rb = b ;t = ra ; ra = rb ; rb = t ;(a) 3和3 (b) 3和5 (c) 5和3 (d) 5和518. 在下列运算符中,( )优先级最高。 (D)(a) = (b) *= (c) + (d) *19.在下列运算符中,( )优先级
6、最低。 (D)(a) ! (b) & (c) != (d) ? :20设 int i=1, j=2; 则表达式 i+j 的值为( )。 (C)(a) 1 (b) 2 (c) 3 (d) 421设 int i=1, j=2; 则表达式 +i+j 的值为( )。 (D)(a) 1 (b) 2 (c) 3 (d) 422在下列表达式选项中,( )是正确。 (C)(a) +(a+) (b) a+b (c) a+b (d) a+b23已知 int i=0, j=1, k=2; 则逻辑表达式 +i|-j&+k 的值为( )。 (B)(a) 0 (b) 1 (c) 2 (d) 324. 执行下列语句后,x的
7、值是( ) (D)。int x, y ;x = y = 1; + x | + y ;(a) 不确定 (b) 0 (c) 1 (d) 225. 执行下列语句后,y的值是( )。 (C)int x, y ;x = y = 1; + x | + y ;(a) 不确定 (b) 0 (c) 1 (d) 226.设X为整型变量,不能正确表达数学关系 1X5 的C+逻辑表达式是( )。 (A)(a) 1 X 5 (b) X=2|X=3|X=4(c) 1X&X5 (d) !(X=5)27. 已知 int x=5; 执行下列语句后,x的值为( )。 (C)x += x -= x * x; (a) 25 (b)
8、40 (c) 40 (d) 2028. 设 int a=1, b=2, c=3, d=4; 则以下条件表达式的值为( )。 (A)a b ? a : c d ? c : d(a) 1 (b) 2 (c) 3 (d) 429. 以下逗号表达式的值为( )。 (D)( x = 4 * 5, x * 5 ), x + 25 (a) 25 (b) 20 (c) 100 (d) 451.1 把下列数学表达式写成c+算术表达式1. 2. xxx(ax+b)+c+d+e3. ln(1+|10) 4.5. cot 6. lg(a2+ab+b2) 1.2 用关系表达式或逻辑表达式表示下列条件 1. i 被j整除
9、 2. n是小于正整数k的偶数 3. 1x10 4. x,y其中有一个小于z5. y 100,10,并且 y 10,1006. 坐标点(x, y)落在以(10, 20)为圆心,以35为半径的圆内 7. 三条边a,b和c构成三角形 8. 年份Year能被4整除,但不能被100整除或者能被400整除1.3 阅读下列程序,写出执行结果1.#include void main() int a = 1, b = 2, x, y; cout a+b endl; cout a % b b;? y = x- & b; cout x endl; cout y endl;2#include void main()
10、 int x,y,z,f; x = y = z = 1; f = -x | y- & z+; cout x = x endl; cout y = y endl; cout z = z endl; cout f = f endl;3#include #include void main() int a=123; int &ra=a; int *pa=&a; coutsetw(5)decasetw(5)octrasetw(5)hex*paendl;1.4 思考题 1什么叫数据类型?数据的类型定义有什么作用? 2数据对象在C+中有什么不同的访问方式?请编写一个程序验证之。 3普通数据类型变量和指针类
11、型变量的定义、存储、使用方式上有何区别?请编写一个程序验证之。 4什么叫数据对象的引用?对象的引用和对象的指针有什么区别?请用一个验证程序说明之。 5为了约束只能对数据对象的值做读操作,C+采用什么方式?请做出简要归纳。 6什么叫表达式?表达式值的类型由什么因素决定?使用不同运算符连接以下3个变量,请写出5个以上获得值等于1的表达式。 int a=1, b=2; double x=0.5;1.5 编程题 1.输入一个三位整数,将它反向输出。2.输入平面上某点横坐标x和纵坐标y,若该点在由图1表示的方块区域内,则输出1;否则,输出0。 图1 正方形3.输入三个整数,求出其中最小数(要求使用条件表
12、达式)。1.6 操作题建立简单控制台程序。使用VC6开发环境来调试以下源程序。 #include #include void main() double a, b, c, s, area; cout a b c; / 输入三角形的三条边 s = ( a + b + c ) / 2.0; area = sqrt( s * ( s-a ) * ( s-b ) * ( s-c ) ); / 求三角形的面积 cout area = area = 0 ) if( x != 0 ) if( x = 0 ) y = 0 ; if( x 0 ) y = 1 ; else y = -1; else y = 0
13、(c) if( x = 0 ) (d) y = -1 ; if( x 0 ) y = -1 ; if( x = 0 ) else y = 0 ; if( x 0 ) y = -1 ; else y = 1 ; else y = 1 ;3假设i=2,执行下列语句后i的值为( )。 (B)switch( i ) case 1 : i + ;case 2 : i - ;case 3 : + i ; break ;case 4 : - i ;default : i + ; (a) 1 (b) 2 (c) 3 (d) 44已知int i=0,x=0; 下面while语句执行时循环次数为( )。 (D)
14、while( !x & i 3 ) x + ; i + ; (a) 4 (b) 3 (c) 2 (d) 15已知int i=3;下面do_while 语句执行时循环次数为( )。 (B) do i-; coutiendl;while( i!= 1 ); (a) 1 (b) 2 (c) 3 (d) 无限6下面for语句执行时循环次数为( )。 (B) for ( int i=0,j=5;i=j; ) cout i j endl; i+; j-; (a) 0 (b) 5 (c) 10 (d) 无限7以下死循环的程序段是( )。 (B) (a) for( int x = 0 ; x = 0 ) ;
15、(c) int a = 5 ; while( a ) a - ; ; (d) int i = 3 ; for( ; i ; i - ) ;思考题1. C+中有什么形式的选择控制语句?归纳它们语法形式、应用场合。根据一个实际问题使用不同的条件语句编程。2. 什么叫循环控制?归纳比较C+中各种循环控制语句的语法、循环条件和循环结束条件的表示形式。3. 根据一个实际问题,用不同的循环语句编程,分析其优缺点。4. 用if语句和goto语句组织循环,改写2.3第3小题编写的程序。分析在什么情况下可以适当使用goto语句。2.1 阅读下列程序,写出执行结果1. #include void main() i
16、nt a,b,c,d,x; a = c = 0; b = 1; d = 20; if( a ) d = d-10; else if( !b ) if( !c ) x = 15; else x = 25; cout d endl;2.#include void main() int a = 0, b = 1; switch( a ) case 0: switch( b ) case 0 : cout a= a b= b endl; break; case 1 : cout a= a b= b endl; break; case 1: a+; b+; cout a= a b= b endl;3.
17、#include void main() int i = 1; while( i=10 ) if( +i % 3 != 1 ) continue; else cout i endl;4. #include void main() int i = 0 , j = 5; do i+; j-; if ( i3 ) break; while ( j0 ); cout i= i t j= j endl;5.#include void main() int i,j; for( i=1, j=5; ij; i+ ) j-; cout i t j endl;6. #include void main() in
18、t i, s = 0; for( i=0; i5; i+ ) switch( i ) case 0: s += i; break; case 1: s += i; break; case 2: s += i; break; default: s += 2; cout s= s endl;7. #include void main() int i, j, x = 0; for( i=0; i=3; i+ ) x+; for( j=0; j=3; j+ ) if( j % 2 ) continue; x+; x+; cout x= x endl;2.2 思考题1. C+中有什么形式的选择控制语句?
19、归纳它们语法形式、应用场合。根据一个实际问题使用不同的条件语句编程。2. 什么叫循环控制?归纳比较C+中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。3. 根据一个实际问题,用不同的循环语句编程,分析其优缺点。4. 用if语句和goto语句组织循环,改写思考题2.3第3小题编写的程序。分析在什么情况下可以适当使用goto语句。2.3编程题1输入某学生成绩,若成绩在85分以上输出“very good”,若成绩在60分到85分之间输出“good”,若成绩低于60分输出“no good”。2输入三个数,按从小到大的顺序输出。3输入三角形的三条边,判别它们能否形成三角形,若能,则
20、判断是等边、等腰、还是一般三角形。4输入百分制成绩,并把它转换成五级分制,转换公式为:5编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s(表示剪刀)或r(表示石头)或p(表示纸),要求两个游戏者交替输入,计算机给出输赢的信息。6.输入一个整数,输出该整数的所有素数因子。例如,输入120,输出为2、2、2、3和5。7.使用迭代公式 编程序求某一正整数a的平方根。8.已知 ,求sinx,cosx和tanx的值。9.在100到200中找出同时满足用3除余2,用5除余3和用7除余2的所有整数。10.求100到999中的水仙花数。所谓水仙花数是指一个三位数
21、,它的每位数字的立方之和等于该数。例如,因为153=13+53+33,所以153为水仙花数。11.求1000之内的所有完数。所谓完数是指一个数恰好等于它的所有因子之和。例如,因为6=1+2+3,所以6为完数。12.编一程序显示如下图案:13.已知XYZ+YZZ=532,其中X,Y和Z为数字,编一程序求出X,Y和Z。2.4 操作题调试程序 (1)以下程序试图求的近似值。#include #include void main() long int i=0 ; double sum, term, pi ; do i += 1 ; term = 1 / ( i*i ) ; sum += term ;
22、while( term = 1e-12 ); pi = sqrt( sum * 6 ) ; cout pi = pi endl ;输入程序编译后使用Debug跟踪,单步执行程序,记录以下变量值的变化。i termsum0 1 2 3 4 5 : 回答以下问题:a)从跟踪结果分析,term和sum的值有什么错误?b)循环结束后,i的值是多少?用什么简单的办法可以看到?c)对程序做了什么修改使其得到正确的结果?(2)编写第2章习题2.3-12输出符号三角形的图案程序,记录:a)程序出现了什么编译错误,如何解决。b)程序运行后图案显示正确吗?采用跟踪方法记录内外循环控制变量的变化。c)若要程序输出以
23、下图案,应该做什么修改?请编程实现并在程序中加以适当注释说明。选择题1以下正确的函数原型为( )。 (D) (a) f1( int x; int y ); (b) void f1( x, y ); (c) void f1( int x, y ); (d) void f1( int, int );2有函数原型 void fun2( int ); 下面选项中,不正确的调用是( )。 (C) (a) int x = 21; fun2( x ); (b) int a = 15; fun2( a*3 ); (c) int b = 100; fun2( &b ); (d) fun2( 256 );3有函数
24、原型 void fun3( int * ); 下面选项中,正确的调用是( )。 (C) (a) double x = 2.17; fun3( &x ); (b) int a = 15 ; fun3( a*3.14 ); (c) int b = 100; fun3( &b ); (d) fun3( 256 );4有函数原型 void fun4( int & ); 下面选项中,正确的调用是( )。 (C) (a) int x = 2.17; fun4( &x ); (b) int a = 15; fun4( a*3.14 ); (c) int b = 100; fun4( b ); (d) fun
25、4( 256 ) ;5有声明 int fun5( int ); int (*pf)(int) = fun5; 下面选项中,正确的调用是( )。 (C) (a) int a=15; int n=fun5(&a); (b) int a = 15; cout(&pf)(a); (c) cout(*pf)( 256 ); (d) cout *pf( 256 );6在VC中,若定义一个函数的返回类型为void,以下叙述正确的是( )。 (C) (a) 函数返回值需要强类型转换 (b) 函数不执行任何操作 (c) 函数本身没有返回值 (d) 函数不能修改实际参数的值7函数参数的默认值不允许为( )。 (C
26、) (a) 全局常量 (b) 直接常量 (c) 局部变量 (d) 函数调用8使用重载函数编程序的目的是( )。 (A) (a) 使用相同的函数名调用功能相似的函数 (b) 共享程序代码 (c) 提高程序的运行速度 (d) 节省存贮空间9下列的描述中( )是错误的。 (B) (a) 使用全局变量可以从被调用函数中获取多个操作结果 (b) 局部变量可以初始化,若不初始化,则系统默认它的值为0 (c) 当函数调用完后,静态局部变量的值不会消失 (d) 全局变量若不初始化,则系统默认它的值为010下列选项中,( )的具有文件作用域。 (C)(a) 语句标号 (b) 局部变量 (c) 全局变量 (d)
27、静态变量思考题1函数的作用是什么?如何定义函数?什么叫函数原型?2什么叫函数值的返回类型?什么叫函数的类型?在C+中可以用什么不同的方式调用一个已经定义的函数?请写一个验证程序说明。3 什么叫形式参数?什么叫实际参数?C+函数参数有什么不同的传递方式?请写一个验证程序说明。4C+函数通过什么方式传递返回值?当一个函数返回指针类型时,对返回表达式有什么要求?若返回引用类型时,是否可以返回一个算术表达式?为什么?5变量的生存期和变量作用域有什么区别?请举例说明。6静态局部变量有什么特点?编写一个应用程序,说明静态局部变量的作用。7在一个语句块中能否访问一个外层的同名局部变量?能否访问一个同名的全局
28、变量? 如果可以,应该如何访问?请写一个验证程序说明。3.1 阅读下列程序,写出执行结果1. #include #include int f( int ) ; void main() int i; for( i = 0; i 3; i + ) cout f( i ) endl; int f( int a ) int b = 0 , c = 1; b +; c+; return ( a + pow( b, 2 ) + c );2. void func(int a, int b, int c = 3, int d = 4 ); #include void main() func( 10, 15,
29、20, 30 ); func( 10, 11, 12 ); func( 12, 12 ); void func( int a, int b, int c, int d ) cout a t b t c t d endl; 3.#include void func( int, int, int * ) ; void main() int x, y, z; func( 5, 6, &x ); func( 7, x, &y ); func( x, y, &z ); cout x , y , z endl; void func( int a , int b , int *c ) b += a ; *c
30、 = b a ; 4.#include void func( int, int, int & ); void main() int x=0 , y=1 , z=2; func( 1 , 2 , x ); func( x + y , y , y ); func( z , x + y , z ); cout x , y , z endl ; void func( int a , int b , int &c ) b += a ; c = b a ; 5. #include int f2( int, int ); int f1( int a , int b ) int c ; a += a ; b
31、+= b ; c = f2( a+b , b+1 ); return c; int f2( int a , int b ) int c ; c = b % 2 ; return a + c; void main() int a = 3 , b = 4; cout f1( a , b ) endl;6. #include int age( int n ) int f; if( n = 1 ) f = 10 ; else f = age( n-1 ) + 2; return f ; void main() cout age : age( 5 ) endl; 7. #include int f1(
32、int a , int b ) return a + b ; int f2( int a , int b ) return a - b ; int f3( int( *t )( int , int ) , int a , int b ) return ( *t )( a, b ) ; void main() int ( *p )( int, int ); p = f1 ; cout f3( p, 4, 8 ) endl; p = f2 ; cout f3( p, 8, 4 ) endl;8.#include int sub( int, int ); int a = 1 ; void main(
33、) int m = 1, n = 2, f; f = sub( m, n ); cout a t f endl; f = sub( m, n ) ; cout a t f endl; int sub( int c, int d ) static int m = 2, n = 5 ; cout m t n t endl; a = + a ; c = m + ; d = n +; return c + d ;3.2 思考题1函数的作用是什么?如何定义函数?什么叫函数原型?2什么叫函数值的返回类型?什么叫函数的类型?如何通过指向函数的指针调用一个已经定义的函数?请写一个验证程序说明。3 什么叫形式参
34、数?什么叫实际参数?C+函数参数有什么不同的传递方式?请写一个验证程序说明。4C+函数通过什么方式传递返回值?当一个函数返回指针类型时,对返回表达式有什么要求?若返回引用类型时,是否可以返回一个算术表达式?为什么?5变量的生存期和变量作用域有什么区别?请举例说明。6静态局部变量有什么特点?编写一个应用程序,说明静态局部变量的作用。7在一个语句块中能否访问一个外层的同名局部变量?能否访问一个同名的全局变量? 如果可以,应该如何访问?请写一个验证程序说明。【答案】略3.3 编程题1已知 , 其中sh为双曲正弦函数,即 。编一程序,输入x的值,求y的值。2输入m、n和p的值,求s = 的值。注意判断
35、运算中的溢出。3输入a,b和c的值,编写一个程序求这三个数的最大值和最小值。要求把求最大值和最小值编写成函数,并使用指针或引用作为形式参数把结果返回函数main。4用线性同余法生成随机数序列的公式为:序列中的每一个数rk,可以由它的前一个数rk-1计算出来。例如,如果有:可以产生 65536个各不相同的整型随机数。设计一个函数作随机数生成器,生成一位或两位数的随机数。利用这个随机数生成器,编写一个小学生四则运算的练习程序:可以进行难度选择。一级难度只用一位数,二级难度用两位数; 可以选择运算类型,包括加、减、乘、除等; 给出错误提示; 可以统计成绩。 5已知勒让德多项式为 编一程序,从键盘上输
36、入x和n的值,使用递归函数求p (x)的值。6把以下程序中的print()函数改写为等价的递归函数。 #include void print( int w ) for ( int i = 1 ; i = w ; i + ) for ( int j = 1 ; j = i ; j + ) cout i ; cout endl ; void main() print( 5 ) ; 运行显示:1 2 23 3 34 4 4 45 5 5 5 57已知用梯形法求积分的公式为: ,其中h = ( ba ) / n,n为积分区间的等分数,编程序求如下积分的值。要求把求积分公式编写成一个函数,并使用函数指针
37、作为形式参数。调用该函数时,给定不同的被积函数作为实际参数求不同的积分。8编写一个程序,包含三个重载的display函数和一个主函数。要求第一个函数输出double值,前面用字符串“a double:”引导,第二个函数输出一个int值,前面用字符串“a int:”引导,第三个函数输出一个char字符值,前面用字符串“a char:”引导,在主函数中分别用double、int和char型变量作为实参调用display函数。9使用重载函数编程序分别把两个数和三个数从大到小排列。10给定求组合数公式为: ,编一程序,输入m和n的值,求 的值。注意优化算法,降低溢出可能。要求主函数调用以下函数求组合数: int Fabricate( int m, int n ) ; /返回 的值Fabricate函数内又须