45、 static全局变量与普通的全局变量有什么区别?
【标准答案】 static全局变量只初使化一次,防止在其他文件单元中被引用; 46、 static局部变量和普通局部变量有什么区别
【标准答案】static局部变量只被初始化一次,下一次依据上一次结果值; 47、 static函数与普通函数有什么区别?
【标准答案】static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
关于45-47的参考文章
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身
就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。 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、 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
*
【参考答案】#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
53、 Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
*
【参考答案】这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子: dPS p1,p2; tPS p3,p4; 第一个扩展为 struct s * p1, p2;
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
54、在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?
【标准答案】C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的
名字与 C 语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int 之类的名字。 C++提供了 C 连接交换指定符号 extern“C”来解决名字匹配问题。 55、请简述以下两个 for 循环的优缺点。
56、语句for( ;1 ;)有什么问题?它是什么意思? 【标准答案】死循环,和while(1)相同。 57、 do……while和while……do有什么区别?
【标准答案】前一个循环一遍再判断,后一个判断以后再循环。 58、请写出下列代码的输出内容
#include
int a,b,c,d; a=10; b=a++; c=++a; d=10*a++;
printf(\,c,d:%d,%d,%d\,b,c,d); return 0; }
【标准答案】10,12,120
59、 unsigned char *p1; unsigned long *p2;
p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问p1+5= ; p2+5= ;
【标准答案】0x801005、0x810020
60、 main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf(“%d,%d”,*(a+1),*(ptr-1)); }
请问输出:
【标准答案】2,5
* *
100条经典C语言笔试题目
61、请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k<=1000;k++) for(j=0;j<250;j++) for(i=0;i<60;i++) a[i][j][k]=0;
【标准答案】把循环语句内外换一下。
* *
100条经典C语言笔试题目
62、以下是求一个数的平方的程序,请找出错误: #define SQUARE(a)((a)*(a)) int a=5; int b;
b=SQUARE(a++); 【标准答案】宏在预编译时会以替换的形式展开,仅仅会替换。涉及到宏的地方,不要用++ --,
标准中对此没有规定,因此最终结果将会依赖于不同的编译器。执行程序的答案可能是25、也有可能是36。
* *
100条经典C语言笔试题目
63、#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg) {
unsigned char ucCmdNum; ......
for(ucCmdNum=0;ucCmdNum } }这段代码执行有什么问题? 【标准答案】死循环 unsigned char //无符号字符型 表示范围0~255 char //有符号字符型 表示范围-128~127 * * * * 100条经典C语言笔试题目 64、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。 【标准答案】while(1){}或者for(;;) 100条经典C语言笔试题目 65、程序输出结果 是? * 【标准答案】8,10,12,14,16 * * 100条经典C语言笔试题目 66、 【标准答案】16 * * 100条经典C语言笔试题目 67、 int modifyvalue() { return(x+=10); } int changevalue(int x) { return(x+=1); } void main() { int x=10; x++; changevalue(x); x++; modifyvalue(); printf(\ x++; changevalue(x); printf(\ modifyvalue(); printf(\ }输出? 【 标准答案】12、13、13 * * * * 100条经典C语言笔试题目 68、不能做switch()的参数类型是: 【标准答案】switch的参数不能为实型。 100条经典C语言笔试题目 69、请写出下列代码的输出内容 #i nclude int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf(\,c,d:%d,%d,%d\,b,c,d); return 0; } 【标准答案】10,12,120 * * * * 100条经典C语言笔试题目 70、找出程序的错误。 【标准答案】 100条经典C语言笔试题目 71、一语句实现x是否为2的若干次幂的判断。 【参考答案】 void main() { int a; scanf(“%d”,&a); printf(“%c”,(a)&(a-1)?’n’:’y’); // 若是打印y,否则n } * * 100条经典C语言笔试题目 72、中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。 __interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(\ return area; } 【参考答案】这个函数有太多的错误了,以至让人不知从何说起了: 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库100条经典C语言笔试题目(全)(2)在线全文阅读。
相关推荐: