C语言笔试题目1

100 条经典C语言笔试题目
题目来源:
1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;
2、C 语言面试宝典(林锐《高质量编程第三版》)。
说明:
1、部分C 语言面试题中可能会参杂部分和C++ 相关的知识,为了保持题目的灵活性故保留,但选题最终还是会以C 语言题目为主体;
2、以上公司的面试题目已成为国内中小型企业公司出题模板;
3、由于本人的能力有限加上时间仓促,本课件肯定存在不足之处,恳请各位同学批评指正。

1、请填写bool , float,  指针变量 与“零值”比较的if 
语句。
提示:这里“零值”可以是0, 0.0 , FALSE  或者“空指针”。例如int 变量n  与“零值”比较的if  语句为:
if ( n == 0 ) 
if ( n != 0 ) 
以此类推。
(1)请写出bool flag  与“零值”比较的if  语句:
【标准答案】if ( flag )    if ( !flag )
100 条经典 C语言笔试题目
(2)请写出float  x   与“零值”比较的if  语句:
【标准答案】 const float EPSINON = 0.00001;                   if ((x >= - EPSINON) && (x <= EPSINON)                 不可将浮点变量用“==” 或“!=” 与数字比较,应该设法转化成“>=” 或“<=” 此类形式。
100 条经典 C语言笔试题目
(3)请写出char  *p   与“零值”比较的if  语句
【标准答案】 if (p == NULL)    if (p != NULL) 

2、以下为Linux下的32 位C 程序,请计算sizeof 
值。
char  str[] = “Hello” ;                            
char   *p = str ;                                
i nt    n = 10;                                              
请计算
(1)sizeof (str ) = (2)s i zeof ( p ) =               
(3)sizeof ( n ) =

【标准答案】

(1)6、(2)4 、(3 )4

(4)void Func ( char str[100])                    
{                                          
…… ;                                                            
}                                          
请计算sizeof( str ) =                                      
(5)void * p = malloc( 100 );                                                请计算sizeof ( p ) = 
【标准答案】(4)4、(5)4

4、用变量a 给出下面的定义
e) 一个有10个指针的数组,该指针是指向一个整型
的;
f)  一个指向有10个整型数数组的指针;
g) 一个指向函数的指针,该函数有一个整型参数并
回一个整型数;
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;
【标准答案】e)int *a[10]; f)int (*a)[10]                           g)int (*a)(int);   h) int (*a[10])(int)

5、设有以下说明和定义:
typedef u nion {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句printf("%d",sizeof(struct date)+sizeof(max)); 的
执行结果是:_____
【标准答案】DATE是一个union, 变量公用空间.  里面最大的变量类型是int[5],  占用20个字节.  所以它的大小是20data 是一个struct,  每个变量分开占用空间.  依次为int4 + DATE20 + double8 = 32.所以结果是20 + 32 = 52.当然... 在某些16位编辑器下, int 可能是2字节,那么结果是int2 + DATE10 + double8 = 20

6、请问以下代码有什么问题:
int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
【标准答案】没有为str分配内存空间,将会发生异
问题出在将一个字符串复制进一个字符变量指针所指
地址。虽然可以正确输出结果,但因为越界进行内在
读写而导致程序崩溃。

7、请问以下代码有什么问题:
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
【标准答案】"AAA" 是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";然后又因为是常量,所以对是s[0] 的赋值操作是不合法的。

8、int (*s[10])(int)  表示的是什么啊
【标准答案】int (*s[10])(int)  函数指针数组,每个指针指向一个int func(intp aram) 的函数。

9、c和c++ 中的struct有什么不同?
【标准答案】c和c++ 中struct的主要区别是c中的struct不可以含有成员函数,而c++ 中的struct可以。c++ struct和class的主要区别在于默认的存取权限不同,struct默认为public ,而class默认为private

10、void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,“hello world”);
}
int main( )
{
char *str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return 0;
} 会出现什么问题?
【标准答案】程序崩溃,getmemory中的malloc 不能返回动态内存,free ()对str操作很危险。

11、char szstr[10];
strcpy(szstr,"0123456789");
产生什么结果?为什么?
【标准答案】长度不一样,出现段错误。
100 条经典 C语言笔试题目
12、数组和链表的区别?
【标准答案】数组:数据顺序存储,固定大小;

链表:数据可以随机存储,大小可动态改变

13、void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}                                          
会出现什么问题?打印结果是是多少?
【标准答案】sizeof()和初不初始化,没有关系,
strlen()和初始化有关,打印结果值未知。

14、给定结构struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}; 问sizeof(A) = ?
【标准答案】8

15、struct name1{
char str;
short x;
int num;
} ;求sizeof(name1)?
【标准答案】8

16、struct name2{
char str;
int num;
short x;
}; 求sizeof(name2)?
【标准答案】12

17、程序哪里有错误
wap( int* p1,int* p2 )
{
int * p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}

【标准答案】p 为野指针(指向一个已删除的对象或未申请访问受限内存区域的指针)

19、(void *)ptr 和(*(void**))ptr 的结果是否相同?其
中ptr为同一个指针。
【标准答案】(void *)ptr 和(*(void**))ptr 值是相同的

20、要对绝对地址0x100000赋值,我们可以用
(unsigned int*)0x100000 = 1234;
那么要是想让程序跳转到绝对地址是0x100000去执
,应该怎么做?
【标准答案】*((void (*)( ))0x100000 ) ( );
首先要将0x100000强制转换成函数指针,即:
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)();

22、关于内存的思考题(1)你能看出有什么问题?

23、关于内存的思考题(2)你能看出有什么问题?

25、关于内存的思考题(3)你能看出有什么问题?

26、关于内存的思考题(4)你能看出有什么问题?

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值