几个C语言问题,求高手指点,望有详细过程。
以下程序的输出结果是()main(){chars[]="123",*p;p=s;printf("%c%c%c\n",*p++,*p++,*p++);}以下程序的输出结果是...
以下程序的输出结果是() main() { char s[]="123",*p; p=s; printf("%c%c%c\n",*p++,*p++,*p++); } 以下程序的输出结果是() main() { int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf("%f\n",x); } 以下语句的输出结果是() int x=3,y; int *px=&x; y=*px++; 若有以下数组a,数组元素:a[0]~a[9], 其值为941282107513 该数组的元素中,数值最大的元素的下标是____. 若输入ab,程序运行结果为()。 main() { static char a[2]; scanf("%s",a); printf("%c,%c",a[1],a[2]); }
展开
1个回答
展开全部
第一题: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|
评论
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|
评论
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询