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

2024-11-24 20:59:34
推荐回答(6个)
回答1:

第一个:
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;ireturn sum;
}

s=fun(a,5)+fun(b,4);
fun(a,5)=15 并且 fun中的sum=15
fun(b,4)=45 因为sum是从15开始计算的
所以最后结果为60.

回答2:

输出 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);

不同的编译绝亮器运行的轮宏拿结果都不同!

回答3:

1,printf("\n%d,%d,%d,",(*p)++,++*p,*p++);
问题出在这里,其实这样的题真的没意思,每种不同的编译器执行上面的语句都会有不同,处理的先后顺序不同,在程序中要避免
printf 处理的是一个数据流的缓冲区,是一个栈的结构,从右往左的顺序看的,但具体的每个编译器对处理 自增都有所不同,所以照成结果的差异! 这里不是学胡敏习研究的重点,不必追究如做携

2, 函数中声明为 static静态变量渣伏,第一次调用以后其值并不因函数结束而清空,这个变量不是定义在该函数内部的,所以第一次执行结束后,执行1到5的和 为15,然后第二次调用,从15开始累加,所以结果是60

回答4:

#include
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
感觉是这个答案啦!

回答5:

#include
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

回答6:

我运行了下,结果是1,1,6 .123456