C语言小题两道

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:56:38
一题
#include <stdio.h>
double sub (double x,double y,double z)
{y-=1.0;z=z+x;return z;}
main ()
{double a= 2.5, b=9.0;
printf("%f",sub(b-a, a , a) );
}
输出结果是?9.000000
2题
#include <stdio.h>
void sub (double s,double*y,double*z)
{*y=*y-1.0; *z=*z+x;}
main()
{double a=2.5,b=9.0,*pa,*pb;
pa=&a;pb=&b;
sub (b-a, pa ,pa); printtf("%f",a);
}
输出结果是?8.000000

求尽量详细的解答 最后最好再来点小总结 嘿嘿
这都是国二的章后习题,原题,大家不用说程序有问题不是为了做程序用的。
就当做小题解一下思路。

#include <stdio.h>
double sub (double x,double y,double z)
{ //调用时传入: x=9-2.5=7.5,y=2.5,z=2.5
y-=1.0;//y=y-1=2.5-1=1.5
z=z+x;//z=2.5+9.0-2.5=9.0
return z;//返回9.0
}
main ()
{
double a= 2.5, b=9.0;
//函数调用返回了9.0,所以输出9.000000
printf("%f",sub(b-a, a , a) );
getchar();
}

#include <stdio.h>
void sub (double x,double*y,double*z)
{//调用时传入:x=9.0-2.5=7.5,y指向a(a=2.5),z指向a(a=2.5)
*y=*y-1.0;//也就是:a=a-1.0=2.5-1.0=1.5
*z=*z+x;//也就是a=a+9.0-2.5=1.5+9.0-2.5=8.0
//此时函数虽然没有返回值,但是因为形式参数为指针,所以值的改变已经反映到了主函数中
//*z=8.0,即是指向主函数中a变量的指针的值已经改变成了8.0所以主函数中输出8.000000
}
main()
{
double a=2.5,b=9.0,*pa,*pb;
pa=&a;
pb=&b;
sub (b-a, pa ,pa);
printtf("%f",a);
}

第一题:
main()前面加上VOID你没有返回值;
SUB函数调用:它有返回值且返回类型为double所以函数类型为double:
把b-a的值赋给x,
a给y
a给z
y-=1,即为:y=y-1;
之后