C語言程式設計進階 翁愷 期末考試
新
搜尋感興趣的課程
評價課程
課程分享
微信提醒課程進度
掃碼下載APP
期末試卷
本次得分為:68.00/80.00, 本次測試的提交時間為:2018-07-14。
1
單選(3分)
關於函式指標,以下說法錯誤的是:
得分/總分
-
A.
通過函式指標呼叫函式的時候不能傳遞引數
3.00/3.00
-
B.
函式指標可以作為引數傳給一個函式
-
C.
通過函式指標可以呼叫一個函式
-
D.
函式的名字就是函式的指標值,可以賦給函式指標變數
正確答案:A你選對了
2
單選(3分)
若定義
- char s[2][3]={“ab”, “cd”}, *p=(char *)s;
那麼下列表達式語法正確,並且其值與 s[1][1]相等的表示式(並非一定與其等價)是得分/總分
-
A.
- *(p+3)
-
B.
- *(p+4)
3.00/3.00
-
C.
- *s+2
-
D.
- p[1][1]
正確答案:B你選對了
3
單選(3分)
要求函式的功能是交換x和y中的值,且通過正確呼叫返回交換結果。能正確實現此功能的函式是
得分/總分
-
A.
- void funa(int *x , int *y)
- {
- int t = *x;
- *x = *y;
- *y = t;
- }
-
B.
- void funa(int x , int y)
- {
- int t;
- t=x;x=y;y=t;
- }
-
C.
- void funa(int *x , int *y)
- {
- int *p;
- *p=*x;*x=*y;*y=*p;
- }
0.00/3.00
-
D.
- int funa(int *x , int *y)
- {
- *x=*y;*y=*x;
- }
正確答案:A你錯選為C
4
單選(3分)
對於如下定義:
- 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分)
有如下定義:
- int x[]={1,2,3},*p=x,y;
則
- 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分)
與
- while( *s++ = *t++ );
等價的程式段是得分/總分
-
A.
- while ( *t )
- *s++ = *t++;
-
B.
- do {
- *s++ = *t++;
- } while ( *t );
-
C.
- do {
- *s = *t++;
- } while ( *s++ );
3.00/3.00
-
D.
- while ( *s )
- *s++ = *t++;
正確答案:C你選對了
10
單選(3分)
有以下結構體說明和變數定義,指標p、q、r依次指向一個連結串列中的三個連續結點。
- struct node
- {
- int data
- struct node *next ;
- } *p, *q, *r;
現要將q和r所指結點的先後位置交換,同時要保持連結串列的連續,以下錯誤的程式段是
得分/總分
-
A.
- q->next=r->next; r->next=q; p->next=r;
-
B.
- r->next=q; q->next=r->next; p->next=r;
3.00/3.00
-
C.
- p->next=r; q->next=r->next; r->next=q;
-
D.
- q->next=r->next; p->next=r; r->next=q;
正確答案:B你選對了
11
單選(3分)
有以下程式
- void WriteStr(char *fn,char *str)
- {
- FILE *fp;
- fp=fopen(fn,"w");
- fprintf(fp, "%s", str);
- fclose(fp);
- }
- int main()
- {
- WriteStr("t1.dat","start");
- WriteStr("t1.dat","end");
- return 0;
- }
程式執行後,檔案t1.dat中的內容是
得分/總分
-
A.
end
3.00/3.00
-
B.
startend
-
C.
endrt
-
D.
start
正確答案:A你選對了
12
單選(3分)
在一個連結串列中,要把s所指的一個結點插入到p所指的一個結點後面去,正確的語句是:
得分/總分
-
A.
- s->next=p¬->next; p=s;
-
B.
- s->next=p->next; p->next=s;
3.00/3.00
-
C.
- s->next=p; p->next=s;
-
D.
- p->next=s; s->next=p;
正確答案:B你選對了
13
單選(3分)
以下哪個函式是不正確的(與能否被編譯無關)?
得分/總分
-
A.
- int* f(int *p)
- {
- int i;
- return &i;
- }
3.00/3.00
-
B.
- int* f(int *p)
- {
- return NULL;
- }
-
C.
- int* f(int *p)
- {
- return (int*)malloc(sizeof(int));
- }
-
D.
- int* f(int *p)
- {
- return p;
- }
正確答案:A你選對了
14
單選(3分)
執行下列程式碼後變數t的值是_____.
- #define fun(a) 4*a;
- int t;
- t=fun(1+2);
得分/總分
-
A.
12
-
B.
6
3.00/3.00
-
C.
8
-
D.
10
正確答案:B你選對了
15
單選(3分)
給定函式原型如下:
- int* f(int *p);
而變數定義如下:
- int i;
得分/總分
-
A.
- *f(&i) = 6;
-
B.
- f(&i);
-
C.
- f(&(i+6));
3.00/3.00
-
D.
- int* p = f(&i);
正確答案:C你選對了
16
單選(3分)
有以下程式碼片段:
- struct {
- union {
- char a,b;
- int c;
- } d;
- int e[5];
- } f, *p = &f;
那麼,下列語句哪個是能被編譯的:
得分/總分
-
A.
- p.d.a = '*';
-
B.
- p->d->c = 20;
-
C.
- p->e[3] = 10;
3.00/3.00
-
D.
- p->b = ' ';
正確答案:C你選對了
17
單選(3分)
有函式原型為
- void f(int, int *);
,主函式中有變數定義:
- int a=2, *p=&a;
則下列函式呼叫正確的是得分/總分
-
A.
- f(p,a);
-
B.
- f(a, &p);
-
C.
- f(a, *p);
-
D.
- f(a, p);
3.00/3.00
正確答案:D你選對了
18
單選(3分)
若定義
- int k, a[10], *p=a;
那麼下面表示式不能被編譯的是_______.
得分/總分
-
A.
- p[0] = k;
-
B.
- a[0] = k;
-
C.
- p++;
-
D.
- 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分)
表示式
- !!”2010-01-27”
的值為(以1表示真,0表示假)得分/總分
2.00/2.00
正確答案:1
22
填空(2分)
下列程式段的輸出是_______。
- #define DF(a,b) (a+2*b)
- int s=5;
- int k= DF(s+1,s-3);
- printf("%d",k);
得分/總分
2.00/2.00
正確答案:13
23
填空(2分)
以下程式碼段的輸出是:
- int x, y, z, w;
- void p(int *y, int x)
- {
- static int w;
- *y++; x++; w = x+*--y;
- printf("%d#%d#%d#%d#",x,*y,z,w);
- }
- int main(void)
- {
- int x, y, z, w;
- x=y=z=w=1;
- do{
- static int x;
- p(&x, y);
- printf("%d#%d#%d#%d#",x,y,z,w);
- } while(0);
- return 0;
- }
得分/總分
2.00/2.00
正確答案:2#0#0#2#0#1#1#1#
24
填空(2分)
假設sizeof(int)的值為4,對陣列定義:
- 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分)
若
- int a = 6, b = 0, c = 3
,則表示式
- a && b || b - c
的結果是(以1表示真,0表示假)得分/總分
2.00/2.00
正確答案:1
27
填空(2分)
以下程式碼段的輸出是:
- char a[20]="cehiknqtw";
- char *s="fbla",*p;
- int i, j;
- for(p=s; *p; p++) {
- j=0;
- while (*p>=a[j] && a[j]!='\0') j++;
- for(i=strlen(a); i>=j; i--) a[i+1] = a[i];
- a[j]=*p;
- }
- printf("%s", a);
得分/總分
2.00/2.00
正確答案:abcefhiklnqtw
28
填空(2分)
根據下面的定義,F0(3+4)的輸出結果是_______(注意沒有空格)
- #define F1(var) printf("var=%d", var)
- #define F0(var) F1(var * var)
得分/總分
2.00/2.00
正確答案:var=19
29
填空(2分)
程式T1的程式碼如下,則執行T1 abc bcd cde aed的輸出結果是_______.
- int main(int argc, char** argv)
- {
- while(**argv++!='a');
- printf("%s", *argv);
- return 0;
- }
得分/總分
2.00/2.00
正確答案:bcd
30
填空(2分)
以下程式碼的輸出是 :
- void swap( int *pa, int *pb )
- {
- int pt;
- pt = *pa, *pa = *pb, *pb = *pa;
- }
- int main(void)
- {
- int x=1, y=2;
- f(&x, &y);
- printf("%d%d", x, y);
- }
得分/總分
2.00/2.00
正確答案:22