《2022年C面试题库二 .pdf》由会员分享,可在线阅读,更多相关《2022年C面试题库二 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、96.struct name1 char str;short x;int num;struct name2 char str;int num;short x;sizeof(struct name1)=?sizeof(struct name2)=?8、12 97.读文件 file1.txt的内容(例如):12 34 56 输出到 file2.txt:56 34 12(逆序)2)输出和为一个给定整数的所有组合例如n=5 5=1+4;5=2+3(相加的数不能重复)则输出1,4;2,3。注意可增长数组的应用.include include int main(void)int MAX=10;int*a=
2、(int*)malloc(MAX*sizeof(int);int*b;FILE*fp1;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -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);int i=0;int j=0;while(fscanf(fp1,%d,&ai)!=EOF)i+;j+;if(i=MAX)MAX=2*MAX;b=(int*)realloc(a,MAX*sizeof(
3、int);if(b=NULL)printf(error3);exit(-1);a=b;for(;-j=0;)fprintf(fp2,%dn,aj);fclose(fp1);fclose(fp2);return 0;98.一个递规反向输出字符串的例子,经典例程.void inverse(char*p)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -if(*p=0)return;inverse(p+1);printf(%c,*p);int main(int argc,char*argv)inverse(abc0);return 0;99.用递归算法判断数组 aN 是否为一
4、个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回 false 结束:bool fun(int a,int n)if(n=1)return true;if(n=2)return an-1=an-2;return fun(a,n-1)&(an-1=an-2);100.什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失
5、数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。可重入函数:不为连续的调用持有静态数据。不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。101.给出下列程序的结果:char str1=abc;char str2=abc;const char str3=abc;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -const char str4=abc;const char*str5=abc;const c
6、har*str6=abc;char*str7=abc;char*str8=abc;cout (str1=str2)endl;cout (str3=str4)endl;cout (str5=str6)endl;cout (str7=str8)endl;结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而 str5,str6,str7,str8是指针,它们指向相同的常量区域。102.以下代码中的两个 sizeof用法有问题吗?void UpperCase(char str)/将 str 中的小写字母转换成大写字母 for(size_t i=0;i si
7、zeof(str)/sizeof(str0);+i)if(a=stri&stri=z)stri-=(a-A);char str=aBcDe;cout str字符长度为:sizeof(str)/sizeof(str0)endl;UpperCase(str);cout str endl;答案:函数外的 str 是一个静态定义的数组,因此其大小为6,因为还有 0,函数内的 sizeof(str)返回 4。103.一个 32 位的机器,该机器的指针是多少位答案:指针是多少位只要看地址总线的位数就行了。80386以后的机子和 ARM 都是32 的数据总线。所以指针的位数就是4 个字节了。104.请问以下
8、代码有什么问题:int main()char a;char*str=&a;strcpy(str,hello);printf(str);return 0;答案:没有为 str 分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 17 页 -105.int(*s10)(int)表示的是什么啊?答案:int(*s10)(int)函数指针数组,每个指针指向一个int func(int param)的函数。106.有以下表达式:int a=248;int b
9、=4;int const c=21;const int*d=&a;int*const e=&b;int const*f const=&a;请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&b;*d=43;e=34;e=&a;f=0 x321f;答案:*c 这是个什么东东,禁止;*d 说了是 const,禁止;e=&a 说了是 const,禁止;const*f const=&a;禁止107.c 和 c+中的 struct有什么不同?答案:c 和 c+中 struct的主要区别是 c 中的 struct不可以含有成员函数,而 c+中的 struct可以。c+中 struct和 class
10、 的主要区别在于默认的存取权限不同,struct默认为 public,而 class 默认为 private 108.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个109.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0;是接口,子类必须要实现110int main()int x=3;printf(%d,x);return 1;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 17 页 -问函数既然不会被其它函数调用,为什么要返回1?答案:mian 中,c 标准认为 0表示成功,非 0 表示错误。具体的值是某
11、中具体出错信息111.已知一个数组 table,用一个宏定义,求出数据的元素个数答案:#define NTBL(sizeof(table)/sizeof(table0)112.-1,2,7,28,126请问 28 和 126 中间那个数是什么?为什么?答案:答案应该是43-1=63 规律是 n3-1(当 n 为偶数 0,2,4)n3+1(当 n 为奇数 1,3,5)113.直接链接两个信令点的一组链路称作什么?答案:PPP点到点连接114.确定模块的功能和模块的接口是在软件设计的那个队段完成的?答案:概要设计阶段115enum string x1,x2,x3=10,x4,x5,x;问 x 的取
12、值是?答案:取值在 0。1。10。11。12 中的一个116.unsigned char*p1;unsigned long*p2;p1=(unsigned char*)0 x801000;p2=(unsigned long*)0 x810000;请问 p1+5=;p2+5=;答案:801005;810014。不要忘记了这个是16进制的数字,p2 要加 20 变为 16进制就是 14 :117.Ethternet链接到 Internet用到以下那个协议?B A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -118
13、.属于网络层协议的是:A A.TCP;B.IP;C.ICMP;D.X.25 119.Windows 消息调度机制是:C A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;120.请问下面程序有什么错误?int a602501000,i,j,k;for(k=0;k=1000;k+)for(j=0;j 250;j+)for(i=0;i Max_GT_Length)return GT_Length_ERROR;.名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 17 页 -答案:要释放内存问答题:123.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部
14、变量有什么区别?static函数与普通函数有什么区别?答案:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为
15、静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普
16、通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝124.判断题1、有数组定义 int a22=1,2,3;则 a01的值为 0。(正确)2、int(*ptr)(),则 ptr 是一维数组的名字。(错误 int(*ptr)();定义一个指向函数的指针变量)3、指针在任何情况下都可进行,=,=,=运算。(错误)4、switch(c)语句中 c 可以是 int,long,char,float,unsigned int 类型。(错,不能用浮点型)125.填空题1、写出运行结果char str=Hello;char*p=str;int n=10;sizeof(str
17、)=()sizeof(p)=()sizeof(n)=()void func(char str100)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 17 页 -sizeof(str)=()答案:6,4,4,4,126不使用库函数,编写函数int strcmp(char *source,char*dest)相等返回 0,不等返回-1;答案:一、int strcmp(char *source,char*dest)assert(source!=NULL)&(dest!=NULL);int i,j;for(i=0;sourcei=desti;i+)if(sourcei=0&desti=0
18、)return 0;return-1;答案:二、int strcmp(char*source,char*dest)while(*source!=0)&(*source=*dest)source+;dest+;return(*source)-(*dest)?-1:0;127.写一函数 int fun(char*p)判断一字符串是否为回文,是返回 1,不是返回0,出错返回-1 答案:一、int fun(char*p)if(p=NULL)return-1;else int length=0;int i=0;int judge=1;length=strlen(p);for(i=0;i length/2
19、;i+)if(pi!=plength-1-i)judge=0;break;if(judge=0)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 17 页 -return 0;else return 1;答案:二、int fun(char*p)int len=strlen(p)-1;char*q=p+len;if(!p)return-1;while(p q)if(*p+)!=(*q-)return 0;return 1;128.1.在 OSI 7 层模型中,网络层的功能有(B)A.确保数据的传送正确无误 B.确定数据包如何转发与路由 C.在信道上传送比特流 D.纠错与流控2.FDD
20、I 使用的是 _局域网技术。(C)A.以太网;B.快速以太网;C.令牌环;D.令牌总线。注:(光纤分布数据接口(FDDI)是目前成熟的 LAN技术中传输速率最高的一种)3.下面那种 LAN 是应用 CSMA/CD 协议的(C)A.令牌环 B.FDDI C.ETHERNET D.NOVELL 4.TCP 和 UDP 协议的相似之处是 (C)A.面向连接的协议 B.面向非连接的协议 C.传输层协议 D.以上均不对5.应用程序 PING 发出的是 _报文.(C )A.TCP 请求报文。B.TCP 应答报文。C.ICMP 请求报文。D.ICMP 应答报文。名师资料总结-精品资料欢迎下载-名师精心整理-
21、第 10 页,共 17 页 -6.以下说法错误的是(多)(BD )A.中继器是工作在物理层的设备 B.集线器和以太网交换机工作在数据连路层 C.路由器是工作在网络层的设备 D.桥能隔离网络层广播7.当桥接收的分组的目的MAC 地址在桥的映射表中没有对应的表项时,采取的策略是(C)A.丢掉该分组 B.将该分组分片 C.向其他端口广播该分组 D.以上答案均不对8.LAN Switch 在网络层次模型中的地位(B)A.物理层 B.链路层 C.网络层 D.以上都不是9.小于_的 TCP/UDP 端口号已保留与现有服务一一对应,此数字以上的端口号可自由分配。(C)A.199 B.100 C.1024 D
22、.2048 10.当一台主机从一个网络移到另一个网络时,以下说法正确的是 (B)A.必须改变它的 IP 地址和 MAC 地址B.必须改变它的 IP 地址,但不需改动 MAC 地址C.必须改变它的 MAC 地址,但不需改动 IP 地址D.MAC 地址.IP 地址都不需改动129.找错#define MAX_SRM 256 DSNget_SRM_no()static int SRM_no;int I;for(I=0;I=MAX_SRM)return(NULL_SRM);else return SRM_no;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 17 页 -答:1,SRM_
23、no 没有赋初值2,由于 static的声明,使该函数成为不可重入(即不可预测结果)函数,因为 SRM_no 变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。130.写出程序运行结果int sum(int a)auto int c=0;static int b=3;c+=1;b+=2;return(a+b+c);void main()int I;int a=2;for(I=0;I strlen(2)void main(void)char str1=“welcome”;char str2=“to”;char str3=“saif”;char str5
24、0;memcpy(str,str1,strlen(str1);memcpy(str+strlen(str1),str2,strlen(str2);memcpy(str+strlen(str1)+strlen(str2),str3,strlen(str3);printf(str);答案:strlen-sizeof 139.Struct tag 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 17 页 -short c;long b;char d;long a;改变结构体的排列顺序,Sizeof(tag)可能的值?答案:11、12、16 140.找出程序中的所有错误/分配len 的
25、长度的内存,内存地址由 ptr 输出void test_malloc(char*prt,int len)char*tmp=NULL;tmp=(char*)malloc(len);*prt=tmp;void main(void)char*str=“welcome to saif”;char*buf;char c=0 xff;test_malloc(&buf,sizeof(str);/strlen(str)+1 if(buf=NULL)/(NULL=buf)return;strcpy(buf,str);if(c=(char)0 xff)printf(“OK,str=%s”,buf);else printf(“OH my God!”);free(buf);141.union a int a_int1;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 17 页 -double a_double;int a_int2;typedef struct a a1;char y;b;问题sizeof(b)=?答案:12 142.用递归法将整数转化为符串void convert(int n)int i;Char c;if(i=n/10)!=0)convert(i);c=n%10+0;cout”“c;名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 17 页 -
限制150内