您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 中科创达驱动组笔试题
1、定义一个宏,表示一年有多少秒。#defineSECONDS_PER_YEAR(60*60*24*365)UL2、请指出以下两个数组有什么区别?Charstr1[]=“ABCDE”;数字会自动填充6.Charstr2[5]=“ABCDE”;越界,有’\0’Structboy{Intnum;Charstr[10];}*p;P=(asd*)malloc(sizeof(struct));Free(p);//////////////////////////////////////////////Structboy{Intnum;Char*str;}*q;q=()malloc(sizeof(struct));q-str=malloc(10);Free(q-str);先释放成员,在释放结构体Free(q);3、在32位系统的程序中,存在如下结构体Typedefstruct_MSG_1_{CharsrcModule;ChardestModule;考察结构体对齐:4Shortmsglen;Unsignedcharbody[0];不占空间,body[0]必须是结构体最后的成员。}MSG_1;///////////////////////////////////////////////////////Typedefstruct_MSG_1_{CharsrcModule;Shortmsglen;考察结构体对齐:6ChardestModule;Unsignedcharbody[0];不占空间,body[0]必须是结构体最后的成员。}MSG_1;////////////////////////////////////////////////////////Typedefstruct_MSG_2_{CharsrcModule;ChardestModule;Shortmsglen;Unsignedchar*pBody;//占空间结构体变量q=()malloc。。。。,q-pBody=malloc...比较麻烦}MSG_2;Sizeof(char)=1,Sizeof(short)=2;那么(1)Sizeof(MSG_1)=?Sizeof(MSG_2)=?(2)请简练地给出解释。4、以下函数用来判断一个整型值是否大于3和小于7,如果是返回0,不是返回-1,请说明此函数是否符合要求;并说明原因。Intfunc(intx){If(3x7){Return0;}Return-1;}3x7:不允许,(x3)&&(x7).3x7:是表示x是否3.如果大于,返回真。即1;如果x3,即假,为0.所以无论怎么样,都是7的,就会恒成立。5、请给出如下问题的一种或多种修改方案,并分析修改方案的优缺点:存在rlc.c和rrc.c两个源代码文件A.c:其中存在如下代码片段:Typedefstruct_StatisData_{UnsignedintsuccessNum;UnsignedintfailureNum;}StatisData;StaticStatisDatastatisData此前,类型StatisData及变量StatisData只在文件rlc.c中,现在需要在文件rrc.c中访问文件rlc.c中变量StatisData的failureNum序段的当前数值,请给出修改方案,并分析修改方案的优缺点。1.说明StaticStatisDatastatisData只能在当前使用2.放在一个.h中,声明一个类型。3.定义一个函数,通过函数来访问。6、在下面的代码中,我们省略了常数M和N的定义:#defineM/*Mysterynumber1*/#defineN/*Mysterynumber2*/Intfun1(intx,inty){Intresult=0;Result=x*M+y/N;Returnresult;}我们以某个M和N的值编译这段代码,下面是经过编译器优化乘法和除法后的机器代码翻译回C语言的结果:Intoptaritch(intx,inty){Intt=x;X=4;X-=t;If(y0)y+=3;Y=2;Returnx+y;}请问M和N的值为多少?并写出详细分析过程。当前编译器是算数运算,算数右移,算数左移。如果是负数的话,7、程序设计-字符串编写函数reverse_string,它的原型如下:Voidreverse_string(char*string)函数把参数字符串中的字符反向排列。请使用指针而不是数组下标完成,不允许使用任何函数库中用于操纵字符串的函数。提示:不需要声明一个局部数组来存放临时字符串。1.#includestdio.h2.#includestring.h3.4.voidswap(char*p,char*q)5.{6.chartmp=*p;7.*p=*q;8.*q=tmp;9.}10.char*reverse_string(char*string)11.{12.char*left=string;13.char*right=string+strlen(string)-1;14.while(leftright)15.{16.swap(left,right);17.left++;18.right--;19.}20.returnstring;21.}22.intmain()23.{24.chararr[]=abcdefghijklmn;25.reverse_string(arr);26.printf(%s\n,arr);27.return0;28.}8、程序设计-排序编写一个名叫sort的函数,它用于对一个任何类型(即void*)的数组进行排序,为了使函数通用性高,它的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用函数提供两个参数,也就是两个指向需要进行比较的值的指针。如果两个值相等,函数返回0,如果第1个值小于第2个值,函数返回小于0的整数;如果第1个值大于第2个值,函数返回一个大于0的整数。1.思想Sort(void*avr,intnum,intsize,int(*cmp)(void*,void*)){Inti,j;For(i=0;in-1;i++){For(j=0;jn-1-i;j++){If(a[j]a[j+1]){Asd}}}}Void*可以定义,但不能直接使用。2.答案:Sort(void*a,intnum,intsize,int(*cmp)(void*,void*)){Inti,j;For(i=0;inum-1;i++){For(j=0;jnum-1-i;j++){If(cmp((char*)a+j*size,(char*)a+(j+1)*size)){}}}}回调函数用户自己实现。一定要写void*,因为它考查的是不知道类型的情况下。所以.....什么时候,调用,什么时候知道类型。Sort函数的参数:1、一个指向需要排序的数组的第一个值的指针。即数组名2、数组中值的个数。3、每个数组元素的长度。4、一个指向比较回调函数的指针。Sort没有返回值。你将不能根据实际类型声明数组参数,因为函数应该可以对不同类型的数据进行排序,如果你把数据当作一个字符数组使用,你可以用第3个参数寻找实际比较数据的起始位置,也可以用它交换两个数组元素(每次一个字节)。
本文标题:中科创达驱动组笔试题
链接地址:https://www.777doc.com/doc-3945998 .html