C题库2.docx
- 文档编号:15052784
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:24
- 大小:24.11KB
C题库2.docx
《C题库2.docx》由会员分享,可在线阅读,更多相关《C题库2.docx(24页珍藏版)》请在冰点文库上搜索。
C题库2
96.
structname1{
charstr;
shortx;
intnum;
}
structname2{
charstr;0
123
intnum;4567
shortx;89
1011
}
sizeof(structname1)=?
sizeof(structname2)=?
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
intmain(void)
{
intMAX=10;
int*a=(int*)malloc(MAX*sizeof(int));
int*b;
FILE*fp1;
FILE*fp2;
fp1=fopen("a.txt","r");标准库提供
(Open操作系统提供)
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];
return(a[n-1]>=a[n-2])&&fun(a,n-1);
}
a[5]={0,1,2,3,4}
1.fun(a,5)
4.fun(a,4)
3.fun(a,3)
4.fun(a,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)< 结果是: 0011str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 102.以下代码中的两个sizeof用法有问题吗? voidUpperCase(charstr[])//将str中的小写字母转换成大写字母 { for(size_ti=0;i if('a'<=str[i]&&str[i]<='z') str[i]-=('a'-'A'); } charstr[]="aBcDe"; cout<<"str字符长度为: "< UpperCase(str); cout< 答案: 函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0', 函数内的sizeof(str)返回4。 103.一个32位的机器,该机器的指针是多少位答案: 指针是多少位只要看地址总线的位数就行了。 80386以后的机子和ARM都是32的数据总线。 所以指针的位数就是4个字节了。 104.请问以下代码有什么问题: intmain() { chara;a是一个字节 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默认为private 108.类的静态成员和非静态成员有何区别? 答案: 类的静态成员每个类只有一个,非静态成员每个对象一个 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用到以下那个协议? B A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 118.属于网络层协议的是: B.C A.TCP;B.IP传输层;C.ICMP;D.X.25 119.Windows消息调度机制是: C A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈; 120.请问下面程序有什么错误? inta[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; 答案: 把循环语句内外换一下 121.以下是求一个数的平方的程序,请找出错误: #defineSQUARE(a)((a)*(a)) inta=5;intb; b=SQUARE(a++); 答案: 这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了 122.分析下列程序有什么问题 typedefunsignedcharBYTE intexamply_fun(BYTEgt_len;BYTE*gt_code) { BYTE*gt_buf; gt_buf=(BYTE*)malloc(Max_GT_Length); ...... if(gt_len>Max_GT_Length) { returnGT_Length_ERROR; } .......//free } 答案: 要释放内存问答题: 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)=(6) sizeof(p)=() sizeof(n)=() voidfunc(charstr[100]) { ······ } sizeof(str)=() 答案: 6,4,4,4, 126.不使用库函数,编写函数intstrcmp(char*source,char*dest)相等返回0,不等返回-1; 答案: 一、 intstrcmp(char*source,char*dest) { assert((source! =NULL)&&(dest! =NULL)); inti; for(i=0;source[i]==dest[i];i++) { if(source[i]=='\0'&&dest[i]=='\0') return0; else return-1; } } 答案: 二、 intstrcmp(char*source,char*dest) { If(){} while((*source! ='\0')&&(*source==*dest)) { source++;dest++; } return((*source)-(*dest))? -1: 0; } 127.写一函数intfun(char*p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1eg: 12321 答案: 一、 intfun(char*p) {if(p==NULL) return-1; else {intlength=0;inti=0;intjudge=1;length=strlen(p); for(i=0;i {if(p[i]! =p[length-1-i]) {judge=0; break; } } if(judge==0) return0; else return1; } } 答案: 二、 intfun(char*p) { intlen=strlen(p)-1; char*q=p+len; if(! p)return-1; while(p { if((*p++)! =(*q--)) return0; } return1; } 128. 1.在OSI7层模型中,网络层的功能有(B)//ip地址 A.确保数据的传送正确无误//传输层B.确定数据包如何转发与路由C.在信道上传送比特流D.纠错与流控 2.FDDI使用的是___局域网技术。 (C) A.以太网;B.快速以太网;C.令牌环;D.令牌总线。 注: (光纤分布数据接口(FDDI)是目前成熟的LAN技术中传输速率最高的一种) 3.下面那种LAN是应用CSMA/CD协议的(C) A.令牌环B.FDDIC.ETHERNETD.NOVELL 4.TCP和UDP协议的相似之处是(C) A.面向连接的协议B.面向非连接的协议C.传输层协议D.以上均不对 5.应用程序PING发出的是___报文.(C) A.TCP请求报文。 B.TCP应答报文。 C.ICMP请求报文。 D.ICMP应答报文。 6.以下说法错误的是(多)(BD) A.中继器是工作在物理层的设备B.集线器和以太网交换机工作在数据连路层C.路由器是工作在网络层的设备D.桥能隔离网络层广播 7.当桥接收的分组的目的MAC地址在桥的映射表中没有对应的表项时,采取的策略是(C) A.丢掉该分组B.将该分组分片C.向其他端口广播该分组D.以上答案均不对 8.LANSwitch(局域网交换机)在网络层次模型中的地位(B) A.物理层B.链路层C.网络层D.以上都不是 9.小于___的TCP/UDP端口号已保留与现有服务一一对应,此数字以上的端口号可自由分配。 (C) A.199B.100C.1024D.2048 10.当一台主机从一个网络移到另一个网络时,以下说法正确的是(B) A.必须改变它的IP地址和MAC地址 B.必须改变它的IP地址,但不需改动MAC地址 C.必须改变它的MAC地址,但不需改动IP地址 D.MAC地址.IP地址都不需改动 129.找错 #defineMAX_SRM256 DSNget_SRM_no() { staticintSRM_no; intI; for(I=0;I { SRM_no%=MAX_SRM; if(MY_SRM.state==IDLE) {break;} } if(I>=MAX_SRM) return(NULL_SRM); else returnSRM_no; } 答: 1,SRM_no没有赋初值 2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。 这里应该去掉static声明。 130.写出程序运行结果 intsum(inta) { autointc=0; staticintb=3; c+=1;//c=1 b+=2;//b=5 return(a+b+c);//8 } voidmain() { intI; inta=2; for(I=0;I<5;I++) { printf("%d\n",sum(a)); } } 答: 8,10,12,14,16该题比较简单。 只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。 131. intfunc(inta) { intb; switch(a) { case1: b=30; case2: b=20; case3: b=16; default: b=0; } returnb; }则func (1)=? 答: func (1)=0,因为没有break语句,switch中会一直计算到b=0。 这是提醒我们不要忘了break 132. inta[3]; a[0]=0; a[1]=1; a[2]=2; int*p,*q; p=a; q=&a[2]; 则a[q-p]=? 答: a[q-p]=a[2]=2;这题是要告诉我们指针的运算特点 133.定义int**a[3][4],则变量占有的内存空间为: _____ 答: 此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为3×4×4=48。 134.设有inta=3;则执行语句a+=a-=a*a;后 变量a的值是? 结果: a=-12 过程: a+=a-=a*a等效于a+=(a-=a*a); a-=a*a等效于a=a-a*a; →a=-6 a+=a等效于a=a+a; →a=-12 答案: -12 135. StructRegX { longbzy: 1; longwrt: 1; longrd: 1; longcnt: 4; longrsd: 25; }; Sizeof(RegX)=? 答案: 4 136. Chara[]=“hello\0”;///0系统会自己加的不管你有没有”/0” Charal[7]=“hello”; Char*ps=“hello”; Strlen(a)=? Strlen(a1)=? Strlen(ps)=? Sizeof(a)=? Sizeof(a1)=? Sizeof(ps)=? 555,774 137.对于下面的函数,要求打印出”hello”,子程序完全正确的是_ (1)(3)_,一定能打印出”hello”的是_ (1)(3)(4)_,有错误的是__ (2)(4) char*GetHellostr(void); intmain(void) { char*ps; ps=GetHellostr(); if(ps! =NULL) { printf(ps); } return0; } (1) char*GetHellostr(void) { char*ps=“hello”; returnps; } (2) char*GetHellostr(void) { chara[]=“hello”; return(char*)a; } (3) char*GetHellostr(void) { static
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 题库