C语言小问题

Wijor 2010-02-10 08:28:53
1.设有说明语句:char a= '\72';则变量a()
A、包含1个字符 B、包含2个字符
C、包含3个字符 D、说明不合法
答案B,不是很明白....

2.在C语言中,函数的隐含存储类别是()
A、auto B、static C、extern D、无存储类别
答案C,我过我觉得应该是A,函数在没有声明什么返回类型时是int,他的存储类别应该是auto啊....

3.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是()
A、 EOF B、 0 C、非零值 D、 NULL
答案不知道,不过我查了下,库函数feof的功能是判断文件是否处于文件结束位置,如文件结束,
则返回值为1,否则为0,但要选C的话又有点牵强....

4.求下列程序的输出结果
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);
}

我分析出的是33,f(0)的返回值应该是11,f(1)时是9,f(2)时是11
但运行的结果是29,想了下还是不明白....


会的朋友说下,每题20分,先说声谢了.....
...全文
255 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolcott2387 2010-02-11
  • 打赏
  • 举报
回复
up.............
Wijor 2010-02-10
  • 打赏
  • 举报
回复
引用 22 楼 mstlq 的回复:
楼主知道什么是“static变量”吗?
请赶紧google去……


唉....不好意思,分先给你吧.看来头有点晕了...
mstlq 2010-02-10
  • 打赏
  • 举报
回复
楼主知道什么是“static变量”吗?
请赶紧google去……
Wijor 2010-02-10
  • 打赏
  • 举报
回复
引用 18 楼 mstlq 的回复:
引用 17 楼 wijor 的回复:引用 13 楼 mstlq 的回复:这个…… 关于问题4,函数f等价于…… 请注意变量作用域的问题…… 静态变量的问题,请自行分析 C/C++ codeint f(int n) {staticint a1=3;//a1!int t=0;if(n%2){staticint a2=4; t+= a2++; }//这里是a2!!else {staticint a3=5; t+= a3++; }//这里是a3!!return t+a1++;//这里是a1!!} 先说声谢了,不好意思,刚出去了会. 晕死,我百度了下,第一题答案好像错了,应该是A,我就说怎么来的2个字符.... 现在就第4还不是很理解,你那a1当函数调用完后应该会回收掉吧....
static变量不会被回收(请自行google“static 变量”)……
详细分析如下
C/C++ code//f(0)int f(int n)//n=0{staticint a1=3;//a1=3int t=0;if(n%2){staticint a2=4; t+= a2++; }else {staticint a3=5; t+= a3++; }//进入这里, t=5,a3=6return t+a1++;//返回5+3=8 a1=4}//f(1)int f(int n)//n=1{staticint a1=3;//a1=4(请自行google"static变量")int t=0;if(n%2){staticint a2=4; t+= a2++; }//进入这里,t=4,a2=5else {staticint a3=5; t+= a3++; }return t+a1++;//返回4+4=8 a1=5}//f(2)int f(int n)
{staticint a1=3;//a1=5int t=0;if(n%2){staticint a2=4; t+= a2++; }else {staticint a3=5; t+= a3++; }//进入这里, t=6,a3=7return t+a1++;//返回6+5=11 a1=6
}

2  +  8  +  8  +  11 =29
a  f(0)  f(1)  f(2)


晕,我记得每执行完一次函数,都会释放内存空间的啊,那a又不是全局变量....
Wijor 2010-02-10
  • 打赏
  • 举报
回复
i=1时,重新执行函数f(),当执行到static int a=4; t += a++; 语句时,
t是4, 最后执行return t+a++;这时a应该还是一开始的那个3吧?i=0时,执行完
函数f后,a应该也回收了吧....
smallbear_2008 2010-02-10
  • 打赏
  • 举报
回复
引用 17 楼 wijor 的回复:
引用 13 楼 mstlq 的回复:这个…… 关于问题4,函数f等价于…… 请注意变量作用域的问题…… 静态变量的问题,请自行分析 C/C++ codeint f(int n) {staticint a1=3;//a1!int t=0;if(n%2){staticint a2=4; t+= a2++; }//这里是a2!!else {staticint a3=5; t+= a3++; }//这里是a3!!return t+a1++;//这里是a1!!}

先说声谢了,不好意思,刚出去了会.
晕死,我百度了下,第一题答案好像错了,应该是A,我就说怎么来的2个字符....
现在就第4还不是很理解,你那a1当函数调用完后应该会回收掉吧....


a1是静态变量,一次初始化,其值被保留。
mstlq 2010-02-10
  • 打赏
  • 举报
回复
引用 17 楼 wijor 的回复:
引用 13 楼 mstlq 的回复:这个…… 关于问题4,函数f等价于…… 请注意变量作用域的问题…… 静态变量的问题,请自行分析 C/C++ codeint f(int n) {staticint a1=3;//a1!int t=0;if(n%2){staticint a2=4; t+= a2++; }//这里是a2!!else {staticint a3=5; t+= a3++; }//这里是a3!!return t+a1++;//这里是a1!!}

先说声谢了,不好意思,刚出去了会.
晕死,我百度了下,第一题答案好像错了,应该是A,我就说怎么来的2个字符....
现在就第4还不是很理解,你那a1当函数调用完后应该会回收掉吧....

static变量不会被回收(请自行google“static 变量”)……
详细分析如下

//f(0)
int f(int n) //n=0
{ static int a1=3; //a1=3
int t=0;
if(n%2){ static int a2=4; t += a2++; }
else { static int a3=5; t += a3++; } //进入这里, t=5,a3=6
return t+a1++; //返回5+3=8 a1=4
}

//f(1)
int f(int n) //n=1
{ static int a1=3; //a1=4(请自行google"static变量")
int t=0;
if(n%2){ static int a2=4; t += a2++; } //进入这里,t=4,a2=5
else { static int a3=5; t += a3++; }
return t+a1++; //返回4+4=8 a1=5
}

//f(2)
int f(int n)
{ static int a1=3; //a1=5
int t=0;
if(n%2){ static int a2=4; t += a2++; }
else { static int a3=5; t += a3++; } //进入这里, t=6,a3=7
return t+a1++; //返回6+5=11 a1=6

}


2 + 8 + 8 + 11 =29
a f(0) f(1) f(2)
Wijor 2010-02-10
  • 打赏
  • 举报
回复
引用 13 楼 mstlq 的回复:
这个……
关于问题4,函数f等价于……
请注意变量作用域的问题……
静态变量的问题,请自行分析
C/C++ codeint f(int n)
{staticint a1=3;//a1!int t=0;if(n%2){staticint a2=4; t+= a2++; }//这里是a2!!else {staticint a3=5; t+= a3++; }//这里是a3!!return t+a1++;//这里是a1!!}


先说声谢了,不好意思,刚出去了会.
晕死,我百度了下,第一题答案好像错了,应该是A,我就说怎么来的2个字符....
现在就第4还不是很理解,你那a1当函数调用完后应该会回收掉吧....
pang123hui 2010-02-10
  • 打赏
  • 举报
回复
没我什么事了,感觉现在是回答问题的人比问问题的多哦,呵呵
cy330206 2010-02-10
  • 打赏
  • 举报
回复
顺便感慨一下:高手强分的速度快的惊人。。佩服
cy330206 2010-02-10
  • 打赏
  • 举报
回复
第一题是A(可以自己反汇编看一下)
第二题是A:函数在没有返回值时只是一个过程而以。
第三题是c(一般选个范围大的,因为可能还要考虑其他因素)
mstlq 2010-02-10
  • 打赏
  • 举报
回复
这个……
关于问题4,函数f等价于……
请注意变量作用域的问题……
静态变量的问题,请自行分析

int f(int n)
{ static int a1=3; //a1!
int t=0;
if(n%2){ static int a2=4; t += a2++; } //这里是a2!!
else { static int a3=5; t += a3++; } //这里是a3!!
return t+a1++; //这里是a1!!
}
机智的呆呆 2010-02-10
  • 打赏
  • 举报
回复
'\72'八进制表示方式~~58
ndjk454164628 2010-02-10
  • 打赏
  • 举报
回复
1.我认为应该选A
"\"属于转义字符,"\ddd"则表示ASCII表中八进制数ddd所表示的字符;"\xdd"则表示十六进制

2选C
C中函数的类型只有EXTERN 和 STATIC 两种类型;至于他们的作用可以'摆渡'下

3选C
因为返回值为1

4
int a=2;
//全局变量a在下面函数中无效
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);
}
i=0,s=11;
i=1,s=20;
i=2,s=31
yzx714 2010-02-10
  • 打赏
  • 举报
回复
引用 7 楼 mstlq 的回复:
这个……
我看三楼的时候,头脑短路了……
抱歉,抱歉……
经常都是在CSDN“杀红了眼”,我基本上一天犯一次低级错误…………
summerYe 2010-02-10
  • 打赏
  • 举报
回复
靠,这几题80分,能发个红包不,楼主?
lovesi3344 2010-02-10
  • 打赏
  • 举报
回复
mstlq的基础果然扎实
还有thefirstz也是
印象中,飞天御剑流的基础也很扎实
老邓貌似基础也很扎实

学习来了
mstlq 2010-02-10
  • 打赏
  • 举报
回复
这个……
我看三楼的时候,头脑短路了……
抱歉,抱歉……
yzx714 2010-02-10
  • 打赏
  • 举报
回复
引用 5 楼 mstlq 的回复:
引用 3 楼 thefirstz 的回复:
1,A,printf("%d",a)打印出来结果为58
char a='A';
printf("%d",a)打印出来结果为65……
您是否认为这也是两个字符呢?
3楼是说的A啊~
mstlq 2010-02-10
  • 打赏
  • 举报
回复
引用 3 楼 thefirstz 的回复:
1,A,printf("%d",a)打印出来结果为58

char a='A';
printf("%d",a)打印出来结果为65……
您是否认为这也是两个字符呢?
加载更多回复(4)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧