1. 程式人生 > >C語言程式設計進階 翁愷 期末考試

C語言程式設計進階 翁愷 期末考試

課程

名校

學校雲

學 · 問 

客戶端

搜尋感興趣的課程

個人中心

58442162

浙江大學

翁愷

評價課程

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 <xx>是錯誤的,因為沒有了.h字尾

  • B.

    #include <stdio.h>就把stdio庫引入到了程式中

    0.00/3.00

  • C.

    #include "xx.h"只在當前目錄搜尋xx.h

  • D.

    #include <xx.h>只在編譯器被指定的目錄中搜索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