通訊錄課程設計報告及源程式

2021-08-13 15:24:51 字數 4323 閱讀 4675

合肥學院

電腦科學與技術系

課程設計報告

2008~2009學年第二學期

2023年6月

一、題目

有理數運算程式。有理數是乙個可以化為乙個分數的數,例如2/3,533/920,-12/49都是有理數。在c++中,並沒有預先定義有理數,該課程設計要求定義乙個有理數類,將有理數的分子和分母分別存放在兩個整型變數中,模擬進行針對有理數的各種操作。

二、問題的分析

針對有理數的各種演算法,首先要定義乙個有理數類,在類中定義兩個整型變數作為私有資料,分別存放有理數的分子和分母;其次,要對有理數進行各種不同的操作,如加、減、乘、除、判斷兩個有理數是否相等等各種關係運算,有理數是通過分數形式來進行各種運算的,有理數的加減乘除,並不是簡單的分子與與分子相加減,分母與分母相加減,故要實現它的各種不同的運算,則要針對每種演算法進行不同的操作,處理好兩個有理數的分子與分母之間的運算;再次,有理數是乙個可以轉化為分數的數,但它還有實數的形式,所以,要定義乙個函式來實現將有理數的分數形式轉化為實數形式,以實現其完整性;同時當從鍵盤輸入乙個有理數的分子與分母,或者兩數進行運算後,有理數之間並不是最優化的形式,分子與分母之間仍可以進行化簡,所以,針對這種情況仍需要定義乙個函式來使有理數的分數形式化為最簡,以實現有理數的最優化。

以上演算法都實現了之後,要對每一步都進行輸出顯示,包括資料、計算及計算結果等,所以要再定義乙個輸出函式來實現有理數分數形式、實數形式及最優形式的輸出。同時,為了避免分母為零的錯誤輸入與操作,在函式體內,要將各種錯誤的操作情況一一列出,來避免錯誤的有理數。

三、演算法的設計

設有兩個有理數a/b和c/d,則有:

(1) 有理數相加分子=a*d+b*c;分母=b*d

(2) 有理數相減分子=a*d-b*c;分母=b*d

(3) 有理數相乘分子=a*c; 分母=b*d

(4) 有理數相除分子=a*d; 分母=b*c

定義乙個有理數類num(),通過建構函式實現對資料的初始化;然後將運算子+、-、*、/過載為該類的成員函式,再在函式內按照上述方法將兩個有理數之間的加、減、乘、除運算實現,;再同樣通過過載運算子==實現判定兩個有理數是否相等,;再定義乙個可對有理數約分的函式yuefen(),在函式體中首先要找到分子與分母的最大公約數,再將分子與分母同時除以這個最大公約數,優化函式在建立有理數物件時應執行,在執行其它各種運算之後也需執行它,這樣可保證所儲存的有理數隨時都是最優的。然後定義乙個轉換函式realnum(),將每乙個有理數都好轉換成實數形式,且同樣在執行各種運算後都執行它。最後定義乙個函式show(),實現對資料的輸出,同時為了避免分母為零的錯誤輸入,當乙個有理數的分母輸入為零時,提示輸入錯誤,以保證資料的正確性,當分子輸入為零時,不管其分母多大,都顯示輸出為零,否則輸出形式為:

分子/分母。

設有理數輸入格式為:整數1 整數2 整數3 整數4 //整數1、2、3、4分別為兩個有理數的分子和分母

有理數輸出格式為:分子/分母

主函式中要提示使用者操作,首先定義乙個字元m,提示使用者輸入n或y來確定是否進入系統,用if語句來來實現,輸入為n,則顯示「不進入系統!」,輸入為y,則確定進入系統,則顯示「您的輸入有誤!」。

確定進入系統後,定義四個整數a,b,c,d,資料從鍵盤輸入,分別存放有理數1的分子分母和有理數2的分子分母,再將這兩個有理數分別通過分數、實數及最優形式輸出。然後宣告兩個帶引數的有理數類物件n1(a,b)和n2(c,d),分別為有理數a/b和c/d,再宣告乙個無實參物件n3,來存放有理數n1和n2 的運算結果;再提示輸入運算子,又通過if語句實現每乙個相應運算子的操作並將結果再次通過分數、實數及最優形式輸出,如果輸入的運算子不是則提示「您的運算子輸入不正確!」,最後判斷出兩個有理數是否相等並將結果輸出。

乙個運算結束後,再次通過if語句提示是否繼續進行下乙個運算,如果不繼續,則輸出「退出運算系統」,如果繼續,則會通過return main()返回繼續以上操作。

系統類圖:

屬性和方法定義:

四、 使用者手冊

程式執行時,首先提示是否進入系統。

如不進入系統,則顯示不進入系統;

確定進入系統後,提示輸入兩個有理數。

輸入四個整數分別作為兩個有理數的分子和分母後,會將這兩個有理數和化簡與轉換後的形式分別輸出;

再提示所需要的運算子;

輸入乙個運算子後,將會將其所進行的操作顯示出來並將其優化且轉化為實數,並判斷出兩個有理數是否相等;

運算結束後,再提示是否繼續,然後繼續以上操作。

五、 除錯及測試

除錯:除錯過程中,對於類中成員與函式的定義與實現,起初並無什麼錯誤,對於主函式,採取由簡入深的方法,開始僅宣告了三個有理數物件n1(3,4),n2(5,6),n3,然後通過n3=n1+n2,n3=n1-n2,n3=n1*n2,n3=n1/n2來進行計算,並呼叫有理數的輸出、轉化、約分函式來進行輸出。後來,在主函式中,定義了四個整數,以實現從鍵盤輸入有理數,然後宣告有理數物件n1(a,b),n2(c,d),n3,然後再進行上一步一樣的操作。

但這個不能實現多組資料進行測試,所以採用了for迴圈,但後來發現for迴圈的使用不能很好的進行各種運算。即便採用了for迴圈,這也僅僅只是乙個簡單的運算程式,不能實現系統的各種輸入,要實現系統化,並將每乙個運算都進行化簡與轉換,保證輸入都正確,輸出的形式完好,且要系統化的輸出,並實現用多個數進行測試,就需進一步改進。於是採用了後來的if語句等,然後根據各種選擇來進行各種不同的操作運算,除錯中也沒什麼錯。

但對於怎樣實現在乙個運算之後返回繼續執行程式,進行下乙個運算,開始根本就沒有任何辦法,乙個運算結束後,不管輸入的是y還是n,都會退出系統,後來,抱著試試看的態度,採用return main(),除錯後無錯誤,且執行結果正確。要能保證輸入的數正確,當將分母輸入為零時,將會提示輸入錯誤,只是不能立即結束,繼續進行下一步運算,這是一大漏洞。

測試及執行例項:

首先,我要輸入「y」確定進入有理數運算系統,然後輸入2,4,6,9四個整數來進行測試,測試顯示出兩個有理數及其各種形式,然後,輸入運算子「+」來測試對以上兩個有理數2/4,6/9的加法運算,結果輸出顯示運算後的各種形式,並且判斷出了這兩個有理數不相等並輸出。這個運算結束後,繼續輸入「y」進入系統,然後再重新輸入四個整數3,7,9,11進行測試,測試結果無誤,接著輸入運算子「/」來測試兩個新的有理數3/7,9/11之間的除法運算,結果顯示並輸出,然後又判斷出這兩個有理數步行等並輸出。運算結束後,輸入「n」來結束有理數的運算,結果中則會顯示出「退出運算程式!

」。再次進入系統,來測試分子與分母分別輸入輸入為零時的運算,當先輸入乙個分子為零的有理數0/3和乙個有理數7/10時,有理數0/3的輸出形式為0,輸出結果正確,運算繼續;當輸入輸入的有理數中有乙個分母為零的有理數時 ,如有理數3/0,7/10,它的化簡形式仍為3/0,但後面關於這個數的運算就是亂碼。

例項如下:

對測試結果的分析:從測試結果來看,題目中的要求等都能實現,針對有理數的各種不同的運算都可以很好的運算出來,且可以在呼叫任何乙個運算時同時呼叫約分、化簡、轉換等函式,並且將結果輸出,並且可以在運算結束後根據函式中的演算法判斷出輸入的兩個有理數是否相等。在主函式中,也可以通過一步步的操作來進行不同的運算,同時,可以在乙個運算結束後通過返回來實現運用多組資料進行不同運算子的操作。

六、參考文獻

[1]鄭莉等. c++語言程式設計(第三版).北京:清華大學出版社,2023年

[2]鄭莉等. c++語言程式設計(第三版)學生用書.北京:清華大學出版社,2023年

[3]李春葆等. c++程式設計學習與上機實驗指導. 北京:清華大學出版社,2023年

[4]範輝等.visual c++6.0程式設計簡明教程.高等教育出版社,2023年

[5]李龍澍.c++程式設計實訓教程.北京:清華大學出版社 ,2023年

[6]洪國勝等. c++ builder程式設計輕鬆上手.北京:清華大學出版社,2023年

[7]嚴蔚敏等.資料結構(c語言版).北京:清華大學出版社,2023年4月第1版。

[8]胡學鋼等.資料結構演算法設計指導.北京:清華大學出版社,2023年第1版。

附錄源程式

#include

class num

void yuefen(int x,int y);//定義約分函式

num operator + (num n2);//運算子+過載成員函式

num operator - (num n2);//運算子-過載成員函式

num operator * (num n2);//運算子*過載成員函式

num operator / (num n2);//運算子/過載成員函式

bool operator == (num n2);//運算子==過載成員函式

double realnum();

void num::yuefen(int x,int y分數化簡函式

if(t)

{numerator=x/t;

denominator=y/t;

C語言課程設計通訊錄管理系統源程式

void xadress cstudent q 100 int i 位址修改 int sput int len,cstudent q 100 刪除的處理模組 main while i 0 i 5 system cls switch i 增加 case 2 修改 case 5 刪除 default i...

詳細通訊錄課程設計報告

目錄1總體設計與演算法分析 1 1.1 課程需求分析 1 1.2 資料結構設計 1 1.3 關鍵演算法分析與設計 2 1.3.1總體設計 2 1.3.2 關鍵演算法分析 3 2程式流程圖和與函式說明 4 2.1 主函式流程圖 4 2.2函式說明 5 2.2.1主函式 5 2.2.2主選單 5 2.2...

C通訊錄課程設計

一 設計任務分析 實現以下功能 1 通訊錄編輯 新增 刪除 2 按不同的項進行查詢 3 對已存在的通訊錄按不同的項排序 4 將通訊錄寫入檔案 5 從檔案讀入通訊錄。二 模組設計 本次程式設計主要設計了六個模組 主要是 函式用於通訊錄中的資訊進行新增,主要流程如下 函式用於通訊錄中的資訊進行刪除,主要...