c语言选择题求详细答案!求高手解答

2025-01-03 17:19:16
推荐回答(2个)
回答1:

#include "stdio.h"
int a=2; // 1式 a为全局变量,会被任意调用改变值
int f(int n)
{ static int a=3 ; // 2式a为局部静态变量,所以在此函数中,全局变量a不起作用,又a为静态的,所以每次调用结束后,a的值保留为上次
int t=0; //调用执行后的值。
if(n%2){ static int a=4; t+=a++;} // 3式这里又有一个局部静态变量,同名的a,它只在本个{}作用局内有效。
else{ static int a=5;t+=a++;} // 4式这里又有一个局部静态变量,同名的a,它只在本个{}作用局内有效。
return t+=a++;
}
void main()
{ int s=a,i;
for(i=0;i<3;i++) s+=f(i); //外层循环总共要3次 1:s=a+f(0);2:s=s+f(1); 3:s=s+f(2);最终输出的为此。
//也就是最终s=a+f(0)+f(1)+f(2)=2+f(0)+f(1)+f(2);
printf("%d\n",s);
}
//2+8+8+11=29
//下面分析f()函数的执行
//f(0)=2 n=0; n%2=0所以执行else语句的内容,t=0+5=5,本{}内的a值由5变为6。,return t=t+(a++);也就是t=5+3=8;此时局部静态变量a值变为a++,也就是4;
//f(1)=8 n=1;n%2=1,执行if内容,t=0+4=4,本{}内的a值由4变为5,,return t=4+4=8;
//f(2)=11 n=2;n%2=0,执行else语句的内容,t=0+6=6;return t=6+5=11,

//这道题关键在于你不要被4个同名的a所弄混淆了,1式中的a与2.3.4式中的a个子作用域不同,
//关键在于分清楚全局变量与局部变量。以及各自具体作用范围,尤其是同名时
//程序运行后的输出结果是()
//(A)26
//(B)28
//(C)29
//(D)24
//所以选C ,已经同时通过编译器运行检验过了!楼上给了错误答案,唉,误导人家!

回答2:

A