有一个名为init.txt的文件,内容如下:#define HDY(A,B) A/B # define PRINT(Y) Printf(“y=%d\n.,Y) 有以下程序#include “init.txt” main() {int a=1,b=2,c=3,d=4,k; K=HDY(a+c,b+d); PRINT(K); } 下面针对该程序的叙述正确的是( )。A.编译有错B.运行出错C.运行结果为 y=0D.运行结果为 y=6

题目

有一个名为init.txt的文件,内容如下:

#define HDY(A,B) A/B # define PRINT(Y) Printf(“y=%d\n.,Y) 有以下程序

#include “init.txt” main() {int a=1,b=2,c=3,d=4,k; K=HDY(a+c,b+d); PRINT(K); } 下面针对该程序的叙述正确的是( )。

A.编译有错

B.运行出错

C.运行结果为 y=0

D.运行结果为 y=6


相似考题
更多“有一个名为init.txt的文件,内容如下:#define HDY(A,B) A/B # define PRINT(Y) Printf(“y=%d\n.,Y) 有以下程序#include “init.txt” main() {int a=1,b=2,c=3,d=4,k; K=HDY(a+c,b+d); PRINT(K); } 下面针对该程序的叙述正确的是( )。A.编译有错B.运行出错C.运行结果为 y=0D.运行结果为 y=6”相关问题
  • 第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

  • 第2题:

    有以下程序 include define F(X,Y) (X)*(Y) main( ) { int a=3, b=4; prin

    有以下程序

    #include <stdio.h>

    #define F(X,Y) (X)*(Y)

    main( )

    { int a=3, b=4;

    printf("%d\n", F(a++, b++));

    }

    程序运行后的输出结果是

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:本题考查了带参数的宏定义。参数只是进行简单的替换而不是把其值求出后替换形式参数。本题中用a++替换X,用b++替换Y,再求(a++)*(b++)的值。

  • 第3题:

    下列程序的运行结果是______。 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.63

    B.36

    C.编译出错

    D.0


    正确答案:B
    解析:本题fun函数的功能是实现数据交换,交换的只是存储指针变量的地址,且指针所指向的内容不变。

  • 第4题:

    以下程序的输出结果是______。includedefine FUDGE(y)2.84+ydefine PR(A)printf("%d"

    以下程序的输出结果是______。 #include<stdio.h> #define FUDGE(y) 2.84+y #define PR(A) printf("%d",(int)(a) ) #define PRINT1(A) PR(a) ;putchar('\n') main() { int x=2; PRINT1(FUDGE(5)*X); }

    A.11

    B.12

    C.13

    D.15


    正确答案:B
    解析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。

  • 第5题:

    有以下程序includedefine F(X,Y)(X)*(Y)main(){int a=3,b=4;printf("%d\n",F(a++,b++

    有以下程序 #include<stdio.h> #define F(X,Y)(X)*(Y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); 程序运行后的输出结果是

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a++) *(b++),而a++的值为3,b++的值为4。因此最后的值为3*4=12。

  • 第6题:

    以下程序的输出结果是______。include define FUDGE(y)2.84+ydefine PR(a) printf (

    以下程序的输出结果是______。#include <stdio. h>#define FUDGE(y) 2.84+y#define PR(a) printf ("%d",(int)(a))#define PRINT1(a) PR(a); putchar('\n')main(){ int x=2; PRINT1(FUDGE(5)*x);}

    A.11

    B.12

    C.13

    D.15


    正确答案:B
    解析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。

  • 第7题:

    下列程序的运行结果是 inClude roid fun(int *a,int * b) { int * k; k=a;a=b

    下列程序的运行结果是 #inClude<iostream.h> roid fun(int *a,int * b) { int * k; k=a;a=b;b=k;} void main( ) { int a=2004,b=9,* x=&a,* y=&b; fun(x,y); cout < < a < <" " < < b < < end1;}

    A.2004 9

    B.9 2004

    C.0 0

    D.编译时出错


    正确答案:A
    解析:本题函数fun中形参是两个指针变量,函数fun只是将这两个指针的指向的地址交换了一下而并没有交换它们所指向的地址中的数据。虽然,主函数中声明的变量a,b是整型变量而函数fun中的形参是两个指针变量,这两个变量仅仅是两个参数,与主函数中的那两个变量含义是不同的。注意:采用指针或引用可将值交换。

  • 第8题:

    有以下程序#include "stdio.h"#define M(x,y) (x)*(y) #define N(x,y) (x)/(y) main(){ int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);} 程序的运行结果是A.3 B.5C.6 D.8


    正确答案:A
    带参数的宏定义的一般形式为#define 宏名(参数表)字符串。题目中定义了两个宏“#define M(x,y) (x)*(y)”、“#define N(x,y) (x)/(y)”,即可以用M(x,y) 表示(x)*(y)运算,N(x,y)表示(x)/(y)运算。主函数main中关键是计算k=N(M(a,b),c),根据前述的宏,有k=a*b/c,计算后有k=30/8,取整后得到3。

  • 第9题:

    下列程序的运行结果是includevoid fun(int *a,int *B){int *k;k=a;a=b;b=k;}void m

    下列程序的运行结果是 #include<iostream.h> void fun(int *a,int *B) {int *k; k=a;a=b;b=k; } void main( ) {int a=3,b=6,*x=&a,*y=&b; fun(x,y); cout << a <<" "<< b; }

    A.63

    B.36

    C.编译出错

    D.0


    正确答案:B
    解析:函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!大家可以考虑一下利用下面这函数可不可以实现a和b的互换。swap(intx,inty){intt;t=x;x=y;y=t;}如果在main函数中用swap(a,B,会有什么结果呢?在函数调用开始时,a的值传送给x,b的值传递给y。执行完swap()函数后,x和y的值是互换了,但main()函数中的a和b并未互换。也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。为了使在函数中改变了的变量值能被main()函数所用,不能采取上述办法,而应该用指针变量做函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}注意交换*p1和*p2的值是如何实现的,如果写成下面这样就有问题了!swap(int*p1,int*p2){int*p;*p=*p1;/*此语句有问题:*/*p1=*p2;*P2=*p;}*p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*p1和*p2的交换。

  • 第10题:

    在下面程序运行后,输出结果为 ______。includevoid count(int x[],int n,int &y

    在下面程序运行后,输出结果为 ______。 #include<iostream.h> void count(int x[],int n,int &y){ int k; y=0; for(k=0:k<n;k++) if(x[k]<0) y++; } void main(){ int b[]={2,1,-8,-3,7,2,4,6,0,-13}; int x; count(b,10,x); cout<<“x”<<x<<end1; }

    A.x=3

    B.x=5

    C.出错

    D.x=0


    正确答案:A

  • 第11题:

    以下程序的输出结果是______。includedefine FUDGE(y) 2.84+ydefine PR(a)printf("%d

    以下程序的输出结果是______。 #include<stdio.h> #define FUDGE(y) 2.84+y #define PR(a) printf("%d\n",(int)(a)) #define PRINT1(a) PR(a);putchar('\n') main() { int x=2; PRINT1(FUDGE(5)*x); }

    A.11

    B.12

    C.13

    D.15


    正确答案:B
    解析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。

  • 第12题:

    下列程序的运行结果是()。includevoid fun(int *a, int *b){int *k; k=a; a=b; b=k;}ma

    下列程序的运行结果是( )。 #include <stdio.h> 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
    解析:程序看上去是要实现交换两个指针的值,但是C语言中实参变量和形参变量之间的数据传递是单向的“值传递”,指针变量做函数参数也要遵循这一规则。调用函数不能企图通过改变形参指针的值而使实参指针的值也改变。所以本题的输出结果是36。

  • 第13题:

    以下程序的输出结果是______。 include define FUDGE(y)2.84+y define PR(a) printf(

    以下程序的输出结果是______。 #include<stdio.h> #define FUDGE(y) 2.84+y #define PR(a) printf("%d",(int)(a)) #define PRINT1(a) PR(a);putchar('\n') main() { int x=2; PRINT1(FUDGE(5)*x); }

    A.11

    B.12

    C.13

    D.15


    正确答案:B
    解析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。

  • 第14题:

    有以下程序: include difine F(X, Y)(X)*(Y)main(){int a=3, b=4; print("% d\n",

    有以下程序: # include<stdio. h> # difine F(X, Y) (X)*(Y) main() { int a=3, b=4; print("% d\n", F(a++, b++)); } 程序运行后的输出结果是______。

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:F(a++,b++)的宏展开为:F(a++,b++)=(a++)*(b++)=a*b=3×4=12,因此printf函数的输出结果是12。

  • 第15题:

    下列程序的运行结果是includevoid fun(int * a,int * b){int * k; k=a; a=b; b=k;}

    下列程序的运行结果是 #include<iostream.h> void fun(int * a,int * b) { int * k; k=a; a=b; b=k; } void main( ) { int a=3,b=6, * x=&a, * y=&b; fun(x, y) ; cout < < a < < " " < < b; }

    A.6 3

    B.3 6

    C.编译出错

    D.0 0


    正确答案:B
    解析:函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!
      大家可以考虑一下利用下面这函数可不可以实现 a和b的互换。
      swap(int x, int y)
      { int;
       t=X;
       x=y;
       y=t;
      }
      如果在main函数中用swap(a, b) ,会有什么结果呢?在函数调用开始时,a的值传送给x,b的值传递给 y。执行完swap( ) 函数后,x和y的值是互换了,但 main( ) 函数中的a和b并未互换。也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。
      为了使在函数中改变了的变量值能被main( ) 函数所用,不能采取上述办法,而应该用指针变量作函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。
      swap(int * p1,int * p2)
      { int p;
       p= * p1;
       * p1= * p2;
       * p2=p;
      }
      注意交换 * p1和 * p2的值是如何实现的,如果写成下面这样就有问题了!
      swap(int * p1,int * p2)
      { int * p;
       * p=p1;/ * 此语句有问题 * /
       * p1= * p2;
       * p2= * p;
    }
      * p1就是a,是整型变量。而 * p是指针变量p所指向的变量,但p中并无确切地址,用 * p可能会破坏系统的正常工作状态。应该将。p1的值赋给一个整型变量,用整型变量作为过渡变量实现,p1和 * p2的交换。

  • 第16题:

    以下程序的输出结果是______。 include define FUDGE(y)2.84+y define PR(a)printf("

    以下程序的输出结果是______。 #include<stdio.h> #define FUDGE(y) 2.84+y #define PR(a) printf("%d",(int)(a)) #define PRINT() PR(s) ;putchar('\n') main() { intx=2; PRINT1 (FUDGE(5)*x); }

    A.11

    B.12

    C.13

    D.15


    正确答案:B
    解析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。

  • 第17题:

    有以下程序段:include define MIN(x,y)(x)<(y)?(x):(y) void main() { int i,j,K; i

    有以下程序段:

    include<iostream.h>

    define MIN(x,y) (x)<(y)?(x):(y)

    void main()

    {

    int i,j,K;

    i=10;j=15;

    k=10*MIN (i,j);

    cout<<k<<endl;

    }

    程序执行后的输出结果是______。


    正确答案:15
    15

  • 第18题:

    有如下程序: include using namespace std; class TestClass { private: int x,y; pu

    有如下程序: #include<iostream> using namespace std; class TestClass { private: int x,y; public: TestClass (int i,int j) { x=i; y=j; } void print() { cout<<"print1"<<end1; } void print()const { cout<<"print2"<<end1; } }; int main() { const TestClass a(1,2); a.print(); return 0; } 该程序运行后的输出结果是( )。

    A.print1

    B.print2

    C.print1 print2

    D.程序编译时出错


    正确答案:B
    解析:由主函数main入手,定义TestClass型的常对象a,然后调用对象a中的成员函数print()。因为在C++中,如果一个对象被声明为常对象,则不能调用该对象中的非const型的成员函数。所以,这里调用的是对象中的const型成员函数“void print()const”,输出为print2。

  • 第19题:

    有以下程序:includedefine F(x,y) (x)*(y)main(){int a=3,b=4; printf("%d\n",F(a++,

    有以下程序: #include <stdio.h> #define F(x,y) (x)*(y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } 程序运行后的输出结果是( )。

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:本题考查带参数的宏定义。对F(a++,b++)展开后,宏的返回值为3×4=12,这里a++,b++都是先使用变量值,再自增。

  • 第20题:

    以下程序的运行结果是()。includedefine MIN(x,y) (x)<(y)? (x):(y)main(){int i=10,j

    以下程序的运行结果是( )。 #include <stdio.h> #define MIN(x,y) (x)<(y)? (x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf("%d\n",k); }

    A.10

    B.15

    C.100

    D.150


    正确答案:B
    解析:该题考查函数的宏定义及三目运算符。表达式10*MIN(i,j)利用宏展开后为:10*ij?i:j,即10015?10:15,其值为15,然后将15赋给k。

  • 第21题:

    阅读下列程序段,则程序的输出结果为 #include"stdio.h" #define M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main() { int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);}

    A.3

    B.5

    C.6

    D.8


    正确答案:A
    解析:带参数的宏定义命令行形式如下:#define宏名(形参表)替换文本。首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为(a)*(b)/(c)。

  • 第22题:

    有以下程序: include define M 5 define f(x,y) x*y+M main( ) { int k; k=f(2,3)*f(2,3); printf("%d\n",k); } 程序的运行结果是( )。

    A.22

    B.41

    C.100

    D.121


    答案:B
    解析:宏定义中的函数在调用时只做简单的替换,不能进行任何修改。所以k=2*3+5*2*3+5=41。

  • 第23题:

    有以下程序:include define F(X,Y)(X)*(Y)main(){int a=3,b=4;printf("%d\n",F(a++,b

    有以下程序: #include <stdio.h> #define F(X,Y)(X)*(Y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } 程序运行后的输出结果是( )。

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:在程序中先将表达式中的宏替换掉,则输出语句中的表达式为(a++)*(b++),而a++的值为3,b++的值为4。因此最后的值为3*4=12。所以,4个选项中选项A符合题意。