问题 问答题

给定一个函数,其函数功能为:使10个整数按由小到大的顺序排列。在主函数中输入10个数,并输出结果。使用VC6打开考生文件夹下的工程RevProj5。此工程包含一个源程序文件RevMain5.cpp,该程序实现上述功能。但此程序运行有问题。请找出错误的地方,改正后将此程序调试正确。 注意:不得删行或增行,也不得更改程序结构。 文件RevMain5.cpp中的程序清单如下: //RevMain5.cpp #include<iostream> #include<iomanip> using namespace std; int main() { void sort(int array[],int n); int data[10],*p,i; cout<<"Input 10 numbers\n"; for (i=0; i<10; i++)cin>>data [i]; cout<<"the origined array is:"; for (p=data;p<data+10;p++) {if((p-&data[0]) %5==0) cout<<" \n";cout<<setw (5) <<*p; } sort (data, 10); cout<<"\n the present array is:"; for(p=data;p〈data+10;p++) {if((p-&data[0])%5==0) cout<<"\n";cout<<setw (5)<<*p; } } void sort(int array[],int n) { /* * * * * * * * *found * * * * * * * * * */ for(p1=array;p1<array+(n-1) ;p1++) {for (p2=p1+1 ;p2<array+n;p2++){ if (*p1>*p2) { /* * * * * * * * *found * * * * * * * * * */ temp=*p1; *p1=*p2; *p2=*p1; }} } }

答案

参考答案:

解析:修改后的函数sort为: void sort(int array[],int n) { int *p1,*p2,temp; for(p1=array;p1<array+(n-1) ;p1++) { for(p2=p1+1;p2<array+n;p2++) if (*p1>*p2) { temp=*p1; *p1=*p2; *p2=temp; } } } 程序中有两处标识行,表明程序中有两处错误,而且都是在函数sort的函数体中的错误。不难发现在函数sort中出现了*p1、*p2、temp这样的变量,而在用到这些变量前,程序没有对它们进行定义,所以在第1处错误处写上“int *p1,*p2,temp;”。第2处错误:易知if语句中的语句序列是实现两个指针变量中值的交换,显然上述语句不能实现此功能,所以应改为:“temp=*p1;*p1:*p2;*p2=temp;”

多项选择题 案例分析题
单项选择题