C语言经典面试题100道(校对详解版)

您所在的位置:网站首页 面试一共几道题目及答案 C语言经典面试题100道(校对详解版)

C语言经典面试题100道(校对详解版)

2024-07-11 04:21| 来源: 网络整理| 查看: 265

题目非本人整理,转载于https://blog.csdn.net/qq_42613510/article/details/81225935 做了校对与详解,方便大家参考。最后编程答案自己做的,还没写完,可能不全,需要自己百度答案。 有什么问题请评论,会及时修改,避免误导大家。

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 )

(2)请写出float x 与“零值”比较的if 语句:

答案: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x =” 或“(Y)?(Y):(X))// 结尾没有 ;

40.带参宏与带参函数的区别(至少说出5点)?

答案:

带参宏 带参函数

处理时间------编译时------- 运行时

参数类型 ----- 无-------------需定义

程序长度 ------变长----------不变

占用存储空间-否 ----------- 是

运行时间-------不占运行时间–调用和返回时占

41.关键字volatile有什么含意?

答案:提示编译器对象的值可能在编译器未监测到的情况下改变。

42.int main() { int x=3; printf("%d",x); return 1; } 问函数既然不会被其它函数调用,为什么要返回1?

答案:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息。

43.已知一个数组table ,用一个宏定义,求出数据的元素个数。

答案: #define NTBL(table) (sizeof(table)/sizeof(table[0]))

44.A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题? 这两个static变量会保存到哪里(栈还是堆或者其他的)?

答案:static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。他们都放在静态数据区,但是编译器对他们的命名是不同的。如果要使变量在其他模块也有意义的话,需要使用extern 关键字。

45.static全局变量与普通的全局变量有什么区别?

答案: 作用域不同,static全局变量只初使化一次,防止在其他文件单元中被引用。

46.static局部变量和普通局部变量有什么区别?

答案:static局部变量只被初始化一次,下一次依据上一次结果值。

47.static函数与普通函数有什么区别?

答案:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。 参考:https://blog.csdn.net/qq_22238021/article/details/79533711

48.程序的局部变量存在于()中,全局变量存在于 ()中,动态申请数据存在于()中。

答案:程序的局部变量存在于栈(stack) 中,全局变量存在于静态数据区中,动态申请数据存在于堆(heap)中。

49.什么是预编译,何时需要预编译?

答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

50.用两个栈实现一个队列的功能?要求给出算法和思路!

答案:设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B 是否为空; (2)如果不为空,则将栈A中所有元素依次pop 出并push到栈B; (3)将栈B 的栈顶元素pop 出; 详解:队列:先进先出,栈:先进后出

51.对于一个频繁使用的短小函数,在C 语言中应用什么实现,在C++ 中应用什么实现?

答案:c用宏定义,c++ 用inline

52.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

答案:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 详解:UL无符号长整形

53.Typedef 在C 语言中频繁用以声明一个已经存在的数据类型的同义字。 也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s* typedef struct s* tPS; 以上两种情况的意图都是要定义dPS 和tPS 作为一个指向结构s指针。 哪种方法更好呢?(如果有的话)为什么?

答案:第二种更好,因为在实际替换中可能出现意想不到的问题。 如: dPS p1,p2; tPS p3,p4; 第一个扩展为struct s * p1, p2;上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。

54.在 C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?

答案:extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

56.语句for( ; 1 ;) 有什么问题?它是什么意思?

答案:死循环,和while(1)相同。

57.do……while和while……do有什么区别?

答案:前一个循环一遍再判断,后一个判断以后再循环。

58.请写出下列代码的输出内容 #include int main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c ,d:%d,%d,%d",b,c,d ); return 0; }

答案:10,12,120 详解: b=a++;可以拆解为 b=a; a++; 所以这一句运行后b=10;a=11; c=++a;可以拆解为 ++a; c=a; 所以这一句运行后b=10;a=12;c=12; d=10a++;可以拆解为 d=10a; a++; 所以最后a=13;b=10;c=12;d=120;

59.unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问p1+5= ; p2+5= ;

答案: p1+5=0x801005; p2+5=0x810014;

60.main() { int a[5]={1,2,3,4,5}; int * ptr=(int*)(&a+1); printf(“%d,%d”,*(a+1),*(ptr-1)); } 请问输出:

答案:2,5 详解:a代表数组首地址,即* a=1,* (a+1)=2 &a代表数组指针,其类型为int (*)[5],所以&a+1可以理解为在数组指针的基础上偏移为5,然后强制转换为int类型的指针赋给ptr,所以是下个数组的首地址,ptr-1即为上个数组的最后一位,所以是a[4]=5

61.请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3