2025年大學《信息與計算科學》專業(yè)題庫-信息與計算科學的編程實踐案例_第1頁
2025年大學《信息與計算科學》專業(yè)題庫-信息與計算科學的編程實踐案例_第2頁
2025年大學《信息與計算科學》專業(yè)題庫-信息與計算科學的編程實踐案例_第3頁
2025年大學《信息與計算科學》專業(yè)題庫-信息與計算科學的編程實踐案例_第4頁
2025年大學《信息與計算科學》專業(yè)題庫-信息與計算科學的編程實踐案例_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2025年大學《信息與計算科學》專業(yè)題庫——信息與計算科學的編程實踐案例考試時間:______分鐘總分:______分姓名:______一、閱讀以下問題描述,按要求完成設計。問題描述:設計一個程序,用于管理一個簡單的圖書館借閱系統(tǒng)。系統(tǒng)需要支持以下功能:1.存儲圖書信息。每本圖書包含一個唯一的圖書編號(整數)、書名(字符串)和作者(字符串)。2.存儲讀者信息。每名讀者包含一個唯一的讀者編號(整數)、姓名(字符串)和借閱圖書列表(可以使用適當的數據結構表示,例如存儲圖書編號的列表)。3.添加圖書:向系統(tǒng)中添加一本新圖書的信息。4.添加讀者:向系統(tǒng)中添加一名新讀者的信息。5.借閱圖書:允許讀者借閱圖書。需要檢查圖書是否存在,讀者是否已達到借閱上限(假設每位讀者最多同時借閱3本圖書),并更新讀者和圖書的狀態(tài)(例如,標記圖書為已借出,并將圖書編號添加到讀者的借閱列表中)。6.歸還圖書:允許讀者歸還圖書。需要更新讀者和圖書的狀態(tài)(例如,標記圖書為可借,并將圖書編號從讀者的借閱列表中移除)。7.顯示讀者借閱情況:輸入一個讀者編號,顯示該讀者當前借閱的所有圖書信息。請完成以下任務:a)設計表示圖書和讀者的類(或結構體),并定義必要的數據成員和方法(例如,構造函數、獲取和設置成員的方法等)。b)設計一個管理類(或模塊),用于管理圖書和讀者集合,并提供上述功能的實現。可以使用列表(數組)等數據結構來存儲圖書和讀者對象。請詳細說明該管理類中主要的成員變量和方法,并給出關鍵方法的實現思路(例如,添加圖書的方法、借閱圖書的方法等的核心邏輯)。不需要編寫完整的代碼,但需要清晰地闡述設計思路和關鍵步驟。二、編寫一個函數,該函數接收一個字符串參數`s`,表示一個只包含數字和運算符(`+`,`-`,`*`,`/`)的中綴表達式。函數需要將這個中綴表達式轉換為后綴表達式(逆波蘭表示法),并返回轉換后的后綴表達式字符串。要求:1.你需要使用棧(Stack)數據結構來輔助完成轉換。2.需要定義運算符的優(yōu)先級,例如:`*`和`/`的優(yōu)先級高于`+`和`-`,同一優(yōu)先級的運算符從左到右結合。3.輸入的中綴表達式格式正確,不包含空格,運算符之間有數字。4.輸出的后綴表達式需要與原中綴表達式具有相同的計算結果。請給出該函數的詳細實現代碼。三、假設你需要使用線性回歸模型來擬合一組二維數據點`(x_i,y_i)`(`i=1,2,...,n`),其中`x_i`是自變量,`y_i`是因變量。請完成以下任務:a)寫出使用最小二乘法計算線性回歸模型參數`a`(斜率)和`b`(截距)的公式。b)假設給定以下數據點:`{(1,2),(2,3),(3,5),(4,4),(5,6)}`。請根據最小二乘法公式,計算該組數據點的線性回歸模型的參數`a`和`b`的值。c)簡述線性回歸模型的核心思想,并說明`a`和`b`在模型`y=a*x+b`中的具體含義。四、編寫一個Python函數`find_substrings`,該函數接收兩個字符串參數:`text`和`pattern`。函數的目標是在`text`中查找所有出現的`pattern`的子串,并返回一個列表,列表中包含`text`中每個`pattern`出現的起始索引位置(從0開始計數)。如果`pattern`為空字符串,或者`text`中不存在`pattern`,則返回一個空列表。函數的實現應考慮效率。```python#示例調用:#result=find_substrings("ababa","aba")#print(result)#輸出:[0,2]```請給出該函數的完整實現代碼。試卷答案一、a)示例類設計:```pythonclassBook:def__init__(self,book_id,title,author):self.book_id=book_idself.title=titleself.author=authorself.is_borrowed=False#標記圖書是否已借出#可以添加其他方法,例如獲取圖書信息等defget_info(self):returnf"ID:{self.book_id},Title:{self.title},Author:{self.author},Borrowed:{self.is_borrowed}"classReader:def__init__(self,reader_id,name):self.reader_id=reader_id=nameself.borrowed_books=[]#存儲借閱圖書的ID列表#可以添加其他方法,例如獲取讀者信息等defget_info(self):returnf"ID:{self.reader_id},Name:{}"```b)管理類設計思路:```pythonclassLibraryManager:def__init__(self):self.books={}#使用字典存儲圖書,鍵為book_id,值為Book對象self.readers={}#使用字典存儲讀者,鍵為reader_id,值為Reader對象#添加圖書defadd_book(self,book_id,title,author):ifbook_idinself.books:print(f"BookwithID{book_id}alreadyexists.")returnself.books[book_id]=Book(book_id,title,author)#添加讀者defadd_reader(self,reader_id,name):ifreader_idinself.readers:print(f"ReaderwithID{reader_id}alreadyexists.")returnself.readers[reader_id]=Reader(reader_id,name)#借閱圖書defborrow_book(self,reader_id,book_id):reader=self.readers.get(reader_id)book=self.books.get(book_id)ifnotreaderornotbook:print("ReaderorBooknotfound.")returnFalseifbook.is_borrowed:print(f"Book{book_id}isalreadyborrowed.")returnFalseiflen(reader.borrowed_books)>=3:print(f"Reader{reader_id}hasreachedtheborrowinglimit.")returnFalsereader.borrowed_books.append(book_id)book.is_borrowed=Trueprint(f"Book{book_id}borrowedby{reader_id}.")returnTrue#歸還圖書defreturn_book(self,reader_id,book_id):reader=self.readers.get(reader_id)ifnotreader:print("Readernotfound.")returnFalseifbook_idnotinreader.borrowed_books:print(f"Reader{reader_id}didnotborrowbook{book_id}.")returnFalsereader.borrowed_books.remove(book_id)book=self.books[book_id]#假設通過ID能直接找到Book對象book.is_borrowed=Falseprint(f"Book{book_id}returnedby{reader_id}.")returnTrue#顯示讀者借閱情況defshow_reader_borrowing(self,reader_id):reader=self.readers.get(reader_id)ifnotreader:print("Readernotfound.")returnifnotreader.borrowed_books:print(f"Reader{reader_id}hasnoborrowedbooks.")returnprint(f"Booksborrowedby{reader_id}:")forbook_idinreader.borrowed_books:book=self.books[book_id]#假設通過ID能直接找到Book對象print(book.get_info())```解析思路:a)需要設計`Book`和`Reader`兩個類來封裝圖書和讀者的信息。`Book`類應包含圖書編號、書名、作者和一個標記是否已借出的布爾變量。`Reader`類應包含讀者編號、姓名和一個存儲借閱圖書編號的列表。可以添加獲取信息的方法以便后續(xù)使用。b)管理類`LibraryManager`負責維護圖書和讀者的集合,通常使用字典(哈希表)以ID為鍵來存儲,方便快速查找。主要方法包括:-`add_book`:檢查圖書ID是否已存在,若不存在則創(chuàng)建`Book`對象并加入集合。-`add_reader`:檢查讀者ID是否已存在,若不存在則創(chuàng)建`Reader`對象并加入集合。-`borrow_book`:檢查讀者和圖書是否存在,檢查圖書是否已被借出,檢查讀者是否已達到借閱上限(假設為3本),若滿足條件則更新讀者和圖書的狀態(tài)。-`return_book`:檢查讀者是否存在,檢查讀者是否借閱了該圖書,若滿足條件則更新讀者和圖書的狀態(tài)。-`show_reader_borrowing`:檢查讀者是否存在,若存在則遍歷其借閱列表,并顯示每本圖書的信息。二、```pythondefinfix_to_postfix(s):precedence={'+':1,'-':1,'*':2,'/':2}stack=[]#存儲運算符的棧output=[]#存儲后綴表達式的列表i=0whilei<len(s):ifs[i].isdigit():#如果是數字,直接加入輸出num=''whilei<len(s)ands[i].isdigit():num+=s[i]i+=1output.append(num)continue#繼續(xù)下一個字符的處理elifs[i]inprecedence:#如果是運算符while(stackandstack[-1]!='('andprecedence[stack[-1]]>=precedence[s[i]]):output.append(stack.pop())stack.append(s[i])elifs[i]=='(':#如果是左括號,壓入棧stack.append(s[i])elifs[i]==')':#如果是右括號whilestackandstack[-1]!='(':output.append(stack.pop())stack.pop()#彈出左括號i+=1whilestack:#將棧中剩余的運算符加入輸出output.append(stack.pop())return''.join(output)#將輸出列表轉換為字符串```解析思路:1.初始化:定義運算符優(yōu)先級字典`precedence`,創(chuàng)建一個空棧`stack`用于暫存運算符,創(chuàng)建一個空列表`output`用于存儲生成的后綴表達式。2.遍歷中綴表達式:使用索引`i`從左到右遍歷字符串`s`。3.處理數字:如果當前字符是數字(`isdigit()`),則連續(xù)讀取直到遇到非數字字符,將讀取到的數字字符串加入`output`列表,然后繼續(xù)下一個字符。4.處理運算符:*如果當前字符是運算符,檢查棧頂元素。*如果棧頂是左括號`(`,或者棧為空,或者棧頂運算符優(yōu)先級低于當前運算符,則將當前運算符壓入棧`stack`。*否則,將棧頂優(yōu)先級大于等于當前運算符的運算符依次彈出并加入`output`列表,然后將當前運算符壓入棧。5.處理左括號`(`:直接壓入棧`stack`。6.處理右括號`)`:將棧中元素依次彈出并加入`output`列表,直到遇到左括號`(`。彈出左括號`(`,但不加入`output`。7.剩余棧內運算符:遍歷結束后,棧中可能還有未處理的運算符,依次彈出并加入`output`列表。8.輸出結果:將`output`列表中的元素用空格連接成字符串返回。三、a)最小二乘法計算公式:```a=[Σ(xi-x?)(yi-?)]/[Σ(xi-x?)2]b=?-a*x?```其中:`x?`是所有`x_i`的平均值,`x?=(1/n)*Σxi``?`是所有`y_i`的平均值,`?=(1/n)*Σyi`b)計算過程:數據點:{(1,2),(2,3),(3,5),(4,4),(5,6)}n=5計算平均值:`x?=(1+2+3+4+5)/5=3``?=(2+3+5+4+6)/5=4`計算分子和分母:`Σ(xi-x?)(yi-?)=(1-3)(2-4)+(2-3)(3-4)+(3-3)(5-4)+(4-3)(4-4)+(5-3)(6-4)``=(-2)(-2)+(-1)(-1)+(0)(1)+(1)(0)+(2)(2)``=4+1+0+0+4=9``Σ(xi-x?)2=(1-3)2+(2-3)2+(3-3)2+(4-3)2+(5-3)2``=(-2)2+(-1)2+(0)2+(1)2+(2)2``=4+1+0+1+4=10`計算參數:`a=9/10=0.9``b=4-0.9*3=4-2.7=1.3`c)核心思想與含義:核心思想:通過尋找一條直線(或其他函數),使得這條直線與所有數據點的誤差(通常是垂直距離的平方和)最小。這條直線最佳地擬合了數據點的趨勢。在模型`y=a*x+b`中:`a`(斜率)表示因變量`y`相對于自變量`x`的變化率。在本例中,`a=0.9`,表示`x`每增加1個單位,`y`平均增加0.9個單位。`b`(截距)表示當自變量`x`為0時,因變量`y`的預測值。在本例中,`b=1.3`,表示當`x=0`時,預測的`y`值為1.3。四、```pythondeffind_substrings(text,pattern):ifnotpatternornottext:return[]len_text=len(text)len_pattern=len(pattern)result=[]i=0whilei<=len_text-len_pattern:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論