版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語言課程設(shè)計(jì)實(shí)習(xí)報(bào)告學(xué)號(hào):20081002235班級(jí)序號(hào):01108136姓名:指導(dǎo)老師:時(shí)間:2011 年12 月22日題目(一)題目描述:【要求】本問題中,要求輸入兩個(gè)相對(duì)較大的正整數(shù),能夠通過程序計(jì)算出其結(jié)果?!咎崾尽?jī)蓚€(gè)相對(duì)較大的數(shù)肯定是不能夠用LONG INT類型存儲(chǔ)的,因?yàn)長(zhǎng)ONG型數(shù)據(jù)的數(shù)據(jù)范圍也并不是很大,于是就需要采用其他的存儲(chǔ)結(jié)構(gòu)。這里推薦用數(shù)組存儲(chǔ)一個(gè)大數(shù),數(shù)組的初始空間可以定義到如200或300個(gè)單元,每個(gè)單元存儲(chǔ)一位數(shù)據(jù),形如下圖:255 96207.。這樣理論上,比如數(shù)組定義為200,就可以存儲(chǔ)200個(gè)數(shù)字的整數(shù),應(yīng)該是滿足足夠大的條件了。而結(jié)果的存儲(chǔ)也需要考慮空
2、間的問題,所以需要一個(gè)更大的數(shù)組。在解決了存儲(chǔ)問題后,我們需要來實(shí)現(xiàn)乘法運(yùn)送的過程,也就是說你必須要把這個(gè)數(shù)組中的每一位數(shù)字單獨(dú)來進(jìn)行乘法運(yùn)算,比如我們可以用一個(gè)數(shù)字和另外一個(gè)數(shù)組中的每一位去相乘,從而得到乘法運(yùn)算中一行的數(shù)字,再將每一行數(shù)字錯(cuò)位相加。這就是乘法運(yùn)算的過程。設(shè)計(jì)思路:乘法計(jì)算的算法,從低位向高位乘,在豎式計(jì)算中,我們是將乘數(shù)第一位與被乘數(shù)的每一位相乘,記錄結(jié)果,之后,用第二位相乘,記錄結(jié)果并且左移一位,以此類推,直到計(jì)算完最后一位,再將各項(xiàng)結(jié)果相加。通過調(diào)用函數(shù)得出最后結(jié)果。流程圖:開始輸入兩個(gè)大數(shù)作為字符串運(yùn)用鏈表(調(diào)用位函數(shù)GetDigits(int *a,char *s)
3、)用字符表示(調(diào)用大數(shù)相乘函數(shù)multiply(int *a,int *b,int *c))進(jìn)行大數(shù)相乘運(yùn)算第一位乘數(shù)與被乘數(shù)的結(jié)果保存在鏈表中,之后把存儲(chǔ)結(jié)果的頭部后移一位、也就是從鏈表的第二加起,當(dāng)?shù)诙怀藬?shù)與被乘數(shù)結(jié)果加到第二之后的各個(gè)項(xiàng)內(nèi)。輸出計(jì)算結(jié)果結(jié)束運(yùn)行效果截圖: 附源程序如下:#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 100int GetDigits(int *a,char *s);int multiply(int *a,int *b,int *c);m
4、ain() char s1N,s2N; int i,j,aN,bN,cN*2; printf("n 請(qǐng)輸入數(shù)字 a: "); scanf("%s",s1); printf("n 請(qǐng)輸入數(shù)字 b: "); scanf("%s",s2); GetDigits(a,s1); GetDigits(b,s2); multiply(a,b,c); j=N*2-1; while(cj=0) j-; printf("n %s * %s=",s1,s2); for(i=j;i>=0;i-) printf(&
5、quot;%d",ci);int GetDigits(int *a, char *s) int i; char digit; int len=strlen(s); for(i=0;i<N;i+) *(a+i)=0; for(i=0;i<len;i+) digit=*(s+i); *(a+len-1-i) = digit - '0' int multiply(int *a,int *b,int *c) int i,j; for(i=0;i<N*2;i+) *(c+i)=0; for(i=0;i<N;i+) for(j=0;j<N;j+) *
6、(c+i+j)+=*(a+i) * *(b+j); for(i=0;i<N*2-1;i+) *(c+i+1)+=*(c+i)/10; *(c+i)=*(c+i)%10; 題目(二)題目描述:職工信息包括職工號(hào)、姓名、性別、年齡、學(xué)歷、工資、住址、電話等(職工號(hào)不重復(fù))。試設(shè)計(jì)一職工信息管理系統(tǒng),使之能提供以下功能:系統(tǒng)以菜單方式工作v職工信息錄入功能(職工信息用文件保存)輸入v職工信息瀏覽功能 輸出v查詢和排序功能:(至少一種查詢方式) 算法vl 按工資查詢l 按學(xué)歷查詢等職工信息刪除、修改功能(任選項(xiàng))v根據(jù)題目要求,要求對(duì)職工信息進(jìn)行輸入、輸出等操作;
7、在程序中需要瀏覽職工的信息,應(yīng)提供顯示、查找、瀏覽、插入、修改等操作;另外還應(yīng)提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇。設(shè)計(jì)思路及程序代碼:根據(jù)上面的需求分析,可以將這個(gè)系統(tǒng)設(shè)計(jì)分為以下模塊:數(shù)據(jù)添加、數(shù)據(jù)查找、數(shù)據(jù)修改、數(shù)據(jù)刪除、數(shù)據(jù)輸出。主函數(shù)主函數(shù)一般設(shè)計(jì)得比較簡(jiǎn)潔,只提供輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。程序: /*主函數(shù)*/main ()menu();/*menu函數(shù)*/void menu() int n,w1;/*變量n保存選擇菜單數(shù)字,w1判斷輸入的數(shù)字是否在功能菜單對(duì)應(yīng)數(shù)字范圍*/ do puts("tt*menu*nn"); puts(&
8、quot;tttt1.Enter new data"); puts("tttt2.Browse all"); puts("tttt3.Search ");puts("tttt4.add"); puts("tttt5.Exit"); puts("nntt*n"); printf("Choice your number(1-5): bb"); scanf("%d",&n); if(n<1|n>5) /*對(duì)選擇的數(shù)字作出判斷,是否在
9、菜單功能數(shù)字范圍內(nèi)*/ w1=1;getchar(); else w1=0; while(w1=1); switch(n)/*根據(jù)輸入的數(shù)字,進(jìn)入到相應(yīng)的操作模塊中*/ case 1:enter();break;/*輸入模塊*/ case 2:browse();break; /*瀏覽模塊*/ case 3:search();break; /*查找模塊,其中包括按不同類別進(jìn)行查找的多個(gè)子模塊*/ case 4:add();break;/*插入模塊*/ case 5:exit(0); /*退出*/ 注:menu函數(shù)能提供菜單方式選擇功能,可以根據(jù)用戶需要進(jìn)入到所想要的操作模塊中,此外把menu函數(shù)
10、獨(dú)立出來,可以方便隨時(shí)對(duì)它進(jìn)行調(diào)用,容易返回到系統(tǒng)界面。 用結(jié)構(gòu)體來存放職工信息:/*結(jié)構(gòu)體*/struct workerchar number11;char name20;char sex20;char adress20;char xueli20;char telephone20;char age20;char salary20;worN;/* worN中每個(gè)數(shù)組元素對(duì)應(yīng)一個(gè)職工*/其中可以根據(jù)宏定義# define N隨時(shí)對(duì)N的值進(jìn)行調(diào)整,擴(kuò)大信息的儲(chǔ)存量。輸入模塊程序:/*輸入模塊*/void enter()/*輸入函數(shù)*/int i,n; printf("How many w
11、orkers(0-%d):",N-1); scanf("%d",&n);/*輸入記錄的個(gè)數(shù),賦值給n*/ printf("n Enter data nownn"); for(i=0;i<n;i+)/*通過for循環(huán)語句依次輸入個(gè)職工信息數(shù)據(jù)*/ printf("n Input %dth worker record.n",i+1); input(i);/*調(diào)用單個(gè)輸入函數(shù)*/ if(i!=0)save(n);/*調(diào)用保存函數(shù)*/ printf_back(); /*一個(gè)任務(wù)結(jié)束時(shí)讓用戶選擇還是瀏覽還是返回*/ 瀏覽
12、模塊按任意鍵顯示下一屏按任意鍵返回主菜單程序:/*瀏覽(全部)模塊*/browse() /*瀏覽(全部模塊)*/ int i,j,n; n=load(); /*調(diào)用加載函數(shù),并計(jì)算可以記錄的個(gè)數(shù)*/ printf_face(); /*調(diào)出顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/ for(i=0;i<n;i+) /* for循環(huán)語句用以分屏顯示*/ if(i!=0)&&(i%10=0)/*判斷i值能否整除10,每10行一屏顯示*/ printf("nnPass any key to continue."); getchar(); puts("nn")
13、; printf_one(i);/*調(diào)用顯示一個(gè)記錄的函數(shù)*/ printf("tThere are %d record.n",n);/*提示用戶儲(chǔ)存信息數(shù)量*/ printf("nPass any key to back."); getch();/*按任意鍵*/ menu();/*返回主菜單*/查找模塊search() /*查找模塊*/int c,w1;do /* do- while循環(huán)語句用來判斷用戶的選擇是否在程序規(guī)定之內(nèi)*/puts("nsearch by=>nn1).number2.xueli3).cancel and back
14、");printf("Which you needed?: bb");scanf("%d",&c);if(c>3|c<1) /*對(duì)選擇的數(shù)字作出判斷*/puts("nchoice error!please again!");getchar();while(c>3|c<1);switch(c) /* switch語句提供按不同類別進(jìn)行查找功能*/case 1:search1();break; /*按職工號(hào)進(jìn)行查找*/ case 2:search2();break; /*按姓名進(jìn)行查找*/ cas
15、e 3:menu();break; /*返回主菜單*/*按職工號(hào)查找模塊*/流程圖:按職工號(hào)查找模塊用戶作出選擇,輸入一整型數(shù)值 search1()int i,n,k,w1=1,w2,w3,w4; struct worker s; /*定義結(jié)構(gòu)體變量s,用以儲(chǔ)存輸入的number的值,便于進(jìn)行比較*/ n=load(); /*加載將要記錄的個(gè)數(shù)*/ do /*該do- while循環(huán)語句判斷是否繼續(xù)執(zhí)行該函數(shù)*/ do /*該do- while循環(huán)語句判斷是否找到要查找的對(duì)象*/ k=-1; printf("nnEnter number that you want to search
16、! number:"); scanf("%s",s.number); printf_face();/*調(diào)出顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/ for(i=0;i<n;i+) /* for循環(huán)語句用來判斷原數(shù)據(jù)信息中是否有與輸入職工號(hào)相同的職工號(hào)*/ if(strcmp(s.number,wori.number)=0) /*原數(shù)據(jù)信息中找到與輸入職工號(hào)相同的職工號(hào)*/ k=i; printf_one(k);break; if(k=-1) / *原數(shù)據(jù)信息中沒有找到與輸入職工號(hào)相同的職工號(hào)*/ printf("nnNo exit!please"); p
17、rintf("nnAre you again?nt1).again 2).No and back bb"); scanf("%d",&w1); if(w1=2) menu();/*返回主菜單*/ while(k=-1&&w1=1);/*在沒有找到且想再次查找的情況下繼續(xù)進(jìn)行循環(huán)*/ w4=0;w3=0; if(k!=-1) /*在查找到的情況下*/printf("nnWhat do you want to do?nt1).Search another 2).Modify 3).Back menu bb"); s
18、canf("%d",&w2); switch(w2) case 1:search1();break;/*繼續(xù)按照職工號(hào)查找其他對(duì)象*/ case 2:w3=modify_data(k,n);break;/*對(duì)查找到的對(duì)象進(jìn)行修改*/ case 3:menu();break;/*返回主菜單*/ while(w2=1);menu();/*返回主菜單*/ /*按姓名查找模塊*/流程圖按職工學(xué)歷查找模塊用戶作出選擇,輸入一整型數(shù)值程序:search2()int i,n,k,w1=1,w2,w3,w4; struct worker s; /*定義結(jié)構(gòu)體變量s,用以儲(chǔ)存輸入的x
19、ueli的值,便于進(jìn)行比較*/ n=load(); /*加載將要記錄的個(gè)數(shù)*/ do /*該do- while循環(huán)語句判斷是否繼續(xù)執(zhí)行該函數(shù)*/ do /*該do- while循環(huán)語句判斷是否找到要查找的對(duì)象*/ k=-1; printf("nnEnter xueli that you want to search! xueli:"); scanf("%s", xueli ); printf_face();/*調(diào)出顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/ for(i=0;i<n;i+) /* for循環(huán)語句用來判斷原數(shù)據(jù)信息中是否有與輸入職工姓名相同的 職工號(hào)*/
20、 if(strcmp(s. xueli,wori. xueli)=0) /*原數(shù)據(jù)信息中找到與輸入職工姓名相同的職工*/k=i; printf_one(k);break; if(k=-1) / *原數(shù)據(jù)信息中沒有找到與輸入職工姓名相同的職工號(hào)*/ printf("nnNo exit!please"); printf("nnAre you again?nt1).again 2).No and back bb"); scanf("%d",&w1); if(w1=2) menu();/*返回主菜單*/ while(k=-1&
21、&w1=1);/*在沒有找到且想再次查找的情況下繼續(xù)進(jìn)行循環(huán)*/ w4=0;w3=0; if(k!=-1) /*在查找到的情況下*/printf("nnWhat do you want to do?nt1).Search another 2).Modify 3).Back menu bb"); scanf("%d",&w2); switch(w2) case 1:search1();break;/*繼續(xù)按照職工姓名查找其他對(duì)象*/ case 2:w3=modify_data(k,n);break;/*對(duì)查找到的對(duì)象進(jìn)行修改*/ case
22、3:menu();break;/*返回主菜單*/ while(w2=1);menu();/*返回主菜單*/插入模塊【程序】/*插入模塊*/add() /*插入模塊*/ int i,n,m,k; FILE*fp; n=load(); /*加載將要記錄的個(gè)數(shù)*/printf("How many worker are you want to add(0-%d)?:",N-1-n); scanf("%d",&m); /*輸入要查如職工信息的個(gè)數(shù)*/k=m+n; for(i=n;i<k;i+) /*用for循環(huán)實(shí)現(xiàn)m個(gè)信息的錄入*/ printf("nInput %dth workers record.n",i-n+1 ); input(i); /*調(diào)用整條職工信息輸入函數(shù)*/ if(fp=fopen("worker.txt","ab")=NULL) printf("cannot open filen"); for(i=n;i<k;i+) /*用for循環(huán)實(shí)現(xiàn)對(duì)m個(gè)信息錄入到文件worker.txt */if(fwrit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年九江理工職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 吶喊中的要課件
- 2024年雞東縣幼兒園教師招教考試備考題庫及答案解析(必刷)
- 2025年中國刑事警察學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2025年饒陽縣招教考試備考題庫及答案解析(必刷)
- 2024年盤縣招教考試備考題庫及答案解析(奪冠)
- 2025年長(zhǎng)春職業(yè)技術(shù)大學(xué)馬克思主義基本原理概論期末考試模擬題附答案解析(必刷)
- 2025年濮陽職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫帶答案解析
- 2025年湘中幼兒師范高等??茖W(xué)校單招職業(yè)適應(yīng)性考試題庫帶答案解析
- 2025年武漢理工大學(xué)馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 山西省金科新未來2024-2025學(xué)年高一上學(xué)期期末考試化學(xué)試題(含答案)
- 電氣檢測(cè)安全報(bào)告
- 第四屆全國儀器儀表行業(yè)職業(yè)技能競(jìng)賽-無人機(jī)裝調(diào)檢修工(儀器儀表檢測(cè))理論考試題庫(含答案)
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 4-10-01-05 養(yǎng)老護(hù)理員 人社廳發(fā)201992號(hào)
- 急性梗阻性化膿性膽管炎護(hù)理
- 2024深海礦產(chǎn)資源開采系統(tǒng)技術(shù)指南
- 2022通達(dá)經(jīng)營性物業(yè)貸調(diào)查報(bào)告
- 立式氣液分離器計(jì)算
- 財(cái)務(wù)每日工作匯報(bào)表格
- 2022-2023學(xué)年廣東省佛山市南海區(qū)、三水區(qū)九年級(jí)(上)期末數(shù)學(xué)試卷含解析
- 版權(quán)登記代理委托書
評(píng)論
0/150
提交評(píng)論