C++程序分析题 给出解题思路,我不要答案。
#include<iostream.h>staticinta=3;viodfun();voidmain(){for(inti=1;i<a;i++)fun();cout<<...
#include <iostream.h>
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int a=a;
cout<<(a+=2)<<'';
} 展开
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int a=a;
cout<<(a+=2)<<'';
} 展开
展开全部
#include <stdio.h>
using namespace std;
static int a=3;
void fun();
int main()
{
// 这个a是全局的a,为了方便我们直接把它的值3代入
//for(int i=1;i<a;i++)
for(int i=1;i<3;i++)
fun();
cout<<endl;
return 0;
}
void fun()
{
// 这里的a不同于全局的a,为了方便我们把它改为b
//static int a=a;
static int b=b;
cout<<(b+=2)<<' ';
}
第一次循环前b等于0,就是说static int b=b;把b赋值为0。
第一次循环时 b += 2, 此时 是2
第一次循环时 b += 2, 此时 是4
using namespace std;
static int a=3;
void fun();
int main()
{
// 这个a是全局的a,为了方便我们直接把它的值3代入
//for(int i=1;i<a;i++)
for(int i=1;i<3;i++)
fun();
cout<<endl;
return 0;
}
void fun()
{
// 这里的a不同于全局的a,为了方便我们把它改为b
//static int a=a;
static int b=b;
cout<<(b+=2)<<' ';
}
第一次循环前b等于0,就是说static int b=b;把b赋值为0。
第一次循环时 b += 2, 此时 是2
第一次循环时 b += 2, 此时 是4
展开全部
这种C++写法简直是标准反面教材 那个傻缺出的题?
按照题目思路是这样的(你妹的思路 看到这种代码就想吐了)
上面定义一个a? 函数中有定义一个局部变量a=全局变量a?
for循环中用的全局a 不变化 所以循环了2次
fun()2次每次输出后换行
fun输出为 a(局部变量=全局变量=3?)+2 =5
所以最后得到
5
5
然后运行结束程序关闭
按照题目思路是这样的(你妹的思路 看到这种代码就想吐了)
上面定义一个a? 函数中有定义一个局部变量a=全局变量a?
for循环中用的全局a 不变化 所以循环了2次
fun()2次每次输出后换行
fun输出为 a(局部变量=全局变量=3?)+2 =5
所以最后得到
5
5
然后运行结束程序关闭
追问
哥们 试卷上的答案是 2 4~~~难道答案有问题?纠结啊。。。学的头都大了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上两位大神,不要误人子弟
首先说这个程序是可以执行完的,而且输出结果是 2 4
首先看全局变量a,这个一直没有改变,所以这就是执行两次的原因
再看局部变量a,由于是静态的,系统默认初始化为0,
所以第一次a=a执行的结果就是a=0;
继续执行就输出2
由于是静态变量,所以当程序第二次执行时,输出的结果就是 4了
首先说这个程序是可以执行完的,而且输出结果是 2 4
首先看全局变量a,这个一直没有改变,所以这就是执行两次的原因
再看局部变量a,由于是静态的,系统默认初始化为0,
所以第一次a=a执行的结果就是a=0;
继续执行就输出2
由于是静态变量,所以当程序第二次执行时,输出的结果就是 4了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static int a=3; // 全局静态变量,作用域为以下所有代码
viod fun();
void main()
{ for(int i=1;i<a;i++) //此处a就是上面那个a = 3,因此fun()会执行两次
fun();
cout<<endl;
}
void fun()
{static int a=a; // 后面的a是上面a = 3,前面的a 赋值后也为3,但他是局部静态的,只在此函数中可见,不管fun()运行多少次,此条语句只会执行一次,
cout<<(a+=2)<<''; // 此处的a是局部静态变量a,覆盖了全局静态a
}
------
综上所述,fun()第一次运行输出5,第二次运行输出7(不会再次初始化的)
viod fun();
void main()
{ for(int i=1;i<a;i++) //此处a就是上面那个a = 3,因此fun()会执行两次
fun();
cout<<endl;
}
void fun()
{static int a=a; // 后面的a是上面a = 3,前面的a 赋值后也为3,但他是局部静态的,只在此函数中可见,不管fun()运行多少次,此条语句只会执行一次,
cout<<(a+=2)<<''; // 此处的a是局部静态变量a,覆盖了全局静态a
}
------
综上所述,fun()第一次运行输出5,第二次运行输出7(不会再次初始化的)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这代码是比较让人讨厌,最好写成
#include <iostream.h>
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int b=a;
cout<<(a+=2)<<'';
}
这样结果就是预料中的,或者写成
#include <iostream.h>
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int b=0;
cout<<(b+=2)<<'';
}
总之写成两个,写成一个global,一个static,总是让人讨厌。
#include <iostream.h>
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int b=a;
cout<<(a+=2)<<'';
}
这样结果就是预料中的,或者写成
#include <iostream.h>
static int a=3;
viod fun();
void main()
{ for(int i=1;i<a;i++)
fun();
cout<<endl;
}
void fun()
{static int b=0;
cout<<(b+=2)<<'';
}
总之写成两个,写成一个global,一个static,总是让人讨厌。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这道题目考的是全局变量和局部变量的关系
如果定义一个全局变量,那么后来定义的局部变量会屏蔽掉这个全局变量
比如:
int i=10,sum=0;
for(int i=0;i<5;++i)
sum+=i;
printf("%d,%d",i,sum);答案是10,10
因为for(int i=0;i<5;++i)的i属于局部变量,屏蔽了全局变量
for循环之后局部变量i“消失”,然后sum=10,但是全局变量i是10,所以输出是i=10,sum=10
void fun()
{static int a=a;
cout<<(a+=2)<<'';
}
此函数的a就属于局部变量,先定义了一个变量a,此时a已经屏蔽了全局变量
所以static int a=a;其实就是static int a;
但是此时由于a是静态的static,所以初始化为
如果是 int a,在函数体内的话无法默认初始化,但是在函数体外就初始化为0,也就是默认构造函数
但是static int a,在函数体内就默认初始化为0
这也就是为什么会输出 2 4的原因了
如果定义一个全局变量,那么后来定义的局部变量会屏蔽掉这个全局变量
比如:
int i=10,sum=0;
for(int i=0;i<5;++i)
sum+=i;
printf("%d,%d",i,sum);答案是10,10
因为for(int i=0;i<5;++i)的i属于局部变量,屏蔽了全局变量
for循环之后局部变量i“消失”,然后sum=10,但是全局变量i是10,所以输出是i=10,sum=10
void fun()
{static int a=a;
cout<<(a+=2)<<'';
}
此函数的a就属于局部变量,先定义了一个变量a,此时a已经屏蔽了全局变量
所以static int a=a;其实就是static int a;
但是此时由于a是静态的static,所以初始化为
如果是 int a,在函数体内的话无法默认初始化,但是在函数体外就初始化为0,也就是默认构造函数
但是static int a,在函数体内就默认初始化为0
这也就是为什么会输出 2 4的原因了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询