c语言中,有以下程序, void main() {char c;int n=100; float

c语言中,有以下程序, void main() {char c;int n=100; float,第1张

那个括号就是将c=50表示为一个整体

计算顺序还是从右往左计算

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函数中的变量名


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12076371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存