C语言基础试题.docx
- 文档编号:8069967
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:26
- 大小:26.09KB
C语言基础试题.docx
《C语言基础试题.docx》由会员分享,可在线阅读,更多相关《C语言基础试题.docx(26页珍藏版)》请在冰豆网上搜索。
C语言基础试题
C语言基础试题
1.指出其中的错误:
1voidGetresult(unsignedintuiM,unsignedintuiN)
2{
3unsignedshortusIndex;
4
5If(0==uiN)
6{
7return;
8}
9for(usIndex=uiN;uiIndex<=uiM;usIndex=usIndex+uiN)
10{
11printf(“%u”,usIndex);
12}
13return;
14}
2.指出其中的错误:
1inta[10];
2intmain()
3{
4int*p;
5inti;
6p=a;
7for(i=0;i<=10;i++)
8{
9scanf(“%d”,p++);
10}
11printf(“\n”);
12p=a;
13for(i=0;i<=10;i++,p++)
14{
15printf(“\n”);
16}
17return0;
18}
3.如下程序用于输出”WelcomeHome”请指出其中错误
1voidTest(void)
2{
3charpcarray[12];
4strcpy(pcArray,”WelcomeHome”);
5printf(“%s!
”,pcArray);
6return;
7}
4.求一个整数的平方除以1000的余数,指出程序中的错误
1unsignedshotGetMode(unsignedshortusM)
2{
3unsignedshortusMode;
4unsignedshortusTemp;
5usTemp=usM%1000;
6usTemp=usTemp*usTemp;
7usMode=usTemp%1000;
8returnusMode;
9}
5.下面递归函数将调整n个整数的数据Array,使其前面各顺序向后移m个位置(n>m),最后m个数变成最前面的m个数。
例如,1,2,3,4,5,6,7,8顺序移动3个位置变成(6,7,8,1,2,3,4,5)请指出其实现的3个错误。
假设不考虑堆栈的溢出问题,也不考虑递归引起的效率问题。
1voidmove(ulong*array,ulongn,ulongm)
2{
3ulong*p;
4ulongarray_end;
5ASERT(array);
6ASERT(n>m);
7for(p=array+n;p>array;p--)
8{
9*p=*(p-1);
10}
11*array=ayyay_end;
12m--;
13if(m>0)
14{
15move(array,n,m);
16}
17return;
18}
6.指出下面这段代码中的错误:
1unsignedlongFUNC_B(unsignedlongulCount)
2{
3unsignedlongulSum=0;
4while(0<=ulCount)
5{
6ulSum+=ulCount;
7ulCount--;
8}
9returnulSum;
10}
7.下面函数功能是将字符串中的非”\0”字符前后位置对调,例如”abc”调换为”cba”,空串依然是空串,指出程序中的错误。
1.voidReverse(char*szStr)
2.{
3.ULONGulLen,ulCnt,i;
4.CHARch;
5.if(NULL==szStr)
6.{
7.return;
8.}
9.ulLen=strlen(szStr);
10.if(1>=ulLen)
11.{
12.return;
13.}
14.ulCnt=ulLen/2;
15.for(i=ulCnt-1;i>=0;i--)
16.{
17.ch=szSre[i];
18.szStr[i]=szStr[ulLen-1-i];
19.szStr[ulLen-l-i]=ch;
20.}
21.}
8.程序的输出为:
1voidtest()
2{
3signedcharch;
4intsum;
5ch=127;
6sum=200;
7ch++;
8sum+=ch;
9printf(“%d”,sum);
10}
9.对于一个数组intdata[5][4],data[4][2]的地址可以表示为()
A.dat+4*4+2;
B.data[4]+2;
C.data[4]+8;
D.data+2*4+4;
10.UCHAR*pszTest=\\\0;
UCHARacutest[]=\\\0;
请问sizeof(pszTest)=,sizeof(*pszTest)=,
sizeof(aucTest);
11.charstr[]=”ABCDE”;
char*p=str;
请计算size(str)=,sizeof(p)=.
12.单选择
Char*pszResource[]={“softdisk”,”harddisk”,”Cray”,”on-linedrawingrouthines”,”mouse”,”keyboard”,”powercables”};
pszResource[2]指向的是()
A”harddisk”存储的起始地址
B“Cray”存储的起始地址
C“softdisk”中字符o的起始地址
D“softdisk”中字符f起始地址
13.有如下的HASH函数
1Unsignedcharhash(unsignedchar*mac)
2{
3unsignedchaructmp;
4uctmp=*mac+*(mac+1)+*(mac+2)
5return(uctemp);
6}
已知
unsignedcharcMAC[6]={0xa4,0xb5,0xc6,0xd7,0xe8,0xf9};
unsignedchar*p1;
unsignedchar*p2;
p1=cMAC;
p2=p1+1;
hash(p1)和hash(p2)的值分别是(用16进制表示)和.
14.UCHAR*pzTest=”hello”;
UCHAR*pChar=NULL;
Sizeof(*pzTest),sizeof(pChar).
15.单选
StructtagStudent
{
unsignedlongnum;
unsignedlongage;
};
voidfun()
{
printf(“%lu”,ulLen);
return;
}
voidmain()
{
structtagStudentstudents[4]={{1,2},{3,4},{5,6},{7,8}};
fun((unsignedlong)(students+2)-(unsignedlong)(students));
return;
}
输出结果是()
A.2B.4C.8D16
16.[单选]设有以下定义:
inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int(*prt)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是()
A.*(ptr[1]+2*4)
B.*(p+1*3+2)
C.*(*(a+1*3*4)+2*4)
17.UCHAR*ppszTest[3]={“hello”,”okay”,”goodbye”};
UCHAR**ppChar=ppszTest;
Sizeof(*ppszTest)=sizeof(*ppChar)=
18.char*pcColor=”worldcup”;
CharacColor[]=”worldcup”;
strlen(pcColor)=;
strlen(acColor)=;
sizeof(pcColor)=;
sizeof(acColor)=;
19.
EnumENUM_A
{
X1;
Y1;
Z1=5;
A1;
B1;
};
EnumENUM_AenumA=Y1;
EnumENUM_AenumB=B1;
请问enumA=;enumB=;
20.
#definePCHARchar*
PCHARpch1,pch2;
Sizeof(pch1)=;
Sizeof(pch2)=;
21.挑单错
将数组的内容反序拷贝到一块内存中,并返回该内存。
Char*inverse(chara[])
{
intlen;
inti;
char*p;
if(NULL=a)
{
returnNULL;
}
Len=sizeof(a);
p=(char*)malloc(len);
if(NULL==p)
{
reutnrNULL;
}
for(i=0;i { p[i]=a[len-i-1]; } returnp; } 22.执行以下程序段后,m的值为(),n的值为(),q的值为(). inta[2][3]={{1,2,3},{4,5,6}}; intm,n,q,*p; p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4)); n=(**a)*(**(a+1))*(*(a[0]+2)); q=*(*a+2)+*(*(a+1)+1)+*(*(a+1)+2); A.15B.14C.13D.12 23.设有如下定义: () intarr[]={6,7,8,9,10}; int*ptr; 则下列程序段的输出结果为() ptr=arr; *(ptr+2)+=2; printf(“%d,%d\n”,*ptr,*(ptr+2)); A.8,10B.6,8C.7,9D.6,10 24.请问: ulsize等于多少? () charc[]={‘c’,’h’,’i’,’n’,’a’}; ulSize=strlen(c); A.5B.6C..不确定 25.改错题 下列程序目的是要实现逆序打印,请指出其错误。 main() { char*src=”hello,world” char*dest=NULL; intlen=strlen(str); dest=(char*)malloc(len); char*d=dest; char*s=sre[len]; while(len--! =0) { d++=s--; } printf(“%s”,dest); return0; } 26. structtagABC { charcB; charsC; charcD; char1A; }*pAbc; pAbc=0x100000; 那么pAbc+0x100=0x;(ULONG)pAbc+0x100=0x;(ULONG*)pAbc+0x100=0x;(char*)pAbc+0x100=0x; 27. UCHAR*puCharArray[10][10]; typedefunionunRec { ULONGulIndex; USHORTusLevel[6]; UCHARucPos; }REC_S; REC_SstMax,*pstMax; 四字节对齐方式时: sizeof(pucCharArray)=,sizeof(stMax)=,sizeof(pstMax)= Sizeof(*pstMax)=. 28.编程题(用C语言作答) 现在要对一无序数组array[]进行折半查找,请写出算法intBinSearch(intarray[],intiValue,intiCount),array代表被查数组,iCount代表数组元素总数,iValue代表被查元素值,前提假设是array中的值都是唯一不重复的,要求: 如果在数组中找到此元素则返回1,没有找到则返回-1 嵌入式开发——C语言面试题 1.用预处理指令#define声明一个常数,用以表示一年中有多少秒(忽略闰年问题) 2.写意个”标准”宏MIN,这个宏输入两个参数并返回较小的一个。 3.预处理器标识#error的目的是什么? 4.嵌入式系统中经常要用到无限循环,你怎么样用C语言编写死循环呢? 5.用变量a给出下面的定义 a)一个整型数(Aninteger) b)一个指向整型数的指针(Apointertoaninteger) c)一个指向指针的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger) d)一个有10个整型数的数组(Anarrayof10integers) e)一个有10个10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers) f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers) g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger) h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger) 6.关键字static的作用是什么? 7.关键字const是什么含义? constinta; intconsta; constint*a; int*consta; intconst*aconst; 8.关键字volatile有什么含义,并给出三个不同的例子。 9.嵌入式系统总是要用户对变量或寄存器进行位操作。 给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3.在以上两个操作中要保持其他位不变。 10.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。 在某工程中,要求设置一绝对地址为0x69a9的整型变量的值为0xaa66.编译器是一个纯粹的ANSI编译器。 写代码去完成这一任务。 11.中断是嵌入式系统中重要的组成部分,这导致很多编译器开发商提供一种扩展—让标准C支持中断。 具代表事实是,产生一个新的关键字_interrupt。 下面的这段代码就是用了_interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码。 _interruptdoublecompute_area(doubleradius) { doublearea=PI*radius*radius; printf(“Area=%f”,area); returnarea; } 12.下面的代码输出是什么,为什么? voidfun(void) { unsignedinta=6; intb=-20; (a+b>6)puts(“>6”): puts(“<=6”); } 13.评价下面的代码片段: unsignedintzero=0; unsignedintcompzero=0xFFF; /*1`scomplementofzero*/ 14.尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程。 那么嵌入式系统中,动态分配内存可能发生的问题是什么? char*ptr; if((ptr=(char*)malloc(0))==NULL) puts(“Gotanullpointer”); else puts(“Gotavalidpointer”); 15.Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义词。 也可以用预处理器做类似的事情。 例如思考一下下面的例子: #definedPSstructs* typedefstructs*tPS; 以上两种情况的意图都是要定义dPS和tPS作为一个指向结构s的指针。 那种方法最好呢(如果有的话)? 为什么? 16.C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是他做些什么? inta=5,b=7,c; c=a+++b; 17.Whatwillprintout? main() { char*p1=”name”; char*p2; p2=(char*)malloc(20); memset(p2,0,20); while(*p2++=*p1++); printf(“%sn”,p2); } 18.Whatwillbeprintedastheresultoftheoperationbelow: main() { intx=20,y=35; x=y+++x++; y=++y+++x; printf(“%d%dn”,x,y); } 19.Whatwillbeprintedastheresultoftheoperationbelow: main() { intx=5; printf(“%d,%d,%dn”,x,x<<2,x>>2); } 20.Whatwillbeprintedastheresultoftheoperationbelow: #defineswap(a,b)a=a+b;b=a-b;a=a-b; voidmain() { intx=5,y=10; swap(x,y); printf(“%d%dn”,x,y); swap2(x,y); printf(“%d%dn”,x,y); } intswap2(inta,intb) { inttemp; temp=a; b=a; a=temp; return0; } 21.Whatwillbeprintedastheresultoftheoperationbelow: main() { char*ptr=”CiscoSystems”; *ptr++; ptrintf(“%sn”,ptr); ptr++; printf(“%sn”,ptr); } 22.Whatwillbeprintedastheresultoftheoperationbelow: main() { chars1[]=”Cisco”; chars2[]=”systems”; printf(“%sn”,s1); } 23.Whatwillbeprintedastheresultoftheoperationbelow: main() { char*p1; char*p2; p1=(char*)malloc(25); p2=(char*)malloc(25); strcpy(p1,”Cisco”); strcpy(p2,”systems”); strcat(p1,p2); printf(“%s”,p1); } 24.Whatwillbeprintedastheresultoftheoperationbelow: intx; intmodifyvalue() { return(x+=10); } intchangevalue(intx) { return(x+=1); } voidmain() { intx=10; x++; changevalue(x); x++; modifyvalue(); printf(“Firstoutput: %dn”,x); x++; changevalue(x); printf(“Secondoutput: %dn”,x); modifyvalue(); printf(“Thirdoutput: %dn”,x); } 25.Whatwillbeprintedastheresultoftheoperationbelow: main() { intx=10,y=15; x=x++; y=++y; printf(“%d%dn”,x,y); } 26.Whatwillbeprintedastheresultoftheoperationbelow: main() { inta=0; if(a==0) printf(“CiscoSystemsn”); printf(“CiscoSystemsn”); } 手抄版 1.简要描述深拷贝和浅拷贝; 2.#define和const的区别; 3.linux含义: psdftws; 4.用C++判断字符串ip地址(192.168.0.9)是否有效? 如何截取? 5.请描述中断的范畴,什么是中断。 6.自选锁的概念和好处。 7.ARP协议属于子网络的第几层协议? 8.ELF文件的作用 9.虚拟地址与实际地址的区别。 10.static变量和static函数 11.嵌入式基于ROM运行方式与基于RAM运行方式的区别 12.task有几种状态 13.C函数允许重载吗? 14.嵌入式操作系统和通用操作系统的…… 15.volatile含义例子(代码) 16.const 17.给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3.在以上两个操作中要保持其他位不变。 18.n的阶乘 19.实现枚举给定数组中指定元素个数的排列。 编程题 1.2,3,5,9,17,33,65编程输出 2.1 23 345 4567 56789编程输出 Linux部分 填空题 1. vi编辑器具有两种工作模式,___________和___________。 2. 将/home/ixdba目录做归档
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 基础 试题