阶段一C语言整理后测试题.doc

上传人:xt****7 文档编号:126356115 上传时间:2020-03-24 格式:DOC 页数:27 大小:68.50KB
返回 下载 相关 举报
阶段一C语言整理后测试题.doc_第1页
第1页 / 共27页
阶段一C语言整理后测试题.doc_第2页
第2页 / 共27页
阶段一C语言整理后测试题.doc_第3页
第3页 / 共27页
阶段一C语言整理后测试题.doc_第4页
第4页 / 共27页
阶段一C语言整理后测试题.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《阶段一C语言整理后测试题.doc》由会员分享,可在线阅读,更多相关《阶段一C语言整理后测试题.doc(27页珍藏版)》请在金锄头文库上搜索。

1、一、C语言选择题1. break关键字在哪一种语法结构中不能使用? (C) A. for语句 B. switch语句C. if语句 D. while语句 2. 现在最快且最通用的排序算法是什么? (A )A. 快速排序 B. 冒泡排序C. 选择排序 D. 外部排序3设x和y均为bool量,则x&y为真的条件是(A)。A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假4下面的哪个保留字不能作为函数的返回类型(C)。A. void B. int C. new D. long5假定a为一个整型数组名,则元素a4的字节地址为A 。A. a+4 B. a+8 C. a+16 D.

2、 a+326. C库函数strstr的功能是? (A )A. 查找子串 B. 计算字符串长度C. 字符串比较 D. 连结字符串 二、C语言填空题1.某32位系统下, C+程序,请计算sizeof 的值(5分).char str = “Hello”char *p = str ;int n = 10;请计算sizeof (str ) = ?(1)sizeof ( p ) = ?(2)sizeof ( n ) = ?(3)void Foo ( char str100)请计算sizeof( str ) = ?(4)void *p = malloc( 100 );请计算sizeof ( p ) = ?(

3、5)答:(1)6 (2)4 (3) 4 (4)4 (5)42.设int arr=6,7,8,9,10; int *ptr=arr; *(ptr+)+=123;printf(%d,%d,*ptr,*(+ptr);( 8, 8 ) 3.有数组定义int a22=1,2,3;则a01的值为0。 (T ) 4.int (*ptr) (),则ptr是一维数组的名字。 (F)5.指针在任何情况下都可进行,=,=,=运算。 (F)6.switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。(F)7.#define print(x) printf(the

4、 no, #x, is ) (T)8.定义 int *a34, 则变量占有的内存空间为:_答:此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为34448。9. 如果i等于5,那么( +i ) - -的返回值是_6_。三、C语言简答题1. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它

5、只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。2. 将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当

6、参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用*指针变量名的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。3 在什么时候需要使用“常引用”?如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符 &引用名=目标变量名;例1int a ;const int &ra=a;ra=1; /错误a=1; /

7、正确 例2string foo( );void bar(string & s); 那么下面的表达式将是非法的:bar(foo( );bar(hello world); 原因在于foo( )和hello world串都会产生一个临时对象,而在C+中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。引用型参数应该在能被定义为const的情况下,尽量定义为const4. “引用”与指针的区别是什么?指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的

8、操作就是对目标变量的操作。此外,就是上面提到的对函数传ref和pointer的区别。5. 结构与联合有和区别?1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。6.分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。答案:BOOL : if ( !a ) or if(a)int : if ( a = 0)float :co

9、nst EXPRESSION EXP = 0.000001 if ( a -EXP)pointer : if ( a != NULL) or if(a = NULL) 7.请说出const与#define 相比,有何优点?答:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试8.简述数组与指针的区别?数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

10、(1)修改内容上的差别char a = “hello”;a0 = X;char *p = “world”; / 注意p 指向常量字符串p0 = X; / 编译器不能发现该错误,运行时错误(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C+/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。char a = hello world;char *p = a;cout sizeof(a) endl; / 12 字节cout

11、 sizeof(p) endl; / 4 字节计算数组和指针的内存容量void Func(char a100)cout sizeof(a) endl; / 4 字节而不是100 字节9.头文件中的 ifndef/define/endif 干什么用?预处理答:防止头文件被重复引用10. #include 和 #include “filename.h” 有什么区别?答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。11. switch()中不允许的数据类型是?答:实型12局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用: ;局部变量可以与全局变量同名

12、,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 13如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 14.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可

13、以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.15static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都

14、是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 综上所述:static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号