首页 > 试题广场 >

写出下列程序的运行结果。

[单选题]
写出下列程序的运行结果。
#include "stdio.h"
int sum(int a){
    int c = 0;
    static int b = 3;
    c += 1;
    b += 2;
    return (a + b + c);
}
int main(){
    int i;
    int a = 2;
    for (i = 0; i < 5; i++) { 
        printf("%d,", sum(a)); 
    } 
} 
  • 6,8,10,12,14,
  • 8,10,12,14,16,
  • 10,12,14,16,18
  • 12,14,16,18,20
推荐
正确答案:B
auto int 表示的是局部变量,在我们声明局部变量,或者函数参数,可以加上这个关键字,表明是分配在堆栈中
本程序中的变量b声明为static静态全局变量,所以它的作用域是全局作用域,每次调用sum函数都会累加2
所以答案是8,10,12,14,16
编辑于 2014-12-30 20:09:44 回复(7)
楼上正解
发表于 2017-11-22 09:31:08 回复(0)
答案为:B
题解:我们从main部分开始看,定义了两个数,在后面引用。for部分执行5次,每次执行结果为输出sum(a),那么我们又要从上面的sum部分开始看。首先我们要看一下返回部分,return的数为a+b+c,那么我们只需要找出a+b+c就可以得到第一个答案,a为传递值,从main传递过来,则a为2,c的初值为0,但是后面有个自加1,所以c为1,b初值为3,后面有个自加2,则b为5,则第一个答案为1+5+2,则为8。这时候我们再看一下题目可供选择部分,只有一个开头是8的,所以并不需要再继续看下去,则答案为B
发表于 2014-12-30 17:32:12 回复(1)
i a b c sum
0 2 3+2=5 0+1=1 2+5+1=8
1 2 5+2=7 0+1=1 2+7+1=10
2 2 7+2=9 0+1=1 2+9+1=12
3 2 9+2=11 0+1=1 2+11+1=14
4 2 11+2=13 0+1=1 2+13+1=16








答案为B。

发表于 2015-08-12 11:20:45 回复(5)
B.由于auto int每次使用sum函数的时候都会创建,所以每次的c均为1,b为static类型只有第一次使用的时候创建,后面再次调用的时候不会执行static int b = 3;这句.因此sum的结果为a+1+b.由于a为2不变,一共执行五次,因此每一次执行结果比前一次增加2,第一次执行的结果为2+1+5=8;因此答案为8,10,12,14,16
发表于 2015-01-04 19:16:56 回复(0)
B正确,auto是默认类型,每次调用sum函数时auto类型的变量重新赋值为0,static是静态变量,如果在函数内部进行定义,则只在第一次调用时进行赋初值,其作用范围是sum函数内部,在函数内部可以改静态变量的值;
发表于 2015-09-24 10:33:31 回复(0)
这里需要注意的是static变量使用的时候只初始化一次
发表于 2016-07-19 17:02:52 回复(0)
我X,没细看,想当然把a看作0了。。。。
考察的就是auto 与 static变量,前者每次都重新创建一个变量,而后者至始至终只有一个变量且在此基础上运算。
编辑于 2019-03-06 20:31:45 回复(0)
auto int 在c++11已经废除了,之前用来表示临时变量。
发表于 2016-09-01 13:52:26 回复(0)
8,10,12,14,16
该题比较简单。只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。
发表于 2014-11-13 15:03:57 回复(0)
选B  局部变量c每次会自动初始化为0,而静态局部变量b只初始化一次,具有记忆功能。
发表于 2017-09-08 09:54:32 回复(0)
注意变量b的定义就行
发表于 2017-08-20 09:51:33 回复(0)
B,本题考得是静态变量的定义以及静态变量的作用域和作用范围。
发表于 2015-08-29 21:30:22 回复(1)
在sum函数内部定义了static静态局部变量b,当sum函数的语句块结束的时候,b的作用域结束。但是静态局部变量存储在静态存储区,当静态局部变量离开作用域后,并没有被销毁。当该函数再次被调用的时候,该变量的值为上次函数调用结束时的值。所以b的值分别为5,7,9,11,13。
发表于 2024-01-12 00:29:57 回复(0)
什么***题,我***真的是 相当无语
到处都是坑
发表于 2022-12-12 22:47:27 回复(0)
发表于 2021-11-30 09:42:23 回复(0)
本题目主要考察 局部变量和静态局部变量在函数执行结束后值的变化情况,静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
发表于 2021-06-16 20:02:43 回复(0)
static变量在程序运行期间,只初始化一次。除了赋值操作外,变量值不变!
发表于 2021-04-26 20:50:23 回复(0)
错以为把i作为参数传递了...
发表于 2020-05-25 23:11:06 回复(0)
B,c为局部变量,b为静态变量
发表于 2019-12-30 22:04:02 回复(0)
auto int定义的是局部变量,每次调用函数都会创建,static是静态全局变量,作用域是全局,每次调用sum函数都会加2
发表于 2019-03-26 16:34:35 回复(0)