c语言函数练习

    xiaoxiao2021-12-14  15

    一、单项选择题

    1.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是(  d  )。

    A. a〉=10 or a<=0

    B. a〉=0|a<=10

    C. a〉=10 &&a<=0

    D. a>=10‖a<=0

     

    2. 若有以下定义:

    char a; int b;float c; double d; 则表达式a*b+d-c值的类型为(  d  )。

    A.float B. int C. char D. double

     

    3. 宏定义的宏展开是在(  a  )阶段完成的。

    A. 预处理 B. 编译 C. 预处理前 D. 运行

     

    4.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( B )。

    A. void   B. int   C. float   D. double

     

    5.按照标识符的要求,(  A  )符号不能组成标识符。

    A.连接符                 B. 下划线

    C. 大小写字母             D. 数字符号

     

    6. 以下不能正确定义二维数组的选项是(  D   )

    A. int a[2][2]={{1},{2}};

    B. int  a[][2]={1,2,3,4};

    C. int a[2][2]={{1}, 2,3};

    D. int a[2][]={{1,2},{3,4}};

     

    7.请问这个结构体所占的空间大小是( C  )字节。

    typedef   struct{  

    int  a,

    char  b,

    short  c,

    short  d,

    }AA_t;

    A.16       B. 9      C. 12    D. 8

     

     

    8. 循环语句while(!E)中的表达式!E等价于: (      )

    A.E!=0     B. E!=1     C. E==0   D. E==1

     

    9.不正确的赋值或赋初值的方式是 (      )。

    A.char str[6]={‘\0’};

    B. char str[7]= “string”;

    C. char str[10];str=“string”;

    D. char str[6]=“g”;

    10.以下关于函数设计不正确的说法是(     )。

    A.函数设计应该追求高内聚低耦合

    B. 要尽可能多的使用全局变量

    C. 函数参数不易过多

    D. 设计函数时,尽量做到谁申请的资源就由谁来释放

     

    11. C语言中,注释是否支持嵌套(  )

       (A)支持   (B)不支持   (C)某些情况下支持

    12. 下面的程序,输出结果正确的是(  )

    int main()

    {

      int a = 5;

      if( a = 0 )

      {

            printf(“%d”, a - 10);

      }

      else

      {

            printf(“%d”, a++);

      }

      return 0;

    }

    (A)-5   (B)6   (C)1   (D)0

    13. 关于野指针,下面说法错误的是(  )。

    (A) 野指针指可能指向非法的内存地址。

    (B) 野指针有时也可能指向合法的内存地址。

    (C) 野指针都是由指针未初始化导致的。

    (D) 对野指针的访问,可能会导致程序异常。

    14. 递归调用非常危险,可能导致很多问题,即使程序编写没有逻辑错误,也可能导致下面哪种现象的发生(  )。

    (A) 死循环

     (B) 栈溢出

     (C) 内存泄漏

     15. include <a1.h> 和include  “a2.h”,以下说法正确的是(  )。

    (A)“”表示先到源文件所在目录下搜索头文件

    (B)<>表示先到源文件所在目录下搜索头文件

    (C)两者用法没有区别

    16. 定义变量double **a[3][4],此变量占有内存空间是(  )字节?

       (A)12   (B)24  (C)48  (D)96

    17. 下列程序执行后,n的值等于(  )。

       char a[20];

    char * p1 = (char *)a;

    char * p2 = (char*)(a+5);

    int n= p2-p1;

    (A)4   (B)5  (C)10   (D)20

    18.  #define F(X,Y) ((X)+(Y))

    void main()

    {

    int a=3,b=4;

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

    }

    程序运行后的输出结果是(  )。

    (A)7   (B)8   (C)9   (D)10

    19. 上面的第8题中,Main函数返回前,a和b分别为(  )

    (A)3,4   (B)4,4  (C)3,5   (D)4,5

    20.char 占1个字节, int 占4个字节,double 占8个字节。

        以下定义

    typedef union{

        int          i;

        double     d;

        char        c;

    }T;

     

    sizeof(T) = ? (  )

     

    (A) 8

    (B)  13

    (C)  16

    (D) 24

     

    21.执行x=5>1+2&&2||2*4<4-!0后,x的值为(    )。

              A.-l             B. 0          C. 1            D. 5

    22.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是(   )。    

          A.*pz           B.a         C.px          D.&a

    23.对于语句int *px[10],以下说法正确的是(    ) 。

         A. px是一个指针,指向一个数组,数组的元素是整数型。

            B.px是一个数组,其数组的每一个元素是指向整数的指针。

         C. A和B均错,但它是C语言的正确语句。

         D. C语言不允许这样的语句。

    24.在循环中使用break 语句的功能是(   )。

            A. 使程序的执行跳出break所在的那一重循环

         B. 使程序执行结束

         C. 跳出包含此break语句的所有循环

         D. 终止本次循环,继续下次循环

    25. 以下程序的运行情况是(   ) 。

         main() 

         {    int i=1,sum=0;

              while(i<10)  

                   sum=sum+1;  

                   i ++;  

             printf("i=%d,sum=%d",i,sum);

         }  

         A.       i=10,sum=9    B. i=9,sum=9     C. i=2,sum=l     D. 以上结果都不对

    26. 如下程序:

           inta[10];

           int*pa;

           pa= a;

    则元素a[1]的地址可以表示为(    )

             A.pa+1              B.pa+2         C.pa+4           D.a+2

     27. 如下程序,程序运行结果为(   )

           intChange(int *pX)

           {   int y = 8;

               y = y - *pX;

               pX =&y;

               return 0;

           }

           intmain()

           {   int xx = 3;

               int *pY;

               pY =&xx;

               Change(pY);

               printf(“%d”, *pY);

               return 0

           }

           A.8               B. 3               C. 5               D. 不确定

     

    28. 执行下列程序后,其结果为(    )

           inta[]={2,4,6,8,10,12}; *p;

           p=a;

           *(p+4)=2;

           printf(“%d,%d\n”,*p,*(p+4));

           A、0,10      B、0,2           C、2,10         D、2,2

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

         main() 

         {    char  arr[2][4];

              strcpy(arr,"you");

              strcpy(arr[1],"me");

              arr[0][3]='&';

              printf("%s\n",arr);   }

           A.    you&me       B. you       C. me       D. err

    30. 下面程序的运行结果是(    )

      #include <stdlib.h>

           voidfun(int **a,int p[][3])

           {  

                  **a= p[1][1]; 

           }

           voidmain()

           {

                  intx[2][3] = {2,4,6,8,10,12};

                  int* p = *x;

                  fun(&p,x);

                  printf("%d\n",*p);}

           A. 10           B . 12        C . 6        D . &x[1][1]

    31.   -27在内存中的存储形式是以下哪一种______

    负数的补码是反码加1

    A 0001 1011   B  1110 0100  C  1110 0101   D 1010 0111

     

    32. 表达式0x13&0x17,0x13|0x17的值分别是多少______

    A 0x17  0x13  B 0x13  0x17  C 0xF8  0xE8  D  0xec  0xC8

     

    33.以下对结构体类型变量st的定义中,不正确的是______

    A struct { char c;  int a;} st;   

    B struct { char c;  int a } TT;

      struct  TT  st;

    C typedef struct { char c;  int a}TT;

      TT  st;

    D #define  TT  struct

      TT { char c; int a; } st;

     

    34.若有以下定义和语句,则选项中错误的语句是______

    int a = 4,  b = 3, *p,  *q,  *w;

    p = &a;  q = &b; w = q;  q = NULL;

    A *q=0;   B  w = p; C  *p =a   D  *p= *w

     

    35.已有定义 int k = 2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是_____

    A   k = *ptr1+*ptr2;   B ptr2 = k;  C   ptr1 =ptr2;  D   k = *ptr1*(*ptr2);

     

    36.以下程序的运行结果是______

    int fun(int a,int b)

    { if(a>b) 

    return(a+b);

    else  return(a-b);

    }

    Void main()

    { int x=3, y=8, z=6, r;

    r = fun (fun(x,y), 2*z);

    printf(“%d\n”,r);

    }

    A - 48     B 58      C  -58    D  -17

     

    37.下面程序的运行结果是_____

    Void main()

    {

      int a[6],i;

      for(i=1;i<6;i++)

    { a[i] =9*(i-2+4*(i>3))%5;

    printf(“=”,a[i]);

    }

    }

    A -4 0 4 0 4    B  -4 0 4 0 3   C  -4 0 4 4 3   D  -40 4 4 0

    38.下面程序的运行结果是 _____

    Void main()

    {

        inti,j,a=0;

        for(i=0;i<2;i++)

        {

                 for(j=0;j<4;j++)

                 {

                          if(j%2)break;

                          {

                                    a++;

                          }

                 }

                 a++;

        }

        printf("%d\n",a);

    }

    A 4  B  5 C  6  D   7

     

    39.若有定义:int a[ ] = {2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;则下面的程序段输出的结果是______

    for(k=0;k<4;k++)q[k] = &a[k*3];

    printf("%d\n",q[3][1]);

    A 18   B 22  C 20  D 输出项不合法,结果不正确

     

    40.下面程序的运行结果是______

        #include <stdlib.h>

    fun(int **a,int p[][])

    {   **a = p[1][1];  }

    Void main()

    {

    int x[2][3] = {2,4,6,8,10,12};

    int * p = x;

    fun(&p,x);

    printf("%d\n",*p);

    }

    A  10  B  12  C  6   D  &x[1][1]

     

    填空题

    1.C语言中,用来跳过循环体后面的语句,开始执行下一次循环的关键字是_continue_______。

    2.执行语句“for(s=0,i=1;i<11;i++){if(i==6)break;s+=i;}”后,s值为___15___。

    3.以下程序运行后的屏幕输出结果是___30___ ,_____25__

    inta=5;

    fun(intb)

    {

    static int a=10;

       a+=b++;

       printf("%d ",a);

    }

    main()

    {

           int c=20; 

       fun(c); 

       a+=c++;

       printf("%d\n",a);

    }

    4.有以下程序

    #define  f (x)   x*x

    main()

    {  int i;

        i=f(4+4)/f(2+2);

        printf("%d\n",i);

    执行后输出结果是___28__。

     

    5.完成下面的宏函数,返回两个数中较大的那个数。

      #define MAX(a,b)  (((a)>(b))? ①(a)Lb) )    

    6. 下面程序计算等差数列从m,m+1,m+2,…,n的和(假定不会发生整数溢出),请将程序中空白部分补全。(m和n都是整数)

    int sum( int m,int n )

    {

        assert( n >= m );

        return (n+m)*②(n-m+1) /2;  

    }

    7. 下面程序使用插入排序方法将数组a中的元素进行由大到小排序,请将程序中空白部分补全。

    void insert_sort( int *a, int size )

    {

        int i = 0, j = 0, x =0;

     

    for(   ③ i=1 ; i < size; i++ )       

    {

        x = a[ i ];

        j = i – 1;

     

        while((j>=0)&&(④a[j] <x))         

    {

            a[ j + 1 ] = a[ j ];

            j--;

        }

     

           ⑤a[j+1]=x   ;                       

    }

    }

     

     

    8.a、已有函数max(a,b),该函数的入口地址是___ ___;

    b、int *p[4]代表的含义_______

    c、int **p代表的含义________

    d、  int *max()代表的含义____________

     

    9.下面程序的输出结果是____13____

    unsigned a = 0xFF,x,y,z;

    x = a >> 3;

    y = ~(~4 << 2);

    z = x & y;

    printf("z = %x\n",z);

    10.若有以下定义语句

    int *p[3],a[6],i;

    for(i =0;i<3;i++)

     p[i] = &a[2*i];

    则*(p[1]+1)引用的是a数组元素_____

     

    11.函数swap( int x,int y )可完成对x和Y值的交换。在运行调用函数中的如下语句后a[0]和a[1]的值分别为__1,2_____,原因是____________

    a[0] =1;a[1] =2;

    swap(a[0],a[1]);

     

    12.如果函数的类型和返回值类型不一致,以____函数类型____________为准。

     

    13.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用

    的存储类别是__STATIC______

     

    14.在任一个文件中定义外部变量Num,而在另一文件中需要使用这个变量,应该怎么声明___extern Num_____

     

    15.下面程序的运行结果是__66,33,77,55,99,11____

    #include <stdlib.h>

    #define N 6

    void fun( int *a)

    { int i,t;

    t= *a;

    for(i=0;i<N-1;i++)

    *(a+i) =*(a+i+1);

    *(a+i) = t;

    }

    void main()

    {   int a[N] ={11,66,33,77,55,99},i;

    fun(a);

    for (i = 0;i<N;i++)

    printf("%d\t",a[i]);

    }

     

    16. 以下程序的运行结果是 _0 13 6_______

    #include <stdlib.h>

    int sub(int *s);

    void main()

    {  int i,k;

    for (i =0;i<4;i++)

    {

    k = sub(&i);

    printf("%d\t",k);

    }

    printf("\n");

    }

     

    int sub(int *s)

    {static int t = 0;

    t = *s +t;

    return t;

    }

     

    17.以下程序的运行结果是_____5 1  1___________________________

    ________6  21 11________________________

    ________________________________

    ________________________________

    int n =1;

    void func();

     

    void main()

    {  

    static int x =5;

    int y;

    y = n;

    printf("MAIN:%d %d %d\n", x, y, n);

    func();

    func();

    printf("MAIN:%d %d %d\n", x, y, n);

    }

    void func()

    {

    static int x =4;

    int  y =10;

    x = x+2;

    n = n+10;

    y = y+n;

    printf("FUNC: %d %d %d\n", x, y, n);

    }

    18.若有定义:int a[3][4]= {{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是___0__,a[2][1]得到的初值是__6___.

    19.下面程序的运行结果是__1_12 3

    5 8 13 21

    _3  4  5  5__________

    main()

    {

      inti,f[10];

      f[0]= f[1] = 1;

      for(i= 2;i < 10; i++)

      f[i]= f[i-2]+f[i-1];

      for(i= 0;i < 10; i++)

      {

                if(i%4 == 0 ) printf("\n");

                printf("%d",f[i]);

      }

    }

     

    20.若for循环用以下形式表示:  for(表达式1;表达式2;表达式3)循环体语句

    则执行语句for(i=0;i<3;i++)printf("*");时,表达式1执行___1___次,表达式3执行__3___次

     

    21.设有程序片段:

     switch(grade)

     {case A : printf("85---100\n");

      case B : printf("70---84\n");

      case C : printf("60---69\n");

      case D : printf("<60\n");

    default :printf("error!\n");

    }

    若grade的值为‘C’则输出结果是___________

     

    22.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个

    小写字母,则把它变成大写字母;其它字符不变。请在_______内填入正确内容。

     

    main()

    {char ch;

    scanf("%c",&ch);

    if(_ch>=‘A’&& ch<=‘Z’)

    ________ch=ch+32_________;

    elseif(ch>=‘a’&&ch<=‘z’)

    ___________ch=ch-32______;

    printf("%c",ch);

    }

    23.设char s[]={"E_mail"};,则执行printf("%d\n",strlen(s));后输出的值是__6_____。

    24.有如下字符串数组的定义,char *names[] = {"Apple", "Pear", "Banana", "Peach"};sizeof(names)值是:____16___

    25.设二进制数X的值是11001101,若想通过x&y运算使X中的低4位不变,高4位清零,则y

    二进制数是_____00001111____

    26.下面程序的运行结果为__10______

    #define  ADD(x) x+x

    main()

    {    int m=1,n=2,k=3;

         int sum=ADD(m+n)*k;

       printf(“sum=%d”,sum);}

    27.下面程序的运行结果为___0 12 4______

    for(k=0;k<5;++k)

    {  if(k==3) continue;

    printf(“%d”,k);}

     

    28.C语言的源程序必须通过___编译_____和_链接________后,才能被计算机执行。

    29.设int x=3,y=5; 则执行printf("%d\n",x&&y);后输出1。

    30.若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是__3_____。 

    31.设int a=2;,则执行a+=a*=15;后,变量a的值是_____60____。 

    32.设double y[4][5];,则数组y中元素的个数是____20___。 

    33.设char s[ ]={"E_mail"};,则执行printf("%d\n",strlen(s));后输出的值是_______。

    34.有如下字符串数组的定义, char *names[] = {"Apple", "Pear", "Banana", "Peach"};

         sizeof(names)值是:_______

    35.设二进制数X的值是11001101,若想通过x&y运算使X中的低4位不变,高4位清零,则y的

    二进制数是_________

    36.下面程序的运行结果为________

    #define  ADD(x) x+x

    main()

    {         int  m=1,n=2,k=3;

        int  sum=ADD(m+n)*k;

        printf(“sum=%d”,sum);}

    37.下面程序的运行结果为_________

    for(k=0;k<5;++k)

    {   if(k==3) continue;

    printf(“%d”,k);}

     

    38.Sizeof(Struct stu)结果是__32_______

    Struct stu1

    {

      Inta;

     Char b;

     Double c;

    }

    Struct stu

    {

       Char a;

    Int b;

    Struct stu1 c;

    Double d;

    }

    39.设二进制数X的值是11001011,若想取得中间4位,该如何进行操作_________

    取反移位

     

    40.static修饰的全局变量和局部变量的意义是什么

        

    41.内存区域分为什么?哪一部分都有哪些特点?

     

    42.C语言中有哪几种存储类别?其中引用外部的全局函数的关键字是什么?

    选择题:

    1-10DDABADCCCB

    11-20CDCBACBADA

    21-30CCBADABDAA

    31-40CBBABDCAB

    转载请注明原文地址: https://ju.6miu.com/read-965565.html

    最新回复(0)