6.2 筆試真題 & 詳解
注:對(duì)于有C和JAVA選擇的試題,考生可以選擇其中一種解答,請(qǐng)?jiān)诖痤}卡中標(biāo)明。即選擇C語言試題解答,則解答的JAVA試題不計(jì)分;選擇JAVA語言,解答的C語言試題不計(jì)分。
一、 填空題,共52分,每空2分
1.在計(jì)算機(jī)中,最適合進(jìn)行數(shù)字加減運(yùn)算的數(shù)字編碼是____,最適合表示浮點(diǎn)數(shù)階碼的數(shù)字編碼是______。
2.如果主存容量為16M字節(jié),且按字節(jié)編址,表示該主存地址至少應(yīng)需要__位。
3.中斷響應(yīng)時(shí)間是指_________________________________。
4.表達(dá)式a*(b+c)-d的后綴表達(dá)形式為_________。
5.若二叉樹的先序遍歷序列為ABDECF,中序遍歷序列DBEAFC,則其后序遍歷序列為____________。
6.以比較為基礎(chǔ)的排序算法在最壞情況下的計(jì)算時(shí)間下界為________。
7.若廣義表L=((1,2,3)),則L的深度為______。
8.某雙向鏈表中的結(jié)點(diǎn)如下圖所示,刪除t所指結(jié)點(diǎn)的操作為________。
9.在_____存儲(chǔ)結(jié)構(gòu)中,數(shù)據(jù)結(jié)構(gòu)中元素的存儲(chǔ)地址與其關(guān)鍵字之間存在某種映射關(guān)系。
10.在TCP/IP網(wǎng)絡(luò)中,為各種公共服務(wù)保留的端口號(hào)范圍是_____。
11.OSI傳統(tǒng)7層指的是:物理層、數(shù)據(jù)鏈路層、_____、傳輸層、話路層、_____和應(yīng)用層。
12.關(guān)系模式R(U,F(xiàn)),其中U=(W,X,Y,Z),F={WX→Y,W→X,X→Z,yVw}。關(guān)系模式R的候選碼是_______,_____是無損連接并保持函數(shù)依賴的分解。
13.軟件設(shè)計(jì)的主要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu)、過程和模塊,其中軟件結(jié)構(gòu)設(shè)計(jì)的主要任務(wù)是要確定_____。
14.常見的軟件開發(fā)模型有瀑布模型、演化模型、螺旋模型、噴泉模型等。其中______模型適用于需求明確或很少變更的項(xiàng)目,______模型主要用來描述面向?qū)ο蟮能浖_發(fā)過程。
15.在UML提供的圖中,______用于描述系統(tǒng)與外部系統(tǒng)及用戶之間的交互;______用于按時(shí)間順序描述對(duì)象間的交互。
【C語言】:
16.設(shè)有定義語句int(*f)(int);則f是____________。
17.函數(shù)調(diào)用語句:func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)))中func函數(shù)的實(shí)參個(gè)數(shù)是____________。
18.變量a中的數(shù)據(jù)用二進(jìn)制表示的形式是01011101,變量b中的數(shù)據(jù)用二進(jìn)制表示的形式是11110000,若要求將a的高4位取反,低4位不變,所要執(zhí)行運(yùn)算是______。
19.設(shè)fp為指向某二進(jìn)制文件的指針,且已讀到此文件末尾,則函數(shù)feof(fp)的返回值為____________。
20.已有定義:double*p;請(qǐng)寫出完整的語句,利用malloc函數(shù)使p指向一個(gè)雙精度型的動(dòng)態(tài)存儲(chǔ)單元______。
21.C程序經(jīng)過編譯、______步驟之后才能形成一個(gè)真正可執(zhí)行的二進(jìn)制機(jī)器指令文件。
【JAVA】:
16.FileInputStream是字節(jié)流;BufferedWriter是字符流;ObjectOutputStream是____________。
17.保證JAVA語言可移植性的特征是____________。
18.如果有一個(gè)類MyFrame是Frame的子類,能夠被不同包中的類所使用,請(qǐng)寫出該類的聲明頭:______。
19.在java中,用package語句說明一個(gè)包時(shí),該包的層次結(jié)構(gòu)必須與______相同。
20.在java中,能實(shí)現(xiàn)多重繼承效果的方式是______。
21.線程在生命周期中要經(jīng)歷5狀態(tài),分別是新建狀態(tài)、可運(yùn)行狀態(tài)、運(yùn)行狀態(tài)、______狀態(tài)和終止?fàn)顟B(tài)。
二、選擇題,共8分,每空1分
1.采用順序搜索方法查找長(zhǎng)度為n的順序表時(shí),搜索成功的平均搜索長(zhǎng)度為______。
2.在C++中,下列函數(shù)______不能重載。
3.下面程序段的時(shí)間復(fù)雜度為______。
For(int i=0;i<m;i++)
For(int j=0;j<n;j++)
a[i][j]=i*j;
A.O(m2) B.O(n2) C.O(m*n) D.O(m+n)
4.如果事務(wù)T獲得了數(shù)據(jù)項(xiàng)Q上的排它鎖,則T對(duì)Q______。
A.只能讀不能寫 B.只能寫不能讀
C.既可讀又可寫 D.不能讀不能寫
5.一進(jìn)程剛獲得三個(gè)主存塊的使用權(quán),若該進(jìn)程訪問頁面的次序是{1321215123},采用LRU算法時(shí),缺頁數(shù)是______次。
A.3 B.4 C.5 D.6
6.在下面的兩個(gè)關(guān)系中,職工號(hào)和部門號(hào)分別為職工關(guān)系和部門關(guān)系的主鍵(或稱主碼)職工(職工號(hào)、職工名、部門號(hào)、職務(wù)、工資)
部門(部門號(hào)、部門名、部門人數(shù)、工資總額)
在這兩個(gè)關(guān)系的屬性中,只有一個(gè)屬性是外鍵(或稱外來鍵、外碼、外來碼),它是______
A.職工關(guān)系的“職工號(hào)” B.職工關(guān)系的“部門號(hào)”
C.部門關(guān)系的“職工號(hào)” D.部門關(guān)系的“部門號(hào)”
7.某二叉樹的前序和后序序列正好相反,則該二叉樹一定是_______的二叉樹。
A.空或只有一個(gè)節(jié)點(diǎn) B.高度等于其節(jié)點(diǎn)數(shù)
C.任一結(jié)點(diǎn)無左孩子 D.任意節(jié)點(diǎn)無右孩子
8.有權(quán)值分別為11,8,6,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼數(shù),它的帶權(quán)路徑長(zhǎng)度為_______。
A.24 B.71 C.48 D.53
三、問答題(共10分)
1.接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)接口?抽象類是否可繼承實(shí)體類?(共3分)
2.TCP和UDP的區(qū)別?(共2分)
3.列舉面向?qū)ο蟮奶卣,并介紹主流面向?qū)ο笳Z言中數(shù)據(jù)類型的分類及該類型存儲(chǔ)位置之間區(qū)別?(共5分)
四、程序題,共30分
1. 閱讀以下說明和C程序,將應(yīng)填入__(n)__處的字句寫在答題紙對(duì)應(yīng)欄內(nèi)。(共10分、每空2分)
說明:假設(shè)需要將N個(gè)任務(wù)分配給N個(gè)工人同時(shí)去完成,每個(gè)人都能承擔(dān)這N個(gè)任務(wù),但費(fèi)用不同。下面的程序用回溯法計(jì)算總費(fèi)用最小的一種工作分配方案,在該方案中,為每個(gè)人分配1個(gè)不同的任務(wù)。
程序中,N個(gè)任務(wù)從0開始依次編號(hào),N個(gè)工人也從0開始依次編號(hào),主要的變量說明如下:
C[i][j]:將任務(wù)i分配給工人j的費(fèi)用;
task[i]:值為0表示任務(wù)i未分配,值為j表示任務(wù)i分配給工人j;
worker[k]:值為0表示工人k未分配任務(wù),值為1表示工人k已分配任務(wù);
mincost:最小總費(fèi)用。
【C 程序】
#include<stdio.h>
#define N 8 /*N 表示任務(wù)數(shù)和工人數(shù)*/
Int c[N][N];
unsigned int mincost=65535; /*設(shè)置的初始值,大于可能的費(fèi)用*/
int task[N], temp[N], worker[N];
void plan(int k,unsigned int cost)
{ int I;
if (__(1)__&& cost<mincost) {
mincost=cost;
for(i=0; i<N; i++)temp[i]=task[i]; }
else{
for(i=0; i<N; i++) /*分配任務(wù) k*/
if (worker[i]==0 &&___(2)__){
worker[i]=1; task[k]=__(3)__;
Plan(__(4)__,cost+c[k][i]);
__(5)__; task[k]=0;
}/*if*/
}
}/*Plan*/
voin main()
{ int I,j;
for(i=0; i<N; i++){ /*設(shè)置每個(gè)人任務(wù)由不同工人承擔(dān)時(shí)的費(fèi)用及全局?jǐn)?shù)組的初值*/
worker[i]=0; task[i]=0; temp[i]=0;
for(j=0; j<n; j++)
scanf(“%d”,&c[i][j]);
}
Plan(0, 0) /*從任務(wù)0開始分配*/
printf(“\n 最小差用=%d\n”, mincost);
for(i=0; i<N; i++)
printf(“Task% isassigned to Worker%d\n”,I,temp[i])
} /*main*/
2. 閱讀以下說明,回答問題1至問題4,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。(共10分)
說明:
某賓館需要建立一個(gè)住房管理系統(tǒng),部分的需求分析結(jié)果如下:
(1) 一個(gè)房間有多個(gè)床位,同一房間內(nèi)的床位具有相同的收費(fèi)標(biāo)準(zhǔn)。不同房間的床位收費(fèi)標(biāo)準(zhǔn)可能不同。
(2) 每個(gè)房間有房間號(hào)(如201、202等)、收費(fèi)標(biāo)準(zhǔn)、床位數(shù)目等信息。
(3) 每位客人有身份證號(hào)碼、姓名、性別、出生日期和地址等信息。
(4) 對(duì)每位客人的每次住宿,應(yīng)該記錄其入住日期、退房日期和預(yù)付款額日期。
(5) 管理系統(tǒng)可查詢出客人所住房間號(hào)。
根據(jù)以上的需求分析結(jié)果,設(shè)計(jì)一種關(guān)系模型如圖 2-1 所示:
圖 2-1 住房管理系統(tǒng)的實(shí)體聯(lián)系圖
1)根據(jù)上述說明和實(shí)體-聯(lián)系圖,得到該住房管理系統(tǒng)的關(guān)系模式如下所示,請(qǐng)補(bǔ)充住宿關(guān)系。(2分)
房間(房間號(hào),收費(fèi)標(biāo)準(zhǔn),床位數(shù)目)
客人(身份證號(hào),姓名,性別,出生日期,地址)
住宿(______、_______,入住日期,退房日期,預(yù)付款額)
2)請(qǐng)給出問題1住宿關(guān)系的主鍵和外鍵。(2分)
3)若將上述關(guān)系直接實(shí)現(xiàn)為對(duì)應(yīng)的物理表,現(xiàn)需查詢?cè)?005年1月1日到2005年12月31日期間,在該賓館住宿次數(shù)大于5次的客人身份證號(hào),并且按照入住次數(shù)進(jìn)行降序排列。下面是實(shí)現(xiàn)該功能的SQL語句,請(qǐng)?zhí)钛a(bǔ)語句中的空缺。(3分)
SELECT 住宿.身份證號(hào),count(入住日期) FROM 住宿,客人
WHERE 入住日期 >= ‘20050101’ AND 入住日期 <= ‘20051231’
AND 住宿.身份證號(hào) = 客人.身份證號(hào)
GROUP BY _(2)_
_(3)_ count(入住日期) >5
_(4)_
4)為加快SQL語句的執(zhí)行效率,可在相應(yīng)的表上創(chuàng)建索引。根據(jù)問題3中的SQL語句,除主鍵和外鍵外,還需在那個(gè)表的的哪些屬性上創(chuàng)建索引,應(yīng)該創(chuàng)建什么類型的索引,請(qǐng)說明原因。(3分)
3. 完成下列的快速排序算法,可以選擇C或JAVA部分解答。(10分)
【C】: int partitions(int a[],int low,int high) void quicksort(int a[],int n)
{int pivotkey=a[low]; {___(5)___;
//a[0]=a[low]; }
While(low<high) #include<stdio.h>
{while(___(1)___) //#include<math.h>
--high; #include”myfunc.h”//存放于個(gè)人函
a[low]=a[high]; 數(shù)庫中
while(___(2)___) main()
++low; {int
a[high]=a[low]; i,a[11]={0,11,12,5,6,13,8,9,14,7,10};
} for(i=0;i<11;printf(“%3d”,a[i]),++i);
//a[low]=a[0]; printf(“\n”);
a[low]=pivotkey; quicksort(a,10);
return low; for(i=0;i<11;printf(“%3d”,a[i]),++i);
} printf(“\n”);
void qsort(int a[],int low,int high) }
{int pivottag;
if(___(3)___)
{//遞歸調(diào)用
pivottag=___(4)___;
qsort(a,low,pivottag-1);
qsort(a,pivottag+1,high);
}
}
【JAVA】:
/**
*快速排序
*/
Public static void main(String [] args) {
Random random =new Random();
Int[] pDtat=new int[10];
For(int i=0;i<pData.length;i++){//隨即生產(chǎn)10個(gè)隨機(jī)數(shù)
Integer a=random.nextInt(100);
pData[i]=a;
System.out.print(pData[i]+””);
}
System.out.print();
Int left=0;
Int right=pData.length-1;
(1)
for(int i=0;i<pData.length;i++){
System.out.print(pData[i]+””);
}
System.out.println();
}
Public static int[] Sort(int[] pData,int left,int right){
Int middle,str Temp;
Int i=left;
Int j=right;
Middle= (2) ;
do{
While( (3) )
I++;
While( (4) )
j--;
if(i<=j){
str Temp=pData[i];
pData[i]=pData[j];
pData[j]=str Temp;
i++;
j--;
}
For(int k=0;k<pData.length;k++){
System.out.print(pData[k]+””);
}
System.out.println();
}while( (5) );//如果兩邊掃描的下標(biāo)交錯(cuò),完成一次排序
If(left<j)
Sort(pData,left,j);//遞歸調(diào)用
If(right>i)
Sort(pData,i,right);//遞歸調(diào)用
Return pData;
浪潮筆試試題考題發(fā)下來之后,大體看了一下,54分的填空選擇,26分的編程題,考題涉及的內(nèi)容比較多,有操作系統(tǒng),數(shù)據(jù)庫,面向?qū)ο,網(wǎng)絡(luò)模型,C語言基本知識(shí)等等,似乎還有一些計(jì)算機(jī)基礎(chǔ)知識(shí),比如win98和win2k誰是16位操作系統(tǒng),誰是32位操作系統(tǒng)這樣的題目。出來之后我問了問工作人員,軟件研發(fā)組所分的C類和E類是按照什么進(jìn)行的分類啊,結(jié)果他也不清楚,考試的時(shí)候我們E組做的C/C 的題目,也就是我上面說的綜合性題目,而C組的題目是專門針對(duì)C++或者Java的,你可以從兩份試題中任選一份。編程題:題二:編碼變換的一個(gè)題目26a2變換為666_a_2.
浪潮往年筆試題目1. static
2.指針與數(shù)組
3.字符串處理
基本都是要考的。
數(shù)據(jù)結(jié)構(gòu), 前兩家沒涉及。
浪潮的考了回溯算法, 排序, 二叉樹查找,我做的不太好。
回憶下試題有:
回溯算法:
N個(gè)任務(wù),N個(gè)工人, C[i][i]:把任務(wù)i分配給工人j所需的費(fèi)用。
求費(fèi)用最低的分配方法。
二叉樹查找:
在二叉樹中找結(jié)點(diǎn)E,
1.若該節(jié)點(diǎn)是葉結(jié)點(diǎn), 直接刪除
2.若該節(jié)點(diǎn)只有Lchild, 則刪除該節(jié)點(diǎn), 把Lchild防到原有的結(jié)點(diǎn)位置。
題一:strcpy(char *to,char *from)函數(shù)用于拷貝字符串
void strcpy(char *to,char *from){
while( );
}
題二:編碼變換的一個(gè)題目26a2變換為666_a_2
具體規(guī)則是
<!--[if !supportLists]-->1。 <!--[endif]-->當(dāng)前字符如果不是數(shù)字,則簡(jiǎn)單復(fù)制
<!--[if !supportLists]-->2。 <!--[endif]-->當(dāng)前字符如果是數(shù)字,字面值為N,并且有后續(xù)字符,則將后續(xù)字符重復(fù)N-1次
<!--[if !supportLists]-->3。 <!--[endif]-->當(dāng)前字符如果是數(shù)字,但是沒有后續(xù)字符,則簡(jiǎn)單復(fù)制<!--[if !supportLists]-->4。 <!--[endif]-->這樣,每次變換后的串為一組,組與組之間用_連接。
代碼忘了,簡(jiǎn)單的C語言字符串處理,只不過對(duì)指針和串位的處理要注意。
當(dāng)然,還要填寫一個(gè)解碼的函數(shù)語句。
題三:C++template最簡(jiǎn)單的例子。
填空題中幾個(gè)有印象的。
1。語句x++,++x,x=x+1,x=1+x都是完成x的值增1的操作,請(qǐng)寫一個(gè)具有相同功能的語句,不允許與已給出的重復(fù) (我填的x+=1,浪潮這個(gè)也考,嘻嘻)
2?刂婆_(tái)程序的入口是 main() windows程序的入口是 WinMain()
3。C++類中的默認(rèn)限定符是:private
4。C++struct中默認(rèn)的限定符是:public
1:下列哪組 SQL 命令全部屬于數(shù)據(jù)定義語句的命令?
A.CREATE , DROP , ALTER
B.CREATE , DROP , SELECT
C.CREATE , DROP , GRANT
D.CREATE , DROP , UPDATE
2:系統(tǒng)故障會(huì)造成
A.內(nèi)存數(shù)據(jù)丟失 B.硬盤數(shù)據(jù)丟失
C.軟盤數(shù)據(jù)丟失 D.磁帶數(shù)據(jù)丟失
3:三個(gè)模式之間存在下列映射關(guān)系,將正確的填入括號(hào)中
A.外模式 / 內(nèi)模式 B.外模式 / 模式
C.模式 / 模式 D.內(nèi)模式 / 外模式
4:在視圖上不能完成的操作是
A.更新視圖 B.查詢
C.在視圖上定義新視圖 D.在視圖上定義新的基本表
5:數(shù)據(jù)庫系統(tǒng)中產(chǎn)生數(shù)據(jù)不一致性的根本原因是
A.沒有嚴(yán)格保護(hù)數(shù)據(jù) B.未對(duì)數(shù)據(jù)進(jìn)行完整性控制
C.數(shù)據(jù)冗余 D.數(shù)據(jù)存儲(chǔ)量大
6:在某個(gè)數(shù)據(jù)庫中建立了表person(no,name,sex,birthday),no為表的主碼,表中已有的記錄如下圖所示:
No Name Sex Birthday
1 張麗麗 女 1967/05/07
4 李方 女 1970/04/14
6 王安 男 1982/10/27
以下四個(gè)語句中能夠正確執(zhí)行的插入操作是
A.INSERT INTO person VALUES(6,′王中′,′男′,′1964/03/08′)
B.INSERT INTO person(name,sex) VALUES(′王中′,′男′)
C.INSERT INTO person VALUES(2,′男′,′王中′,′1964/03/08′)
D.INSERT INTO person(no,sex) VALUES(2,′男′) 7:如果事務(wù)T獲得了數(shù)據(jù)對(duì)象Q上的S鎖,則其他事務(wù)在數(shù)據(jù)對(duì)象Q上
A.可加X鎖 B.可加S鎖
C.可加任何鎖 D.不能加任何鎖
8:下列短語中可以在 SQL 查詢時(shí)去掉重復(fù)數(shù)據(jù)的是
A.ORDER BY
B.DESC
C.GROUP BY
D.DISTINCT 9:數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)之間存在著兩級(jí)映像,使得數(shù)據(jù)庫系統(tǒng)具有較高的
A.事務(wù)并發(fā)性 B.數(shù)據(jù)可靠性
C.數(shù)據(jù)獨(dú)立性 D.數(shù)據(jù)重用性
10:一個(gè)數(shù)據(jù)庫一般不是由獨(dú)立的對(duì)象組成的,對(duì)象的聚集形式的數(shù)學(xué)意義是
A.笛卡爾積 B.選擇
C.投影 D.聯(lián)接
11:表達(dá)式“AGE BETWEEN 18 AND 24”等價(jià)于
A.AGE>18 AND G<24 B.AGE>=18 AND G<24
C.AGE>18 AND G<=24 D.AGE>=18 AND AGE<=24
12:五種基本關(guān)系代數(shù)運(yùn)算是
A.∪,-,×,π和σ B.∪,-,∞,π和σ
C.∪,∩,×,π和σ D.∪,∩,∞,π和σ ]
13:供應(yīng)商可以給某個(gè)工程提供多種材料,同一種材料也可以由不同的供應(yīng)商提供,從材料到供應(yīng)商之間的聯(lián)系類型是
A.多對(duì)多 B.一對(duì)一
C.多對(duì)一 D.一對(duì)多
14:事務(wù)日志是用于保存
A.程序運(yùn)行過程 B.數(shù)據(jù)操作
C.程序的執(zhí)行結(jié)果 D.對(duì)數(shù)據(jù)的更新操作
15:屬性類型允許是基本數(shù)據(jù)類型、結(jié)構(gòu)類型和集合類型的模型是
A.平面關(guān)系模型 B.嵌套關(guān)系模型
C.復(fù)合對(duì)象模型 D.分布式關(guān)系模型
簡(jiǎn)答題
16:事務(wù)T1、T2和T3的定義如下:
T1:x:=x+1
T2:x:=x*2
T3:x:= 3
假設(shè)x的初值為0,若允許這三個(gè)事務(wù)并發(fā)執(zhí)行,試列出所有可能的調(diào)度和相應(yīng)的x 值。 17:學(xué)生表:S(SNO,SNAME,SEX) 各屬性含義依次為學(xué)號(hào)、姓名和性別;
課程表:C(CNO,CNAME,CREDIT) 各屬性含義依次為課程號(hào)、課程名、學(xué)分;
學(xué)生選課表:SC(SNO,CNO,MARK) 各屬性含義依次為學(xué)號(hào)、課程號(hào)和成績(jī)。
基于以上關(guān)系模式回答1—4題。
1.試用SQL語句統(tǒng)計(jì)男生和女生的人數(shù)。
2.試用SQL語句寫出下列查詢:檢索出所有男生的姓名、所選課程號(hào)和成績(jī)。
3.試用SQL語句實(shí)現(xiàn)下列查詢:檢索出各門課程的學(xué)生平均成績(jī)(要求列出課程名稱和平均成績(jī))。
4.用關(guān)系代數(shù)表達(dá)式實(shí)現(xiàn)下列查詢:檢索出沒有選修課程號(hào)為C3的所有學(xué)生姓名 18:已知三個(gè)關(guān)系模式:
訂單表: ORDER (ONO,CNAME,ODATE)其屬性的含義依次為訂單號(hào)、客戶名稱和訂貨日期;
訂單明細(xì)表: ITEM(ONO,PNO,PRICE,QTY)其屬性的含義依次為訂單號(hào)、產(chǎn)品編號(hào)、單價(jià)和訂購數(shù)量;
產(chǎn)品表:PRODUCT(PNO ,PNAME,UNIT)其屬性含義依次為產(chǎn)品編號(hào)、品名和單位。
根據(jù)上述三個(gè)關(guān)系模式用 SQL 語句完成以下問題。
1.創(chuàng)建一個(gè)視圖,視圖名為 ORD ,視圖的屬性有訂單號(hào)、客戶名稱、品名、單價(jià)和訂購數(shù)量。
2.查詢訂購產(chǎn)品編號(hào)為 P1 的客戶名稱和訂單號(hào)。
3.將訂單明細(xì)表中訂購數(shù)量超過 100 的商品的單價(jià)降低10%。 19:名詞解釋:外鍵。 20:設(shè)有兩個(gè)關(guān)系模式:
S(SNO,SNAME,SEX,AGE),其屬性含義依次為學(xué)號(hào)、姓名、性別、年齡;
SC(SNO,CNAME,GRADE),其屬性含義依次為學(xué)號(hào)、課程名、分?jǐn)?shù)。
試根據(jù)下列 SQL 語句寫出等價(jià)的關(guān)系代數(shù)表達(dá)式。
SELECT SNAME
FORM S
WHERE SNO IN
(SELECT SNO
FROM SC
WHERE GRADE BETWEEN 70 AND 80) 21:關(guān)系數(shù)據(jù)語言分為哪三類? 22:如果讓你來實(shí)現(xiàn)數(shù)據(jù)庫的等值連接,請(qǐng)你說出你的算法或者思路。 23:數(shù)據(jù)庫中有三個(gè)關(guān)系(基本表):
S (學(xué)號(hào),姓名,性別,年齡,系別)
C (課號(hào),課名)
SC (學(xué)號(hào),課號(hào),成績(jī))
依據(jù)此信息用 SQL 語句完成下面問題。
1.查詢每個(gè)學(xué)生的姓名和年齡,并按年齡降序排列。
2.查詢 S 表中姓“王”的學(xué)生的情況。
3.查詢選修了“數(shù)據(jù)庫原理”的學(xué)生的姓名和成績(jī)。
4.查詢與“劉平”同一系的學(xué)生情況。 24:簡(jiǎn)述SQL語言的特點(diǎn)。 25:事務(wù)是什么?
1。設(shè)計(jì)函數(shù)int atoi(char *s)。
int atoi(char *s)
{
char sign;
char sign_val = 1;
int val = 0;
int n = 0;
/* skip spaces */
while (isspace(*s))
s;
if (*s == '-' || *s == ' ')
/* skip '-' and ' ' sign */
{
sign = *s;
if (sign == '-')
sign_val = -1;
s;
}
/* when goes here, it is not space or sign */
while ((*s != '\0') && isdigit(*s))
{
val = 10 * n (*s - '0');
n = val;
s ;
}
if (*s != '\0')
{
printf( "non digit in your input!!\n");
exit(-1);
}
/* non error occured */
return (sign_val * val);
}
2。int i=(j=4,k=8,l=16,m=32); printf("%d", i); 輸出是多少?
結(jié)果為: 32.(注釋:主要考的是逗號(hào)運(yùn)算)
3。解釋局部變量、全局變量和靜態(tài)變量的含義。
局部變量包括函數(shù)的形參,包含在函數(shù)體或者語句塊內(nèi)的變量,局部變量的生存期在退出函數(shù)或語句塊后結(jié)束。
全局變量是指在所有函數(shù)和語句塊之外的變量,它對(duì)于整個(gè)程序均可見,全局變量的生存期與程序的生存期相同.
靜態(tài)變量指由要害字static聲明的變量,它的作用域和其他變量一樣,由它所在的位置決定,如在函數(shù)體或語句塊中聲明,則只在函數(shù)體或語句塊可見,其他地方均不可見.它的生存期與程序相同.
4。解釋堆和棧的區(qū)別。簡(jiǎn)述如下:
棧上分配的內(nèi)存,由系統(tǒng)自動(dòng)分配,系統(tǒng)會(huì)自動(dòng)收回.假如需要?jiǎng)討B(tài)分配內(nèi)存,則只能通過malloc/new在堆上分配的內(nèi)存,使用完畢后,通過free/delete來釋放內(nèi)存。
5。論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。
含參數(shù)的宏優(yōu)點(diǎn):省去了函數(shù)調(diào)用的開銷,運(yùn)行效率高.
含參數(shù)的缺點(diǎn):
由于宏本質(zhì)上是字符串的替換,所有可能會(huì)由于一些參數(shù)的副作用導(dǎo)致得出錯(cuò)誤的結(jié)果.
如:
#define max(a, b) ( ((a) > (b)) ? (a) : (b) )
假如程序中出現(xiàn)這樣的調(diào)用: max(a , b);
將導(dǎo)致a被計(jì)算2次,從而可能得到錯(cuò)誤的結(jié)果,而函數(shù)調(diào)用不會(huì)出現(xiàn)這種問題.另外,假如程序中有多次宏替換的話,可能導(dǎo)致代碼體積變大.函數(shù)的優(yōu)點(diǎn)是:
沒有帶參數(shù)宏可能導(dǎo)致的副作用,計(jì)算的正確性較宏更有保證.
函數(shù)調(diào)用的缺點(diǎn):
函數(shù)調(diào)用需要一些參數(shù),返回地址等入棧,出棧的開銷,效率沒有宏函數(shù)高.
1、局部變量能否和全局變量重名?
答:能,局部會(huì)屏蔽全局。要用全局變量,需要使用 ":: "
局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)。
2、如何引用一個(gè)已經(jīng)定義過的全局變量?
答:extern
可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。
3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?
答:可以,在不同的C文件中以static形式來聲明同名全局變量。
可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)
4、語句for( ;1 ;)有什么問題?它是什么意思?
答:和while(1)相同。
5、do……while和while……do有什么區(qū)別?
答:前一個(gè)循環(huán)一遍再判斷,后一個(gè)判斷以后再循環(huán)
6、請(qǐng)寫出下列代碼的輸出內(nèi)容
#include
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf( "b,c,d:%d,%d,%d ",b,c,d);
return 0;
}
答:10,12,120
7、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?
全局變量(外部變量)的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。 這兩者在存儲(chǔ)方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序, 當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯(cuò)誤。
從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域, 限制了它的使用范圍。
static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件
static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;
static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝
8、程序的局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū) )中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于( 堆)中。
9、設(shè)有以下說明和定義:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
則語句 printf( "%d ",sizeof(struct date)+sizeof(max));的執(zhí)行結(jié)果是:___52____
答:DATE是一個(gè)union, 變量公用空間. 里面最大的變量類型是int[5], 占用20個(gè)字節(jié). 所以它的大小是20
data是一個(gè)struct, 每個(gè)變量分開占用空間. 依次為int4 + DATE20 + double8 = 32.
所以結(jié)果是 20 + 32 = 52.
當(dāng)然...在某些16位編輯器下, int可能是2字節(jié),那么結(jié)果是 int2 + DATE10 + double8 = 20
10、隊(duì)列和棧有什么區(qū)別?
隊(duì)列先進(jìn)先出,棧后進(jìn)先出
11、寫出下列代碼的輸出內(nèi)容
#include
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp= &inc;
int temp =p(arg1);
fun( &temp,&arg1, arg2);
printf( "%d\n ",*arg2);
}
main()
{
int a;
show(multi,10, &a);
return 0;
}
答:110
11、請(qǐng)找出下面代碼中的所以錯(cuò)誤
說明:以下代碼是把一個(gè)字符串倒序,如“abcd”倒序后變?yōu)?ldquo;dcba”
1、#include "string.h "
2、main()
3、{
4、 char*src= "hello,world ";
5、 char* dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);
8、 char* d=dest;
9、 char* s=src[len];
10、 while(len--!=0)
11、 d++=s--;
12、 printf( "%s ",dest);
13、 return 0;
14、}
答:
方法1:
int main()
{
char* src = "hello,world ";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要為\0分配一個(gè)空間
char* d = dest;
char* s = &src[len-1];//指向最后一個(gè)字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf( "%s\n ",dest);
free(dest);// 使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露
return 0;
}
方法2:
#include
#include
main()
{
char str[]= "hello,world ";
int len=strlen(str);
char t;
for(int i=0; i {
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf( "%s ",str);
return 0;
}
12。對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)?
答案:c用宏定義,c++用inline
13。軟件測(cè)試都有那些種類?
答案:黑盒:針對(duì)系統(tǒng)功能的測(cè)試 白合:測(cè)試函數(shù)功能,各函數(shù)接口
14。確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的?
答案:概要設(shè)計(jì)階段
15。enum string
{x1,
x2,
x3=10,
x4,
x5,
}x;
問x;
答案:取值在0。1。10。11。12中的一個(gè)
16。unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
請(qǐng)問p1+5= ;
p2+5= ;
答案:801005; 810014。不要忘記了這個(gè)是16進(jìn)制的數(shù)字,p2要加20變?yōu)?6進(jìn)制就是14
選擇題:
1.Ethternet鏈接到Internet用到以下那個(gè)協(xié)議?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
2.屬于網(wǎng)絡(luò)層協(xié)議的是:
A.TCP;B.IP;C.ICMP;D.X.25
3.Windows消息調(diào)度機(jī)制是:
A.指令隊(duì)列;B.指令堆棧;C.消息隊(duì)列;D.消息堆棧;
答案:b,a,c
二找錯(cuò)題:
1.請(qǐng)問下面程序有什么錯(cuò)誤?
int a[60][250][1000],i,j,k;
for(k=0;k<=1000;k++)
for(j=0;j<250;j++)
for(i=0;i<60;i++)
a[i][j][k]=0;
答案:把循環(huán)語句內(nèi)外換一下
2。以下是求一個(gè)數(shù)的平方的程序,請(qǐng)找出錯(cuò)誤:
#define SQUARE(a) ((a)*(a))
int a=5;
int b;
b=SQUARE(a++);
答案:這個(gè)沒有問題,s(a++),就是((a++)×(a++))唯一要注意的就是計(jì)算后a=7了
3。typedef unsigned char BYTE
int examply_fun(BYTE gt_len; BYTE *gt_code)
{
BYTE *gt_buf;
gt_buf=(BYTE *)MALLOC(Max_GT_Length);
......
if(gt_len>Max_GT_Length)
{
return GT_Length_ERROR;
}
.......
}
答案:要釋放內(nèi)存
問答題:
1.IP Phone的原理是什么?
答案:IPV6
2.TCP/IP通信建立的過程怎樣,端口有什么作用?
答案:三次握手,確定是哪個(gè)應(yīng)用程序使用該協(xié)議
1.實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù);
答//假設(shè)線性表的雙向鏈表存儲(chǔ)結(jié)構(gòu)
typedef struct DulNode{
struct DulNode *prior; //前驅(qū)指針
ElemType data; //數(shù)據(jù)
struct DulNode *next; //后繼指針
}DulNode,*DuLinkList;
//刪除操作
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i))) //此處得到i位置的節(jié)點(diǎn)指針,如果有需要也得寫出具體函數(shù)實(shí)現(xiàn)
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->pror;
free(p);
return OK;
}
//插入操作
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
2.寫一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。
答該函數(shù)命名為convert,參數(shù)的意義為:
*strDest目的字符串,*strSrc源字符串,length源字符串的長(zhǎng)度
函數(shù)實(shí)現(xiàn)為:
char* convert(char *strDest, const char *strSrc,int length)
{
char * cp = strDest;
int i=0;
while(*strSrc && i{
if (*strSrc=='\t') //將\t轉(zhuǎn)換成4個(gè)空格
{
for(int j=0;j<4;j++)
*cp++=' ';
}
else //否則直接拷貝
*cp++=*strSrc;
strSrc++;
i++;
}
return strDest;
}
3.Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程。
答: Windows程序的入口是WinMain函數(shù)
消息機(jī)制:系統(tǒng)將會(huì)維護(hù)一個(gè)或多個(gè)消息隊(duì)列,所有產(chǎn)生的消息都會(huì)被放入或是插入隊(duì)列中。系統(tǒng)會(huì)在隊(duì)列中取出每一條消息,根據(jù)消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運(yùn)行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過程。而在沒有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)。
4.如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函數(shù)?
答:所謂的回調(diào)函數(shù),就是預(yù)先在系統(tǒng)的對(duì)函數(shù)進(jìn)行注冊(cè),讓系統(tǒng)知道這個(gè)函數(shù)的存在,以后,當(dāng)某個(gè)事件發(fā)生時(shí),再調(diào)用這個(gè)函數(shù)對(duì)事件進(jìn)行響應(yīng)。
定義一個(gè)類的成員函數(shù)時(shí)在該函數(shù)前加CALLBACK即將其定義為回調(diào)函數(shù),函數(shù)的實(shí)現(xiàn)和普通成員函數(shù)沒有區(qū)別
5.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請(qǐng)舉例。
答:不是,比如中斷引起的中斷處理不是直接由main()引起的,而是由外部事件引起的。
6.C++里面如何聲明const void f(void)函數(shù)為C程序中的庫函數(shù)?
答:在該函數(shù)前添加extern “C”聲明
7.下列哪兩個(gè)是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;
答:
各式表示的意思分別為:
A const int* a = &b; //*a是const,但指針a可變
B const* int a = &b; //a是const,但*a可變
C const int* const a = &b; //a和*a都是const,常量和指針的值都不能改變
D int const* const a = &b; //a和*a都是const,常量和指針的值都不能改變
因此C,D兩者是相同的。
總結(jié)個(gè)技巧:如果const位于星號(hào)的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞浚粗羔樦赶驗(yàn)槌A;如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。
8. 內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查?
答:做類型檢查,因?yàn)閮?nèi)聯(lián)函數(shù)就是在程序編譯時(shí),編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體來代替