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

45.有以下程序
int a=2;
int f(int n)
{ static int a=3;
int t=0;
if(n%2){ static int a=4; t+=a++;}
else{ static int a =5; t+=a++;}
return t+=a++;
}
main( )
{ int s=a,i;
for(i=0; i<3; i++) s+= f(i);
printf(“%d\n”,s);
}
程序运行后的输出结果是()
(A)26
(B)28
(C)29
(D)24

#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 ,已经同时通过编译器运行检验过了!楼上给了错误答案,唉,误导人家!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-19
A

C语言,题目中的选择题,求详细解析
正确答案应该是B.15。这里考察的重点是符号常量的使用。主函数中出现符号常量FUN(x,y) 则直接用 (x)<(y)?(x):(y)替代即可。本题中:k=10*FUN(i,j);可以看作:k=10*(i)<(j)<(i):(j);而i=10,j=15 所以按照运算优先级有:k=100<15?10:15;结果显然是15。故选择B。

c语言选择题,这两道题求c语言大哥解答,详细点哈,谢谢
第一题 和++运算优先级相等,运算自右向左 p++; 相当于p++后再*p,所以p指向&a[1], *p等于11 比+的运算优先级高 p+=1;相当于*p=*p + 1;答案为C 第二题 答案为A S是数组首地址,不是指针,不可移动

C语言问题求大神详细解析
还有函数的返回值类型为void时表示函数没有返回值,不能使用函数的返回值。a错 因为调用在定义之前但是没有声明 b错 函数定义的时候返回值类型为void,却欲图使用函数的返回值。c错 函数的声明返回值为int,定义返回值为void 不相符 d正确 ...

求解C语言题目,最好有解释,谢谢:
1.*p1和*p2都是指向float类型的指针。它们的值只能是地址。A B C 中p1或p2的值都是地址,只有D中a[0]+1结果为float类型的数字,不是地址,所以应该选D 2.A 错误,函数的返回值又函数自身定义决定 B正确 C 错误 main函数可以放在程序的后面,前面可以放全局变量和函数等 D 错误 C语言程序总...

C语言题要求详细解释,谢谢
首先要明确p1p2都是指针变量,它们的值都是一个地址,所以地址*地址、地址\/地址、地址+地址,还有地址与常数的乘除运算都是毫无意义的,所以A、C选项是错误的表达。最后一个(D)把指针p2的地址赋值给p1,这也是不允许的,除非p2先定义为二级指针才可以,否则,只能把一个普通变量的地址赋值给它。

有关c语言得题,求解,请详细解答一下
int a[10];正确的引用是 D a[10-10]; a[10-10] 等于 a[0]。A a[10] 错,因下标超界。允许下标0,1,2,。。。8,9 B a[3.5] 错, 因为 下标 必须是整型。如果是 a[(int) 3.5] 则允许。C a(5) 错, 因为 小括号表示函数调用,参数5,函数名 a. 必须用中括号...

c语言的题目,求详细解释啊,在线等!
答案是 japan korea 理由:str[3][6]是一个二维数组,可以看成是 以str[6]为元素的数组,大小为3。str[1] 就是 字符串“japan”str[1][5]就是"japan"的第六个字符,也就是“\\0”,即字符串结束符 赋值语句把这个位置的字符改成了空格‘ ’ ,所以当读取字符串str[1]的时候,计算机一直...

C语言入门题目,求详细易懂的解答过程。
答案为第一行:Tony。解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是...

求救 两个关于c语言的问题!!求详细解~~~
第一题,选 B 注意 x、y都定义为整数。(x+y)\/2+(int)y (int)x 代入已知并化简,得:(4+2)\/2+2%4 =6\/2+2 =5 第二题,选 B 加了括号,你会看得更清楚:(a>b)?(a):(c<d?c:d)先判断 a>b 吗,如果大于,则返回a ,否则,返回 (c<d?c:d)由于a>b 为假,表达式取第...

一道c语言选择题 图上的第六题 求详细解答 谢谢啦 不明白-6.2e是什么意...
e表示数据用指数形式表示,-表示输出数值向左对齐,6表示输出数据最小宽度(字符个数),2表示精度。选项C靠谱点,我执行的结果是2.19e+002,可能与printf的实现有关。

相似回答