资源描述:
《2012电子科大复试C》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、指出程序段中的错误:分析错误的原因,并进行修改。(每个5分,共10分)1、函数swap将两个字符串(字符数组作实参,长度不超过100)的内容进行交换。Voidswap(char*pa,char*pb){char*temp;temp=pa;pa=pb;pb=temp;}//指针temp没有指向一个确定的内存单元,改正:Voidchange(char*p1,char*p2) { Char*temp; Charstr[80]; //编译器会给str开辟内存的 Temp=str; Temp=p1;
2、 P1=p2; P2=temp; }千万要注意不可写成这个样子:Voidchange(char*p1,char*p2){Charstr[80];//编译器会给str开辟内存的Str=p1;P1=p2;P2=str;}以上的一些写于成都,为什么不写了呢?我想一些高人们可能也看出我的水平来了,我的第一个题就做错了。其实char*temp;这句没有任何问题,他在考察的是值传递。指针传过去也是值传递。所谓的地址传递其实是将实参中的指针所指向的内容由形参(即被调用函数)来改变。还是谭浩强的那个经典的例子,这里说一句:谭浩强的哪本书真的很好啊
3、,很好,王道!下面将这个例子描述如下:#includevoidmain(){voidswap(int*p1,int*p2);inta,b;a=3;b=5;printf("交换前a=%d,b=%d",a,b);swap(&a,&b);printf("交换后a=%d,b=%d",a,b);}voidswap(int*p1,int*p2){ inttemp; temp=*p1;17 *p1=*p2; *p2=temp;}这个程序都见过吧,这个里面到底发生了什么,自己去谭浩强课本中看吧。。这个电大的第一道
4、题是让你写一个程序将两个字符串交换,这个就不难了哈,我是耍小聪明了,唉~~第一个题写了很多,下面的就少写点了哈。。。//方法1:voidswap(char**pa,char**pb){char*temp;temp=*pa;*pa=*pb;*pb=temp;}方法2:voidswap(char*pa,char*pb){chartemp[100];//题目说明最大为100字节strcpy(temp,pa);strcpy(pa,pb);strcpy(pb,temp);}//答:1.函数类型大小写错误。2.交换形参指针地址不能修改实参的值。修改:voidswap(cha
5、r*pa,char*pb){chartemp[MAX];inti;for(i=0;pa[i]!=' ';++i)temp[i]=pa[i];temp[i]=pa[i];for(i=0;pb[i]!=' ';++i)pa[i]=pb[i];pa[i]=pb[i];for(i=0;temp[i]!=' ';++i)pb[i]=temp[i];17pb[i]=temp[i];}或使用库函数:voidswap(char*pa,char*pb){chartemp[MAX];inti;strcpy(temp,pa);strcpy(pa,pb);strcpy(pb,te
6、mp);}2、程序片段为:charpa[]=“ABCDE”;char*pb=“EFG”;pb[1]=‘A’;//pb指向的内容是常量,不能修改pb=pa;strcpy(pa,“ABCDEFGXYZ”);//pa指向内存空间不够pb=“D”;//.其实第二个我在第一题中有所描述,就是不能给数组名赋值的。如:charstr[50]; str="Ilove";是错误的,因为str是个常量。。//答:1.pb[1]='A'尝试修改常量,出错2.strcpy函数尝试将一个长度超过pa的字符串复制进pa修改代码。【我都没看出来这代码要干什么,怎么改?】二、简答题(共30分
7、)1、设arr为整型数组,num和item为整型变量,N=数组元素个数-1。需要查找item是否在数组中,如果程序片段为for(num=N;arr[num]!=item;num–);printf(“%d”,num);可能导致的异常结果是什么?为什么?(8分)//这里有越界的危险哈,有可能在数组中根本就没有给定的值,则i会一直在减1。//17结果可能是输出一个负值,因为item是个变量,分配了存储空间,arr[-2]也是可以输出的,因为arr只是个地址,经过测试会找到item,printf他的地址//答:可能的异常结果为出现一个随机负数。由于代码未检查数组是否越界
8、,若查找的item未在数