C語言課程設(shè)計大數(shù)加減試驗報告_第1頁
C語言課程設(shè)計大數(shù)加減試驗報告_第2頁
C語言課程設(shè)計大數(shù)加減試驗報告_第3頁
C語言課程設(shè)計大數(shù)加減試驗報告_第4頁
C語言課程設(shè)計大數(shù)加減試驗報告_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《C語言程序設(shè)計》課程設(shè)計大數(shù)加減一、目的因為C語言中的1玳類型和10ng類型的大小范圍僅為(-32767~32767和-2147483647~2147483647),在某些較大型計算中,數(shù)據(jù)長度不能滿足需要。本實驗?zāi)康氖怯肅設(shè)計一個足夠大的整數(shù)類型,實現(xiàn)兩個大整數(shù)的加減運算。二、需求分析1、輸入的形式和輸入值的范圍運行程序時,按照提示將依次輸入一個整數(shù)、一個‘+’或‘-’號和另一個整數(shù);輸入值最小為0,最大可達(dá)100位,但當(dāng)輸入的兩個數(shù)都是100位且相加時,可能會發(fā)生溢出,所以為了保險起見,最大輸入為99位。2、輸出的形式輸入的兩個數(shù)進(jìn)行加法或減法運算后,結(jié)果將以一個整型數(shù)輸出。3、程序所能達(dá)到的功能在某些較大型計算中,C語言中的1玳類型和10ng類型的長度不能滿足需要,本程序借助字符數(shù)組來儲存這兩個大數(shù),然后根據(jù)0-9的ASCII碼進(jìn)行加減并轉(zhuǎn)換成數(shù)字輸出,從而實現(xiàn)兩個大整數(shù)的加減運算。4、初步的測試計劃(1)兩個正整數(shù)相加,結(jié)果分發(fā)生進(jìn)位和未發(fā)生進(jìn)位兩種情況;(2)兩個正整數(shù)相減,分大數(shù)減小數(shù)和小數(shù)減大數(shù)兩種情況。三、概要設(shè)計1、主函數(shù)模塊intmian(){定義變量;Do{定義字符數(shù)組并初始化;調(diào)用函數(shù)讀入兩個數(shù)據(jù)和從鍵盤輸入‘+’或‘-’;給變量賦值;姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計使用switch結(jié)構(gòu)來實現(xiàn)加減運算并輸出結(jié)果;提示是否繼續(xù)計算;}while( );return0;)2、子函數(shù)功能intread(charstr[N]);用數(shù)組讀入整數(shù)并返回數(shù)位;voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);對兩個整數(shù)進(jìn)行加法運算;voidoutput(charstr[N],intm);輸出兩個整數(shù)相加后的結(jié)果;voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);比較兩個整數(shù)的大小,調(diào)用其它函數(shù)執(zhí)行減法運算,輸出結(jié)果;voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);對兩個整數(shù)進(jìn)行減法運算;voidprint(charstr[N],intm);輸出兩個整數(shù)相減后的結(jié)果。3、數(shù)據(jù)類型及含義inta,b,m,n;定義整型變量,a是第一個整數(shù)的位數(shù),b是第二個整數(shù)的位數(shù),m是a、b中較大值再加上1,n是a、b中較小值;charop,ans;定義字符變量,op代表‘+’或‘-’,ans代表你的選擇(完成此次計算后是否繼續(xù)下一次計算);charnumber1[N]={0},number2[N]={0},number[N]={0};定義三個字符數(shù)組,分別儲存兩個輸入值和一個結(jié)果,并進(jìn)行初始化。姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計四、詳細(xì)設(shè)計1、偽碼算法/*函數(shù)功能:輸入兩個大正整數(shù),利用字符數(shù)組對其進(jìn)行加法運算或減法運算,并輸出結(jié)果*//*頭文件*/#include<stdio.h>#include<string.h> /*用于字符串的處理*//*定義字符串的長度*/#defineN100/*函數(shù)聲明*/intread(charstr[N]);voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);voidoutput(charstr[N],intm);voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);voidprint(charstr[N],intm);voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);/*主函數(shù)*/intmain(){inta,b,m,n;charop,ans;/*定義變量*/do{charnumber1[N]={0},number2[N]={0},number[N]={0};/*定義三個字符數(shù)組并進(jìn)行初始化*/a=read(number1); /*調(diào)用函數(shù)讀入數(shù)據(jù)*/printf(〃請輸入'+'或'-':〃);姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計scanf("%c",&op);/*讀入'+'或'-'*/getchar();/*讀入回車符*/b=read(number2);m=(a>=b?a:b)+1;n=(a<=b?a:b);switch(op){case'+':increase(number1,number2,number,m,n,a,b);output(number,m);break;case'-':calculate(number1,number2,number,m,n,a,b);break;default:printf("輸入錯誤!\n");)printf(〃你想繼續(xù)嗎?輸入丫表示繼續(xù),輸入9表示放棄:〃);scanf("%c”,&ans);getchar();}while((ans==,Y,)||(ans==,y,));return0;)intread(charstr[N]){inti;使用循環(huán)讀入數(shù)據(jù),儲存到字符數(shù)組returni; /*用i返回字符串長度即大正整數(shù)位數(shù)*/姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計)voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){利用字符‘0’到‘9’的ASCII碼進(jìn)行加法運算,注意進(jìn)位;當(dāng)a、b不同時,要考慮a、b的大小,當(dāng)較小的那個數(shù)累加完后,仔細(xì)思考另一個數(shù)剩余位上的數(shù)與進(jìn)位的數(shù)相加后是否進(jìn)位及進(jìn)位后該位數(shù)字;return;)voidoutput(charstr[N],intm){逐個輸入每位數(shù)字,考慮第一位是否為0,如果是0,則不能輸出改為數(shù)字;return;)voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){printf("結(jié)果是:”);if(a>b){decrease(str1,str2,str,m,n,a,b);/*調(diào)用函數(shù)計算*/print(str,m);/*調(diào)用函數(shù)輸出*/)elseif(a<b){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);/*考慮到結(jié)果可能是負(fù)數(shù)*/print(str,m);中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號: 姓名: 5《C語言程序設(shè)計》課程設(shè)計)else/*a=b*/{if(strcmp(str1,str2)>0){decrease(str1,str2,str,m,n,a,b);print(str,m);)elseif(strcmp(str1,str2)<0){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);print(str,m);)else/*strcmp(str1,str2)==0*/{printf(〃0\n〃);))return;)voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){減法運算,考慮借位,分a、b相等和不等進(jìn)行討論;return;)voidprint(charstr[N],intm)姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:

姓名:《C語言程序設(shè)計》課程設(shè)計輸出結(jié)果;return;2、整個程序流程圖如下:《C語言程序設(shè)計》課程設(shè)計輸出結(jié)果;return;2、整個程序流程圖如下:五、調(diào)試分析姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:

姓名:《C語言程序設(shè)計》課程設(shè)計1、關(guān)于用字符數(shù)組來儲存輸入的數(shù)據(jù)我最初的想法是用整型數(shù)組來儲存數(shù)據(jù),將數(shù)據(jù)一次輸入,但在執(zhí)行時無法用strlen來計算數(shù)據(jù)位數(shù),所以我使用字符數(shù)組,但現(xiàn)在想想用整型數(shù)組也是可以的,只要將一個數(shù)的相鄰兩位之間都加入空格,而且計算時會簡單很多,但這樣的輸入很不方便。2、關(guān)于加減時出現(xiàn)的問題(1)利用字符0-9的ASCII進(jìn)行計算、轉(zhuǎn)化,再輸出字符0-9,需要掌握其中規(guī)律,容易出錯;(2)需要注意加減運算可能出現(xiàn)的進(jìn)位和退位的問題;(3)需要考慮兩個數(shù)據(jù)長度不同時,其中每個循環(huán)的控制條件;3、關(guān)于輸出的問題(1)需要考慮兩個整數(shù)相加時結(jié)果的位數(shù)是否增加,如果沒有增加,如何在輸出時消除首位的0;(2)需要考慮兩個整數(shù)相減時,結(jié)果的正負(fù),輸出時結(jié)果前的0。六、測試結(jié)果1、加法運算(1)位數(shù)增加IW課程段計源代德'dashujiaj值NDebugW,.I回(2)位數(shù)不增加中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計2、減法運算(1)結(jié)果為正(2)結(jié)果為負(fù)《C語言程序設(shè)計》課程設(shè)計2、減法運算(1)結(jié)果為正(2)結(jié)果為負(fù)(3)結(jié)果為03、運算符輸入錯誤姓名:中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:《C語言程序設(shè)計》課程設(shè)計yes:12船m貳如■、yes:12船m貳如■、E:\課程設(shè)計源代碼'由shuj㈣MrAD舊bug\&」1=1回yes七、用戶使用說明本程序的算法簡單明確,但在實際的編碼過程中卻遇到了不少細(xì)節(jié)問題,分多種情況討論,導(dǎo)致程序相對較長和復(fù)雜,還好的是實際操作簡單,用戶只需要根據(jù)提示進(jìn)行輸入便可得到結(jié)果,而且可以根據(jù)用戶的選擇重復(fù)計算。果是二33youwantcontinue?¥for揄入一個^整教二21揄入或二葭一wA一"正整數(shù)二12果是二9youwant;continue?Vforessanykeytocontinue八、課程設(shè)計總結(jié)1、本次課程設(shè)計難度較大,是我學(xué)習(xí)C語言以來用時最長、代碼最長的一次編程。2、本次的課程設(shè)計加深了我對C語言的了解,強(qiáng)化了相關(guān)知識,也提高了我對自己專業(yè)的學(xué)習(xí)興趣。3、本次課程設(shè)計的所有內(nèi)容均為自己獨立思考完成的,一定程度上加強(qiáng)了自己的實踐能力和思考能力。中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:104、本次課程設(shè)計加強(qiáng)了我對文檔排版的重視,在準(zhǔn)備材料時首次使用繪圖軟件,也算是一種收獲。

中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:10《C語言程序設(shè)計》課程設(shè)計源代碼:/*函數(shù)功能:輸入兩個大正整數(shù),利用字符數(shù)組對其進(jìn)行加法運算或減法運算,并輸出結(jié)果*/#include<stdio.h>#include<string.h>#defineN100intread(charstr[N]);/*用數(shù)組讀入大正整數(shù)*/b);voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);b);b);/*對兩個大正整數(shù)進(jìn)行加法運算*/voidoutput(charstr[N],intm);/*輸出兩個大正整數(shù)相加后的結(jié)果*/voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);/*b);/*比較兩個大正整數(shù)的大小,分別執(zhí)行不同的操作*/intmain(){inta,b,m,n;charop,ans;do{/*對兩個大正整數(shù)進(jìn)行減法運算*/voidprint(charstr[N],intm);中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:11/*輸出兩個大正整數(shù)相減后的結(jié)果*/voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,int

中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:11《C語言程序設(shè)計》課程設(shè)計charnumber1[N]={0},number2[N]={0},number[N]={0};/*定義三個字符數(shù)組并進(jìn)行初始化*/a=read(number1);/*讀入第一個大正整數(shù)*/printf(〃請輸入'+'或'-':〃);scanf("%c",&op); /*讀入'+'或'-'*/getchar();/*讀入回車符*/b=read(number2); /*讀入第二個大正整數(shù)*/m=(a>=b?a:b)+1;n=(a<=b?a:b);switch(op){case'+':increase(number1,number2,number,m,n,a,b);output(number,m);break;case'-':calculate(number1,number2,number,m,n,a,b);break;default:printf("輸入錯誤!\n");)printf("Doyouwantcontinue?Yforyes,Nforno:");scanf("%c”,&ans);getchar();}while((ans=='Y')||(ans=='y'));return0;)intread(charstr[N])中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:12

中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:12《C語言程序設(shè)計》課程設(shè)計{inti;printf(〃請輸入一個正整數(shù):”);for(i=0;;i++){scanf("%c”,&str[i]);if(str[i]==,\n,){break;))returni;/*用i返回字符串長度即大正整數(shù)位數(shù)*/)voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){charc,d='0';inti;for(i=1;i<=n;i++){c=str1[a-i]+str2[b-i]-48;/*利用ASCII碼對字符進(jìn)行處理*/c=c+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:13《C語言程序設(shè)計》課程設(shè)計if(a>=b){for(i=n+1;i<=a;i++){c=str1[a-i]+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;)str[0]=d;else{for(i=n+1;i<=b;i++){c=str2[b-i]+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;)中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:14

中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:14《C語言程序設(shè)計》課程設(shè)計str[0]=d;)return;)voidoutput(charstr[N],intm){inti;printf("結(jié)果是:”);if(str[0]==,1,){for(i=0;i<m;i++){printf("%c”,str[i]);)printf(〃\n〃);)else{for(i=1;i<m;i++){printf("%c”,str[i]);)printf(〃\n〃);)return;)中南民族大學(xué)計算機(jī)科學(xué)學(xué)院計算機(jī)科學(xué)與技術(shù)專業(yè) 學(xué)號:姓名:15《C語言程序設(shè)計》課程設(shè)計voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){printf("結(jié)果是:”);if(a>b){decrease(str1,str2,str,m,n,a,b);print(str,m);)elseif(a<b){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);print(str,m);)else/*a=b*/{if(strcmp(str1,str2)>0)

溫馨提示

  • 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

提交評論