c语言常见笔试题及答案 (1)

上传人:wm****3 文档编号:43305427 上传时间:2018-06-05 格式:DOC 页数:56 大小:46.10KB
返回 下载 相关 举报
c语言常见笔试题及答案 (1)_第1页
第1页 / 共56页
c语言常见笔试题及答案 (1)_第2页
第2页 / 共56页
c语言常见笔试题及答案 (1)_第3页
第3页 / 共56页
c语言常见笔试题及答案 (1)_第4页
第4页 / 共56页
c语言常见笔试题及答案 (1)_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《c语言常见笔试题及答案 (1)》由会员分享,可在线阅读,更多相关《c语言常见笔试题及答案 (1)(56页珍藏版)》请在金锄头文库上搜索。

1、c c 语言常见笔试题及答案语言常见笔试题及答案 (1)(1)c 语言常见笔试题总结c 语言笔试题(九)2006-09-06Tag: C 语言1#include “stdio.h“int main()int a;int *p;p = *p = 0x500;a = (int )(*(a = (int )(if(a = (int)p)printf(“equal !n“);elseprintf(“not equal !n“);请问本程序的输出显示是什么?答案:输出显示为”equal!”2struct signed int bit0:1;signed int bit1:1;signed int bit

2、2:1;signed int bit3:1;signed int bit4:1;signed int bit5:1;signed int bit6:1;signed int bit7:1;bits;请问 sizeof(bits)是否是正确的表达式?请问语句 bits mybits; 的定义是否正确?如果不正确,要如何修改上述的结构定义才能使该语句正确?修改后的结构定义是否会影响 sizeof(bits)的正确性?如果正确则该表达式的值为多少?如果将上述的结构中 int 类型改为 char 类型,此时 sizeof(bits)的大小为多少?答案:1)是正确的表达式,因为 sizeof 后面的内容

3、可以是类型,也可以是变量。2)该语句的定义不正确,因为此时的 bits 为一个变量;应该这样修改结构的定义typedef struct signed int bit0:1;signed int bit1:1;signed int bit2:1;signed int bit3:1; signed int bit4:1;signed int bit5:1;signed int bit6:1;signed int bit7:1;bits;修改后 sizeof(bits)表达式依然正确,其值为 4;类型改为 char后其值为 1,注意该值是在 VC 环境中的 32 位程序中得到的值,在不同的编译器其值

4、有可能不同,因此在编程时不能自己假定类似结构的大小。3struct bitunsigned int a0:1,a1:1,a2:1.a7:1;请问这种写法是否正确?为什么?答案:不正确,位域中的变量不能是数组。4struct a int x;char y;struct a z; struct a *p; 请问这种定义结构正确否? 如果有问题,问题在哪里?答案:结构中不能对定义结构本身的非指针变量,如果编译器支持则会导致无限嵌套,因此一般编译器都会认为 struct a 是未定义的类型,即使提前声明也不会有任何用处。5 什么是可重入函数?C 语言中写可重入函数,应注意的事项?答案:可重入函数是指能

5、够被多个线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写可重入函数时通常要注意如下的一些问题:尽量不要使用全局变量,静态变量,如果使用了应该注意对变量访问的互斥。通常可以根据具体的情况采用:信号量机制,关调度机制,关中断机制等方式来保证函数的可重入性。不要调用不可重入的函数,调用了不可重入的函数会使该函数也变为不可重入的函数。注意对系统中的临界资源,互斥资源的访问方式,防止使函数成为不可重入的函数。一般驱动程序都是不可重入的函数,因此在编写驱动程序时一定要注意重入的问题。6 简述 stack frame 的含义。答案:stack frame 的中文译名为:栈框架,表示函数在栈空

6、间的调用层次,以 x86 平台的函数调用为例,通常一个函数编译成汇编程序,都有如下的结构:其中的 leave 指令相当于:mov ebp,esp ;pop ebp各个函数在栈空间的映象为:test1 函数 test2 函数 test3 函数因此在函数 test3 中,就可以根据这种栈框架的形式得到函数调用层次上的每个函数的基址指针,当前栈指针,以及函数调用点等信息。7 printf (“%d%dn”,+n, power(2,n); 其中 power(2,n)为实现一定功能的函数 如 2n 。请问这种表示方法有什么潜在的问题?答案:编译器的不同,对+n 和 power(2,n)处理的先后顺序不一

7、样,形成二义性,造成程序的移植性差,因此最好把+n 写在 printf 函数外面,以消除二义性。printf (s); 请问这样的语句有没有问题?(s 为一指向有效字符串的指针)答案:没有%的话,可以这样表达,如果有%在 s 中的话,有意想不到的输出结果。9 两段代码共存于一个文件,编译时有选择的编译其中的一部分,请问如何实现?答案:有两种简单的办法可以实现:在源码中使用条件编译语句,然后在程序文件中定义宏的形式来选择需要的编译代码。在源码中使用条件编译语句,然后在编译命令的命令中加入宏定义命令来实现选择编译。10数据结构指针传给函数,函数能访问数据单元,但不能修改实际的内容,如何实现?答案:

8、定义为指向常量的指针,这样指针所指的数据结构中的内容就不会被改变。如:const 类型 *p 或 类型 const *p 11 在头文件中定义静态变量,可能产生什么问题? 答案:在使用了该头文件的每个 c 程序文件中都单独存在一个该静态变量,这样造成空间的浪费并且很容易引起错误。因此建议不要在头文件中定义任何变量。12malloc()与 calloc()的区别?答案:1)参数上的区别malloc (size_t size);calloc (size_t n , size_t size);malloc 分配一块 size 大小的内存块,而 calloc 分配一个 n*size大小的内存块2)返回

9、内存块的状态不同malloc 分配的内存块没有被清零,而 calloc 分配的内存块是清了零的。但是建议在使用内存时,如果需要初始化,则最好自己按照需要来进行初试化,不要依赖函数的实现说明。13寄存器变量可不可以访问其地址?可否是全局变量?在什么场合使用寄存器变量? 答案:这些问题都与编译器的实现有关,建议不要声明全局变量为寄存器变量,即使是局部变量都最好不要声明其为寄存器变量,现在的编译器在优化时都会较为合理的安排寄存器变量的使用,而人为的安排有时会造成优化的低效。14“n“ n 的区别?答案:前者是一个字符串并且以/0结束,而后者只是一个简单的字符。15包含预定义头文件 和“ “的区别?答

10、案:只在指定的目录里寻找被包含文件;“ “先在当前目录下查找 ,再在指定目录下查找;通常= 0;)fprintf(fp2,“%dn“,aj);fclose(fp1);fclose(fp2);return 0;第二题.#include int main(void)unsigned long int i,j,k;printf(“please input the numbern“);scanf(“%d“,if( i % 2 = 0)j = i / 2;elsej = i / 2 + 1;printf(“The result is n“);for(k = 0; k j; k+)printf(“%d =

11、 %d + %dn“,i,k,i - k);return 0;#include void main()unsigned long int a,i=1;scanf(“%d“,if(a%2=0)for(i=1;iprintf(“%d“,a,a-i);elsefor(i=1;i=a/2;i+)printf(“ %d, %d“,i,a-i);兄弟,这样的题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例子,可谓是反序的经典例程.void inverse(char *p)if( *p = = )return;inverse( p+1 );printf( “%c“, *p );int ma

12、in(int argc, char *argv)inverse(“abc“);return 0;借签了楼上的“递规反向输出”#include void test(FILE *fread, FILE *fwrite)char buf1024 = 0;if (!fgets(buf, sizeof(buf), fread)return;test( fread, fwrite );fputs(buf, fwrite);int main(int argc, char *argv)FILE *fr = NULL;FILE *fw = NULL;fr = fopen(“data“, “rb“);fw = f

13、open(“dataout“, “wb“);test(fr, fw);fclose(fr);fclose(fw);return 0;在对齐为 4 的情况下struct BBBlong num;char *name;short int data;char ha;short ba5;*p;p=0x1000000;p+0x200=_;(Ulong)p+0x200=_;(char*)p+0x200=_;希望各位达人给出答案和原因,谢谢拉解答:假设在 32 位 CPU 上,sizeof(long) = 4 bytessizeof(char *) = 4 bytessizeof(short int) = sizeof(short) = 2 bytessizeof(char) = 1 bytes由于是 4 字节对齐,sizeof(struct BBB) = sizeof(*p)= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经 Dev-C+验证)p=0x1000000;p+0x200=_;= 0x1000000 + 0x200*24(Ulong)p+0x200=_;= 0x1000000 + 0x200(char*)p+0x200=_;= 0x10000 .

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

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