回 帖 发 新 帖 刷新版面

主题:2题关于数组输出的问题,请解答

1。main()
{
char a[10]={"abcde"},b[]="fgh";
  int i=0;
 strcat(a,b);
  while(a[i++]!='\0') b[i]=a[i];
cout<<b;
}
此程序运行结果是什么?
2。下列程序运行结果是什么_____?
f(int a[],int n)
{
int s=0;
for(int j=0;j<n;j+=2,s+=a[j])
return s;
}
main()
{
int j,i=5;
int a[]={1,2,3,4,5};
cout<<f(a,6);
}
以上2个题目的答案 第1题为fbcdefgh  第2题为 0

此程序运行结果是什么?
2。下列程序运行结果是什么_____?
f(int a[],int n)
{
int s=0;
for(int j=0;j<n;j+=2,s+=a[j])
return s;
}
main()
{
int j,i=5;
int a[]={1,2,3,4,5};
cout<<f(a,6);
}

下面说下我的解题思路,请大家帮忙看看 错误的所在。
第1题:
 strcat(a,b);                   2个字符数组的拼接,返回的是字符数组a的地址,也就是输出的是 abcdefgh
while(a[i++]!='\0') b[i]=a[i];  当a【i】的值不是‘\0’ 就赋给相应的b【i】
                                由于 strcat 函数是去掉第1个数组的‘\0’拼接上第2个数组,只保留第2个数组的
                                '\0’ 所以i的值一直变化到7 
所以我的答案是 就是a【】的输出 abcdefgh。   但是标准答案是 fbcdefgh 请 告知为什么? 谢谢!

第2题:
for(int j=0;j<n;j+=2,s+=a[j])  内层循环n=6, j=0时, s=0; 执行j+=2;j=2。 s+=a[j] s=0+a【2】=0+3=3 
                                             j=2时, s=3; 执行j+=2;j=4.  s+=a[j] s=0+a【4】=0+5=5
                                             j=4时, s=5; 执行j+=2;j=6.跳出循环,
所以结果是 0,3,5 。   但是标准答案是 0   请问为什么?

回复列表 (共3个回复)

沙发

第一题,你分析的没错,只是程序执行的流程没注意。

while(a[i++]!='\0') b[i]=a[i];
这句,在b[i]=a[i]之前,i就已经在while里面++过了,所以b[0]=a[0]这句并没有执行,执行的是b[1]=a[1];

说道这,我想后面的你也就明白了

第二题,你程序没看清楚。
函数里:
for(int j=0;j<n;j+=2,s+=a[j])
return s;
j=0的时候,j<n,然后 就执行 return s了,而这个时候s 的值是0,所以返回的值是0...

既然,函数已经返回main了,那么函数里就不在执行什么操作了.这个并不是递归函数,而是函数在很早就结束了.

板凳

首先感谢1楼的朋友给出的详细的 解答,再次表示感谢!  我还是又点小迷糊,望斧正! 就是第1题里面您说的 i已经在执行后面的b【i】=a【i】前已经 ++了, 但是我觉得后++的话 应该是i=0先参与b【0】=a【0】运算 再i的值++啊(这也是后加加的要求啊,要是改成++i我倒理解您说的意思了). 另外还有第2题,您说return返回main函数,不执行f()函数了,意思是不是 可以理解成 当main函数调用函数体外的
f()后,遇到return语句结束调用,程序直接指向cout <<F();后面的语句(当然在这题目里面是直接结束),那我换个角度考虑 那我那个f()函数 不在main外 在main里面 结果又是什么呢? 您所说的return到main函数 是指 再重新过下 main函数 呢 还是 直接return到调用函数那个语句后面? 谢谢

3 楼

1.
“我觉得后++的话 应该是i=0先参与b【0】=a【0】运算”
是要先比较后再加没错,但是是while(a[i++]!='\0')里面先比较以后,再++。

2.
是直接return到调用函数那个语句后面。

“那我换个角度考虑 那我那个f()函数 不在main外 在main里面 结果又是什么呢?”
这句没弄懂,这个在main外在main里面是什么意思?

我来回复

您尚未登录,请登录后再回复。点此登录或注册