电子科技大学 计算机学院 2012年 保研复试题目,绝对真实
一、程序改错:说明程序的错误原因并改正.(共20分)
1.下面程序段的功能是交换两个字符数组的内容(每个字符串字符数均不超过100).(8分) void StrSwap(char *pa,char *pb)
{
char *temp;
temp = pa;//strcpy(temp,pa);
pa = pb;
pb = temp;
}
该程序中pa,pb两个字符指针变量只是形式参数,刚开始pa指向数组pa[100]的的首元素,指向pb[100]首元素;交换后pa指向数组pb[100]的的首元素,指向pa[100]首元素;而且该程序段运行结束后pa,pb两个变量由内存回收,因此最后两个字符数组的内容没有改变。 改正:
void copy(char *pa,char *pb)
{
while(*pb!=0)
{
*pa=*pb;
pa++;
pb++;
}
*pa=0;
}
void StrSwap(char *pa,char *pb)
{
char temp[100];
copy(temp,pa);
copy(pa,pb);
copy(pb,temp);
}
2.程序段如下.(12分)
char a*+ = “House”;
char *b = “House”;
//b*2+ = ‘r’; //不能对字符常量赋值
a*2+ = ‘r’;
b = a;
b*2+ = ‘r’;
//a = b; a是一个地址常量,不能把地址赋给一个常量
二、简答题
1.下面程序中,arr[]、numb、item分别是整型数组、数组元素个数、某一整数,程序功能是遍历数组arr,查找与item相等的元素,并输出该元素的下标。但是此程序不严谨,请问它可能导致什么样的异常结果?为什么?(5分)
for(numb = 0;arr[numb] != item;numb --);