c语言笔试题.docx
- 文档编号:5000453
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:11
- 大小:27.91KB
c语言笔试题.docx
《c语言笔试题.docx》由会员分享,可在线阅读,更多相关《c语言笔试题.docx(11页珍藏版)》请在冰豆网上搜索。
c语言笔试题
c语言笔试题
1.填空题
(1)、请写出下列代码的输出内容
#include
intmain(void)
{
inta,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:
%d,%d,%d",b,c,d);
return0;
}
答:
10,12,120
(2) char str[]="\\\0";
char*p=str;
int n=1000;
请计算
sizeof(str)= ____________
sizeof(p)= ______________
sizeof(n)= ______________
344
(3) UCHAR*pucCharArray[10][10];
typedefunionunRec
{
ULONGulIndex;
USHORT usLevel[6];
UCHAR ucPos;
}REC_S;
REC_S stMax,*pstMax;
四字节对齐方式时:
sizeof(pucCharArray)=______,sizeof(stMax)=_______,sizeof(pstMax)=________,sizeof(*pstMax)=________.
40012412
(4) structBBB
{
unsignedcharucId:
1;
unsignedcharucPara0:
2;
unsignedcharucState:
6;
unsignedcharucTail:
4;
unsignedcharucAvail;
unsignedcharucTail2:
4;
unsignedlongulData;
}AAA_S;
问:
AAA_S在字节对齐分别为1、4的情况下,占用的空间大小是多少?
912
(6)#pragmapack(4)/*编译选项,表示4字节对齐*/
intmain(intargc,char*argv[])
{
structtagTest1
{
shorta;
chard;
longb;
longc;
};
structtagTest2
{
longb;
shortc;
chard;
longa;
};
structtagTest3
{
shortc;
longb;
chard;
longa;
};
structtagTest1stT1;
structtagTest2stT2;
structtagTest3stT3;
printf("%d%d%d",sizeof(stT1),sizeof(stT2),sizeof(stT3));
return0;
}
#pragmapack()(编译选项结束)
请问输出结果是:
_________
121216
(7)enumENUM_A
{
X1=2,
Y1,
Z1=6,
A1,
B1
};
enumENUM_AenumA=Y1;
enumENUM_AenumB=B1;
请问enumA=____;enumB=______;
38
(8)以下程序的输出结果是________.
#include
intfun(int x,int y)
{
static int m=0;
static int i=2;
i+=m+1;
m=i+x+y;
return m;
}
voidmain()
{
int j=4;
int m=1;
int k;
k=fun(j,m);
printf("%d,",k);
k=fun(j,m);
printf("%d\n",k);
return;
}
817
(9)以下程序的输出结果为________
#defineCIR(r) r*r/*请注意这种定义的缺陷,不允许这么定义*/
voidmain()
{
inta=1;
intb=2;
intt;
t=CIR(a+b);
printf("%d\n",t);
return;
}
5
(10)structtagABC
{
char cB;
shortsC;
char cD;
long lA;
}*pAbc;
pAbc=0x100000;
那么pAbc+0x100=0x_________;(ULONG)pAbc+0x100=0x_________;(ULONG*)pAbc+0x100=0x_________;(char*)pAbc+0x100=0x_______;
100C00 100100 100400 100400
2.改错题
(1)下面程序把"hello"这个字符串输出,请指出其中的错误。
voidTest(void)
{
charpcArray[10];
strncpy(pcArray,"hello",5);
printf("%s\n",pcArray);
return;
}
strncpy没有把中止符NULL写入数组中
(2)如下程序用于把"系统备板工作异常"字符串打印出来,请指出其中的错误:
voidPrintErrInfo(void)
{
characMsg[16];
strcpy(acMsg,"系统备板工作异常");
printf("%s",acMsg);
return;
}
每个汉字占两个字节,空间不足,字符串结尾还有'\0'
(3)如下函数实现打印字符串"helloworld"的功能,请指出错误:
#defineBUFFER_SIZE 256
voidGetMemory(char*pszBuf)
{
if(NULL==pszBuf)
{
ASSERT(0);
return;
}
pszBuf=(char*)malloc(BUFFER_SIZE);
return;
}
voidTest(void)
{
char*pszBuf=NULL;
GetMemory(pszBuf);
if(NULL==pszBuf)
{
return;
}
strcpy(pszBuf,"helloworld\r\n");
printf("%s",pszBuf);
free(pszBuf);
return;
}
函数要返回指针就需要传进去指针的地址
(4)本题不考虑魔鬼数字问题
voidAddFunc(unsignedinta,unsignedintb,unsignedint*c)
{
*c=a+b
}
voidmain(void)
{
unsignedchare=200;
unsignedcharf=100;
unsignedcharg=0;
AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&g);
printf("%d",g);
}
g是一个字节的变量,将g的地址强制转换成四个字节unsignedint地址,导致写内存越界
(5)找出下面题目中的错误
#defineID_LEN 32
structSTR_A
{
charaucID[ID_LEN];
int iA;
}
structSTR_B
{
char*paucID;
intiB;
}
//该函数将pstB内的paucID指向结构stA的aucID
voidfuncA(structSTR_AstA,structSTR_B*pstB)
{
pstB->paucID=stA.aucID;
}
main()
{
STR_AstA={0};
STR_BstB;
strcpy(stA.aucID,“12345”);
funcA(stA,&stB);
printf(“%s\n”,stB.paucID);
}
funcA传入的stA的参数是一个值拷贝,pstB指向的是堆栈中的地址。
(6)指出下面程序的错误
VOIDB(ULONG*p)
{
*p=66*10000;
return;
}
VOIDA()
{
unsignedshorta=10*1000;
B((ULONG*)(&a));
return;
}
字符越界/溢出
7、请找出下面代码中的所有错误(题目不错,值得一看)
说明:
以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
#include"string.h"
main()
{
char*src="hello,world";
char*dest=NULL;
intlen=strlen(src);
dest=(char*)malloc(len);
char*d=dest;
char*s=src[len];
while(len--!
=0)
d++=s--;
printf("%s",dest);
return0;
}
答:
方法1:
一共有4个错误;
intmain()
{
char*src="hello,world";
intlen=strlen(src);
char*dest=(char*)malloc(len+1);//要为分配一个空间 char*d=dest;
char*s=&src[len-1];//指向最后一个字符
while(len--!
=0)
*d++=*s--;
*d=0;//尾部要加’\0’
printf("%sn",dest);
free(dest);//使用完,应当释放空间,以免造成内存汇泄露
dest=NULL; //防止产生野指针
return0;
}
方法2:
(方法一需要额外的存储空间,效率不高.) 不错的想法
#include
#include
main()
{
charstr[]="hello,world";
intlen=strlen(str);
chart;
for(inti=0;i { t=str[i]; str[i]=str[len-i-1];//小心一点 str[len-i-1]=t; } printf("%s",str); return0; } 8、请问下面程序有什么错误? 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; 答: 把循环语句内外换一下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔试
![提示](https://static.bdocx.com/images/bang_tan.gif)