首页 > 试题广场 >

下面C程序运行后的打印结果是[$##$]#include v

[填空题]
下面C程序运行后的打印结果是1
#include <stdio.h>
void func(int* a) {
static int j = -1;
do { j +=1; a[j] = a[j] + a[j+1]; } while (j < 2);
}

main( ) {
int k, a[10] = {1, 2, 3, 4, 5};
for (k=1; k<3; k++) func(a);
for (k=0; k<5; k++) printf("%d", a[k]);
printf("\n");
}
java中 程序跑出来的结果是35795  不知道有没有相同的老铁
发表于 2018-01-09 16:58:08 回复(4)
static修饰的静态局部变量只执行初始化一次,因此k=1时候,{3,5,3,4,5};k=2时候,j仍然=2,由于是do,所以还要执行一次算法{3,5,7,4,5},因而答案没错
发表于 2018-03-15 23:25:02 回复(0)
public class test {
    static int j = -1;
    static void f(int[] a){
        do {
            j += 1;
            a[j] += a[j + 1];
        } while (j < 2);
    }

    public static void main(String[] args) {
        int k;
        int[] a = {1, 2, 3, 4, 5};
        for (k = 1; k<3;k++){
            f(a);
        }
        for (k=0;k<5;k++){
            System.out.print(a[k]);
            System.out.println();
        }
    }
}
答案有误,应当是35795,因为第二次进入f()函数时,会再do一次,不管 j 是否 小于 2
发表于 2018-03-08 16:26:53 回复(0)
发表于 2018-01-24 15:07:05 回复(0)
答案有误,注意这里是先do 后while判断,并且 static 是只初始化一次
发表于 2018-03-23 22:19:12 回复(0)
[user@archlinux ~]$ cat a.c
#include <stdio.h>
void func(int *a) {
  static int j = -1;
  do {
    j += 1;
    a[j] = a[j] + a[j + 1];
  } while (j < 2);
}

main() {
  int k, a[10] = {1, 2, 3, 4, 5};
  for (k = 1; k < 3; k++)
    func(a);
  for (k = 0; k < 5; k++)
    printf("%d", a[k]);
  printf("\n");
}
[user@archlinux ~]$ ./a.out 
35795
可能因为 Arch 的 gcc 有问题吧,我反正算到的是 35795 (第一个 for 循环实际上运行了两次)
发表于 2018-02-28 17:50:25 回复(0)
while (j < 2)
发表于 2018-02-25 15:33:41 回复(0)
static的变量只初始化一次,所以应该是35795
发表于 2018-01-27 11:55:36 回复(0)