C面试题库二

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

96.structname1{charstr;shortx;intnum;}structname2{charstr;intnum;shortx;}sizeof(structname1)=?sizeof(structname2)=?8、1297.读文件file1.txt的内容(例如):123456输出到file2.txt:563412(逆序)2)输出和为一个给定整数的所有组合例如n=55=1+4;5=2+3(相加的数不能重复)则输出1,4;2,3。注意可增长数组的应用.#includestdio.h#includestdlib.hintmain(void){intMAX=10;int*a=(int*)malloc(MAX*sizeof(int));int*b;FILE*fp1;FILE*fp2;fp1=fopen(a.txt,r);if(fp1==NULL){printf(error1);exit(-1);}fp2=fopen(b.txt,w);if(fp2==NULL){printf(error2);exit(-1);}inti=0;intj=0;while(fscanf(fp1,%d,&a[i])!=EOF){i++;j++;if(i=MAX){MAX=2*MAX;b=(int*)realloc(a,MAX*sizeof(int));if(b==NULL){printf(error3);exit(-1);}a=b;}}for(;--j=0;)fprintf(fp2,%d\n,a[j]);fclose(fp1);fclose(fp2);return0;}98.一个递规反向输出字符串的例子,经典例程.voidinverse(char*p){if(*p=='\0')return;inverse(p+1);printf(%c,*p);}intmain(intargc,char*argv[]){inverse(abc\0);return0;}99.用递归算法判断数组a[N]是否为一个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:boolfun(inta[],intn){if(n==1)returntrue;if(n==2)returna[n-1]=a[n-2];returnfun(a,n-1)&&(a[n-1]=a[n-2]);}100.什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。可重入函数:不为连续的调用持有静态数据。不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。101.给出下列程序的结果:charstr1[]=abc;charstr2[]=abc;constcharstr3[]=abc;constcharstr4[]=abc;constchar*str5=abc;constchar*str6=abc;char*str7=abc;char*str8=abc;cout(str1==str2)endl;cout(str3==str4)endl;cout(str5==str6)endl;cout(str7==str8)endl;结果是:0011str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。102.以下代码中的两个sizeof用法有问题吗?voidUpperCase(charstr[])//将str中的小写字母转换成大写字母{for(size_ti=0;isizeof(str)/sizeof(str[0]);++i)if('a'=str[i]&&str[i]='z')str[i]-=('a'-'A');}charstr[]=aBcDe;coutstr字符长度为:sizeof(str)/sizeof(str[0])endl;UpperCase(str);coutstrendl;答案:函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0',函数内的sizeof(str)返回4。103.一个32位的机器,该机器的指针是多少位答案:指针是多少位只要看地址总线的位数就行了。80386以后的机子和ARM都是32的数据总线。所以指针的位数就是4个字节了。看CPU寄存器宽度。104.请问以下代码有什么问题:intmain(){chara;char*str=&a;strcpy(str,hello);printf(str);return0;}答案:没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。105.int(*s[10])(int)表示的是什么啊?答案:int(*s[10])(int)函数指针数组,每个指针指向一个intfunc(intparam)的函数。106.有以下表达式:inta=248;intb=4;intconstc=21;constint*d=&a;int*conste=&b;intconst*fconst=&a;请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;答案:*c这是个什么东东,禁止;*d说了是const,禁止;e=&a说了是const,禁止;const*fconst=&a;禁止107.c和c++中的struct有什么不同?答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private108.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个109.纯虚函数如何定义?使用时应注意什么?答案:virtualvoidf()=0;是接口,子类必须要实现110.intmain(){intx=3;printf(%d,x);return1;}问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息111.已知一个数组table,用一个宏定义,求出数据的元素个数’答案:#defineNTBL(sizeof(table)/sizeof(table[0]))112.-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)113.直接链接两个信令点的一组链路称作什么?答案:PPP点到点连接114.确定模块的功能和模块的接口是在软件设计的那个队段完成的?答案:概要设计阶段115.enumstring{x1,x2,x3=10,x4,x5,}x;问x的取值是?答案:取值在0。1。10。11。12中的一个116.unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;请问p1+5=;p2+5=;答案:801005;810014。不要忘记了这个是16进制的数字,p2要加20变为16进制就是14:117.Ethternet链接到Internet用到以下那个协议?BA.HDLC;B.ARP;C.UDP;D.TCP;E.ID118.属于网络层协议的是:AA.TCP;B.IP;C.ICMP;D.X.25119.Windows消息调度机制是:CA.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;120.请问下面程序有什么错误?inta[60][250][1000],i,j,k;for(k=0;k=1000;k++)for(j=0;j250;j++)for(i=0;i60;i++)a[i][j][k]=0;答案:把循环语句内外换一下121.以下是求一个数的平方的程序,请找出错误:#defineSQUARE(a)((a)*(a))inta=5;intb;b=SQUARE(a++);答案:这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了122.分析下列程序有什么问题typedefunsignedcharBYTEintexamply_fun(BYTEgt_len;BYTE*gt_code){BYTE*gt_buf;gt_buf=(BYTE*)malloc(Max_GT_Length);......if(gt_lenMax_GT_Length){returnGT_Length_ERROR;}.......}答案:要释放内存问答题:123.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答案:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝124.判断题1、有数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确)2、int(*ptr)(),则ptr是一维数组的名字。(错误int(*ptr)();定义一个指向函数的指针变量)3、指针在任何情况下都可进行,,=,=,==运算。(错误)其实是逻辑没意义,未必错4、switch(c)语句中c可以是int,long,char,float,unsignedint类型。(错,不能用浮点型)125.填空题1、写出运行结果charstr[]="Hello";char*p=str;intn=10;sizeof(str)=()sizeof(p)=()sizeof(n)=()voidfunc(charstr[100]){······}sizeof(str)=()答案:6,4,4,4,126.不使用库函数,编写函数intstrcmp(char

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功