15题,我看不出错在哪里。我也这样用过。
----------------------------------------------------------
19题。
int a=3,b=5,c=7;
if(a>b)
{a=b;} //这个程序相当于大括号就在这里。
c=a;
if(c!=a)
c=b;
printf("%d,%d,%d\n",a,b,c);
if(a>b) a=b; c=a;表达式成立的话执行 a=b; c=a还是只执行a=b;
答:只执行a=b;
貌似该有个大括号才是两句都执行
答:对。
如果a>b不成立 是不是执行c=a; ?
答:不管a>b是否成立,都执行c=a;
----------------------------------------------------------------
21题。
x=8时进入循环,这时候x%3相当于8%3=2,因为2是非零的,也就是“真”,所以要执行{printf(“%d,”,x--); continue;} 这个复合语句。因为--是后置的,所以是现打印,后计算。打印的应该是8.打印后x=7, (; x>0; x--)这里还要进行一次减操作,x=6.这时(x%3)相当于6%3=0,条件为“假”,执行printf(“%d,”,--x); 而--是前置的,所以现计算。x=5,打印也是5,(; x>0; x--)这里还要进行一次减操作,x=4,这时候x%3相当于4%3=1,因为1是非零的,也就是“真”,所以要执行{printf(“%d,”,x--); continue;} 这个复合语句。因为--是后置的,所以是现打印,后计算。打印的应该是4.打印后x=3,(; x>0; x--)这里还要进行一次减操作,x=2这时候x%3相当于2%3=2,因为2是非零的,也就是“真”,所以要执行{printf(“%d,”,x--); continue;} 这个复合语句。因为--是后置的,所以是现打印,后计算。打印的应该是2.打印后x=1,(; x>0; x--)这里还要进行一次减操作,x=0.因为这时候x>0条件不成立,跳出循环。
--------------------------------------------------------------------
12题
先是fun(3)调用,而(x/2>0)相当于(3/2>0)即(1>0)成立,所以执行fun(x/2),但是无法计算,所以本次调用实际上没有返回,而是引起了fun()函数的再次调用,即用实参x/2=1再次调用函数fun()
fun(1)调用。而(x/2>0)相当于(1/2>0)即(0>0)不成立,所以执行printf(“%d ”,x); 这时候打印的是1。
由于fun(1)调用函数fun()有了返回值,所以它将返回到fun(3)调用时未计算的表达式处,执行printf(“%d ”,x); 这时打印的就是3,再返回主调函数fun(3);执行他后面的printf(“\n”);打印个回车换行符。
第15题D中 double a=0.0 不对,在C中double型的数据最小值为10的-308次方,而0.0 小于这个数值!
19题中if(a>b) a=b;是一条完整的语句,而c=a;是另一条语句,不管前面什么情况,c=a;语句在此程序中是肯定要执行的; 这两条语句的意思是:把a和b中较小的数赋给c; 是不需要用大括号的! 解释如下: 如果a>b不成立,那么c=a;照样执行,此时a的值肯定不会大于b的值,而c被赋予了a的值(a的值较小);当执行if(a>b) a=b;语句,再执行c=a;说明c被赋予了原来b的值(因为原来b的值较小);
21题中 过程如下:
首先执行函数fun(3),在 fun(3) 中有 if(3/2>0) 成立,即
执行fun(3/2), 也就是执行函数fun(1),而在函数fun(1)中
if(1/2>0) 不成立(因为在这里1/2=0),那么就直接执行函数fun(1)
中的printf(“%d ”,x)语句,然后再执行外层函数fun(3)中的
printf(“%d ”,x)语句,跳出函数,再执行main函数中的
printf(“\n”)语句,结束!
我来回答;没有见你的代数式呀
不过,给你说一下几个函数吧
fabs(x)是求X的绝对值
pow(x, n)是求x的n次幂
exp(x)是求自然数e的x次幂
另外就是()在运算中的优先级,它同数学运算一样是最先计算的 31690
应该是0.0不对.