簡介: 註冊樹模式,屬於結構型的設計模式。一種很簡單的設計模式 適用場景: 類似IOC。寫一個龐大的類庫的時候,為了方便各種資源的歸納,可以統一放到一棵樹上。 優點: 把一個個游兵散將一樣的對象進行統一管理。 另外可以根據項目的業務場景自定義層級。 缺點: 增加項目的複雜性。 純粹的註冊樹寫法,缺少 ...
一、選擇題(每小題1分,共40分)
(1)數據的存儲結構是指
A)存儲在外存中的數據
B)數據所占的存儲空間量
C)數據在電腦中的順序存儲方式
D)數據的邏輯結構在電腦中的表示
(2)下列關於棧的描述中,錯誤的是
A)棧是先進後出的線性表
B)棧只能順序存儲
C)棧具有記憶作用
D)對棧的插入與刪除操作中,不需要改變棧底指針
(3)對於長度為n的線性表,在最壞情況下,下列各排序法所對應的比較次數中正確的是
A)冒泡排序為n/2 B)冒泡排序為n
C)快速排序為n D)快速排序為n(n-1)/2
(4)對長度為n的線性表進行順序查找,在最壞情況下所需要的比較次數為
A)log2n B) n/2 C) n D) n+1
(5)下列對於線性鏈表的描述中正確的是
A)存儲空間不一定是連續,且各元素的存儲順序是任意的
B)存儲空間不一定是連續,且前件元素一定存儲在後件元素的前面
C)存儲空間必須連續,且前件元素一定存儲在後件元素的前面
D)存儲空間必須連續,且各元素的存儲順序是任意的
(6)下列對於軟體的描述中正確的是
A)軟體測試的目的是證明程式是否正確
B)軟體測試的目的是使程式運行結果正確
C)軟體測試的目的是儘可能多地發現程式中的錯誤
D)軟體測試的目的是使程式符合結構化原則
(7)為了使模塊儘可能獨立,要求
A)模塊的內聚程式要儘量高,且各模塊間的耦合程式要儘量強
B)模塊的內聚程式要儘量高,且各模塊間的耦合程式要儘量弱
C)模塊的內聚程式要儘量低,且各模塊間的耦合程式要儘量弱
D)模塊的內聚程式要儘量低,且各模塊間的耦合程式要儘量強
(8)下列描述中正確的是
A)程式就是軟體
B)軟體開發不受電腦系統的限制
C)軟體既是邏輯實體,又是物理實體
D)軟體是程式、數據與相關文檔的集合
(9)數據獨立性是資料庫技術的重要特點之一。所謂數據獨立性是指
A)數據與程式獨立存放
B)不同的數據被存放在不同的文件中
C)不同的數據只能被對應的應用程式所使用
D)數據與程式間的互不依賴性,包括數據的物理獨立性和數據的邏輯獨立性
(10)用樹形結構表示實體之間聯繫的模型是
A)關係模型 B)網狀模型 C)層次模型 D)面向對象模型
(11)以下選項中可作為C語言合法常量的是
A)-80 B)-080 C)-8e1.0 D)-80.0e
(12)以下敘述中,正確的是
A)用C程式實現的演算法必須要有輸入和輸出操作
B)用C程式實現的演算法可以沒有輸出但必須要有輸入
C)用C程式實現的演算法可以沒有輸入但必須要有輸出
D)用C程式實現的演算法可以既沒有輸入也沒有輸出
(13)以下不能定義為用戶標識符的是
A)Main B)_0 C)_int D)sizeof
(14)以下選項中,不能作為合法常量的是
A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0
(15)數字字元0的A SCII值為48,若有以下程式
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
程式運行後的輸出結果是
A)2,2 B)3,2 C)2,50 D)50,2
(16)有以下程式
main()
{ int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程式運行後的輸出結果是
A)12353514 B)12353513 C)12343514 D)12343513
(17)有定義語句:int b; char c[10]; ,則正確的輸入語句是
A)scanf("%d%s",&b,&c); B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c); D)scanf("%d%s",b,&c);
(18)有以下程式
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想從鍵盤上輸入數據,使變數m中的值為123,n中的值為456,p中的值為789,則正確的輸入是
A)m=123n=456p=789 B)m=123 n=456 p=789
C)m=123,n=456,p=789 D)123 456 789
(19)有以下程式
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
}
程式運行後的輸出結果是
A)2,0 B)2,1 C)6,0 D)6,1
(20)有以下程式
main()
{ int i=1,j=2,k=3;
if (i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程式運行後的輸出結果是
A)1 2 3 B)2 3 4 C)2 2 3 D)2 3 3
(21)若整型變數a、b、c、d中的值依次為:1、4、3、2。則條件表達式a<b?a:c<d?c:d的值
A)1 B)2 c)3 D)4
(22)有以下程式
main()
{ char a[7]="a0\0a0\0";int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d\n",i,j);
}
程式運行後的輸出結果是
A)2 2 B)6 2 C)7 2 D)7 6
(23)有以下程式
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
程式運行後的輸出結果是
A)42 B)45 C)56 D)60
(24)以下能正確定義一維數組的選項是
A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5};
C)char a={'A','B','C'}; D)int a[5]="0123";
(25)有以下程式
int f1(int x,int y) {return x>y?x:y;}
int f2(int x,int y) {return x>y?y:x;}
main()
{ int a=4,b=3,c=5,d=2,e,f;
e=f2(f1(a,b),f1(c,d));
f=f1(f2(a,b),f2(c,d));
printf("%d,%d\n",e,f);
}
程式運行後的輸出結果是
A)2,5 B)3,4 C)4,3 D)5,2
(26)有以下程式
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;
}
main()
{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}
for(i=0;i<8;i++)
printf("%d,",a[i]);
}
程式運行後的輸出結果是
A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4,
C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,1,
(27)有以下程式
main()
{
int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i;
for(i=0;i<3;i++)
printf("%d ",a[1][i]);
}
程式運行後的輸出結果是
A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5
(28)以下敘述中錯誤的是
A)對於double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B)數組名代表的是數組所占存儲區的首地址,其值不可改變
C)當程式執行中,數組元素的下標超出所定義的下標範圍時,系統將給出“下標越界”的出錯信息
D)可以通過賦初值的方式確定數組元素的個數
(29)有以下程式
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);
}
程式運行後的輸出結果是
A)10234 B)12234 C)12334 D)12344
(30)有以下程式
main()
{
int c=35; printf("%d\n",c&c);
}
程式運行後的輸出結果是
A) 0 B) 1 C) 35 D) 70
(31)程式中若有如下的說明和定義語句
char fun(char *);
main()
{
char *s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下選項中,對函數fun的正確調用語句是
A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*f1(s)
(32)以下敘述中,正確的是
A)預處理命令行必須位於源文件的開頭
B)在源文件的一行上可以有多條預處理命令
C)巨集名必須用大寫字母表示
D)巨集替換不占用程式的運行時間
(33)若有以下說明和定義
union dt
{
int a; char b; double c;
}data;
以下敘述中錯誤的是
A)data的每個成員起始地址都相同
B)變數data所占記憶體位元組數與成員c所占位元組數相等
C)程式段:data.a=5; printf("%f\n",data.c);輸出結果為5.000000
D)data可以作為函數的實參
(34)以下語句或語句組中,能正確進行字元串賦值的是
A)char *sp; *sp="right!"; B)char s[10]; s="right!";
C)char s[10]; *s="right!"; D)char *sp="right!";
(35)有以下程式
main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8) break;
if(a%2==1) { a+=5; continue;}
a-=3;
}
printf("%d\n",b);
}
程式運行後的輸出結果是
A)3 B)4 C)5 D)6
(36)有以下程式
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}
程式運行後的輸出結果是
A)12 B)15 C)16 D)59
(37)有以下函數
fun(char *a,char *b)
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{ a++; b++;}
return (*a-*b);
}
該函數的功能是
A)計算a和b所指字元串的長度之差
B)將b所指字元串複製到a所指字元串中
C)將b所指字元串連接到a所指字元串後面
D)比較a和b所指字元串的大小
(38)有以下結構體說明和變數定義,如圖所示,指針pqr分別指向此鏈表中三個連續結點。
struct node
{
int data;
struct node *next;
} *p,*q,*r;
現要將q所指結點從鏈表中刪除,同時保持鏈表的連續,以下不能完成指定操作的語句是
A)p->next=q->next; B)p->next=p->next->next;
C)p->next=r; D)p=q->next;
(39)以下與函數fseek(fp,0L,SEEK_SET)有相同作用的是
A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp)
(40)有以下程式
#include "stdio.h"
void WriteStr(char *fn,char *str)
{
FILE *fp;
fp=fopen(fn,"W");
fputs(str,fp);
fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程式運行後,文件t1.dat中的內容是
A)start B)end C)startend D)endrt
二、程式填空題(18分)
函數fun的功能是:計算
的前n項。若x=2.5,函數值為12.182340。
請在程式的下畫線處填入正確的內容並把下畫線刪除,使程式得出正確的結果。
註意:部分源程式在文件BLANK1.C中。不得增行或刪行,也不得更改程式的結構。
試題程式:
#include <stdio.h> double fun(double x, int n) { double f, t; int i; f = 1.0; /**********found**********/ t=___1___; /**********found**********/ for(i=___2___;i<n;i++) { /**********found**********/ t*=x/___3___; f += t; } return f; } int main() { double x, y; x=2.5; y = fun(x, 12); printf("The result is :\n"); printf("x=%-12.6f,y=%-12.6f\n", x, y); return 0; }
三、程式修改題(18分)
下列給定程式中fun函數功能是:將n個無序整數從小到大排序。請改正程式中的錯誤,使它能得出正確的結果。註意:部分源程式在文件MODI1.C中,不得增行或刪行,也不得更改程式的結構!
試題程式:
#include <stdio.h> #include <stdlib.h> fun ( int n, int *a ) { int i, j, p, t; for ( j = 0; j<n-1 ; j++ ) { p = j; /************found************/ for (i=j+1; i<n-1 ; i++ ) if ( a[p]>a[i] ) /************found************/ t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } void putarr( int n, int *z ) { int i; for ( i = 1; i <= n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" ); } printf("\n"); } int main() { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; printf( "Before sorting %d numbers:\n", n ); putarr( n, aa ); fun( n, aa ); printf( "After sorting %d numbers:\n", n ); putarr( n, aa ); return 0; }
四、程式設計題(24分)
編寫函數int fun(int lim, int aa[MAX]),其功能是求出小於或等於lim的所有素數並放在aa數組中,並返回所求出的素數的個數。
註意:部分源程式在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括弧中填入你編寫的若幹語句。
試題程式:
#include<conio.h> #include<stdio.h> #include<stdlib.h> #define MAX 100 int fun(int lim, int aa[MAX]) { } void main() { FILE *wf; int limit,i,sum; int aa[MAX]; system("CLS"); printf("輸入一個整數:"); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i<sum;i++) { if(i%10==0&&i!=0) /*每行輸出10個數*/ printf("\n "); printf("%5d ",aa[i]); } wf=fopen("out.dat","w"); sum=fun(15,aa); for(i=0;i<sum;i++) { if(i%10==0&&i!=0) /*每行輸出10個數*/ fprintf(wf,"\n"); fprintf(wf,"%5d ",aa[i]); } fclose(wf); }
一、選擇題 ( 1)~(10):D B D C A C B D D C (11)~(15):A C D B A A B A B D (21)~(30):A C B B C D D C C C (31)~(40):A D C D B B D D D B 二、程式填空題 (1) 1.0 (2) 1 (3)i 三、程式改錯題 (1)錯誤: for (i=j+1; i<n-1 ; i++ ) 正確: for (i=j+1; i<n ; i++ ) (2)錯誤: t=i; 正確: p=i; 四、程式設計題 int i,j,k=0; for (i=2;i<=lim;i++) { for (j=2;j<i;j++) if (i%j==0) break; if (j>=i) aa[k++]=i; } return k;參考答案: