C语言程序设计进阶 翁恺 期末考试

课程

名校

学校云

2019考研

学 · 问 

客户端

搜索感兴趣的课程

个人中心

C语言程序设计进阶 翁恺 期末考试_第1张图片

浙江大学

C语言程序设计进阶

申请认证证书

翁恺

评价课程

  • 公告
  • 评分标准
  • 课件
  • 测验与作业
  • 考试
  • 讨论区

课程分享

微信提醒课程进度

扫码下载APP

帮助中心

期末试卷

返回

本次得分为:68.00/80.00, 本次测试的提交时间为:2018-07-14

1

单选(3分)

关于函数指针,以下说法错误的是:

得分/总分

  • A.

    通过函数指针调用函数的时候不能传递参数

    3.00/3.00

  • B.

    函数指针可以作为参数传给一个函数

  • C.

    通过函数指针可以调用一个函数

  • D.

    函数的名字就是函数的指针值,可以赋给函数指针变量

正确答案:A你选对了

2

单选(3分)

若定义

  1. char s[2][3]={“ab”, “cd”}, *p=(char *)s;

那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是得分/总分

  • A.

     

    1. *(p+3)

     

  • B.

     

    1. *(p+4)

     

    3.00/3.00

  • C.

     

    1. *s+2

     

  • D.

     

    1. p[1][1]

     

正确答案:B你选对了

3

单选(3分)

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

得分/总分

  • 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 t;
    4.     t=x;x=y;y=t;
    5. }

     

  • C.

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

     

    0.00/3.00

  • D.

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

     

正确答案:A你错选为C

4

单选(3分)

对于如下定义:

 

  1. int k,a[10],*p=a;

哪个表达式是不正确的

 

得分/总分

  • A.

    p++

  • B.

    p[0]=k

  • C.

    a++

    3.00/3.00

  • D.

    *p++=2

正确答案:C你选对了

5

单选(3分)

下列描述不正确的是

得分/总分

  • A.

    全局变量定义在函数外部

  • B.

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

    0.00/3.00

  • C.

    全局变量定义在函数内部

  • D.

    本地变量定义在函数内部

正确答案:C你错选为B

6

单选(3分)

有如下定义:

  1. int  x[]={1,2,3},*p=x,y;

  1. y=*p++;

相当于_____得分/总分

  • A.

    y=x[0], p++

  • B.

    y=2, p=x+1

  • C.

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

    0.00/3.00

  • D.

    y=2, p=&x[1]

正确答案:A你错选为C

7

单选(3分)

若声明函数

int* func(void);

则函数fun的返回值为:

 

得分/总分

  • A.

    一个整数

  • B.

    一个整型函数的入口地址

  • C.

    一个指向整型变量的指针

    3.00/3.00

  • D.

    一个指向整型函数的指针

正确答案:C你选对了

8

单选(3分)

关于#include,以下说法正确的是

得分/总分

  • A.

    #include 是错误的,因为没有了.h后缀

  • B.

    #include 就把stdio库引入到了程序中

    0.00/3.00

  • C.

    #include "xx.h"只在当前目录搜索xx.h

  • D.

    #include 只在编译器被指定的目录中搜索xx.h

正确答案:D你错选为B

9

单选(3分)

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

等价的程序段是得分/总分

  • A.

     

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

     

  • B.

     

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

     

  • C.

     

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

     

    3.00/3.00

  • D.

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

     

正确答案:C你选对了

10

单选(3分)

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

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

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

 

得分/总分

  • A.

     

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

     

  • B.

     

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

     

    3.00/3.00

  • C.

     

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

     

  • D.

     

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

     

正确答案:B你选对了

11

单选(3分)

有以下程序

  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中的内容是

 

得分/总分

  • A.

    end

    3.00/3.00

  • B.

    startend

  • C.

    endrt

  • D.

    start

正确答案:A你选对了

12

单选(3分)

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

 

得分/总分

  • A.

     

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

     

  • B.

     

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

     

    3.00/3.00

  • C.

     

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

     

  • D.

     

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

     

正确答案:B你选对了

13

单选(3分)

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

得分/总分

  • A.

     

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

     

    3.00/3.00

  • B.

     

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

     

  • C.

     

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

     

  • D.

     

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

     

正确答案:A你选对了

14

单选(3分)

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

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

 

得分/总分

  • A.

    12

  • B.

    6

    3.00/3.00

  • C.

    8

  • D.

    10

正确答案:B你选对了

15

单选(3分)

给定函数原型如下:

 

  1. int* f(int *p);

而变量定义如下:

 

  1. int i;

得分/总分

  • A.

     

    1. *f(&i) = 6;

     

  • B.

     

    1. f(&i);

     

  • C.

     

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

     

    3.00/3.00

  • D.

     

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

     

正确答案:C你选对了

16

单选(3分)

有以下代码片段:

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

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

 

得分/总分

  • A.

     

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

     

  • B.

     

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

     

  • C.

     

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

     

    3.00/3.00

  • D.

     

    1. p->b = ' ';

     

正确答案:C你选对了

17

单选(3分)

有函数原型为

  1. void f(int, int *);

,主函数中有变量定义:

  1. int a=2, *p=&a;

则下列函数调用正确的是得分/总分

  • A.

     

    1. f(p,a);

     

  • B.

     

    1. f(a, &p);

     

  • C.

     

    1. f(a, *p);

     

  • D.

     

    1. f(a, p);

     

    3.00/3.00

正确答案:D你选对了

18

单选(3分)

若定义

  1. int k, a[10], *p=a;

那么下面表达式不能被编译的是_______.

 

 

得分/总分

  • A.

     

    1. p[0] = k;

     

  • B.

     

    1. a[0] = k;

     

  • C.

     

    1. p++;

     

  • D.

     

    1. a++;

     

    3.00/3.00

正确答案:D你选对了

19

单选(3分)

用typedef来定义一个函数指针类型PunPtr,它表示的是指向形如void func(int x)的函数,以下正确的表达是: 

 

得分/总分

  • A.

    typedef FunPtr fun(int x);

  • B.

    typedef void (*FunPtr)( );

  • C.

    typedef void FunPtr(int x);

  • D.

    typedef void (*FunPtr)(int);

    3.00/3.00

正确答案:D你选对了

20

单选(3分)

在课程的图形库中,关于printf的问题,以下说法正确的是: 

 

得分/总分

  • A.

    如果调用了InitConsole()函数,printf会显示在专门的终端窗口上,否则不会输出任何东西。

    3.00/3.00

  • B.

    printf会自动打开一个文本窗口显示内容

  • C.

    printf会在图形窗口的当前位置显示内容

  • D.

    printf不会输出任何东西

正确答案:A你选对了

21

填空(2分)

表达式

  1. !!”2010-01-27”

的值为(以1表示真,0表示假)得分/总分

 

 2.00/2.00

正确答案:1

22

填空(2分)

下列程序段的输出是_______。

  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.00/2.00

正确答案:13

23

填空(2分)

以下代码段的输出是:

  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.00/2.00

正确答案:2#0#0#2#0#1#1#1#

24

填空(2分)

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

  1. int a[3][6];

则sizeof( a[0] )的值为______。

 

 

得分/总分

 

 2.00/2.00

正确答案:24

25

填空(2分)

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

得分/总分

 

 2.00/2.00

正确答案:x>=-10&&x<=0 或 x<=0&&x>=-10 或 !(x<-10||x>0)

26

填空(2分)

  1.  int a = 6, b = 0, c = 3

,则表达式

  1. a && b || b - c

的结果是(以1表示真,0表示假)得分/总分

 

 2.00/2.00

正确答案:1

27

填空(2分)

以下代码段的输出是:

  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.00/2.00

正确答案:abcefhiklnqtw

28

填空(2分)

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

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

 

得分/总分

 

 2.00/2.00

正确答案:var=19

29

填空(2分)

程序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.00/2.00

正确答案:bcd

30

填空(2分)

以下代码的输出是 :

  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.00/2.00

正确答案:22

你可能感兴趣的:(慕课C语言)