A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

说出下列程序的输出结果(不要借助终端指令)
#include <stdio.h>

int main()
{
    int a = 20;
    int score = a + 100;
    printf("%d\n", score);
   
    {
        int score = 50;
        {
            score = 10;
            printf("%d\n", score);
        }
        a = 10;
    }
   
    {
        score = a + 250;
        int score = 30;
        printf("%d", score);
    }
   
    printf("%d\n", score);
    return 0;
}

11 个回复

正序浏览
好久没有在论坛上看到这么简单的题了,别人都说了,我就不在重复说了,混个回贴,另外说明一下楼上的那家伙如果不报错,我跟他姓,他那个test()函数里都没定义a的类型,不报错会鬼了,test()函数里的a和main函数中的a根本就是两回事,楼主基础太不扎实了,需要再继续扎扎实实的练吧。

点评

0基础,一点点在学  发表于 2015-2-9 12:01
回复 使用道具 举报
a3563365 发表于 2015-2-8 01:47
每次有对象被销毁,我都写了注释的,请仔细再看一遍....a从定义出来开始就没被销毁过,何谈没有作用域呢.. ...

#include <stdio.h>

int test()
{
          a=5;
          return 0;
}

int main()
{
          int a=8;
          test();
          printf("%d\n",a);
          return 0;
}


//不知道以上有没有语法错误,我随便打的,上述结果出来的是5还是8呢?因为我以为楼主那道题随着中括号的结束所以a=10的结果也就被销毁了所以a还是原来的30,
回复 使用道具 举报
我是来看评论的
回复 使用道具 举报
本帖最后由 a3563365 于 2015-2-8 01:48 编辑
Zeus-S 发表于 2015-2-8 00:28
{
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {

每次有对象被销毁,我都写了注释的,请仔细再看一遍....a从定义出来开始就没被销毁过,何谈没有作用域呢.....
回复 使用道具 举报
Zeus-S 发表于 2015-2-8 00:28
{
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {

a的作用域是从开始定义一直到程序结束。
回复 使用道具 举报
a3563365 发表于 2015-2-7 20:01
//说出下列程序的输出结果(不要借助终端指令)
#include

  {
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {
            score = 10;  // 把score2改为10
            printf("%d\n", score);  // 打印score2并换行,屏幕显示10
        }
        a = 10;  // 将a1改为10
    }// 运行到这里时,score2被销毁


以上这段代码中的a为什么会被改了,a=10的作用域不应该消失了才对么,为什么到最后一步a会以10的结果去加250,求解,看来我的基础很不好啊
回复 使用道具 举报

1.变量的作用域
从定义变量的那一行代码开始,一直到所在的代码块结束

2.代码块的作用
及时回收不再使用的变量,为了提升性能!
回复 使用道具 举报
a3563365 发表于 2015-2-7 20:01
//说出下列程序的输出结果(不要借助终端指令)
#include

281714189  带上备注,要不可能会被拒绝
回复 使用道具 举报
本帖最后由 a3563365 于 2015-2-7 20:06 编辑

//说出下列程序的输出结果(不要借助终端指令)
#include <stdio.h>

int main()
{
    int a = 20;  // 定义第一个变量,存为20,后面我会将这个称为a1
    int score = a + 100;  // 定义第二个变量,存为120,后面我会将这个称为score1
    printf("%d\n", score); // 打印score1并换行,屏幕显示120
   
    {
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {
            score = 10;  // 把score2改为10
            printf("%d\n", score);  // 打印score2并换行,屏幕显示10
        }
        a = 10;  // 将a1改为10
    }// 运行到这里时,score2被销毁
   
    {
        score = a + 250;  // 将score1改为 a1+250 = 260
        int score = 30;   // 定义第四个变量,存为30,后面我会将这个称为score3
        printf("%d", score);  // 打印score3(注意这里没换行),屏幕显示30
    } // 运行到这里时,score3被销毁
   
    printf("%d\n", score);  // 打印score1并换行,结果为 260
   
    return 0;}

程序我没运行,但是应该是这个结果没错的,有什么问题再找我吧,还有,基础测试最好自己做,基础不扎实,面试根本过不了,加油,共勉之~









点评

120 10 30260 这个是输出结果,你有Q吗? 我加上你,咱俩详细聊聊。  发表于 2015-2-7 20:09
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马