您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 模拟题 >> 正文    
  二级C语言教程章节测试13.编译预处理和动态存储分配 【注册男护士专用博客】          

二级C语言教程章节测试13.编译预处理和动态存储分配

www.nanhushi.com     佚名   不详 

  一、选择题
    (1)有以下程序
     main()
     { char  p[]={'a', 'b', 'c'}, q[]="abc";
       printf("%d  %d\n", sizeof(p),sizeof(q));
     };
    程序运行后的输出结果是
     A)4  4   B)3  3   C)3  4   D)4  3

    (2)有以下程序
     # define    f(x)    (x*x)
     main()
     { int  i1, i2;
       i1=f(8)/f(4) ;    i2=f(4+4)/f(2+2) ;
       printf("%d, %d\n",i1,i2);
     }
    程序运行后的输出结果是
     A)64, 28  B)4, 4   C)4, 3   D)64, 64

    (3)有以下程序
    main()
    {   char  a[7]="a0\0a0\0";int  i,j;
        i=sizeof(a);  j=strlen(a);
        printf("%d  %d\n",i,j);
    }
    程序运行后的输出结果是   
    A)2    2
    B)7    6
    C)7    2
    D)6    2

    (4)以下叙述中正确的是                 
    A)预处理命令行必须位于源文件的开头
    B)在源文件的一行上可以有多条预处理命令
    C)宏名必须用大写字母表示
    D)宏替换不占用程序的运行时间

    (5) 有以下程序
    main( )
    {  char a[]=”abcdefg”,b[10]=”abcdefg”;
       printf(“%d  %d\n”,sizeof(A) ,sizeof(B) );
    }
    执行后输出结果是
    A) 7  7    B) 8 8    C) 8 10   D) 10 10

    (6) 有以下程序
    #define  f(x)    x*x
    main( )
    {  int i;
       i=f(4+4)/f(2+2);
       printf(“%d\n”,i);
    }
    执行后输出结果是
    A) 28     B) 22     C) 16     D) 4

    (7) 有以下程序
    #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

    (8) 有以下程序
    main()
    { char s[]="\n123\\";
     printf("%d,%d\n",strlen(s),sizeof(s));
    }
    执行后输出结果是
    A) 赋初值的字符串有错 B) 6,7 C) 5,6     D) 6,6

    (9) 有以下程序
    main(int arge,char   *argv[])
    { int n,i=0;
    while(arv[1][i]!='\0'
    { n=fun(); i++;}
     printf(%d\n",n*argc);
    }
    int fun()
    { static int s=0;
     s+=1;
     return s;
    }
    假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行
    exam 123<回车>
    则运行结果为

    (10) 有以下程序
    main()
    { char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; int  i,j;
    i=sizeof(a);   j=strlen(a);
    printf(“%d,%d\b”i,j);
    }
    程序运行后的输出结果是
    A)9,9   B)8,9     C)1,8      D)9,8


    (11) 程序中头文件typel.h 的内容是:
    #define   N    5
    #define   M1   N*3
    程序如下:
    #define   “type1.h”
    #define   M2   N*2
    main()
    { int i;
    i=M1+M2;  printf(“%d\n”,i);
    }
    程序编译后运行的输出结果是:
    A) 10    B) 20   C) 25    D) 30

    (12) 有以下程序
    #include  <stdlib.h>
    main()
    { char *p,*q;
    p=(char*)malloc(sizeof(char)*20); q=p;
    scanf(“%s%s”,p,q);  printf(“%s%s\n”,p,q);
    } 
    若从键盘输入:abc def<回车>,则输出结果是:
    A) def def  B) abc def  C) abc d  D) d d

    (13) 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是
    A) p=2*(int*)malloc(sizeof(int));
    B) p=(int*)malloc(2*sizeof(int));
    C) p=(int*)malloc(2*2);
    D) p=(int*)calloc(2,sizeof(int));

    (14) 以下程序的输出结果是
    main()
    {   char  st[20]= “hello\0\t\\\”;
    printf(%d %d \n”,strlen(st),sizeof(st));
    }
    A) 9 9    B) 5 20   C) 13 20        D) 20 20

    (15) 以下程序的输出结果是
    amovep(int  p, int  (a)[3],int  n)
    {   int   i, j;
    for( i=0;i<;i++)
    for(j=0;j<n;j++){  *p=a[i][j];p++; }
    }
    main()
    {   int    *p,a[3][3]={{1,3,5},{2,4,6}};
    p=(int *)malloc(100);
    amovep(p,a,3);
    printf(“%d %d \n”,p[2],p[5]);free(p);
    }
    A) 56      B) 25           C) 34        D) 程序错误

    (16) 以下程序的输出结果是
    #define    M(x,y,z)    x*y+z
    main()
    {   int  a=1,b=2, c=3;
    printf(“%d\n”, M(a+b,b+c, c+a));
    }
    A) 19   B) 17   C) 15   D) 12

    (17) 以下程序的输出结果是
    A) 16    B) 2    C) 9              D) 1
    #define  SQR(X)  X*X
    main()
    {  int  a=16, k=2, m=1;
       a/=SQR(k+m)/SQR(k+m);
       printf(“d\n”,a);
    }

    (18) 若定义了以下函数:
    void f(……)
    {……
        *p=(double *)malloc( 10*sizeof( double));
    ……
    }
    p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是
    A) double  *p  B) float  **p      C) double  **p   D) float  *p

    (19) 有如下程序
    #define     N     2
    #define     M     N+1
    #define     NUM   2*M+1
    #main()
    {   int  i;
    for(i=1;i<=NUM;i++)printf(“%d\n”,i);
    }
    该程序中的for循环执行的次数是
    A) 5               B) 6               C) 7              D) 8

    (20) 下列程序执行后的输出结果是
         A) 6            B) 8              C) 10            D) 12
         #define  MA(x) x*(x-1)
         main()
         { int a=1,b=2;  printf("%d \n",MA(1+a+b));}


    (21) 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是
        A) *p=&a;        scanf("%ld",p);
        B) p=(long *)malloc(8);  scanf("%ld",p);
        C) scanf("%ld",p=&a);
        D) scanf("%ld",&a);

    (22) 以下程序的输出结果是
       A) 1   B) 4    C) 7     D) 5
        #include 
        int     a[3][3]={1,2,3,4,5,6,7,8,9,},*p;
        main(  )
        {   p=(int*)malloc(sizeof(int));
            f(p,a);
            printf("%d \n",*p);
        }
        f(int *s,  int  p[][3])
        {  *s=p[1][1]; }

    (23) 以下程序的输出结果是
       A) 9     B) 6     C) 36     D) 18
       #define    f(x)     x*x
       main(  )
       {   int   a=6,b=2,c;
           c=f(a) / f(b);
           printf("%d \n",c);
       }

    (24) 以下程序运行后,输出结果是
    A) 49.5          B) 9.5            C) 22.0           D) 45.0
           #include<stdio,h>
           #define      PT       5.5
           #define      S(x)     PT* x * x
          main()
          {   int    a=1,b=2;
              printf("%4.1f\n",S(a+b));
          }

    (25) 以下程序运行后,输出结果是
    A) 1             B) 7              C) 9              D) 11
           fut(int    **s, int  p[2][3])
           {   **s=p[1][1];}
           main()
           {   int   a[2][3]={1,3,5,7,9,11},  *p;
               p=(int  *) malloc(sizeof(int));
             fut(&p,a);
             printf("%d\n",*P);
            }

    (26) 设有以下宏定义:
    #define      N       3
    #define      Y(n)       ( (N+1)*n)
    则执行语句:z=2 * (N+Y(5+1));后,z的值为
    A) 出错           B) 42            C) 48             D) 54

    (27) 若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是
    A)*p=&a; scanf("%lf",p);     B)p=(double *)malloc(8);scanf("%f",p);
    C) p=&a;scanf("%lf",a);       D)p=&a; scanf("%le",p);

    (28) 执行下面的程序后,a的值是
    #define    SQR(X)  X*X
    main( )
    { int a=10,k=2,m=1;
    a/=SQR(k+m)/SQR(k+m);
    printf("%d\n",a);     }
     A) 10          B) 1          C) 9           D) 0

    (29) 以下程序的输出结果是
    fut (int**s,int p[2][3])
    {     **s=p[1][1];    }
    main( )
    {   int a[2][3]={1,3,5,7,9,11},*p;
    p=(int*)malloc(sizeof(int));
    fut(&p,a);
    primtf("%d\n",*p);     }
    A) 1           B) 7             C) 9             D) 11

    (30) 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:
    int *p;
    p=__________ malloc( sizeof(int));
    则应填入
    A) int         B) inst *          C) (*int)         D) (int *)


    (31) 请读程序:
    #include<stdio.h>
    #define SUB(X,Y) (X)*Y
    main()
    { int a=3, b=4;
    printf("%d", SUB(a++, b++));
    }
    上面程序的输出结果是
    A) 12            B) 15             C) 16             D) 20

    (32) 请读程序:
    #include<stdio.h>
    void fun(float *pl, float *p2, float *s)
    { s=( float * )calloc( 1, sizeof(float));
    *s=*p1+ *(p2++);
    }
    main()
    { float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
    fun(a, b, s)
    printf("%f\n",*s);
    }
    上面程序的输出结果是
    A) 11.100000     B) 12.100000      C) 21.100000       D) 1.100000

    (33) 在宏定义 #define PI 3.14159中,用宏名PI代替一个
    A) 单精度数      B) 双精度数       C) 常量           D) 字符串

    (34) 请选出以下程序段的输出结果
    #include<stdio.h>
    #define MIN(x,y)  (x)<(y)? (x):(y)
    main()
    { int i,j,k;
    i=10; j=15;
    k=10*MIN(i,j);
    printf("%d\n",k);
    }
    A) 15            B) 100            C) 10             D) 150

    (35) sizeof(double)是 【35】 。
     A)一种函数调用    B)一个双精度型表达式
      C)一个整型表达式    D)一个不合法的表达式

    (36) 以下for语句构成的循环执行了 【36】 次。
    # include <stdio.h>
    # define  N  2
    # define  M  N+1
    # define  NUM  (M+1)*M/2
    main()
    { int  i , n=0;
     for ( i=1;i<=NUM;i + + );
        {n + + ;  printf("%d",n); }
     printf("\n");  }
     A) 5      B) 6      C) 8      D) 9

    (37) 以下程序的输出结果是 【37】 。
    # 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

二、填空题:
    (1)已有定义:double  *p;,请写出完整的语句,利用malloc函数使p指向一个双精度型    的动态存储单元 【1】 。

    (2)以下程序运行后的输出结果是 【2】    .
    #define  S(x)   4*x*x+1
    main()
    {
       int  i=6,j=8;
       printf("%d\n",S(i+j));
    }

    (3) 以下程序中, for循环体执行的次数是 【3】  。
    #define  N 2
    #define  M N+1
    #define  K M+1*M/2
    main()
    { int i;
      for(i=1;i<K;i++)
      { ... }
      ...
    }

    (4) 以下程序中给指针p分配三个double型动态内存单元,请填空。
    # include <stdlib.h>
    main ( )
    {  double *p;
       p=(double *) malloc(【4】); 
       p[0]=1.5;p[1]=2.5;p[2]=3.5;
       printf(“%f%f%f\n”,p[0],p[1],p[2]);
    }

    (5) 以下程序的输出结果是【5】 。
    #defint  MCRA(m)  2*m
    #define  MCRB(n,m) 2*MCRA(n)+m
    main()
    { int i=2,j=3;
     printf("%d\n",MCRB(j,MCRA(i)));
    }

    (6) 下面程序的运行结果是【6】 。
    #define   N   10
    #define   s(x)  x*x
    #define   f(x)  (x*x)
    main()
    {  int i1,i2;
    i1=1000/s(N); i2=1000/f(N);
    printf(“%d  %d\n”,i1,i2);
    }

    (7) 设有如下宏定义
    #define   MYSWAP(z,x,y)   {z=x;  x=y; y=z;}
    以下程序段通过宏调用实现变量a、b内容交换,请填空。
    float  a=5,b=16,c;
    MYSWAP(  【7】 ,a,b); 

    (8) 用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
    st=(char*) 【8】 ;

    (9) 以下程序的输出结果是【9】。
    #define        MAX(x,y)      (x)>(y)?(x):(y)
    main()
    {    int    a=5,b=2,c=3,d=3,t;
    t=MAX(a+b,c+d)*10;
    printf(“%d\n”,t);
    }

    (10) 若要使指针p指向一个double类型的动态存储单元,请填空。
    p=  [10]  malloc(sizeof(double));  

    (11) 下面程序的输出是  【11】 。
    #define PR(ar) printf("%d", ar)
    main()
    { int j, a[]={ 1,3,5,7,9,11,13,15}, *p=a+5;
    for(j=3; j; j--)
    { switch(j)
    { case 1:
    case 2: PR(*p++); break;
    case 3: PR(*(--p));}
    }
    }


    答案:
    一、选择题:
    1) C 2) C 3) C 4) D 5) C 6) A 7) A 8) C 9) A 10) D
    11) C 12) A 13) A 14) B 15) A 16) D 17) B 18) C 19) B 20) B
    21) A 22) D 23) C 24) B 25) C 26) C 27) D 28) B 29) C 30) D
    31) A 32) D 33) D 34) A 35) C 36) C 37) B 38)  39)  40) 
    二、填空题:
    (1) p=(double*)malloc(sizeof(double))
    (2) 81
    (3) 4
    (4) 3*sizeof(double)
    (5) 16
    (6) 1000  10
    (7) c
    (8) Malloc (11) 或malloc(sizeof(char)*11)
    (9) 7
    (10) (double *)
    (11) 9911

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目