C語言課程設(shè)計(jì)報(bào)告_第1頁
C語言課程設(shè)計(jì)報(bào)告_第2頁
C語言課程設(shè)計(jì)報(bào)告_第3頁
C語言課程設(shè)計(jì)報(bào)告_第4頁
C語言課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程設(shè)計(jì)報(bào)告課程名稱:計(jì)算機(jī)高級語言課程設(shè)計(jì)(C)學(xué)生姓名: 學(xué)號: 班號: 2015年春季學(xué)期大數(shù)相乘問題一、 題目描述兩個大數(shù)相乘問題【要求】本問題中,要求輸入兩個相對較大的正整數(shù),能夠通過程序計(jì)算出其結(jié)果。【提示】兩個相對較大的數(shù)肯定是不能夠用LONG INT類型存儲的,因?yàn)長ONG型數(shù)據(jù)的數(shù)據(jù)范圍也并不是很大,于是就需要采用其他的存儲結(jié)構(gòu)。這里推薦用數(shù)組存儲一個大數(shù),數(shù)組的初始空間可以定義到如200或300個單元,每個單元存儲一位數(shù)據(jù),形如下圖:255 96207.。這樣理論上,比如數(shù)組定義為200,就可以存儲200個數(shù)字的整數(shù),應(yīng)該是滿足足夠大的條件了。而結(jié)果的存儲也需要考慮空間的問

2、題,所以需要一個更大的數(shù)組。在解決了存儲問題后,我們需要來實(shí)現(xiàn)乘法運(yùn)送的過程,也就是說你必須要把這個數(shù)組中的每一位數(shù)字單獨(dú)來進(jìn)行乘法運(yùn)算,比如我們可以用一個數(shù)字和另外一個數(shù)組中的每一位去相乘,從而得到乘法運(yùn)算中一行的數(shù)字,再將每一行數(shù)字錯位相加。這就是乘法運(yùn)算的過程。二、 算法描述1.簡介本程序用到多個int型變量與字符型數(shù)組a、b以及整形數(shù)組num1、num2、e,結(jié)合for循環(huán)與dowhile、while循環(huán),使用if語句判斷各個環(huán)節(jié)的運(yùn)行結(jié)果,最終達(dá)到目的,做到了計(jì)算出兩個大數(shù)相乘的結(jié)果并將其輸出。未用到子函數(shù),靠主函數(shù)與復(fù)雜的算法完成計(jì)算。2.算法分析1)、兩個大數(shù)的輸入:(自己設(shè)計(jì)完

3、成)考慮到兩個大數(shù)長度非常長,采用單個變量顯然會使程序臃腫混亂,故采用數(shù)組來儲存這兩個大數(shù);又考慮到人們在鍵盤上的輸入一串?dāng)?shù)字時是希望一次將其輸完,因此在輸入這兩個數(shù)字時要避免其他繁雜的操作。字符型數(shù)組可一次性存入一個字符串,但字符無法進(jìn)行數(shù)學(xué)運(yùn)算;整型數(shù)組可以進(jìn)行運(yùn)算,但一次只能存入一個數(shù)字。所以本程序使用字符型數(shù)組讀入兩個大數(shù),再將其轉(zhuǎn)為整型數(shù)組進(jìn)行相乘、相加運(yùn)算。2)、讀取兩個字符數(shù)組存入字符的長度:(自己設(shè)計(jì)完成)兩字符數(shù)組初始長度都比較大,本程序?qū)⑺鼈冮L度均定義為200,(還可以更大);但人們在鍵盤輸入的數(shù)字是隨機(jī)的,因此每次執(zhí)行兩大數(shù)的長度都不會是一個定值,且一般會小于200。這就

4、需要有一個算法來讀取兩字符串的長度。字符串的末尾會有結(jié)束符0跟隨,可使用循環(huán)語句與計(jì)數(shù)器m、n,在計(jì)數(shù)的同時判斷是否讀到結(jié)束符位置,若檢測到0,說明用戶輸入的字符串已經(jīng)結(jié)束,這時跳出循環(huán),并取計(jì)數(shù)器最終值,即為大數(shù)長度。為達(dá)到修改程序時及時糾錯目的,可將這兩個字符長度用printf語句輸出。這段算法采用do-while循環(huán)。這里也可以運(yùn)用函數(shù)庫中更為簡便的strlen函數(shù)。3)、字符串轉(zhuǎn)化為數(shù)字:(自己設(shè)計(jì)完成)字符串與數(shù)字的轉(zhuǎn)化可以應(yīng)用常用字符與ASCII碼之間的關(guān)系來完成。數(shù)組a、b接收到的是0-9之間的字符,雖然其顯示的是數(shù)字,但與數(shù)字有別。ASCII值048-057段代表了1-9這些字

5、符,0與048相對應(yīng),因此,用a中存放的字符減去0即可得到各字符所代表的數(shù)字。由于這些字符無法一次性轉(zhuǎn)為數(shù)字,故會用到for循環(huán)結(jié)構(gòu)。并在循環(huán)的同時將讀取的數(shù)字存入數(shù)組num1、num2中。4)、兩大數(shù)相乘算法:(參考其他程序)首先根據(jù)兩數(shù)相乘的運(yùn)算規(guī)則定義會用到的各個變量,他們有:計(jì)數(shù)器i、k、j、p;臨時變量tmp;進(jìn)位變量up;存放最終結(jié)果的數(shù)組e。計(jì)算的過程用實(shí)例來說明,隨機(jī)選擇兩個較大數(shù)字,如:65936×36794,可先將其筆算過程寫出: 6 5 9 3 6 ×3 6 7 9 40 0 2 6 3 7 4 40 5 9 3 4 2 44 7 1 5 5 2.本算

6、法就是按照筆算的思想來進(jìn)行的。num2中的數(shù)字由末位到第一位依次與num1中的最后一位數(shù)字相乘,并將結(jié)果正序存在數(shù)組e中。然后num2中所有數(shù)字再與nu1中倒數(shù)第二位相乘,同時用相乘的結(jié)果與前一次計(jì)算的結(jié)果錯位做加法運(yùn)算,并以此類推。詳細(xì)過程:如65936先與4做乘法運(yùn)算,tmp=6*4=24,進(jìn)2余4,用取余符%得到余數(shù)4并存在e1中,用int型變量的除法運(yùn)算特點(diǎn)得到進(jìn)位量2存放在up中;至此最內(nèi)層循環(huán)進(jìn)行一次,數(shù)組num2中的因數(shù)前移一位變?yōu)?,tmp=3*4=12按乘法計(jì)算法則知,12取余應(yīng)與上次運(yùn)算的進(jìn)位量2相加,而這一次的進(jìn)位量1應(yīng)繼續(xù)存放在up中等待與下一次的余數(shù)相加,以后繼續(xù)進(jìn)行

7、循環(huán),直到num2中的第一位與4做完乘法。但當(dāng)進(jìn)行完這些工作后,程序并不會馬上回到外層循環(huán),而是先判斷此時up是否大于0,若是,e中存入的數(shù)字前面會再存入一個數(shù)據(jù)即為up的當(dāng)前值。當(dāng)num2所有數(shù)與4相乘后程序跳出內(nèi)層循環(huán),num1前移一位,然后繼續(xù)執(zhí)行循環(huán)。可注意到程序中的tmp變量并不僅是是num1與num2之積,還加上了上次所得up與ek+p,這是因?yàn)?,程序在進(jìn)行計(jì)算乘積的同時,還要與上一項(xiàng)存入數(shù)據(jù)進(jìn)行錯位相加,這樣做的目的是,可以使程序更為簡練,避免了后續(xù)繁雜工作, 但此技法較難理解。5)、結(jié)果輸出(自己設(shè)計(jì))首先要算出結(jié)果的最大長度,由數(shù)學(xué)知識可知,其最大長度為n*m。但程序可能會比

8、這短,可由一個while語句來找到結(jié)果的初始位置,并標(biāo)記。接下來由于存放數(shù)據(jù)的循序是由e1到en*m,所以輸出順序不能按常理由正方向開始,而應(yīng)倒序輸出。結(jié)合for循環(huán),輸出最終計(jì)算結(jié)果。并結(jié)束程序。三、 流程圖四、 運(yùn)行效果截圖五、 心得體會C語言設(shè)計(jì)的目的不僅是讓程序按照自己的意愿去執(zhí)行,還要求程序的精簡、高效。要做到調(diào)用最少的東西去完成最多的工作。如本程序中用到的數(shù)組與計(jì)算方法,但是,要做到這一點(diǎn)就要求我們對C語言有足夠的了解,并可以將所學(xué)知識合理運(yùn)用。合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。平時的練習(xí)與積累十分重要,要有鉆研的精神,多去研究別人寫出的優(yōu)秀的程序,從中吸

9、取經(jīng)驗(yàn),得到啟發(fā),并靈活運(yùn)用,那么,學(xué)好C語言,一定不在話下。對于剛剛開始進(jìn)入實(shí)踐過程的人來說,程序的調(diào)試工作既枯燥又艱難,但萬事開頭難,只要多想、多問,問題一定可以解決。而且,只有這樣一個過程,我們才能學(xué)會如何將書中學(xué)到的知識加以運(yùn)用??傊?,熟練運(yùn)用C語言是一個難得的本領(lǐng),看到自己的程序在調(diào)試之后完美運(yùn)行會收獲巨大的成就感。方程求解(自己設(shè)計(jì))一、題目描述編寫程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之間的根。提示: 用do-while語句實(shí)現(xiàn)。 二分法的計(jì)算步驟:(1) 準(zhǔn)備 計(jì)算f(x)在有根區(qū)間a,b端點(diǎn)處的值f(a),f(b)(2) 二分 計(jì)算f(x)在區(qū)間中

10、點(diǎn)(a+b)/2處的值f(a+b)/2(3) 判斷若f(a+b)/2=0,則即是根,計(jì)算過程結(jié)束。否則,檢測:A 若f(a+b)/2與f(a)異號,則根位于區(qū)間a,(a+b)/2內(nèi),這時以(a+b)/2代替b;B 若f(a+b)/2與f(a)同號,則根位于區(qū)間(a+b)/2,b內(nèi),這時以(a+b)/2代替a;反復(fù)執(zhí)行步驟2和3,直到區(qū)間a,b長度縮小到允許的誤差范圍之內(nèi),此時中點(diǎn)(a+b)/2即為所求的根。二、算法描述1、簡介本程序主要運(yùn)用數(shù)學(xué)中的二分法求解一元三次方程的實(shí)根,在此思路引領(lǐng)下,使用do-while語句、if語句與各種運(yùn)算構(gòu)成算法,完成程序。本程序未使用子函數(shù)。什么是二分法?對于

11、區(qū)間a,b上連續(xù)不斷且f(a)·f(b)<0的函數(shù)y=f(x),通過不斷地把函數(shù)f(x)的零點(diǎn)所在的區(qū)間一分為二,使區(qū)間的兩個端點(diǎn)逐步逼近零點(diǎn),進(jìn)而得到零點(diǎn)近似值的方法叫二分法。2、算法分析首先由scanf函數(shù)讀入函數(shù)解所在區(qū)間,將它們存在變量a、b中;計(jì)算a、b中點(diǎn)數(shù)值,因a、b中點(diǎn)不一定為整數(shù),故將其存入double型變量x中; 將x代入f(x)中,即計(jì)算2x3-4x2+3x-6的值,存入double型變量f中;判斷f是大于0,小于0,還是等于0,已知f(-10)<0,f(10)>0,若f(x)<0 ,說明解位于(x,b)內(nèi),因此積分區(qū)間縮小一倍,將x值賦予a;若f(x)值大于0,同理,說明解位于(a,x)內(nèi),將x賦值給b;若f(x)值為零,說明當(dāng)前x值即為方程的解,此時輸出x,并結(jié)束程序;整個程序的循環(huán)由do-while語句來控制,改變while (i<100)中100處數(shù)值,就可改變方程的循環(huán)次數(shù),得到不同精度的解。 三、 流程圖四、運(yùn)行效果截圖 五、心得體會C語言可以結(jié)合多個科目的知識完成一些工作,這需要編程人員有融會貫通的能力,C語言與各領(lǐng)域結(jié)合,方能使它的價值得到最充分的體現(xiàn)。同時,我們學(xué)到的各種數(shù)學(xué)知識,都可以轉(zhuǎn)化為最簡單的加、減

溫馨提示

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

評論

0/150

提交評論