摘要:以下是由希賽網(wǎng)整理的2012年上半年程序員考試下午真題,希望對(duì)備考程序員考試的考生有所幫助。
2012年上半年程序員考試下午真題:
>>>點(diǎn)擊進(jìn)入軟考初級(jí)程序員歷年真題下載
● 閱讀以下說明和流程圖,填補(bǔ)流程圖中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】 已知數(shù)組A[1:n]中各個(gè)元素的值都是非零整數(shù),其中有些元素的值是相同的(重復(fù))。為刪除其中重復(fù)的值,可先通過以下流程圖找出所有的重復(fù)值,并對(duì)所有重復(fù)值賦0標(biāo)記。該流程圖采用了雙重循環(huán)。 處理思路:如果數(shù)組A某個(gè)元素的值在前面曾出現(xiàn)過,則該元素賦標(biāo)記值0。例如,假設(shè)數(shù)組A的各元素之值依次為2,5,5,1,2,5,3,則經(jīng)過該流程圖處理后,各元素之值依次為2,5,0,1,0,0,3。
【流程圖】
● 閱讀以下說明、C程序代碼和問題1至問題3,將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明1】 設(shè)在某C系統(tǒng)中為每個(gè)字待型數(shù)據(jù)分配1個(gè)字節(jié),為每個(gè)整型(int)數(shù)據(jù)分配4個(gè)字節(jié),為每個(gè)指針分配4個(gè)字節(jié),sizeof(x)用于計(jì)算為x分配的字節(jié)數(shù)。
【C代碼】 #include <stdio.h> #include <string.h> int main__(2)__ { int arr[5]={10, 20, 30}; char mystr[]="JustAtest\n"; char *ptr=mystr; printf("%d %d %d\n", sizeof(int), sizeof(unsigned int), strlen(arr)); printf("%d %d\n", sizeof(char), sizeof(mystr); printf("%d %d %d\n", sizeof(ptr), sizeof(*ptr), strlen(ptr)); return 0; }
【說明2】 const是C語言的一個(gè)關(guān)鍵字,可以用來定義“只讀”型變量。
【問題1】(8分)
請(qǐng)寫出以上C代碼的運(yùn)行結(jié)果。
【問題2】(4分)
(1)請(qǐng)定義一個(gè)“只讀”型的整型常量size,并將其值初始化為10;
(2)請(qǐng)定義一個(gè)指向整型變量a的指針ptr,使得ptr的值不能修改,而ptr所指向的目標(biāo)變量的值可以修改(即可以通過ptr間接修改整型變量a的值)。
注:無需給出整型變量a的定義。
【問題3】(3分)
某C程序文件中定義的函數(shù)f如下所示,請(qǐng)簡要說明其中static的作用,以及形參表“const int arr[]”中const的作用。
static int f(const int arr[])
{
/* 函數(shù)體內(nèi)的語句省略 */
}
● 閱讀以下說明和C函數(shù),填補(bǔ)C函數(shù)中的空缺(1)~(6),將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
函數(shù)numberOfwords(char message[])的功能是計(jì)算存儲(chǔ)在message字符數(shù)組中的一段英文語句中的單詞數(shù)目,輸出每個(gè)單詞(單詞長度超過20時(shí)僅輸出其前20個(gè)字母),并計(jì)算每個(gè)英文字母出現(xiàn)的次數(shù)(即頻數(shù)),字母計(jì)數(shù)時(shí)不區(qū)分大小寫。 假設(shè)英文語句中的單詞合乎規(guī)范(此處不考慮單詞的正確性),單詞不縮寫或省略,即不會(huì)出現(xiàn)類似don't形式的詞,單詞之后都為空格或標(biāo)點(diǎn)符號(hào)。 函數(shù)中判定單詞的規(guī)則是: (1)一個(gè)英文字母串是單詞;
(2)一個(gè)數(shù)字串是單詞;
(3)表示名詞所有格的撇號(hào)(')與對(duì)應(yīng)的單詞看作是一個(gè)單詞。
除上述規(guī)則外,其他情況概不考慮。 例如,句子“The 1990's witnessed many changes in people's concepts of conservation.”中有10個(gè)單詞,輸出如下: The 1990's witnessed many changes in people's concepts of conservation 函數(shù)numberOfwords中用到的部分標(biāo)準(zhǔn)庫函數(shù)如下表所述。
【C函數(shù)】 int numberOfwords (char message[]) { char wordbuffer[21], i=0;/* i用作wordbuffer的下標(biāo) */ (1) pstr; int ps[26]={0};/* ps[0]用于表示字母'A'或'a'的頻數(shù) */ /* ps[1]用于表示字母'B'或'b'的頻數(shù),依此類推 */ int wordcounter=0; pstr=message; while (*pstr){ if((2) (*pstr)){/* 調(diào)用函數(shù)判定是否為一個(gè)單詞的開頭字符 */ i=0; do{/* 將一個(gè)單詞的字符逐個(gè)存入wordbuffer[],并進(jìn)行字母計(jì)數(shù) */ wordbuffer[i++]=*pstr; if (isalpha (*pstr)){ if((3) (*pstr)) ps[*pstr-'a']++; elseps[*pstr-'A']++; } (4) ;/* pstr指向下一字符 */ }while (i<20 && (isalnum(*pstr)||*pstr=='\'')); if (i>=20)/* 處理超長單詞(含名詞所有格形式) */ while (isalnum (*pstr)||*pstr=='\''){ pstr++; } (5) ='\0';/* 設(shè)置暫存在wordbuffer中的單詞結(jié)尾 */ wordcounter++;/* 單詞計(jì)數(shù) */ puts (wordbuffer);/* 輸出單詞 */ } (6) ;/* pstr指向下一字符 */ } return wordcounter; }
● 閱讀以下說明和C函數(shù),填補(bǔ)C函數(shù)中的空缺(1)~(5),將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】 函數(shù)SetDiff(LA,LB)的功能是將LA與LB中的共有元素從LA中刪除,使得LA中僅保留與LB不同的元素,而LB不變,LA和LB為含頭結(jié)點(diǎn)的單鏈表的頭指針。 例如,單鏈表LA、LB的示例如下圖中的(a)、(b)所示,刪除與LB共有的元素后的LA如下圖中的(c)所示。 鏈表的結(jié)點(diǎn)類型定義如下: typedef struct Node { int data; struct Node *next; }Node, *LinkList; 函數(shù)SetDiff(LinkList LA, LinkList LB)的處理思路如下:
(1)從LA的第一個(gè)元素結(jié)點(diǎn)開始,令LA的第一個(gè)元素為當(dāng)前元素。
(2)在LB中進(jìn)行順序查找,查找與LA的當(dāng)前元素相同者,方法是令LA的當(dāng)前元素先與LB的第一個(gè)元素進(jìn)行比較,若相等,則結(jié)束在LB中的查找過程,否則繼續(xù)與LB的下一個(gè)元素比較,重復(fù)以上過程,直到LB中的某一個(gè)元素與LA的當(dāng)前元素相等(表明查找成功),或者到達(dá)LB的表尾(表明查找失?。橹埂?nbsp;
(3)結(jié)束在LB表的一次查找后,若在LB中發(fā)現(xiàn)了與LA的當(dāng)前元素相同者,則刪除LA的當(dāng)前元素,否則保留LA的當(dāng)前元素。
(4)取LA的下一個(gè)元素為當(dāng)前元素,重復(fù)(2)、(3),直到LA的表尾。 【C函數(shù)】 void SetDiff (LinkList LA, LinkList LB) { LinkList pre, pa, pb; /* pa用于指向單鏈表LA的當(dāng)前元素結(jié)點(diǎn),pre指向pa所指元素的前驅(qū) */ /* pb用于指向單鏈表LB的元素結(jié)點(diǎn) */ (1) ;/* 開始時(shí)令pa指向LA的第一個(gè)元素 */ pre=LA; while (pa){ pb=LB->next; /* 在LB中查找與LA的當(dāng)前元素相同者,直到找到或者到達(dá)表尾 */ while((2) ){ if (pa->data==pb->data) break; (3) ; } if (!pb){ /* 若在LB中沒有找到與LA中當(dāng)前元素相同者,則繼續(xù)考察LA的后續(xù)元素 */ pre=pa; pa=pa->next; } else{ /* 若在LB中找到與LA的當(dāng)前元素相同者,則刪除LA的當(dāng)前元素 */ pre->next=(4) ; free (pa); pa=(5) ; } } }
● 閱讀以下說明和C++代碼,填補(bǔ)C++代碼中的空缺(1)~(6),將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】 已知某公司按周給員工發(fā)放工資,其工資系統(tǒng)需記錄每名員工的員工號(hào)、姓名、工資等信息。其中一些員工是正式的,按年薪分周發(fā)放(每年按52周計(jì)算);另一些員工是計(jì)時(shí)工,以小時(shí)工資為基準(zhǔn),按每周工作小時(shí)數(shù)核算發(fā)放。 下面是實(shí)現(xiàn)該工資系統(tǒng)的C++代碼,其中定義了四個(gè)類:工資系統(tǒng)類PayRoll,員工類Employee,正式工類Salaried和計(jì)時(shí)工類Hourly,Salaried和Hourly是Employee的子類。 【C++代碼】 //頭文件和域名空間略 const int EMPLOYEE_NUM=5; class Employee { protected: int empCode;//員工號(hào) string name;//員工姓名 double salary;//周發(fā)放工資 public: Employee(const int empCode, const string &name ) { this->empCode=empCode;this->name=name; } virtual ~Employee__(5)__{ } virtual void pay__(6)__=0; double getSalary__(7)__ { return this->salary; } }; class Salaried (1) { private: double payRate;//年薪 public: Salaried(const int empCode, const string &namet double payRate):Employee (empCode, name) { this->payRate=payRate; } void pay__(8)__ { this->salary=(2) ; //計(jì)算正式員工的周發(fā)放工資數(shù) cout << this->name << ":" << this->salary<<endl; }; class Hourly (3) { private: double payRate;//小時(shí)工資數(shù) int hours; //周工作小時(shí)數(shù) public: Hourly (const int empCode. const string &name, int hours, double payRate) :Employee(empCode, name) { this->payRate=payRate;this->hours=hours; } void pay__(9)__{ this->salary=(4) ;//計(jì)算計(jì)時(shí)工的周發(fā)放工資數(shù) cout << this->name << ":" << this->salary << endl; } }; class PayRoll{ public: void pay (Employee*e[])( for (int i=0;i<EMPLOYEE_NUM; i++){ e[i]->pay__(10)__; } } }; int main__(11)__{ PayRoll payRoll=new PayRoll; (5) employees [EMPLOYEE_NUM]= { new Salaried (1001, "Zhang San", 58000.00), //此處省略對(duì)其他職工對(duì)象的生成 new Hourly (1005, "Li", 12, 50.00), }; payRoll->pay((6) ); double total=0.0; for (int i=0;i<EMPLOYEE_NUM; i++) { total+=employees[i]->getSalary__(12)__;}//統(tǒng)計(jì)周發(fā)放工資患額 cout<<"總發(fā)放額="<<total<<endl; delete payRoll;return 0; }
● 閱讀以下說明和Java代碼,填補(bǔ)Java代碼中的空缺(1)~(6),將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】 已知某公司按周給員工發(fā)放工資,其工資系統(tǒng)需記錄每名員工的員工號(hào)、姓名、工資等信息。其中一些員工是正式的,按年薪分周發(fā)放(每年按52周計(jì)算);另一些員工是計(jì)時(shí)工,以小時(shí)工資為基準(zhǔn),按每周工作小時(shí)數(shù)核算發(fā)放。 下面是實(shí)現(xiàn)該工資系統(tǒng)的Java代碼,其中定義了四個(gè)類:工資系統(tǒng)類PayRoll,員工類Employee,正式工類Salaried和計(jì)時(shí)工類Hourly,Salaried和Hourly是Employee的子類。 【Java代碼】 abstract class Employee{ protected String name;//員工姓名 protected int empCode;//員工號(hào) protected double salary;//周發(fā)放工資 public Employee(int empCode, String name){ this.empCode=empCode; this.name=name, } public double getSalary__(6)__{ return thissalary; } public abstract void pay__(7)__ ; } class Salaried (1) Employee{ private double annualSalary; Salaried(int empCode, String name, double payRate) { super(empCode, name) ; this.annualSalary=payRate; } public void pay __(8)__ { salary=(2) ;//計(jì)算正式員工的周發(fā)放工資數(shù) System.out.println(this.name+":"+this.salary); } } class Hourly (3) Employee{ private double hourlyPayRate; private int hours; Hourly(int empCode, String name, int hours, double payRate) { super(empCode, name); this.hourlyPayRate=payRate; this.hours=hours; } public void pay __(9)__ { salary=(4) ;//計(jì)算計(jì)時(shí)工的周發(fā)放工資數(shù) System.out.println(thisname+":"+this.salary); } } public class PayRoll{ private (5) employees[]={ newSalaried(1001, "Zhang San", 58000.00), //此處省略對(duì)其他職工對(duì)象的生成 new Hourly(1005, "Li", 12, 50.00) }; public void pay(Employee e[]){ for (int i=0; i<e.length; i++){ e[i]pay__(10)__; } } public static void main(String[] args) { PayRoll payRoll=new PayRoll__(11)__; payRoll.pay((6) ); double total=0.0; for (int i=0;i<payRoll.employees.length; i++){ //統(tǒng)計(jì)周發(fā)放工資總額 total+=payRoll.employees[i].getSalary__(12)__; } System.out.println(total); } }
熱門:信息系統(tǒng)管理工程師報(bào)考指南 | 2025年軟考報(bào)名時(shí)間及入口
推薦:信息系統(tǒng)項(xiàng)目管理師網(wǎng)絡(luò)課堂 |系統(tǒng)架構(gòu)設(shè)計(jì)師網(wǎng)絡(luò)課程 | 工信部信創(chuàng)認(rèn)證培訓(xùn)
活動(dòng):25年高項(xiàng)備考 | 軟考機(jī)考模擬作答系統(tǒng) | 網(wǎng)絡(luò)工程師網(wǎng)絡(luò)課程
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題