首页 > 试题广场 >

有以下程序,程序的输出结果是?

[单选题]

有以下程序

#include <stdio.h>
void fun(int *s) {
    static int j = 0;
    do {
        s[j] += s[j + 1];
    } while (++j < 2);
}
int main() {
    int i, a[10] = {1, 2, 3, 4, 5};
    for (i = 1; i < 3; i++)
        fun(a);
    for (i = 1; i < 5; i++)
        printf("%d", a[i]);
    printf("\n");
    return 0;
}


程序运行后的输出结果是?

  • 34756
  • 5745
  • 5795
  • 35745
你们怎么计算的,我的计算结果是3445 我我用计算机跑了一遍还是3445 真相到底是什么。
发表于 2017-07-07 15:03:12 回复(0)
这题非常不错,主要考察static和do while
for( i = 1; i < 3; i + + )将调用两次fun(a)
第一次调用fun(a)时数组的前两个元素变位3、5,此时j=2;
第二次调用fun(a)时,虽然j=2已经不满足++j<2但还是要执行一次,数组第三个元素变为7
然后for循环下标从1开始,所以输出后4个元素。5745
编辑于 2015-09-12 21:28:09 回复(5)
有两点需要注意的:
  • do-while循环 :在判断while条件前先执行一次do循环
  • static变量 :程序再次调用时static变量的值不会重新初始化,而是在上一次退出时的基础上继续执行。

可是如果不注意下边这个,前边这些作对了都是白搭!
  • 一定要注意下标是从第二个元素开始的呀!!
编辑于 2016-06-14 10:00:34 回复(2)

唉。。明明推出来了,却被下标i = 1给推下了悬崖

发表于 2017-06-11 18:23:48 回复(1)
貊头像
本题主要考查do…while语句,执行fun函数后,a数组里面的元素变为35475,输出后四个字符,所以结果为5745,选项B正确。
编辑于 2021-08-19 18:03:55 回复(6)
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
发表于 2016-03-07 17:03:28 回复(0)
第一次循环后变为:3 5 3 4 5 第二次循环后变为:3 5 7 4 5 输出为:5 7 4 5
发表于 2019-06-25 13:26:32 回复(0)
第一次for循环:3、5、3、4、5      j = 1,j = 2   do while 循环2次
第一次for循环:3、5、7、4、5      j = 2       do while 循环1次
printf输出,从i=1开始输出 5、7、4、5
发表于 2017-12-19 11:03:48 回复(0)
你打印时候给我整个i=1,太坑了
发表于 2023-11-23 19:52:17 回复(0)
没看到从1开始
发表于 2018-04-03 09:24:38 回复(0)
没纸真不方便,do
发表于 2016-10-27 08:31:44 回复(0)
眼瞎 i=1啊
发表于 2023-08-10 21:54:23 回复(0)
j是静态变量,第二次直接为2
发表于 2023-03-19 10:56:12 回复(0)
***从1开始
发表于 2021-03-12 14:04:56 回复(0)
看输出格式,是从1开始,所以a[0]不输出。
发表于 2021-02-07 17:56:56 回复(0)
注意BD的区别。
发表于 2021-01-06 14:48:32 回复(0)
算了半天算出来了 然后秒选D
发表于 2020-10-19 13:49:18 回复(0)
呃,忘了输出的是i=1开始的
发表于 2020-07-26 20:32:42 回复(0)
够阴
发表于 2019-10-11 11:33:15 回复(0)
没注意数组a[10]打印是从i=1开始的!!!!
发表于 2019-08-09 11:03:06 回复(0)