收藏 分销(赏)

c语言笔试题.docx

上传人:天**** 文档编号:3635839 上传时间:2024-07-11 格式:DOCX 页数:16 大小:19.65KB
下载 相关 举报
c语言笔试题.docx_第1页
第1页 / 共16页
c语言笔试题.docx_第2页
第2页 / 共16页
c语言笔试题.docx_第3页
第3页 / 共16页
c语言笔试题.docx_第4页
第4页 / 共16页
c语言笔试题.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、c语言笔试题资料仅供参考1.填空题(1)、请写出下列代码的输出内容 #include int main(void) int a,b,c,d; a=10; b=a+; c=+a; d=10*a+; printf(b,c,d:%d,%d,%d,b,c,d); return 0; 答:10,12,120 (2)charstr = 0;char *p = str;int n = 1000;请计算sizeof (str ) =_sizeof ( p ) =_sizeof ( n ) = _3 4 4(3)UCHAR *pucCharArray1010; typedef union unRec ULONG

2、 ulIndex; USHORT usLevel6; UCHAR ucPos; REC_S; REC_S stMax,*pstMax; 四字节对齐方式时: sizeof(pucCharArray) = _, sizeof(stMax)=_, sizeof(pstMax)=_,sizeof(*pstMax)=_.400 12 4 12(4)struct BBB long lNum; char *pcName; short sDate; char cHa2; short sBa6; *p; p = 0x100000; p + 0x1 = 0x_ (unsigned long)p + 0x1 = 0

3、x_ (unsigned long *)p + 0x1 = 0x_ (char *)p + 0x1 = 0x_100018 100001 100004 100001(5)struct tagAAA unsigned char ucId:1; unsigned char ucPara0:2; unsigned char ucState:6; unsigned char ucTail:4; unsigned char ucAvail; unsigned char ucTail2:4; unsigned long ulData;AAA_S;问:AAA_S在字节对齐分别为1、4的情况下,占用的空间大小

4、是多少?9 12(6)#pragma pack(4)/*编译选项,表示4字节对齐*/int main(int argc, char* argv) struct tagTest1 short a; char d; long b; long c; ; struct tagTest2 long b; short c; char d; long a; ; struct tagTest3 short c; long b; char d; long a; ; struct tagTest1 stT1; struct tagTest2 stT2; struct tagTest3 stT3; printf(%

5、d %d %d, sizeof(stT1), sizeof(stT2), sizeof(stT3); return 0;#pragma pack()(编译选项结束)请问输出结果是:_12 12 16(7)enum ENUM_A X1=2, Y1, Z1 = 6, A1, B1 ; enum ENUM_A enumA = Y1; enum ENUM_A enumB = B1; 请问 enumA = _; enumB = _;3 8(8)以下程序的输出结果是_.#include int fun(int x,int y) static int m = 0; static int i = 2; i +

6、= m + 1; m = i + x + y; return m;void main() int j = 4; int m = 1; int k; k = fun(j, m); printf(%d, k); k=fun(j, m); printf(%dn, k); return;8 17(9)以下程序的输出结果为_#define CIR(r) r*r /*请注意这种定义的缺陷,不允许这么定义*/void main() int a = 1; int b = 2; int t; t = CIR(a + b); printf(%dn, t); return;5(10)struct tagABC ch

7、ar cB; short sC; char cD; long lA;*pAbc;pAbc = 0x100000; 那么pAbc+0x100 = 0x_; (ULONG)pAbc + 0x100 = 0x_;(ULONG *)pAbc + 0x100 = 0x_;(char *)pAbc + 0x100 = 0x_;100C00100100 100400 1004002.改错题(1)下面程序把hello这个字符串输出,请指出其中的错误。void Test(void) char pcArray10; strncpy(pcArray,hello,5); printf(%sn,pcArray); re

8、turn;strncpy没有把中止符NULL写入数组中(2)如下程序用于把系统备板工作异常字符串打印出来,请指出其中的错误:void PrintErrInfo(void) char acMsg16; strcpy(acMsg,系统备板工作异常); printf(%s,acMsg); return;每个汉字占两个字节,空间不足,字符串结尾还有0(3)如下函数实现打印字符串hello world的功能,请指出错误:#define BUFFER_SIZE 256void GetMemory(char *pszBuf) if(NULL = pszBuf) ASSERT(0); return ; psz

9、Buf = (char *)malloc(BUFFER_SIZE); return;void Test(void) char *pszBuf = NULL; GetMemory(pszBuf); if(NULL = pszBuf) return ; strcpy(pszBuf, hello worldrn); printf(%s, pszBuf); free(pszBuf); return;函数要返回指针就需要传进去指针的地址(4)本题不考虑魔鬼数字问题void AddFunc (unsigned int a, unsigned int b, unsigned int * c) *c = a

10、+ bvoid main(void) unsigned char e = 200; unsigned char f = 100; unsigned char g = 0; AddFunc(unsigned int)e,(unsigned int)f,(unsigned int *)&g); printf(%d ,g);g是一个字节的变量,将g的地址强制转换成四个字节unsigned int地址,导致写内存越界(5)找出下面题目中的错误#define ID_LEN 32struct STR_A char aucIDID_LEN; int iA;struct STR_B char *paucID;

11、 int iB;/ 该函数将pstB内的paucID指向结构stA的aucIDvoid funcA(struct STR_A stA, struct STR_B *pstB) pstB-paucID = stA.aucID;main()STR_A stA = 0;STR_B stB;strcpy(stA.aucID, “12345”);funcA(stA, &stB);printf(“%sn”, stB.paucID);funcA传入的stA的参数是一个值拷贝,pstB指向的是堆栈中的地址。(6)指出下面程序的错误VOID B(ULONG *p)*p = 66 * 10000;return;V

12、OID A()unsigned short a 10*1000;B(ULONG *)(&a);return;字符越界/溢出7、请找出下面代码中的所有错误 (题目不错,值得一看)说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #includestring.h main() char*src=hello,world; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len); char* d=dest; char* s=srclen; while(len-!=0) d+=s-; printf(%s,dest)

13、; return 0; 答: 方法1:一共有4个错误; int main() char* src = hello,world; int len = strlen(src); char* dest = (char*)malloc(len+1);/要为分配一个空间 char* d = dest; char* s = &srclen-1; /指向最后一个字符while( len- != 0 ) *d+=*s-; *d = 0; /尾部要加0 printf(%sn,dest); free(dest); / 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL; /防止产生野指针return

14、 0; 方法2: (方法一需要额外的存储空间,效率不高.)不错的想法#include #include main()char str=hello,world;int len=strlen(str);char t;for(int i=0; ilen/2; i+)t=stri; stri=strlen-i-1; /小心一点strlen-i-1=t;printf(%s,str);return 0;8、请问下面程序有什么错误?int a602501000,i,j,k;for(k=0;k=1000;k+)for(j=0;j250;j+)for(i=0;i60;i+)aijk=0;答: 把循环语句内外换一下

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服