- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2012电子科大复试C
一、指出程序段中的错误:分析错误的原因,并进行修改。(每个5分,共10分)1、函数swap将两个字符串(字符数组作实参,长度不超过100)的内容进行交换。Voidswap(char*pa,char*pb){char*temp;temp=pa;pa=pb;pb=temp;}//指针temp没有指向一个确定的内存单元,改正:Void change(char *p1,char *p2)? ???{? ?? ???Char *temp;? ?? ?? ?? ?? ? Char str[80];? ? //编译器会给str开辟内存的? ?? ?? ?? ?? ? Temp=str;? ?? ???Temp=p1;? ?? ?? ?P1=p2;? ?? ?? ?? ?? ???P2=temp;? ???}千万要注意不可写成这个样子:Void change(char *p1,char *p2) { Char str[80]; //编译器会给str开辟内存的Str=p1; P1=p2; P2=str; }以上的一些写于成都,为什么不写了呢?我想一些高人们可能也看出我的水平来了,我的第一个题就做错了。其实char * temp;这句没有任何问题,他在考察的是值传递。指针传过去也是值传递。所谓的地址传递其实是将实参中的指针所指向的内容由形参(即被调用函数)来改变。还是谭浩强的那个经典的例子,这里说一句:谭浩强的哪本书真的很好啊,很好,王道!下面将这个例子描述如下:#include stdio.hvoid main(){void swap(int *p1,int *p2);inta,b;a=3;b=5;printf(交换前a=%d,b=%d\n,a,b);swap(a,b);printf(交换后a=%d,b=%d\n,a,b);}void swap(int *p1,int *p2){? ?? ???int temp;? ?? ???temp=*p1;? ?? ???*p1=*p2;? ?? ???*p2=temp;}这个程序都见过吧,这个里面到底发生了什么,自己去谭浩强课本中看吧。。这个电大的第一道题是让你写一个程序将两个字符串交换,这个就不难了哈,我是耍小聪明了,唉~~第一个题写了很多,下面的就少写点了哈。。。//方法1: void swap(char **pa,char **pb) {char *temp;temp=*pa;*pa=*pb;*pb=temp;}方法2: void swap(char *pa,char *pb){ char temp[100];//题目说明最大为100字节strcpy(temp,pa);strcpy(pa,pb);strcpy(pb,temp);}//答:1.函数类型大小写错误。2. 交换形参指针地址不能修改实参的值。修改:void swap(char *pa, char *pb){char temp[MAX];inti;for(i=0;pa[i]!=\0;++i)temp[i]=pa[i];temp[i]=pa[i];for(i=0;pb[i]!=\0;++i)pa[i]=pb[i];pa[i]=pb[i];for(i=0;temp[i]!=\0;++i)pb[i]=temp[i];pb[i]=temp[i];}或使用库函数:void swap(char *pa, char *pb){ char temp[MAX]; int i; strcpy(temp,pa); strcpy(pa,pb); strcpy(pb,temp);}2、程序片段为:charpa[]=“ABCDE”;char*pb=“EFG”;pb[1]=‘A’; //pb指向的内容是常量,不能修改pb=pa;strcpy(pa,“ABCDEFGXYZ”); //pa指向内存空间不够pb=“D”;//.其实第二个我在第一题中有所描述,就是不能给数组名赋值的。如:char str[50];? ? str=I love;是错误的,因为str是个常量。。//答:1. pb[1]=A尝试修改常量,出错2. strcpy函数尝试将一个长度超过pa的字符串复制进pa修改代码。【我都没看出来这代码要干什么,怎么改?】二、简答题(共30分)1、设arr为整型数组,num和item为整型变量,N=数组元素个数-1。需要查找item是否在数组中,如果程序片段为for(num=N;arr[num]!=item;num–);printf(“%d”,num);可能导致的异常结果是什么?为什么?(8分)//这里有越界的危险哈,有可能在数组中根本就没有给定的值
文档评论(0)