(1912制作)C语言编程题大题集合.pdf

上传人:qwe****56 文档编号:70010397 上传时间:2023-01-14 格式:PDF 页数:30 大小:381.99KB
返回 下载 相关 举报
(1912制作)C语言编程题大题集合.pdf_第1页
第1页 / 共30页
(1912制作)C语言编程题大题集合.pdf_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《(1912制作)C语言编程题大题集合.pdf》由会员分享,可在线阅读,更多相关《(1912制作)C语言编程题大题集合.pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三部分:编程题第三部分:编程题 1、读文件、读文件 file1.txt 的内容(例如):的内容(例如):12 34 56 输出到 file2.txt:56 34 12#include#include int main(void)int MAX=10;int*a=(int*)malloc(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

2、=0;int j=0;while(fscanf(fp1,%d,&ai)!=EOF)i+;j+;if(i=MAX)MAX=2*MAX;b=(int*)realloc(a,MAX*sizeof(int);if(b=NULL)printf(error3);exit(-1);a=b;for(;-j=0;)fprintf(fp2,%dn,aj);fclose(fp1);fclose(fp2);return 0;2、输出和为一个给定整数的所有组合、输出和为一个给定整数的所有组合 例如 n=5 5=1+4;5=2+3(相加的数不能重复)则输出 1,4;2,3。#include int main(void)u

3、nsigned long int i,j,k;printf(please input the numbern);scanf(%d,&i);if(i%2=0)j=i/2;else j=i/2+1;printf(The result is n);for(k=0;k j;k+)printf(%d=%d+%dn,i,k,i-k);return 0;#include void main()unsigned long int a,i=1;scanf(%d,&a);if(a%2=0)for(i=1;ia/2;i+)printf(%d,a,a-i);else for(i=1;i=a/2;i+)printf(%

4、d,%d,i,a-i);3、递规反向输出字符串的例子、递规反向输出字符串的例子,可谓是反序的经典例程可谓是反序的经典例程.void inverse(char*p)if(*p=0)return;inverse(p+1);printf(%c,*p);int main(int argc,char*argv)inverse(abc0);return 0;对对 1 的另一种做法:的另一种做法:#include void test(FILE*fread,FILE*fwrite)char buf1024=0;if(!fgets(buf,sizeof(buf),fread)return;test(fread,

5、fwrite);fputs(buf,fwrite);int main(int argc,char*argv)FILE*fr=NULL;FILE*fw=NULL;fr=fopen(data,rb);fw=fopen(dataout,wb);test(fr,fw);fclose(fr);fclose(fw);return 0;4、写一段程序,、写一段程序,找出数组中第 k 大小的数,输出数所在的位置。例如2,4,3,4,7中,第一大的数是 7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int*narry,const

6、int n,const int k)要求算法复杂度不能是 O(n2)谢谢!可以先用快速排序进行排序,其中用另外一个进行地址查找 代码如下,在 VC+6.0 运行通过。给分吧-/快速排序#include usingnamespacestd;intPartition(int*L,intlow,int high)inttemp=Llow;intpt=Llow;while(low high)while(low=pt)-high;Llow=Lhigh;while(low high&Llow=pt)+low;Llow=temp;Llow=temp;returnlow;voidQSort(int*L,int

7、low,int high)if(low high)intpl=Partition(L,low,high);QSort(L,low,pl-1);QSort(L,pl+1,high);intmain()intnarry100,addr100;intsum=1,t;cout Input number:t;while(t!=-1)narrysum=t;addrsum-1=t;sum+;cin t;sum-=1;QSort(narry,1,sum);for(int i=1;i=sum;i+)cout narryi t;cout endl;intk;cout Please input place you

8、want:k;intaa=1;intkk=0;for(;)if(aa=k)break;if(narrykk!=narrykk+1)aa+=1;kk+;cout The NO.k number is:narrysum-kk endl;cout And its place is:;for(i=0;i sum;i+)if(addri=narrysum-kk)cout i next!=NULL&qa-next!=NULL)if(pa-dataqa-data)ra-next=qa;qa=qa-next;else ra-next=pa;pa=pa-next;if(pa-next!=NULL)ra-next

9、=pa;if(qa-next!=NULL)ra-next=qa;return R;6、用递归算法判断数组、用递归算法判断数组 aN是否为一个递增数组。是否为一个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回 false 结束:bool fun(int a,int n)if(n=1)return true;if(n=2)return an-1=an-2;return fun(a,n-1)&(an-1=an-2);7、单连表的建立,把、单连表的建立,把a-z26 个字母插入到连表中,并且倒叙,还要打印!个字母插入到连表中,并且倒叙,还要打印!方法 1:typ

10、edef struct val int date_1;struct val*next;*p;void main(void)char c;for(c=122;c=97;c-)p.date=c;p=p-next;p.next=NULL;方法 2:node*p=NULL;node*q=NULL;node*head=(node*)malloc(sizeof(node);head-data=;head-next=NULL;node*first=(node*)malloc(sizeof(node);first-data=a;first-next=NULL;head-next=first;p=first;i

11、nt longth=z-b;int i=0;while(idata=b+i;temp-next=NULL;q=temp;head-next=temp;temp-next=p;p=q;i+;print(head);8、请列举一个软件中时间换空间或者空间换时间的例子。、请列举一个软件中时间换空间或者空间换时间的例子。void swap(int a,int b)int c;c=a;a=b;b=a;-空优 void swap(int a,int b)a=a+b;b=a-b;a=a-b;9、outputstr 所指的值为所指的值为 123456789 int continumax(char*output

12、str,char*inputstr)char*in=inputstr,*out=outputstr,*temp,*final;int count=0,maxlen=0;while(*in!=0)if(*in 47&*in 47&*in 58;in+)count+;else in+;if(maxlen count)maxlen=count;count=0;final=temp;for(int i=0;i maxlen;i+)*out=*final;out+;final+;*out=0;return maxlen;10、不用库函数、不用库函数,用用 C 语言实现将一整型数字转化为字符串语言实现将一

13、整型数字转化为字符串 方法 1:int getlen(char*s)int n;for(n=0;*s!=0;s+)n+;return n;void reverse(char s)int c,i,j;for(i=0,j=getlen(s)-1;i j;i+,j-)c=si;si=sj;sj=c;void itoa(int n,char s)int i,sign;if(sign=n)0);/*delete the number*/if(sign 0)si+=-;si=0;reverse(s);方法 2:#include using namespace std;void itochar(int nu

14、m);void itochar(int num)int i=0;int j;char stra10;char strb10;while(num)strai+=num%10+48;num=num/10;strai=0;for(j=0;j i;j+)strbj=strai-j-1;strbj=0;coutstrbnum;itochar(num);return 0;11、求组合数:求 n 个数(1.n)中 k 个数的组合.如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321,#include int pop(int*);int

15、push(int);void combination(int,int);int stack3=0;top=-1;int main()int n,m;printf(Input two numbers:n);while(2!=scanf(%d%*c%d,&n,&m)fflush(stdin);printf(Input error!Again:n);combination(n,m);printf(n);void combination(int m,int n)int temp=m;push(temp);while(1)if(1=temp)if(pop(&temp)&stack0=n)/当栈底元素弹出

16、&为可能取的最小值,循环退出 break;else if(push(-temp)printf(%d%d%d ,stack0,stack1,stack2);/ä?pop(&temp);int push(int i)stack+top=i;if(top=0)return 0;else return 1;12、用指针的方法,将字符串、用指针的方法,将字符串“ABCD1234efgh”前后对调显示前后对调显示#include#include#include int main()char str=ABCD1234efgh;int length=strlen(str);char*p1=str;c

17、har*p2=str+length-1;while(p1 p2)char c=*p1;*p1=*p2;*p2=c;+p1;-p2;printf(str now is%sn,str);system(pause);return 0;13、有一分数序列:、有一分数序列:1/2,1/4,1/6,1/8,用函数调用的方法,求此数列前,用函数调用的方法,求此数列前 20 项的和项的和#include double getValue()double result=0;int i=2;while(i 1-2(删除)-3-4-5(删除)-6-7-0(删除),如此循环直到最后一个数被删除。方法 1:数组#incl

18、ude using namespace std;#define null 1000 int main()int arr1000;for(int i=0;i1000;+i)arri=i;int j=0;int count=0;while(count999)while(arrj%1000=null)j=(+j)%1000;j=(+j)%1000;while(arrj%1000=null)j=(+j)%1000;j=(+j)%1000;while(arrj%1000=null)j=(+j)%1000;arrj=null;+count;while(arrj=null)j=(+j)%1000;coutj

19、endl;return 0;方法 2:链表#include using namespace std;#define null 0 struct node int data;node*next;int main()node*head=new node;head-data=0;head-next=null;node*p=head;for(int i=1;idata=i;tmp-next=null;head-next=tmp;head=head-next;head-next=p;while(p!=p-next)p-next-next=p-next-next-next;p=p-next-next;co

20、utdata;return 0;方法 3:通用算法#include#define MAXLINE 1000 /元素个数/*MAXLINE 元素个数 a 元素数组 R 指针场 suffix 下标 index 返回最后的下标序号 values 返回最后的下标对应的值 start 从第几个开始 K 间隔*/int find_n(int a,int R,int K,int&index,int&values,int s=0)int suffix;int front_node,current_node;suffix=0;if(s=0)current_node=0;front_node=MAXLINE-1;

21、else current_node=s;front_node=s-1;while(Rfront_node!=front_node)printf(%dn,acurrent_node);Rfront_node=Rcurrent_node;if(K=1)current_node=Rfront_node;continue;for(int i=0;iK;i+)front_node=Rfront_node;current_node=Rfront_node;index=front_node;values=afront_node;return 0;int main(void)int aMAXLINE,RMAX

22、LINE,suffix,index,values,start,i,K;suffix=index=values=start=0;K=2;for(i=0;inumber=key)Head=Pointer-next;free(Pointer);break;Back=Pointer;Pointer=Pointer-next;if(Pointer-number=key)Back-next=Pointer-next;free(Pointer);break;void delete(Node*p)if(Head=Node)while(p)18、有、有 1,2,.一直到一直到 n 的无序数组的无序数组,求排序算

23、法求排序算法,并且要求时间复杂度为并且要求时间复杂度为 O(n),空间复杂度空间复杂度 O(1),使用交使用交换换,而且一次只能交换两个数而且一次只能交换两个数.(华为)(华为)#include int main()int a =10,6,9,5,2,8,4,7,1,3;int len=sizeof(a)/sizeof(int);int temp;for(int i=0;i len;)temp=aai-1;aai-1=ai;ai=temp;if(ai=i+1)i+;for(int j=0;j len;j+)coutajnext;while(q!=NULL)r=q-next;q-next=p;p

24、=q;q=r;head-next=NULL;head=p;return head;20、写出程序删除链表中的所有接点、写出程序删除链表中的所有接点 void del_all(node*head)node*p;while(head!=NULL)p=head-next;free(head);head=p;cout释放空间成功!src)282 d=(char*)dst+len-1;283 s=(char*)src+len-1;284 while(len=4)285 *d-=*s-;286 *d-=*s-;287 *d-=*s-;288 *d-=*s-;289 len-=4;290 291 while

25、(len-)292 *d-=*s-;293 294 else if(dst=4)298 *d+=*s+;299 *d+=*s+;300 *d+=*s+;301 *d+=*s+;302 len-=4;303 304 while(len-)305 *d+=*s+;306 307 308 return dst;309 23、公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)、公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)各种情况包括:各种情况包括:、参数是指针,检查指针是否有效、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出、读写权限

26、检查、安全检查,是否会溢出 memcpy 拷贝一块内存,内存的大小你告诉它 strcpy 是字符串拷贝,遇到0结束 /*memcpy 拷贝不重叠的内存块*/void memcpy(void*pvTo,void*pvFrom,size_t size)void*pbTo=(byte*)pvTo;void*pbFrom=(byte*)pvFrom;ASSERT(pvTo!=NULL&pvFrom!=NULL);/检查输入指针的有效性 ASSERT(pbTo=pbFrom+size|pbFrom=pbTo+size);/检查两个指针指向的内存是否重叠 while(size-0)*pbTo+=*pbFr

27、om+;return(pvTo);24、两个字符串,、两个字符串,s,t;把把 t 字符串插入到字符串插入到 s 字符串中,字符串中,s 字符串有足够的空间存放字符串有足够的空间存放 t 字符串字符串 void insert(char*s,char*t,int i)memcpy(&sstrlen(t)+i,&si,strlen(s)-i);memcpy(&si,t,strlen(t);sstrlen(s)+strlen(t)=0;25、编写一个、编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字

28、符组成的。char*search(char*cpSource,char ch)char*cpTemp=NULL,*cpDest=NULL;int iTemp,iCount=0;while(*cpSource)if(*cpSource=ch)iTemp=0;cpTemp=cpSource;while(*cpSource=ch)+iTemp,+cpSource;if(iTemp iCount)iCount=iTemp,cpDest=cpTemp;if(!*cpSource)break;+cpSource;return cpDest;26、请编写一个、请编写一个 C 函数,该函数在给定的内存区域搜索

29、给定的字符,并返回该字符所在位置索引值。函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。int search(char*cpSource,int n,char ch)int i;for(i=0;in&*(cpSource+i)!=ch;+i);return i;27、给定字符串、给定字符串 A 和和 B,输出输出 A 和和 B 中的最大公共子串。中的最大公共子串。比如 A=aocdfe B=pmcdfa 则输出cdf*/Author:azhen#include#include#include char*commanstring(char shortstring,char

30、 longstring)int i,j;char*substring=malloc(256);if(strstr(longstring,shortstring)!=NULL)/如果,那么返回 shortstring return shortstring;for(i=strlen(shortstring)-1;i0;i-)/否则,开始循环计算 for(j=0;jstrlen(str2)/将短的字符串放前面 comman=commanstring(str2,str1);else comman=commanstring(str1,str2);printf(the longest comman str

31、ing is:%sn,comman);28、写一个函数比较两个字符串、写一个函数比较两个字符串 str1 和和 str2 的大小,若相等返回的大小,若相等返回 0,若,若 str1 大于大于 str2 返回 1,若 str1 小于 str2 返回1 int strcmp(const char*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);29、求、求 1000!的未尾有几个!的未尾有几个 0

32、(用素数相乘的方法来做,如(用素数相乘的方法来做,如 72=2*2*2*3*3);求出 1-1000 里,能被 5 整除的数的个数 n1,能被 25 整除的数的个数 n2,能被 125 整除的数的个数 n3,能被 625 整除的数的个数 n4.1000!末尾的零的个数=n1+n2+n3+n4;#include#define NUM 1000 int find5(int num)int ret=0;while(num%5=0)num/=5;ret+;return ret;int main()int result=0;int i;for(i=5;idata=Value)if(pNode-front

33、=NULL)pHeader=pNode-next;pHeader-front=NULL;else if(pNode-next!=NULL)pNode-next-front=pNode-front;pNode-front-next=pNode-next;Node*pNextNode=pNode-next;delete pNode;pNode=pNextNode;bRet=TRUE;/不要 break 或 return,删除所有 else pNode=pNode-next;return bRet;void DE(Node*pHeadA,Node*pHeadB)if(pHeadA=NULL|pHea

34、dB=NULL)return;Node*pNode=pHeadA;while(pNode!=NULL)if(DeteleNode(pHeadB,pNode-data)if(pNode-front=NULL)pHeadA=pNode-next;pHeadA-front=NULL;else pNode-front-next=pNode-next;if(pNode-next!=NULL)pNode-next-front=pNode-front;Node*pNextNode=pNode-next;delete pNode;pNode=pNextNode;else pNode=pNode-next;31

35、、编程实现:找出两个字符串中最大公共子字符串、编程实现:找出两个字符串中最大公共子字符串,如如abccade,dgcadde的最大子串为的最大子串为cad int GetCommon(char*s1,char*s2,char*r1,char*r2)int len1=strlen(s1);int len2=strlen(s2);int maxlen=0;for(int i=0;i len1;i+)for(int j=0;j len2;j+)if(s1i=s2j)int as=i,bs=j,count=1;while(as+1 len1&bs+1 maxlen)maxlen=count;*r1=s

36、1+i;*r2=s2+j;32、编程实现:把十进制数、编程实现:把十进制数(long 型型)分别以二进制和十六进制形式输出,不能使用分别以二进制和十六进制形式输出,不能使用 printf 系列库函数系列库函数 char*test3(long num)char*buffer=(char*)malloc(11);buffer0=0;buffer1=x;buffer10=0;char*temp=buffer+2;for(int i=0;i 8;i+)tempi=(char)(num28);tempi=tempi=0?tempi:tempi+16;tempi=tempi 10?tempi+48:tem

37、pi+55;return buffer;33、输入、输入 N,打印打印 N*N 矩阵矩阵 比如 N=3,打印:1 2 3 8 9 4 7 6 5 N=4,打印:1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 解答:1#define N 15 int sNN;void main()int k=0,i=0,j=0;int a=1;for(;k (N+1)/2;k+)while(j N-k)sij+=a+;i+;j-;while(i k-1)sij-=a+;i-;j+;while(i k)si-j=a+;i+;j+;for(i=0;i N;i+)for(j=0;j N;

38、j+)cout sij t;cout endl;2 define MAX_N 100 int matrixMAX_NMAX_N;/*(x,y):第一个元素的坐标 *start:第一个元素的值 *n:矩阵的大小 */void SetMatrix(int x,int y,int start,int n)int i,j;if(n=0)/递归结束条件 return;if(n=1)/矩阵大小为 1 时 matrixxy=start;return;for(i=x;i x+n-1;i+)/矩阵上部 matrixyi=start+;for(j=y;j x;i-)/底部 matrixy+n-1i=start+;

39、for(j=y+n-1;j y;j-)/左部 matrixjx=start+;SetMatrix(x+1,y+1,start,n-2);/递归 void main()int i,j;int n;scanf(%d,&n);SetMatrix(0,0,1,n);/打印螺旋矩阵 for(i=0;i n;i+)for(j=0;j n;j+)printf(%4d,matrixij);printf(n);34、斐波拉契数列递归实现的方法如下:、斐波拉契数列递归实现的方法如下:int Funct(int n)if(n=0)return 1;if(n=1)return 1;retrurn Funct(n-1)

40、+Funct(n-2);请问,如何不使用递归,来实现上述函数?请教各位高手!解答:int Funct(int n)/n 为非负整数 int a=0;int b=1;int c;if(n=0)c=1;else if(n=1)c=1;else for(int i=2;i=n;i+)/应该 n 从 2 开始算起 c=a+b;a=b;b=c;return c;解答:现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位。100 的二进制是 001 100 100 低位在前 高位在后 001-s3 100-s2 100-s1 所以结果应该是 1 如果先申明的在低位则:001-s1 10

41、0-s2 100-s3 结果是 4 1、原题跟 little-endian,big-endian 没有关系 2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从 Dev C+和 VC7.1 上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位 3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C+未用空间分配为 01110111b,VC7.1 下为 11001100b,所以在 Dev C+下的结果为 5,在 VC7.1 下为 1。注:PC 一般采用 little-endian,即高高低低,但在网络传输上,一般采用 big-end

42、ian,即高低低高,华为是做网络的,所以可能考虑 big-endian 模式,这样输出结果可能为 4 35、判断一个字符串是不是回文、判断一个字符串是不是回文 int IsReverseStr(char*aStr)int i,j;int found=1;if(aStr=NULL)return-1;j=strlen(aStr);for(i=0;ij/2;i+)if(*(aStr+i)!=*(aStr+j-i-1)found=0;break;return found;36、Josephu 问题为:设编号为问题为:设编号为 1,2,n 的的 n 个人围坐一圈,约定编号为个人围坐一圈,约定编号为 k(

43、1=k=n)的人从)的人从 1 开始报开始报数,数到数,数到 m 的那个人出列,它的下一位又从的那个人出列,它的下一位又从 1 开始报数,数到开始报数,数到 m 的那个人又出列,依次类推,直到所有人出的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。列为止,由此产生一个出队编号的序列。数组实现:#include#include int Josephu(int n,int m)int flag,i,j=0;int*arr=(int*)malloc(n*sizeof(int);for(i=0;i n;+i)arri=1;for(i=1;i n;+i)flag=0;while

44、(flag m)if(j=n)j=0;if(arrj)+flag;+j;arrj-1=0;printf(第%4d 个出局的人是:%4d 号n,i,j);free(arr);return j;int main()int n,m;scanf(%d%d,&n,&m);printf(最后胜利的是%d 号!n,Josephu(n,m);system(pause);return 0;链表实现:#include#include typedef struct Node int index;struct Node*next;JosephuNode;int Josephu(int n,int m)int i,j;

45、JosephuNode*head,*tail;head=tail=(JosephuNode*)malloc(sizeof(JosephuNode);for(i=1;i index=i;tail-next=(JosephuNode*)malloc(sizeof(JosephuNode);tail=tail-next;tail-index=i;tail-next=head;for(i=1;tail!=head;+i)for(j=1;j next;tail-next=head-next;printf(第%4d 个出局的人是:%4d 号n,i,head-index);free(head);head=t

46、ail-next;i=head-index;free(head);return i;int main()int n,m;scanf(%d%d,&n,&m);printf(最后胜利的是%d 号!n,Josephu(n,m);system(pause);return 0;37、已知、已知 strcpy 函数的原型是:函数的原型是:char*strcpy(char*strDest,const char*strSrc);1.不调用库函数,实现 strcpy 函数。2.解释为什么要返回 char*。解说:1.strcpy 的实现代码 char*strcpy(char*strDest,const char

47、*strSrc)if(strDest=NULL)|(strSrc=NULL)file:/1 throw Invalid argument(s);/2 char*strDestCopy=strDest;file:/3 while(*strDest+=*strSrc+)!=0);file:/4 return strDestCopy;错误的做法:1 (A)不检查指针的有效性,说明答题者不注重代码的健壮性。(B)检查指针的有效性时使用(!strDest)|(!strSrc)或(!(strDest&strSrc),说明答题者对 C语言中类型的隐式转换没有深刻认识。在本例中 char*转换为 bool 即

48、是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以 C+专门增加了 bool、true、false 三个关键字以提供更安全的条件表达式。(C)检查指针的有效性时使用(strDest=0)|(strSrc=0),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的 0)会减少程序的可维护性。0 虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用 NULL 代替 0,如果出现拼写错误,编译器就会检查出来。2 (A)return new string(Invalid argument(s);,说明

49、答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。3 (A)忘记保存原始的 strDest 值,说明答题者逻辑思维不严密。4 (A)循环写成 while(

50、*strDest+=*strSrc+);,同1(B)。(B)循环写成 while(*strSrc!=0)*strDest+=*strSrc+;,说明答题者对边界条件的检查不力。循环体结束后,strDest 字符串的末尾没有正确地加上0。第四部分:附加部分第四部分:附加部分 1、位域、位域:有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁