C++上机改错题详细分析

C++上机改错题详细分析,第1张

C++上机改错题详细分析,第2张

1.在给定的程序MODI1中。c,fun的作用是通过某种方式实现两个变量值的交换,规定不允许添加任何语句和表达式。比如变量A中的值是10,B中的值是20,程序运行后A中的值是20,B中的值是10。
请更正程序中的错误,以便它可以得到正确的结果。
注意:不要改变主函数,不要增删行,不要改变程序的结构!
试题源程序如下:
# include < stdio . h >
/* * * * * * * found * * * * * * * * */
void fun(int x,int y
/* * * * * * * * * * * * found * * * * * * * * * * * * * */
t = x;x = y;
/* * * * * * * * * *找到了* * * * * * * * * */
retum y;
}
main()
{ int a,b;
printf("输入a,b:");scanf("%d%d ",&a,& b);
printf("a=%d b=%d\n\n ",a,b);
b=fun(&a,b);
printf("a=%d b=%d\n\n ",a,b);
}分析1)编译上述程序时,给出的第一条错误信息是:void函数可能不返回值。指出void类型的函数不能返回函数值。从main函数可以看出,函数把返回值赋给了整型变量b,所以fun函数的类型应该是int,fun之前的void应该改成int或者删除。
(2)考生在改正上述错误的同时,会发现在main函数中调用fun函数时,第一个实参的类型与形参的类型不匹配。实参的类型是int变量的地址值,形参的类型是int变量。所以在fun函数的第一个形参X前要加一个*号,将X定义为可以接受地址的指针。
(3)编译修改后的程序没有错误。运行程序时,向A和B输入数据(注意输入数据用空)分隔)。如果输入10到A,20到B,输出结果显示A和B的值没有变化,即fun函数中没有指定的交换操作,需要检查fun函数中的语句。
(4)在函数中可以找到语句t = x;不允许将地址值赋给整数变量。根据题意,指针X指向的A的值应该赋给T,所以语句应该是T = * X;同一个语句x = y;应该改成* x = y;,从而将主函数中变量B的值赋给变量A;更改后,运行程序,分别向A和B输入10和20。观察输出结果,我们可以看到A和B的值都是20,也就是说B的值已经给了A,但是B本身没有变化。
(5)复检程序应该看到,在main函数中,B的最后一个值是由fun函数的返回值赋值的。观察函数的return语句,它返回函数中Y的值,也就是主函数中B的初始值。所以逻辑上有错误,应该按照题意返回A的原值。此时A的原值已经被T = * X放在了fun函数的T中。再次运行程序,你会得到正确的结果。
(6)提示:
①首先检查被调用函数的类型和参数的类型是否与主函数中的调用函数和参数的类型一致。如果不一致,就要根据main函数中的调用进行修改。例如,当参数是指针或数组名时,相应的参数必须定义为具有相同基类型的指针。当主函数中返回的函数值被赋给指针时,函数的类型也必须是具有相同基类型的地址值。
②如果函数有返回值,检查返回语句中表达式的类型是否与函数的类型一致。
③如果参数是指针类型,则主函数中的变量应该由函数中的地址符号(*)引用。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++上机改错题详细分析

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情