C试卷

1

假设有定义:

  1. int k;
下面程序段编译运行的情况是_____。

  1. for (k=1; k; k++)  
  2.     printf ("%d ", k);


(单选2分)
  • A.

    以上说法都不对

  • B.

    能运行, 正常结束

  • C.

    能运行, 是死循环

  • D.

    编译错误

2

循环语句

  1. while (!x&&!y)
中的循环条件表达式等价于

(单选2分)
  • A.

       !(x || y)

  • B.

    !(x==0 && y==0)

  • C.

    !(x==0 || y==0)

  • D.

    x=0 && y=0

3

对于

  1. int x, y;
语句
  1.  if (x < 0) 
  2.      y = -1; 
  3.  else if (!x) 
  4.      y = 0; 
  5.  else 
  6.      y = 1;
等价于

(单选2分)
  • A.

    1. if (x != 0) 
    2.     if (x > 0) 
    3.         y = 1; 
    4.     else 
    5.         y = -1;

  • B.

    1. y=0; 
    2. if (x!=0) 
    3.     if(x>0) 
    4.         y=1; 
    5.     else 
    6.         y=-1;

  • C.

    1. if (x>=0) 
    2.     y=0; 
    3. if(x) 
    4.     y=1; 
    5. else 
    6.     y=-1;

  • D.

    1. y=0; 
    2. if (x>=0) 
    3.     if(x) 
    4.         y=1; 
    5. else
    6.     y=-1;

4

若定义

  1. char s[2][3]={“ab”, “cd”}, *p=(char *)s;
那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是

(单选2分)
  • A.

    1. p[1][1]

  • B.

    1. *(s+3)

  • C.

    1. *++p+2

  • D.

    1. *s+2

5

要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确实现此功能的函数是

(单选2分)
  • A.

    1. void funa(int *x , int *y)
    2. {
    3.     int t = *x;
    4.     *x = *y;
    5.     *y = t;
    6. }

  • B.
    1. void funa(int *x , int *y)
    2. {
    3.     int *p;
    4.     *p=*x;*x=*y;*y=*p;
    5. }


  • C.
    1. void funa(int x , int y)
    2. {
    3.     int t;
    4.     t=x;x=y;y=t;
    5. }


  • D.
    1. int funa(int *x , int *y)
    2. {
    3.     *x=*y;*y=*x;
    4. }


6

对于如下定义:

  1. int k,a[10],*p=a;
哪个表达式是不正确的


(单选2分)
  • A.

    a++

  • B.

    a[0]=k

  • C.

    p[0]=k

  • D.

    p++

7

下列描述不正确的是

(单选2分)
  • A.

    静态本地变量定义在函数外部

  • B.

    本地变量定义在函数内部

  • C.

    静态本地变量分配在全局变量所在的地方

  • D.

    全局变量定义在函数外部

8

有如下定义:

  1. int  x[]={1,2,3},*p=x,y;
  1. y=*p++;
相当于_____

(单选2分)
  • A.

    y=2, p=x+1

  • B.

    y=*(p+1), p=p+1

  • C.

    y=1, x++

  • D.

    y=*p, p++

9

  1. while( *s++ = *t++ );
等价的程序段是

(单选2分)
  • A.

    1. while ( *t ) 
    2.    *s++ = *t++;

  • B.

    1. do 
    2.     *s++ = *t++;  
    3. while ( *t  );

  • C.
    1. while ( *s ) 
    2.     *s++ = *t++;


  • D.

    1. do 
    2.     *s = *t++;  
    3. while ( *s++ );

10

有以下结构体说明和变量定义,指针p、q、r依次指向一个链表中的三个连续结点。

  1. struct   node
  2.     int  data
  3.     struct   node   *next ;
  4. } *p,  *q,   *r;

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是


(单选2分)
  • A.

    1. q->next=r->next;  p->next=r;  r->next=q;

  • B.

    1. p->next=r;  q->next=r->next;  r->next=q;

  • C.

    1. q->next=r->next;  r->next=q;  p->next=r;

  • D.

    1. r->next=q;  q->next=r->next;  p->next=r;

11

有以下程序

  1. void WriteStr(char *fn,char *str)
  2. {
  3.     FILE *fp;
  4.     fp=fopen(fn,"w");
  5.     fprintf(fp, "%s", str);
  6.     fclose(fp);
  7. }
  8. int main()
  9. {
  10.     WriteStr("t1.dat","start");
  11.     WriteStr("t1.dat","end");
  12.     return 0;
  13. }

程序运行后,文件t1.dat中的内容是


(单选2分)
  • A.

    end

  • B.

    startend

  • C.

    start

  • D.

    endrt

12

语句

  1. while(x%3) a++;
中的表达式
  1. x%3
等价于_______.


(单选2分)
  • A.

    1. x%3==0

  • B.

    1. x%3!=0

  • C.

    1. x%3==2

  • D.

    1. x%3==1

13

当文件打开出现错误时,fopen返回的是?

(单选2分)
  • A.

    NULL

  • B.

    1

  • C.

    -1

  • D.

    没有返回就导致程序退出了

14

在一个链表中,要把s所指的一个结点插入到p所指的一个结点后面去,正确的语句是:

(单选2分)
  • A.

    1. s->next=p;  p->next=s;

  • B.

    1. s->next=p¬->next;  p=s;

  • C.

    1. p->next=s;  s->next=p;

  • D.

    1. s->next=p->next;  p->next=s;

15

下列数组定义,不正确的是 _______.


(单选2分)
  • A.

    1. int m[][3]={1,2,3,4,5,6};


  • B.

    1. int x[2][]={1,2,4,6};


  • C.

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


  • D.

    1. int a[1][3];

16

  1. for(表达式1;;表达式3)
可理解为_______.


(单选2分)
  • A.

    1. for(表达式1; 表达式3;表达式3)


  • B.

    1. for(表达式1;0;表达式3)


  • C.

    1. for(表达式1; 表达式1;表达式3)


  • D.

    1. for(表达式1;1;表达式3)


17

对于以下代码:

  1. char ch = -1;
  2. printf("%hhd\n", ch);

输出结果是?


(单选2分)
  • A.

    因为类型不匹配导致运行时刻错误

  • B.

    -1

  • C.

    255

  • D.

    65535

18

以下哪句不是正确的原型?

(单选2分)
  • A.

    1. int f(int i) {};

  • B.

    1. int f(void);

  • C.

    1. int f();

  • D.

    1. int f(int i);

19

给定以下原型:

  1. void f(double dd);

和如下变量定义:

  1. double a;

哪个函数调用是不能被编译的?


(单选2分)
  • A.

    1. f(1);

  • B.

    1. f(1u);

  • C.

    1. f(a);

  • D.

    1. f(&a);

20

以下哪个函数是不正确的(与能否被编译无关)?

(单选2分)
  • A.

    1. int* f(int *p) 
    2.     return  (int*)malloc(sizeof(int)); 
    3. }

  • B.

    1. int* f(int *p) 
    2.     int i; 
    3.     return &i; 
    4. }

  • C.

    1. int* f(int *p) 
    2.     return p; 
    3. }

  • D.

    1. int* f(int *p) 
    2.     return NULL; 
    3. }

21

执行下列代码后变量t的值是_____.

  1. #define fun(a) 4*a;
  2. int t;
  3. t=fun(1+2);


(单选2分)
  • A.

    10

  • B.

    4

  • C.

    12

  • D.

    6

22

若有定义

  1. struct 
  2.     int k; 
  3.     char s[30]; 
  4. } a[5] = {1, "ABC", 2, "abc"}, *p = a;
那么表达式*(p++)->s的值是_______.



(单选2分)
  • A.

    'A'

  • B.

    'a'

  • C.

    "abc"

  • D.

    "ABC"

23

以下哪个不是C语言的关键字?

(单选2分)
  • A.

    printf

  • B.

    struct

  • C.

    if

  • D.

    goto

24

对于以下代码:

  1. int i;
  2. for ( i=0; i<10; i++)
  3.     printf("%d", i);

for循环后,i的值是多少?


(单选2分)
  • A.

    11

  • B.

    10

  • C.

    i不再存在了

  • D.

    没有确定的值

25

以下哪个for语句是错误的?

(单选2分)
  • A.

    1. for ( i=0; j<10; j++ );

  • B.

    1. for (i=0,j=0; i<10; i++; j++ );

  • C.

    1. for (i=0; i<10, j<10; i++);

  • D.

    1. for (i=0; i<10; i--);

26

以下哪个函数不是正确的?

(单选2分)
  • A.
    1. int f() 
    2. {
    3.     return 0;
    4. }


  • B.
    1. void f(int i) 
    2.     return i;
    3. }
  • C.
    1. int f(void)
    2. {
    3.     return 0;
    4. }


  • D.
    1. void f()
    2. {
    3. }


27

给定函数原型如下:

  1. int* f(int *p);
而变量定义如下:

  1. int i;

(单选2分)
  • A.

    1. int* p = f(&i);

  • B.

    1. *f(&i) = 6;

  • C.

    1. f(&(i+6));

  • D.

    1. f(&i);

28

有以下代码片段:

  1. struct {
  2.     union {
  3.         char a,b;
  4.         int c;
  5.     } d;
  6.     int e[5];
  7. } f, *p = &f;

那么,下列语句哪个是能被编译的:


(单选2分)
  • A.

    1. p->b = ' ';

  • B.

    1. p->e[3] = 10;

  • C.

    1. p->d->c = 20;

  • D.

    1. p.d.a = '*';

29

有函数原型为

  1. void f(intint *);
,主函数中有变量定义:
  1. int a=2, *p=&a;
则下列函数调用正确的是

(单选2分)
  • A.

    1. f(p,a);

  • B.

    1. f(*p, &a);

  • C.

    1. f(a, &p);

  • D.

    1. f(a, *p);

30

若定义

  1. int k, a[10], *p=a;
那么下面表达式不能被编译的是_______.



(单选2分)
  • A.

    1. p[0] = k;

  • B.

    1. a++;

  • C.

    1. a[0] = k;

  • D.

    1. p++;

31

语句

  1. if (4/5 > 3/4) 
  2.     a=1; 
  3. else 
  4.     a=0;

运行后,a的值是


(填空2分)
32

假设字符变量ch中存放有大写英文字母,将其转换为相应的小写英文字母的表达式是(形如ch=...答案不留任何的空格,不带结尾的分号)

(填空2分)
33

下列程序段的输出是_______。

  1. #define DF(a,b)  (a+2*b) 
  2. int s=5;
  3. int k= DF(s+1,s-3);
  4. printf("%d",k);


(填空2分)
34

以下代码段的输出是:

  1. int x, y, z, w;
  2. void p(int *y, int x)
  3. {
  4.     static int w;
  5.     *y++; x++; w = x+*--y;
  6.     printf("%d#%d#%d#%d#",x,*y,z,w);
  7. }
  8. int main(void)
  9. {
  10.     int x, y, z, w;
  11.     x=y=z=w=1;
  12.     do{
  13.         static int x;
  14.         p(&x, y);
  15.         printf("%d#%d#%d#%d#",x,y,z,w);
  16.     while(0);
  17.     return 0;
  18. }


(填空2分)
35

若变量已正确定义并赋值,则表达式(-10<x<0)的值为

(填空2分)
36

   表达式

  1. (double)(10/4)
的值为


(填空2分)
37

假设sizeof(int)的值为4,对数组定义:

  1. int a[3][6];
则sizeof( a[0] )的值为______。



(填空2分)
38

写出表示“当 x 的取值在 [-10, 0]  的范围内,结果为真,否则为假”的C语言表达式,注意不要任何空格

(填空2分)
39

  1.  int a = 6, b = 0, c = 3
,则表达式
  1. a && b || b - c
的结果是(以1表示真,0表示假)

(填空2分)
40

下列程序段输出_______。

  1. int fun(int x)
  2. {
  3.    return (x<3?1:(fun(x-1)+2*fun(x-2)));
  4. }
  5. int main()
  6. {
  7.    printf("%d",fun(4)+fun(5));
  8. }


(填空2分)
41

以下代码段的输出是:

  1. char a[20]="cehiknqtw";
  2. char *s="fbla",*p;
  3. int i, j;
  4. for(p=s; *p; p++) {
  5.    j=0;
  6.    while (*p>=a[j] && a[j]!='\0') j++;
  7.    for(i=strlen(a); i>=j; i--) a[i+1] = a[i];
  8.    a[j]=*p;
  9. }
  10. printf("%s", a);


(填空2分)
42

根据下面的定义,F0(3+4)的输出结果是_______(注意没有空格)

  1. #define  F1(var)  printf("var=%d", var)
  2. #define  F0(var)  F1(var * var)


(填空2分)
43

程序T1的代码如下,则运行T1  abc  bcd  cde  aed的输出结果是_______.

  1. int main(int argc, char** argv)
  2. {
  3.     while(**argv++!='a');
  4.     printf("%s", *argv);
  5.     return 0;
  6. }


(填空2分)
44

若定义

  1. char *s1;
请写出一个不需要调用任何函数且和表达式
  1. strlen(s1)==0
等价的表达式。注意不需要任何空格,表达式的末尾不要分号

(填空2分)
45

以下代码段的输出是:

  1. int number, right_digit;
  2. number = 15292;
  3. if ( number ==0 ) {
  4.     printf("0");
  5. else
  6.     while  ( number != 0 ) {
  7.         right_digit = number % 10;
  8.         printf("%i", right_digit);
  9.         number /= 10;
  10.     }
(填空2分)
46

若有

  1. int x = 5;


  1. ! x<10

的结果(以整数表达)是

(填空2分)
47

   表达式

  1. ‘B’+‘8’-‘3’
表示的字符是

(填空2分)
48

现有

  1. int x=0,y=4;
表达式
  1. -10<x & y<0
的结果是

(填空2分)
49

以下代码的输出是 :

  1. void swap( int *pa, int *pb ) 
  2. {
  3.     int pt;
  4.     pt = *pa, *pa = *pb, *pb = *pa;
  5. }
  6. int main(void)
  7. {    
  8.     int x=1, y=2;
  9.     f(&x, &y);
  10.     printf("%d%d", x, y);
  11. }


(填空2分)
50

表达式

  1. (double)(10/4*4)
的结果是:

(填空2分)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值