c语言经典笔试题(非常全)

上传人:ni****g 文档编号:497993114 上传时间:2024-02-17 格式:DOCX 页数:54 大小:67.37KB
返回 下载 相关 举报
c语言经典笔试题(非常全)_第1页
第1页 / 共54页
c语言经典笔试题(非常全)_第2页
第2页 / 共54页
c语言经典笔试题(非常全)_第3页
第3页 / 共54页
c语言经典笔试题(非常全)_第4页
第4页 / 共54页
c语言经典笔试题(非常全)_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《c语言经典笔试题(非常全)》由会员分享,可在线阅读,更多相关《c语言经典笔试题(非常全)(54页珍藏版)》请在金锄头文库上搜索。

1、细心整理1. 用预处理指令#define 声明一个常数,用以说明1年中有多少秒忽视闰年问题#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) (A) = (B) (A) : (B) 4. 嵌入式系统中常常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是: while(1) 一些程序员更宠爱如下方案: for(;) 第三个方案是用 goto Loop: . goto Loop;5. 用变量a给出下面的定义 a) 一个整型数

2、An integer b) 一个指向整型数的指针A pointer to an integer c) 一个指向指针的的指针,它指向的指针是指向一个整型数A pointer to a pointer to an integer d) 一个有10个整型数的数组An array of 10 integers e) 一个有10个指针的数组,该指针是指向一个整型数的An array of 10 pointers to integers f) 一个指向有10个整型数数组的指针A pointer to an array of 10 integers g) 一个指向函数的指针,该函数有一个整型参数并返回一个整

3、型数A pointer to a function that takes an integer as an argument and returns an integer h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 An array of ten pointers to functions that take an integer argument and return an integer 答案是: a) int a; / An integer b) int *a; / A pointer to an integer c) int *a; / A

4、pointer to a pointer to an integer d) int a10; / An array of 10 integers e) int *a10; / An array of 10 pointers to integers f) int (*a)10; / A pointer to an array of 10 integers g) int (*a)(int); / A pointer to a function a that takes an integer argument and returns an integer h) int (*a10)(int); /

5、An array of 10 pointers to functions that take an integer argument and return an integer 6. 关键字static的作用是什么?这个简洁的问题很少有人能答复完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内但在函数体外,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被

6、限制在声明它的模块的本地范围内运用。 7关键字const是什么含意? const int a; int const a; const int *a; int * const a; int const * a const;前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针也就是,整型数是不行修改的,但指针可以。第四个意思a是一个指向整型数的常指针也就是说,指针指向的整型数是可以修改的,但指针是不行修改的。最终一个意味着a是一个指向常整型数的常指针也就是说,指针指向的整型数是不行修改的,同时指针也是不行修改的。假如应试者能正确答复这些问题,那么他就给我留下了一个好印象。8

7、. 关键字volatile有什么含意 并给出三个不同的例子。一个定义为volatile的变量是说这变量可能会被意想不到地变更,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必需每次都当心地重新读取这个变量的值,而不是运用保存在存放器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件存放器如:状态存放器 2). 一个中断效劳子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 1). 一个参数既可以是const还可以是volatile吗?说明为什么。 2). 一个指针可以是vo

8、latile 吗?说明为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) return *ptr * *ptr; Ptr内容可能被修改,无法保证两次取得同一个值,应当先取出值放入一个变量中,然后通过这个变量来计算9. 嵌入式系统总是要用户对变量或存放器进展位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,其次个去除a 的bit 3。在以上两个操作中,要保持其它位不变。#define BIT3 (0x1 6) puts( 6) : puts(6 13. 评价下面的代码片断:unsigned int zero = 0; unsign

9、ed int compzero = 0xFFFF; /*1s complement of zero */14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆heap中动态支配内存的过程的。那么嵌入式系统中,动态支配内存可能发生的问题是什么?主要有三种类型:内存泄露、内存碎片和内存崩溃 内存崩溃是内存运用最紧要的结果,主要缘由有数组访问越界、写已经释放的内存、指针计算错误、访问堆栈地址越界等等。碎片收集的问题,变量的持行时间等等下面的代码片段的输出是什么,为什么?char *ptr; if (ptr = (char *)malloc(0) = NULL) puts(Got a null

10、pointer); else puts(Got a valid pointer); 该代码的输出是“Got a valid pointer”。15. Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思索一下下面的例子: #define dPS struct s * typedef struct s * tPS; 答案是:typedef更好。思索下面的例子: dPS p1,p2; tPS p3,p4;第一个扩展为 struct s * p1, p2;上面的代码定义p1为一个指向构造的指,p2为一个实际的构造,这或许不是你想要的。其次个例子正

11、确地定义了p3 和p4 两个指针。16. C语言同意一些令人震惊的构造,下面的构造是合法的吗,假如是它做些什么? int a = 5, b = 7, c; c = a+b;上面的代码被处理成: c = a+ + b; 因此, 这段代码持行后a = 6, b = 7, c = 12。 17.找错题试题1:void test1()char string10;char* str1 = 0123456789;strcpy( string, str1 ); 试题2:void test2()char string10, str110;int i;for(i=0; i10; i+)str1i = a;str

12、cpy( string, str1 ); 试题3:void test3(char* str1)char string10;if( strlen( str1 ) = 10 )strcpy( string, str1 ); 解答:试题1字符串str1须要11个字节才能存放下包括末尾的0,而string只有10个字节的空间,strcpy会导致数组越界;对试题2,假如面试者指出字符数组str1不能在数组内完毕可以给3分;假如面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此根底上指出库函数strcpy工作方式的给10分;对试题3,if(strlen(str1) = 10)应改为if(strlen(str1) 10),因为strlen的结果未统计0所占用的1个字节。18写出字符串strcpy的函数实现过程式void strcpy( char *strdest, char *strsrc ) while( (*strdest+ = * strsrc+) != 0 ); 4分void strcpy( char *strdest, const char *strsrc ) /将源字符串加const,说明其为输入参数,加2分 while( (*strdest+ = *

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

当前位置:首页 > 办公文档 > 工作计划

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