代码如下:
#include <stdio.h>
int main()
{
void fun(float *x,float *y,float *z);
float a,b,c;
printf("请输入三个浮点数:");
scanf("%f,%f,%f",&a,&b,&c);
float *x=&a,*y=&b,*z=&c;
fun(x,y,z);
printf("最大值为:%f\n最小值为:%f\n",*z, *x);
}
void fun(float *x,float *y,float *z)
{
if(*y>*x&&*y>*z)
*x = *y;
if(*y<*x&&*y<*z)
*z = *y;
}
运行截图:
问题描述:
输入复杂小数会乱码,很奇怪,如果是简单整数则不会,功能是可以实现的。
这是浮点数的误差造成的,不是乱码
这段代码的问题在于函数 fun 中的 if 语句判断有误,当 y 的值处于最大和最小值的中间时,无法正确处理 x 和 z 的值。可以改为如下代码:
void fun(float *x, float *y, float *z) {
if (*y > *x && *y > *z) {
*z = *y;
} else if (*y < *x && *y < *z) {
*x = *y;
}
}
也不算乱码,是单精度浮点数的精度问题~
将程序里的float全部修改double就不会有这个问题了。
void f (int * p)//这里上面说过了,变量名是i,但是类型是int *,可以保存其他变量的地址。
{
*p=100;//上面也说过,*p就是i,i就是*p
}
int main()
{
int i=9;//这是一个普通的定义和赋值
f(&i);//这里要是调用函数,用&i,把i的地址传递给函数的参数p
cout<<"i"<<i;//结果应该是100
return 0;
}