计算顺序还是从右往左计算
n=n/(c=50)=2 (int 类型)
f = f*n = 10*2 = 20.0(double类型)
x = f = 20.0(double类型)
两个数进行计算,总是往精度高的或者是表示范围大的数据类型转换,好处是,不会丢失精度。
例如:double f =3.1
int n = 2
那么f*n的结果就是以不丢失精度为前提,所以就应该是6.2,数据类型为double
f本身就是double类型的,精度很高,n呢则是整型,所表示的范围显然没有double大,如果将结果转换为整型值,则数据的准确度就下降了。
所以,只需记住一点:以不丢失精度为前提。
但是也不是说,精度越高越好。
例如 int a = 10
char b = 2
那么,a*b的值的类型就应该是int,不要以为double精度高就把所有计算结果都转换为double类型了。
答案为a在逻辑表达式中,因为a值为2,b值为3所以这两个均为真;而!a为假,假用0表示,假与任何数使用&&均为假,所以不执行判断!b;但后面又有或语句,接着判断!c 因为c为0所以!c 不为0故语句为真!真就用1来表示.
首先,这题考点是参数传地址的作用,传地址的作用就是在函数内部可更改外部变量的值所以在第一次调用foo()时,在这个过程中
*a = *a+*b-->*a=1+2=3(注意,此时a的值已经改变,下面的语句中a的值已经是3,不在是1)
*b = *a-*b -->*b=3-2=1(注意a的值为上个语句中改成的3,b未更改过,为2)
*a = *a-*b --> *a=3-1=2(注意此时a的值再次被改变。a,b的值都已更改所以分别是3,2)
故第一次调用完后a=2,b=1,c=3。此时main函数中的abc的值已被改变
在次使用时为改变后的值
其他两次调用同理
还需要注意的是,第二次调用foo的时候,传了实参b,c的地址,此时foo函数形参a就是b,形参b就是c。要一 一对应,总的来说就是看传参的时候看传的是哪个变量,不能仅看foo函数中的变量名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)