簡介: 代理模式,是結構型的設計模式。用於為其它對象提供一種代理以控制對這個對象的訪問。 目標對象可以是遠程的對象、創建開銷大的對象或需要安全控制的對象,並且可以在不改變目標對象的情況下添加一些額外的功能。 適用場景: 調用端不想或不能直接調用的對象。 服務端不想讓調用端看到核心實現。 優點: 服務 ...
一、選擇題(每小題1分,共40分)
(1)下列關於棧敘述正確的是
A)棧頂元素最先能被刪除 B)棧頂元素最後才能被刪除
C)棧底元素永遠不能被刪除 D)以上三種說法都不對
(2)下列敘述中正確的是
A)有一個以上根結點的數據結構不一定是非線性結構
B)只有一個根結點的數據結構不一定是線性結構
C)迴圈鏈表是非線性結構
D)雙向鏈表是非線性結構
(3)某二叉樹共有7個結點,其中葉子結點只有1個,則該二叉樹的深度為(假設根結點在第1層)
A)3 B)4 C)6 D)7
(4)在軟體開發中,需求分析階段產生的主要文檔是
A)軟體集成測試計劃 B)軟體詳細設計說明書
C)用戶手冊 D)軟體需求規格說明書
(5)結構化程式所要求的基本結構不包括
A)順序結構 B)GOTO跳轉 C)選擇(分支)結構 D)重覆(迴圈)結構
(6)下列描述中錯誤的是
A)系統總體結構圖支持軟體系統的詳細設計
B)軟體設計是將軟體需求轉換為軟體表示的過程
C)數據結構與資料庫設計是軟體設計的任務之一
D)PAD圖是軟體詳細設計的表示工具
(7)負責資料庫中查詢操作的資料庫語言是
A)數據定義語言 B)數據管理語言 C)數據操縱語言 D)數據控制語言
(8)一個教師可講授多門課程,一門課程可由多個教師講授。則實體教師和課程間的聯繫是
A)1:1聯繫 B)1:m聯繫 C)m:1聯繫 D)m:n聯繫
(9)有三個關係R、S和T如下:
則由關係R和S得到關係T的操作是A)自然連接 B)交 C)除 D)並
(10)定義無符號整數類為UInt,下麵可以作為類UInt實例化值的是
A)-369 B)369 C)0.369 D)整數集合{1,2,3,4,5}
(11)電腦高級語言程式的運行方法有編譯執行和解釋執行兩種,以下敘述中正確的是
A)C語言程式僅可以編譯執行
B)C語言程式僅可以解釋執行
C)C語言程式既可以編譯執行又可以解釋執行
D)以上說法都不對
(12)以下敘述中錯誤的是
A)C語言的可執行程式是由一系列機器指令構成的
B)用C語言編寫的源程式不能直接在電腦上運行
C)通過編譯得到的二進位目標程式需要連接才可以運行
D)在沒有安裝C語言集成開發環境的機器上不能運行C源程式生成的.exe文件
(13)以下選項中不能用作C程式合法常量的是
A)1,234 B)'123' C)123 D)"\x7G"
(14)以下選項中可用作C程式合法實數的是
A).1e0 B)3.0e0.2 C)E9 D)9.12E
(15)若有定義語句:int a=3,b=2,c=1;,以下選項中錯誤的賦值表達式是
A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4);
(16)有以下程式段
char name[20];
int num;
scanf("name=%s num=%d",name,&num);
當執行上述程式段,並從鍵盤輸入:name=Lili num=1001<回車>後,name的值為
A)Lili B)name=Lili
C)Lili num= D)name=Lili num=1001
(17)if語句的基本形式是:if (表達式) 語句,以下關於“表達式”值的敘述中正確的是
A)必須是邏輯值 B)必須是整數值
C)必須是正數 D)可以是任意合法的數值
(18)有以下程式
#include <stdio.h>
main()
{ int x=011;
printf("%d\n",++x);
}
程式運行後的輸出結果是
A) 9 B) 10 C) 11 D) 12
(19)有以下程式
#include <stdio.h>
main()
{ int s;
scanf("%d",&s);
while (s>0)
{ switch(s)
{ case1:printf("%d",s+5);
case2:printf("%d",s+4); break;
case3:printf("%d",s+3);
default:printf("%d",s+1);break;
}
scanf("%d",&s);
}
}
運行時,若輸入1 2 3 4 5 0<回車>,則輸出結果是
A)6566456 B)66656 C)66666 D)6666656
(20)有以下程式段
int i,n;
for (i=0;i<8;i++)
{ n=rand()%5;
switch (n)
{ case 1:
case 3:printf("%d\n",n); break;
case 2:
case 4:printf("%d\n",n); continue;
case 0:exit(0);
}
printf("%d\n",n);
}
以下關於程式段執行情況的敘述,正確的是
A)for迴圈語句固定執行8次
B)當產生的隨機數n為4時結束迴圈操作
C)當產生的隨機數n為1和2時不做任何操作
D)當產生的隨機數n為0時結束程式運行
(21)有以下程式
#include <stdio.h>
main()
{ char s[]="012xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>='0' && s[i]<='9') n++;
printf("%d\n",n);
}
程式運行後的輸出結果是
A)0 B)3 C)7 D)8
(22)若i和k都是int類型變數,有以下for語句
for(i=0,k=-1;k=1;k++) printf("*****\n");
下列關於語句執行情況的敘述中正確的是
A)迴圈體執行兩次 B)迴圈體執行一次
C)迴圈體一次也不執行 D)構成無限迴圈
(23)有以下程式
#include <stdio.h>
main()
{ char b,c; int i;
b='a'; c='A';
for(i=0;i<6;i++)
{ if(i%2) putchar(i+b);
else putchar(i+c);
}
printf("\n");
}
程式運行後的輸出結果是
A)ABCDEF B)AbCdEf C)aBcDeF D)abcdef
(24)設有定義:double x[10],*p=x;,以下能給數組x下標為6的元素讀入數據的正確語句是
A)scanf("%f",&x[6]); B)scanf("%lf",*(x+6));
C)scanf("%lf",p+6); D)scanf("%lf",p[6]);
(25)有以下程式(說明:字母A的ASCII碼值是65)
#include <stdio.h>
void fun(char *s)
{ while(*s)
{ if(*s%2) printf("%c",*s);
s++;
}
}
main()
{ char a[]="BYTE";
fun(a); printf("\n");
}
程式運行後的輸出結果是
A)BY B)BT C)YT D) YE
(26)有以下程式段
#include <stdio.h>
main()
{ …
while( getchar()!='\n');
…
}
以下敘述中正確的是
A)此while語句將無限迴圈
B) getchar()不可以出現在while語句的條件表達式中
C)當執行此while語句時,只有按回車鍵程式才能繼續執行
D)當執行此while語句時,按任意鍵程式就能繼續執行
(27)有以下程式
#include <stdio.h>
main()
{ int x=1,y=0;
if(!x) y++;
else if(x==0)
if (x) y+=2;
else y+=3;
printf("%d\n",y);
}
程式運行後的輸出結果是
A)0 B)1 C)2 D)3
(28)若有定義語句:char s[3][10],(*k)[3],*p;,則以下賦值語句正確的是
A)p=s; B)p=k; C)p=s[0]; D)k=s;
(29)有以下程式
#include <stdio.h>
void fun(char *c)
{ while(*c)
{ if(*c>='a'&&*c<='z') *c=*c-('a'-'A');
c++;
}
}
main()
{ char s[81];
gets(s); fun(s); puts(s);
}
當執行程式時從鍵盤上輸入Hello Beijing<回車>,則程式的輸出結果是
A)hello beijing B)Hello Beijing C)HELLO BEIJING D)hELLO Beijing
(30)以下函數的功能是:通過鍵盤輸入數據,為數組中的所有元素賦值。
#include <stdio.h>
#define N 10
void fun(int x[N])
{ int i=0;
while(i<N) scanf(“%d”,________);
}
在程式中下劃線處應填入的是
A)x+i B)&x[i+1] C)x+(i++) D)&x[++i]
(31)有以下程式
#include <stdio.h>
main()
{ char a[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n %s\n",a,b);
}
程式運行時若輸入:
how are you? I am fine<回車>
則輸出結果是
A)how are you? B)how
I am fine are you? I am fine
C)how are you? I am fine D)how are you?
(32)設有如下函數定義
int fun(int k)
{ if (k<1) return 0;
else if(k==1) return 1;
else return fun(k-1)+1;
}
若執行調用語句:n=fun(3);,則函數fun總共被調用的次數是
A)2 B)3 C)4 D)5
(33)有以下程式
#include <stdio.h>
int fun (int x,int y)
{ if (x!=y) return ((x+y)/2);
else return (x);
}
main()
{ int a=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程式運行後的輸出結果是
A)3 B)6 C)8 D)12
(34)有以下程式
#include <stdio.h>
int fun()
{ static int x=1;
x*=2;
return x;
}
main()
{ int i,s=1;
for(i=1;i<=3;i++) s*=fun();
printf("%d\n",s);
}
程式運行後的輸出結果是
A)0 B) 10 C)30 D)64
(35)有以下程式
#include <stdio.h>
#define S(x) 4*(x)*x+1
main()
{ int k=5,j=2;
printf("%d\n",S(k+j));
}
程式運行後的輸出結果是
A) 28 B) 33 C) 143 D) 197
(36)設有定義:struct { char mark[12];int num1;double num2;} t1,t2;,若變數均已正確賦初值,則以下語句中錯誤的是
A)t1=t2; B)t2.num1=t1.num1;
C)t2.mark=t1.mark; D)t2.num2=t1.num2;
(37)有以下程式
#include <stdio.h>
struct ord
{ int x,y;}dt[2]={1,2,3,4};
main()
{
struct ord *p=dt;
printf("%d,",++(p->x)); printf("%d\n",++(p->y));
}
程式運行後的輸出結果是
A)1,2 B) 2,3 C)3,4 D) 4,1
(38)有以下程式
#include <stdio.h>
struct S
{ int a,b;}data[2]={10,100,20,200};
main()
{ struct S p=data[1];
printf("%d\n",++(p.a));
}
程式運行後的輸出結果是
A)10 B)11 C)20 D)21
(39)有以下程式
#include <stdio.h>
main()
{ unsigned char a=8,c;
c=a>>3;
printf("%d\n",c);
}
程式運行後的輸出結果是
A) 0 B)1 C)16 D) 32
(40)設fp已定義,執行語句fp=fopen("file","w");後,以下針對文本文件file操作敘述的選項中正確的是
A)寫操作結束後可以從頭開始讀 B)只能寫不能讀
C)可以在原有內容後追加寫 D)可以隨意讀和寫
二、程式填空題(18分)
下列給定程式中,函數fun的功能是:統計所有小於等於n(n>2)的素數的個數,素數的個數作為函數值返回。
請在程式的下畫線處填入正確的內容並把下畫線刪除,使程式得出正確的結果。
註意:部分源程式在文件BLANK1.C中。不得增行或刪行,也不得更改程式的結構!
試題程式:
#include <stdio.h> int fun(int n) { int i,j, count=0; printf("\nThe prime number between 3 to %d\n", n); for (i=3; i<=n; i++) { /**********found**********/ for (___1___; j<i; j++) /**********found**********/ if (___2___%j == 0) break; /**********found**********/ if (___3___>=i) { count++; printf( count%15? "%5d":"\n%5d",i); } } return count; } int main() { int n=20, r; r = fun(n); printf("\nThe number of prime is : %d\n", r); return 0; }
三、程式修改題(18分)
下列給定程式中函數fun的功能是:用選擇法對數組中的n個元素進行升序排列。
請修改程式中的錯誤,使它能得出正確的結果。
註意:部分源程式在文件MODI1.C中,不得增行和刪行,也不得更改程式的結構!
試題程式:
#include <stdio.h> #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /************found************/ p = j for (i = j;i < n; i++) if(a[i] < a[p]) /************found************/ p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } } int main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的數據:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序後的數據:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); return 0; }
四、程式設計題:
請編寫函數fun,其功能是:計算並輸出下列多項式的值,
S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)
例如,若主函數從鍵盤給n輸入8後,則輸出為S=0.662872。
註意:要求n的值大於1但不大於100。部分源程式在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括弧中填入你編寫的若幹語句。
試題程式:
#include <stdio.h> double fun(int n) { } int main() { int n; double s; void NONO( ); printf("Input n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); NONO(); return 0; } void NONO() { int n, i ; double s ; for(i = 0 ; i < 10 ; i++) { s = fun(n) ; } }
一、選擇題 ( 1)~(10) :ABDDB ACDCB (11)~(20) : ADAAA ADBAD (21)~(30) : BDBCD CACCC (31)~(40) : BBBDC CBDBB 二、程式填空題 (1) j-2 (2) i (3) j 三、程式改錯題 (1) p=j; (2) p=i; 四、程式設計題 int i; double s=0.0; for (i=1;i<=n;i++) s=s+1.0/(2*i-1)-1.0/(2*i); return s;參考答案: