更多“执行下述程序后,输出的结果是( )。include<stdio.h>define S(X)X*Xvoid main{ int a=9,k=3, ”相关问题
  • 第1题:

    有如下程序段void fun(int *a, int *b){ int *k; k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b; fun(x,y); printf("%d %d", a, b);} 程序运行后输出的结果是A.6 3 B.3 6 C.编译出错 D.0 0


    正确答案:B
    在本题中,程序首先定义了一个无返回值的函数fun,该函数带有两个整型的指针形参变量,在函数体中,首先定义一个整型指针变量k,然后试图利用k来交换a和b的结果。但处理语句k=a;很明显是对地址进行赋值操作。在C语言中,指针变量作为函数参数时,可以改变被指向的变量的值,但不能改变指针变量本身的值,即我们可以改变实参指向的变量的值,不能使实参指向其他的变量。因此,本函数并不能交换形参所指向变量的结果。
    在主函数中,首先定义了两个整型变量a和b,并分别被初始化为3和6,然后定义两个指针变量x和y,分别指向a和b,接着调用fun函数,传递的实参为指针变量x和y,根据前面对fun函数的分析可知,调用该函数后并不能实现a和b数组的交换,因此,执行输出语句后,输出的结果是3 6。本题正确答案选B。

  • 第2题:

    执行下列程序后,输出的结果是( )。 #include<stdio.h> #define S(X) X*X void main { int a=9,k=3,m=2; a/=S(k+m)/S(k+m): printf("%d",a); }

    A.1

    B.4

    C.9

    D.0


    正确答案:D
    本题主要考查带参数的宏定义,过程如下:由于定义为define(x)x*x没有括号优先级,所以:a=a/(S(k+m)/S(k+m))=a/(k+m*k+m/k+m*k+m)=9/(3+2*3+2/3+2*3+2)=0。

  • 第3题:

    有以下程序:

    void f( int y,int *x)

    { y=y+*x; *x=*x+y; }

    main()

    {int x=2,y=4;

    f(y,&x);

    ptintf("%d %d\n",x,y);

    }

    执行后输出结果是【 】。


    正确答案:84
    84 解析:“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响。函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参y的值将不改变,而实参x的值将改变,故最后输出的y值为4,而x的值为8。

  • 第4题:

    执行下述程序后,输出的结果是( )。

    #include<stdio.h>

    #define S(X)X*X

    void main

    { int a=9,k=3,m=2;

    a/=S(k+m)/S(k+m);

    printf("%d",a);

    }

    A.1

    B.4

    C.9

    D.0


    正确答案:D
    本题是考查带参数的宏的定义,过程如下:inta=a/S(k+m)/S(k+m)=a/(k+m*k+m/k+m)=9/(3十2*3十2/3十2*3十2)=0。

  • 第5题:

    执行下列程序后,输出的结果是()。 include define S(X)X*X void main() {iht a=9,k=3,

    执行下列程序后,输出的结果是( )。

    #include<stdio.h>

    #define S(X)X*X

    void main()

    { iht a=9,k=3,m=2;

    a/=S(k+m)/S(k+m);

    printf("%d",A) ;

    }

    A.1

    B.4

    C.9

    D.0


    正确答案:D
    解析:本题主要是考查带参数的宏定义及其相关运算。本题中宏运算过程如下:a=a/(S(k+m)/S(k+m))=a/(k+ m*k+m/k+m*k+m)=9/ (3+2*3+2/3+2*3+2)=0。