收藏 分销(赏)

c语言面试题攻略.doc

上传人:xrp****65 文档编号:6164250 上传时间:2024-11-28 格式:DOC 页数:12 大小:66KB
下载 相关 举报
c语言面试题攻略.doc_第1页
第1页 / 共12页
c语言面试题攻略.doc_第2页
第2页 / 共12页
c语言面试题攻略.doc_第3页
第3页 / 共12页
c语言面试题攻略.doc_第4页
第4页 / 共12页
c语言面试题攻略.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、C语言试题大全试题1 1. 写一函数,实现删除字符串str1中含有的字符串str2./* 用递归做 */void deletesubstr(char* str1, const char* str2) int len=strlen(str1); char* newstr; char* sp;if(str1=NULL|str2=NULL) return; if(strlen(str1)strlen(str2) return;if(sp=strstr(str1,str2) newstr=malloc(len+1); strncpy(newstr,str1,sp-str1);/保存str1中含有字符串

2、str2以前的字符串 strcpy(newstr+(sp-str),sp+strlen(str2);/将含有字符串str2以后的字符串保存 strcpy(str1,newstr); free(newstr); deletesubstr(str1,str2);/递归继续查找删除存在的str2 else return;2雅虎笔试题(字符串操作)给定字符串A和B,输出A和B中的最大公共子串。比如A=aocdfe B=pmcdfa 则输出cdf答案:/Author: azhen#include#include#includechar *commanstring(char shortstring, ch

3、ar longstring) int i, j; char *substring=malloc(strlen(shortstring)+1); if(strstr(longstring, shortstring)!=NULL) /如果,那么返回shortstring return shortstring; for(i=strlen(shortstring)-1;i0; i-) /否则,开始循环计算 for(j=0; j=strlen(shortstring)-i; j+) memcpy(substring, &shortstringj, i); / 从最长的字符串开始 substringi=0

4、; if(strstr(longstring, substring)!=NULL) return substring; return NULL;试题2 1. 请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。答案:int search(char *cpSource, int n, char ch) int i; for(i=0; inext,并随后删除原next指向的节点。3. 写一个函数比较两个字符串str1和str2的大小,若相等返回0,若str1大于str2返回1,若str1小于str2返回1答案:int strcmp ( const char *

5、src,const char * dst) int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) & *dst) +src; +dst; if ( ret 0 ) ret = 1 ; return( ret );试题3 1.(1)读文件file1.txt的内容(例如): 12 34 56输出到file2.txt: 56 34 12(逆序)答案:注意可增长数组的应用.#include #include int main(void)int MAX = 10;int *a = (int *)mallo

6、c(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); 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(i

7、nt);if(b = NULL) printf(error3); exit(-1); a = b; for(;-j = 0;) fprintf(fp2,%dn,aj);fclose(fp1);fclose(fp2);free(a);return 0;2. 分析下面的代码:char *a = hello;char *b = hello;if(a= =b)printf(YES);elseprintf(NO);hello是一个常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器优化的话,会有可能a和b同时指向同一个hello的。则地址相同。如果编译器没有优化,那么就是两个不同的地址,则不

8、同3. 两个字符串,s,t;把t字符串插入到s字符串的第i个位置前,s字符串有足够的空间存放t字符串答案:void insert(char *s, const char *t, int i) int j,len; int k=strlen(s)-1; if(istrlen(s) return; len=strlen(s)+strlen(t); for(j=len-1;k=i;k-,j-) sj=sk; for(k=i;kstrlen(s)+i;k+) sk=tk-i; slen=0;试题4 1.分析输出结果int arr = 6,7,8,9,10;int *ptr = arr;*(ptr+)+

9、=123;printf(“ %d %d ”, *ptr, *(+ptr);输出:8 8过程:对于*(ptr+)+=123;先做加法6+123,然后+,指针指向7;对于printf(“ %d %d ”, *ptr, *(+ptr);从后往前执行,指针先+,指向8,然后输出8,紧接着再输出82 分析输出结果void g(int*);int main()int line10,i;int *p=line;for (i=0;i10;i+)*p=i;g(&p); /数组对应的值加1for(i=0;i= an-2;return fun( a,n-1) & ( an-1 = an-2 );试题51. 分析:s

10、truct bit int a:3; int b:2; int c:3;int main() bit s; char *c=(char*)&s; coutsizeof(bit)endl; *c=0x99; cout s.a endl s.bendls.cendl; int a=-1; printf(%x,a); return 0;输出是什么?答案:41-1-4ffffffff因为0x99在内存中表示为 100 11 001 , a = 001, b = 11, c = 100当c为有符合数时, c = 100, 最高1为表示c为负数,负数在计算机用补码表示,所以c = -4;同理b = -1;

11、当c为有符合数时, c = 100,即 c = 4,同理 b = 3位域 :有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域结构名 位域列表 ;其中位域列表的形式为:

12、 类型说明符位域名:位域长度例如:struct bsint a:8;int b:2;int c:6;位域变量的说明与结构变量说明的方式相同。可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:struct bsint a:8;int b:2;int c:6;data;说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点说明:1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:struct bsunsigned a:4uns

13、igned :0 /*空域*/unsigned b:4 /*从下一单元开始存放*/unsigned c:4在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:struct kint a:1int :2 /*该2位不能使用*/int b:3int c:2;从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。二、位域的使用位域的使用和结构成员的使

14、用相同,其一般形式为:位域变量名位域名位域允许用各种格式输出。main()struct bsunsigned a:1;unsigned b:3;unsigned c:4; bit,*pbit;bit.a=1;bit.b=7;bit.c=15;2.int (*s10)(int) 表示的是什么答案:int (*s10)(int) 函数指针数组,每个指针指向一个int func(int param)的函数。3. c和c+中的struct有什么不同?答案:c和c+中struct的主要区别是c中的struct不可以含有成员函数,而c+中的struct可以。c+中struct和class的主要区别在于默认

15、的存取权限不同,struct默认为public,而class默认为private最新C语言题1. sizeof() 是多少 sizeof(0) 是多少答案:1,22.class Apublic: virtual void func(A &a) cout aa endl; ;class B:public A virtual void func(B &b) cout bb endl; ;int main() B b; A &a = b; a.func(b); 输出结果是什么 为什么?答案:aa3.struct C union ui char c; double d; ; char a;struct D union char c; double d; ; char a;sizeof(C) = ?sizeof(D) = ?答案:1,16

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 考试专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服