c语言常见笔试题及答案 下载本文

文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

3、设有以下说明和定义:

typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max;

则语句 printf(\的执行结果是:___52____ 答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20

data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52.

当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20

4、队列和栈有什么区别? 队列先进先出,栈后进先出 5、写出下列代码的输出内容 #include int inc(int a) {

return(++a); }

int multi(int*a,int*b,int*c) {

return(*c=*a**b);

}

typedef int(FUNC1)(int in);

typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2) {

INCp=&inc;

int temp =p(arg1); fun(&temp,&arg1, arg2); printf(\} main() {

int a;

show(multi,10,&a); return 0; } 答:110

7、请找出下面代码中的所以错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

1、#include\2、main() 3、{

4、 char*src=\5、 char* dest=NULL;

6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=dest;

9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--;

12、 printf(\13、 return 0; 14、} 答: 方法1: int main(){

char* src = \int len = strlen(src);

char* dest = (char*)malloc(len+1);//要为分配一个空间 char* d = dest;

char* s = &src[len-1];//指向最后一个字符 while( len-- != 0 ) *d++=*s--;

*d = 0;//尾部要加 printf(\

free(dest);// 使用完,应当释放空间,以免造成内存汇泄露 return 0; }

方法2: #include #include main() {

char str[]=\int len=strlen(str); char t;

for(int i=0; i {

t=str[i];

str[i]=str[len-i-1]; str[len-i-1]=t; }

printf(\return 0; }

1.-1,2,7,28,,126请问28和126中间那个数是什么?为什么? 第一题的答案应该是4^3-1=63

规律是n^3-1(当n为偶数0,2,4) n^3+1(当n为奇数1,3,5) 答案:63

2.用两个栈实现一个队列的功能?要求给出算法和思路! 设2个栈为A,B, 一开始均为空.

入队:

将新元素push入栈A;

出队:

(1)判断栈B是否为空;

(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B; (3)将栈B的栈顶元素pop出;

这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么? 函数名: atol

功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 程序例: #include #include

int main(void)

{

long l;

char *str = \

l = atol(lstr);

printf(\return(0); }

2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

3.直接链接两个信令点的一组链路称作什么? PPP点到点连接

4.接入网用的是什么接口? 5.voip都用了那些协议? 6.软件测试都有那些种类?

黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口 7.确定模块的功能和模块的接口是在软件设计的那个队段完成的? 概要设计阶段 8.enum string { x1, x2, x3=10, x4,

x5, }x;

问x= 0x801005,0x8010f4 ; 9.unsigned char *p1;

unsigned long *p2;

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

三.选择题:

1.Ethternet链接到Internet用到以下那个协议? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.属于网络层协议的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息调度机制是:

A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈; 4.unsigned short hash(unsigned short key) {

return (key>>)%6 }

请问hash(16),hash(256)的值分别是: A.1.16;B.8.32;C.4.16;D.1.32 四.找错题: