第一题:321
printf参数入栈顺序从右至左,所以要先从右开始计算机参数的值。
*p++意思是先取p的值即(*p),然后给p这个地址加1。先取的值是1,即s[0],然后p加1就指向了s[1],再取值就成了s[1]的值了,依此类推。
第二题:27.000000
"/"号是整除的意思,如果你的除数和被除数都不是浮点数,则结果的小数位舍去,如果有一个是浮点数,则保留结果的小数位。
x=m/2+n*a/b+1/2;
m/2=3; n*a/b=24, 1/2=0;
因为是按%f浮点数形式输出,所以结果为27.000000
第三题:如果输出的是y,那和第一题一样道理,先取值,后加1.
第四题:a[0]-a[9]共十个元素,但941282107513共有12个数字,找数值最大的元素只能靠找最高位最大的数了,给出的数字里面最大的就是9,下标是0,9是一位数里最大的,94是两位数里最大的,941是三位数里最大的。
第五题:b
按%s输入的是字符串,输入ab其实是输入了串"ab\0","\0"是字符串的结束符,不可见。输入后a的结构是['a','b','\0'];'\0'输入到了a[2]的位置。但a[2]的位置由于不是指定给a的,所以a[2]的内容也不一定就是\0,很有可能在输出前这块内存已经被分配给其它程序,值已经被更改了。
所以输出结果其实是b或者b和一个未预料的字符。 赞同0| 评论
第一题:321
printf参数入栈顺序从右至左,所以要先从右开始计算机参数的值。
*p++意思是先取p的值即(*p),然后给p这个地址加1。先取的值是1,即s[0],然后p加1就指向了s[1],再取值就成了s[1]的值了,依此类推。
第二题:27.000000
"/"号是整除的意思,如果你的除数和被除数都不是浮点数,则结果的小数位舍去,如果有一个是浮点数,则保留结果的小数位。
x=m/2+n*a/b+1/2;
m/2=3; n*a/b=24, 1/2=0;
因为是按%f浮点数形式输出,所以结果为27.000000
第三题:如果输出的是y,那和第一题一样道理,先取值,后加1.
第四题:a[0]-a[9]共十个元素,但941282107513共有12个数字,找数值最大的元素只能靠找最高位最大的数了,给出的数字里面最大的就是9,下标是0,9是一位数里最大的,94是两位数里最大的,941是三位数里最大的。
第五题:b
按%s输入的是字符串,输入ab其实是输入了串"ab\0","\0"是字符串的结束符,不可见。输入后a的结构是['a','b','\0'];'\0'输入到了a[2]的位置。但a[2]的位置由于不是指定给a的,所以a[2]的内容也不一定就是\0,很有可能在输出前这块内存已经被分配给其它程序,值已经被更改了。
所以输出结果其实是b或者b和一个未预料的字符。
第一题:111
第二题:27.000000
第三题:题干不完整,输出y的话是3
第四题:0
第五题:b