一道很简单的C语言题目,可我不会!求解

#include<stdio.h>main(){inta[]={1,2,3,4,5,6},i,*p=a;for(i=0;i<10;i++)if(a[i]%3==0)p++... #include<stdio.h>
main()
{int a[]={1,2,3,4,5,6},i,*p=a;
for(i=0;i<10;i++)
if(a[i]%3==0)p++;
printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
for(i=0;i<6;i++)
printf("%d",a[i]);
答案的数值结果是7 7 5 123458 但我不知道是怎么解的
哦 对 题目是说从右向左扫描的
第二题知道了,第一题还是有点模糊!
展开
 我来答
ggdmdf
2008-03-14 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1217万
展开全部
第一个:
int a[]={1,2,3,4,5,6},i,*p=a;
for(i=0;i<10;i++)
if(a[i]%3==0)p++;

1.
a的长度为6,这里跑10次,前6次[0-5]正常,p后移2次,
第7次,i=6,此时a[6]=i=6,再移一次,
第8次,a[7]=(int)p,(int)p是未知的,所以无法确定能否再移,
第9次,第10次,数值未知,也无法确定是否再移.
综上,p至少移动3次[即a[4]]...
[[数据的定义是连续的,a[5]后面是i,i后面是p]]

2.
printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
因为用的是同一变量的++形式,在形参的入栈方面似乎也是个问题,不同的编译会有不同的计算方法(左->右 | 右->左).

以上原因,这个程序不可能有统一答案,如果你前面N次结果一样,那只是巧合!

第二个:
b[]{6,7,8,9} == > b[]={6,7,8,9}

int fun(int x[],int n)
{
static int sum=0,i; //这里sum是静态变量
for(i=0;i<n;i++) sum+=x[i];
return sum;
}

s=fun(a,5)+fun(b,4);
fun(a,5)=15 并且 fun中的sum=15
fun(b,4)=45 因为sum是从15开始计算的
所以最后结果为60.
救赎削肾客
2008-03-13 · TA获得超过1186个赞
知道大有可为答主
回答量:1196
采纳率:0%
帮助的人:931万
展开全部
输出 6,6,4,123476
注意啦!!
:你看看for( i<10; )当p指向a[2]时,i=5;i要到9后才停止循环,并且 0%3=0的所以 p还要向后移动!!一直到p指向a[4],你可以在程序的一些地方加以些输出语句来看看p指向了那个地方!如:你可以在 if语句后面加个输出p的内容!
if(a[i]%3==0)p++;
printf("%d,",*p);

不同的编译器运行的结果都不同!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桑静雅cf
2008-03-14 · 超过33用户采纳过TA的回答
知道答主
回答量:115
采纳率:100%
帮助的人:0
展开全部
1,printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
问题出在这里,其实这样的题真的没意思,每种不同的编译器执行上面的语句都会有不同,处理的先后顺序不同,在程序中要避免
printf 处理的是一个数据流的缓冲区,是一个栈的结构,从右往左的顺序看的,但具体的每个编译器对处理 自增都有所不同,所以照成结果的差异! 这里不是学习研究的重点,不必追究

2, 函数中声明为 static静态变量,第一次调用以后其值并不因函数结束而清空,这个变量不是定义在该函数内部的,所以第一次执行结束后,执行1到5的和 为15,然后第二次调用,从15开始累加,所以结果是60
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晖脑袋有坑
2008-03-14
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
main()
{int a[]={1,2,3,4,5,6},i,*p=a;
for(i=0;i<10;i++)
if(a[i]%3==0)p++;
printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
for(i=0;i<6;i++)
printf("%d",a[i]);
}
//结果是6,6,5,123476
感觉是这个答案啦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dongyi05
2008-03-12 · TA获得超过129个赞
知道答主
回答量:127
采纳率:0%
帮助的人:109万
展开全部
#include<stdio.h>
main()
{int a[]={1,2,3,4,5,6},i,*p=a;
for(i=0;i<10;i++)
if(a[i]%3==0)p++;
printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
for(i=0;i<6;i++)
printf("%d",a[i]);
}
//结果是6,6,5,123476
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友77f6ad8
2008-03-12 · TA获得超过1340个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:205万
展开全部
我运行了下,结果是1,1,6 .123456
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式