c语言函数练习

一、单项选择题

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(“%3d”,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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值