數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 課 程 設(shè) 計(jì) 課程名稱: 數(shù)據(jù)結(jié)構(gòu) 題目名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 專業(yè)班級(jí): **計(jì)算機(jī)系********班 學(xué)生姓名: 田龍 學(xué) 號(hào): 指導(dǎo)教師: 張艷 二○一一年十二月二十二日 目錄 引言 3 一、課程設(shè)計(jì)目的與要求 4 1.課程設(shè)計(jì)的目的 4 2.課程設(shè)計(jì)的根本要求 4 二、猴子選大王 5 1.提出問題 5 2.概要設(shè)計(jì) 5 3.調(diào)試分析 6 二、joseph環(huán) 7 1.提出問題 7 2.概要設(shè)計(jì) 7 2.1 算法設(shè)計(jì) 7 2.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 7 3.調(diào)試分析 8
2、 三、文章編輯 9 1.提出問題 9 2.概要設(shè)計(jì) 9 3.調(diào)試分析 11 四、飛機(jī)訂票系統(tǒng) 12 1.提出問題 12 2.概要設(shè)計(jì) 12 2.1 算法設(shè)計(jì) 12 2.1 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 13 3.調(diào)試分析 14 附錄一:猴子選大王——源程序 17 附錄二:joseph環(huán)——源程序 19 附錄三:文章編輯——源程序 22 附錄四:飛機(jī)訂票系統(tǒng)——源程序 27 引言 課程設(shè)計(jì)是學(xué)生對(duì)課程所學(xué)知識(shí)的綜合運(yùn)用,它與課堂聽講、上機(jī)實(shí)驗(yàn)、課外練習(xí)、自學(xué)研究相輔相成,構(gòu)成一個(gè)完整的課程教學(xué)體系。?數(shù)據(jù)結(jié)構(gòu)?是一門實(shí)踐性強(qiáng)的課程,其中對(duì)算法設(shè)計(jì)和程序編寫的掌握尤其重要
3、。學(xué)生雖然可以通過與課堂教學(xué)同步的上機(jī)實(shí)驗(yàn)完成相關(guān)內(nèi)容的練習(xí),但卻往往局限于一些功能簡(jiǎn)單、彼此之間關(guān)系獨(dú)立的算法和程序。課程設(shè)計(jì)是一種綜合訓(xùn)練,致力于培養(yǎng)學(xué)生全面、靈活的算法設(shè)計(jì)思想和較高的編程能力,要求學(xué)生編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的標(biāo)準(zhǔn),能夠?yàn)榻窈髲氖掠?jì)算機(jī)開發(fā)與應(yīng)用打下根底。需要學(xué)生具有豐富科學(xué)知識(shí)、獨(dú)立解決實(shí)際問題、有創(chuàng)造能力,這也是該課程設(shè)計(jì)的最終目的。 通過本課程設(shè)計(jì),使自己更加系統(tǒng)地理解和掌握數(shù)據(jù)結(jié)構(gòu)的根本概念;能自如地根據(jù)實(shí)際要求,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并運(yùn)用C語(yǔ)言實(shí)現(xiàn)所設(shè)計(jì)的算法,編寫較大型的程序,分析和解決實(shí)際應(yīng)用問題,進(jìn)一步加深、穩(wěn)固所學(xué)專業(yè)課程的根本理論
4、知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)自己綜合分析問題和解決問題的能力。掌握C語(yǔ)言獨(dú)立的編寫、調(diào)試應(yīng)用程序和進(jìn)行其它相關(guān)設(shè)計(jì)的技能。 此工程主要是考察我們對(duì)結(jié)構(gòu)體、數(shù)組、文件等具體操作,以及對(duì)C語(yǔ)言語(yǔ)法的掌握,所以做成此工程要求比擬高的設(shè)計(jì)要求,對(duì)整體有很熟悉的概括,同時(shí)調(diào)試過程也是很重要的,對(duì)程序界面的要求也比擬高,要設(shè)計(jì)的合理同時(shí)也要美觀一點(diǎn),能夠人性化的描述清楚你的各個(gè)功能,一目了然,對(duì)其他用戶使用本程序簡(jiǎn)單易懂,這才能本錢程序或本系統(tǒng)是成功的。 這個(gè)設(shè)計(jì)能夠練習(xí)我們的理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法,掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的根本方法,學(xué)會(huì)調(diào)試一個(gè)比擬長(zhǎng)的程序的根本方法,同時(shí)掌握書寫程
5、序設(shè)計(jì)開發(fā)文檔的能力。 一、課程設(shè)計(jì)目的與要求 1.課程設(shè)計(jì)的目的 課程設(shè)計(jì)是學(xué)生對(duì)課程所學(xué)知識(shí)的綜合運(yùn)用,它與課堂聽講、上機(jī)實(shí)驗(yàn)、課外練習(xí)、自學(xué)研究相輔相成,構(gòu)成一個(gè)完整的課程教學(xué)體系。?數(shù)據(jù)結(jié)構(gòu)?是一門實(shí)踐性強(qiáng)的課程,其中對(duì)算法設(shè)計(jì)和程序編寫的掌握尤其重要。學(xué)生雖然可以通過與課堂教學(xué)同步的上機(jī)實(shí)驗(yàn)完成相關(guān)內(nèi)容的練習(xí),但卻往往局限于一些功能簡(jiǎn)單、彼此之間關(guān)系獨(dú)立的算法和程序。課程設(shè)計(jì)是一種綜合訓(xùn)練,致力于培養(yǎng)學(xué)生全面、靈活的算法設(shè)計(jì)思想和較高的編程能力,要求學(xué)生編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的標(biāo)準(zhǔn),能夠?yàn)榻窈髲氖掠?jì)算機(jī)開發(fā)與應(yīng)用打下根底。需要學(xué)生具有豐富科學(xué)知識(shí)、獨(dú)立解
6、決實(shí)際問題、有創(chuàng)造能力,這也是該課程設(shè)計(jì)的最終目的。 2.課程設(shè)計(jì)的根本要求 1、了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力; 2、初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等根本方法和技能; 3、提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力; 4、訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般標(biāo)準(zhǔn)進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。 5、設(shè)計(jì)的題目要求到達(dá)一定工作量,并具有一定的深度和難度。 6、編寫出課程設(shè)計(jì)說明書,說明書不少于15頁(yè)〔不包括代碼〕。 二、猴子選大王 1.提出問題 任務(wù): 一堆猴子都有編號(hào),編號(hào)是
7、1,2,3 ...m ,這群猴子〔m個(gè)〕按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個(gè),該猴子就要離開此圈,這樣依次下來(lái),直到圈中只剩下最后一只猴子,那么該猴子為大王。要求:輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n 8、出列,即用指針移動(dòng)查找法將計(jì)數(shù)器數(shù)到m的指針指向的內(nèi)容變?yōu)?,用for循環(huán),直到只有一個(gè)元素不為0時(shí),最后不為0的元素的值即為大王。實(shí)現(xiàn)這個(gè)程序功能需3個(gè)模塊,一個(gè)模塊用數(shù)組指針實(shí)現(xiàn)猴子編號(hào),一個(gè)模塊用指針移動(dòng)查找法實(shí)現(xiàn)猴子出局,最后主模塊將前兩個(gè)模塊要用到的函數(shù),數(shù)組定義。具體步驟如下:
第一步 建立數(shù)組,填入猴子編號(hào)及猴子出局時(shí)報(bào)的數(shù)
第二步 從第一個(gè)猴子報(bào)數(shù)
第三步 數(shù)到m讓指針指向元素變?yōu)?
第四步 繼續(xù)報(bào)數(shù),重復(fù)第三步
猴子的存放采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),利用循環(huán)鏈表來(lái)實(shí)現(xiàn)建立的,其表示方法是遞歸定義的:
typedef struct LNode{
ElemType dat 9、a;
struct LNode *next;
}LNode, *LinkList;
根據(jù)題目要求,要讓這M只猴子順序圍坐一圈,那就得用循環(huán)鏈表,只須將單循環(huán)鏈表的尾指針的NEXT域指向頭指針。它的判空條件是L=L->next =NULL;
〔非空表〕 〔空表〕
單循環(huán)鏈表
3.調(diào)試分析
二、joseph環(huán)
1.提出問題
任務(wù):
編號(hào)是1,2,……,n的n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一 10、個(gè)密碼〔正整數(shù)〕。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。設(shè)計(jì)一個(gè)程序來(lái)求出出列順序。
要求:利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,按照出列的順序輸出各個(gè)人的編號(hào)。
測(cè)試數(shù)據(jù):
m的初值為20,n=7 ,7個(gè)人的密碼依次為3,1,7,2,4,7,4,首先m=6,那么正確的輸出是什么?
要求:
輸入數(shù)據(jù):建立輸入處理輸入數(shù)據(jù),輸入m的初值,n ,輸入每個(gè)人的密碼,建立單循環(huán)鏈表。
輸出形式:
建立一個(gè)輸出函數(shù),將 11、正確的輸出序列。
2.概要設(shè)計(jì)
2.1 算法設(shè)計(jì)
利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,因?yàn)檠h(huán)鏈表最后一個(gè)結(jié)點(diǎn)的指針域指向頭結(jié)點(diǎn),整個(gè)鏈表形成一人環(huán),剛好和題中的“n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一個(gè)密碼〔正整數(shù)〕〞內(nèi)容要求一致,而且,循環(huán)鏈表中任一結(jié)點(diǎn)出發(fā)均可找到表中其他結(jié)點(diǎn),利用這一優(yōu)點(diǎn)可較容易地找出報(bào)數(shù)的人及下一個(gè)報(bào)數(shù)的人,最后按照出列的順序用一個(gè)for語(yǔ)句實(shí)現(xiàn)。
2.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)
密碼和序號(hào)的存放采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),利用循環(huán)鏈表來(lái)實(shí)現(xiàn)建立的,其表示方法是遞歸定義的。要讓這M個(gè)人順序圍坐一圈,那就得用循環(huán)鏈表,只須將單循環(huán)鏈表的尾指針的NEXT域指向頭指針。
12、
3.調(diào)試分析
三、文章編輯
1.提出問題
任務(wù):
輸入一頁(yè)文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁(yè)文章,每行最多不超過80個(gè)字符,共N行;
要求:
〔1〕分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);
〔2〕統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);
〔3〕刪除某一子串,并將后面的字符前移。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;
〔4〕輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。
輸出形式:
〔1〕分行輸出用戶輸入的各行字符;
〔2〕分4行輸出"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)" 13、、"文章總字?jǐn)?shù)"〔3〕輸出刪除某一字符串后的文章。
2.概要設(shè)計(jì)
〔1〕定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈?zhǔn)酱鎯?chǔ)。
〔2〕主要函數(shù):
int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/
①.查找第一個(gè)字符,如果有第一個(gè)字符即p->data[i]==str[0],設(shè)計(jì)數(shù)器k=0;
②.查找這個(gè)字符后面的字符與要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++;
③.重復(fù)第二步,如果k=len2,那么查找到,count++;如果沒查找到,重新進(jìn)行第一步。 14、
void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/
實(shí)現(xiàn)思想:
①.從字符串s中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str);
②.len=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中
③.j=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中
④.將tmp賦給串s,返回s
3.調(diào)試分析
四、飛機(jī)訂票系統(tǒng)
1.提出問題
任務(wù):
通過此系統(tǒng)可以實(shí)現(xiàn)如下功能:
錄入:
可 15、以錄入航班情況〔數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定〕
查詢:
可以查詢某個(gè)航線的情況〔如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉(cāng)〕;
訂票:
〔訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定〕可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;
退票:
可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,訂票數(shù)量及航班情況,訂單要有編號(hào)。
修改航班信息:
當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件
要求:
根據(jù)以上功能說明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。
2.概要設(shè)計(jì)
2.1 算法設(shè)計(jì)
每個(gè)模塊的算 16、法設(shè)計(jì)說明如下:
〔1〕錄入模塊:
查找單鏈表的鏈尾,在鏈尾插入一個(gè)“航班信息〞的新結(jié)點(diǎn)。
可以進(jìn)行新增航班信息、刪除航班信息等操作。
〔2〕查詢模塊:
提供查方式順著單鏈表查找,查找出所有航班的信息和訂票信息。
〔3〕訂票模塊:
查找乘客要訂的航班號(hào),判斷此航班是否有空位,有那么輸入乘客有關(guān)信息,訂票成功,否那么失敗。
〔4〕退票模塊:
輸入要退票的乘客姓名,查找乘客資料的鏈表中是否有這位乘客,有那么刪去此結(jié)點(diǎn),并在空位加上1,無(wú)那么退票失敗。
2.1 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)
航班的信息:為了便于查找和修改,航班的情況存儲(chǔ)結(jié)構(gòu)采用單鏈表,每個(gè)元素表示一個(gè)航班的情況,包括航班號(hào) 17、、飛機(jī)編號(hào)、目的地、時(shí)間、總座位和空座六個(gè)數(shù)據(jù)項(xiàng):
航班號(hào)
飛機(jī)編號(hào)
目的地
時(shí)間
總座位
空座
單鏈表如下:
h
D1
D2
D3
每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域:
數(shù)據(jù)域
指針域
C語(yǔ)言描述如下:
typedef struct airline //飛機(jī)編號(hào)結(jié)構(gòu)體//
{ char air_num[8]; /*航班號(hào)*/
char plane_num[8]; /*飛機(jī)編號(hào)*/
char end_place[20];/*目的地*/
char time_plane[16 18、];/*時(shí)間*/
int total; /*總座位*/
int left; /*空座*/
struct airline *next; /*指向下個(gè)結(jié)點(diǎn)*/
}airline;
旅客的資料:
為了便于插入、刪除和修改,其采用單鏈表存儲(chǔ)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素包括姓名、航班號(hào)和座位號(hào)四個(gè)數(shù)據(jù)項(xiàng):
旅客姓名
航班號(hào)
座位號(hào)
每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域:
數(shù)據(jù)域
指針域
C語(yǔ)言描述如下:
typedef struct customer //乘客編號(hào)結(jié)構(gòu)體//
{ char name[8];
char air_num[8 19、];
int seat_num;
struct customer *next;
}customer;
3.調(diào)試分析
附錄一:猴子選大王——源程序
源程序:
#include "stdio.h"
#include "process.h"
#include "malloc.h"
#define ture 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#defin 20、e list_init_size 100
#define listincrement 10
typedef int Status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//創(chuàng)立循環(huán)鏈表
void CreateList_L(LinkList &L,int n)
{
//創(chuàng)立一個(gè)n單元的循環(huán)鏈表
int i;
struct LNode *p,*q;
L=(Li 21、nkList) malloc (sizeof(LNode));
L->next=NULL;
L->data=1;
q=L;
for(i=2;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
q->next=p;
p->next=L;
q=q->next;
}
}
//鏈表刪除操作
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
int j;
LNode *p,*q;
22、
p=L;j=1;
while ( j 23、 \n");
printf(" ** 姓名: 田 龍 ** \n");
printf(" ** 學(xué)號(hào): ** \n");
printf("\n ***********************\n");
printf(" ** ** 24、 \n");
printf(" ** 猴子選大王 ** \n");
printf(" ** ** \n");
printf(" ***********************\n\n");
LinkList L;
int m,n,i;
ElemType e;
25、 printf("\n 請(qǐng)輸入猴子的個(gè)數(shù):");
scanf("%d",&m);
CreateList_L(L,m);
printf(" 所有猴子的編號(hào)為:\n");
for(i=0;i 26、 猴子依次離開的序號(hào):\n");
for (i=1;i 27、 TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#include "defineHeader.h"
typedef struct{
int name;
int sno;
}ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//逆位序輸入 28、n個(gè)人的密碼,建立帶表頭結(jié)點(diǎn)的單鏈表L
void CreateList_L(LinkList &L,int n){
int i;LinkList p;
L=(LinkList)malloc(sizeof (LNode));
L->next=NULL;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof (LNode));
p->data.name=i;
scanf("%d",&p->data.sno);
p->next=L->next;L->next=p;
}
}
//查找元素值
Status G 29、etElem_L(LinkList L,int i,ElemType &e){
LNode *p;
int j;
p=L->next;j=1;
while(p&&jnext;++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}
//在帶頭結(jié)點(diǎn)的單鏈表L中第i個(gè)位置之前插入元素e
Status ListInsert_L(LinkList &L,int i,ElemType e){
LNode *p,*s;
int j=0;
p=L;
while(p&&j< 30、i-1){p=p->next;++j;}//尋找第i-1個(gè)結(jié)點(diǎn)
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return OK;
};
//在帶頭結(jié)點(diǎn)的單鏈表L中刪除第i個(gè)元素,并用e返回其值
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LNode *p,*q;
int j=0;
p=L;
while(p->next&&j 31、{
p=p->next;++j;
}
if(!(p->next)||j>i-1)return ERROR;
q=p->next;p->next=q->next;
e=q->data;free(q);
return OK;
};
void OutPut(LinkList &L,int m,int n,ElemType &e){
int i,k,cun,cun1=0;
//從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值
if((cun=m%n)==0)cun=n;
ListDelete_L(L,cu 32、n,e);
k=n-cun;m=e.sno;
printf("%4d:%d ||",e.name,e.sno);
//從上一個(gè)報(bào)m的人在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。
for(i=n-1;i>0;i--){
if((cun1=m%i)==0)cun1=i;
if(cun1<=k){
ListDelete_L(L,(cun1+cun-1),e);
k=i-(cun1+cun-1);cun=cun1+cun-1;
}else{
ListDelete_L(L,(cun1-k),e);
33、 cun=cun1-k;k=i-(cun1-k);
}
m=e.sno;
printf("%4d:%d ||",e.name,e.sno);
//printf("\n");
}
}
void main(){
int i,m,n;
ElemType e;
LinkList L;
printf("\n ***********************\n");
printf(" ** 班級(jí): ** 34、 \n");
printf(" ** 姓名: 田 龍 ** \n");
printf(" ** 學(xué)號(hào): ** ");
printf("\n ***********************\n");
printf("\n");
printf(" 35、 ** Joseph環(huán) ** \n");
printf("*************************************************************\n");
printf("請(qǐng)輸入“m〞的初值:");
scanf("%d",&m);
printf("請(qǐng)輸入一個(gè)數(shù)表示有“n〞個(gè)人:");
scanf("%d",&n);
printf("\n請(qǐng)輸入這“%d〞個(gè)人的密碼,按Enter鍵確認(rèn)……\n",n);
CreateList_L(L,n);
printf("\n這“%d〞個(gè)人的密碼為:\n" 36、,n);
for(i=1;i<=n;i++){
GetElem_L(L,i,e);
printf("%5d:%d | ",e.name,e.sno);
}
printf("\n\n");
/*
一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),
報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。
*/
printf("\n這“%d〞個(gè)人的出列順序?yàn)椋篭n",n);
OutPut(L,m,n,e);
printf("\n\n");
}
37、
附錄三:文章編輯——源程序
源程序:
#include 38、(每行最多輸入80字符!):\n");
LINE *p=new LINE; /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/
head=p; /*將p付給 表頭指針*/
char tmp[100];
while(1)
{
gets(tmp); /*輸入字符串!*/
if(strlen(tmp)>80)
{
printf("每行最 39、多輸入80字符");
break;
}
if(tmp[0]==5)break; /*如果發(fā)現(xiàn)輸入 ^E,那么退出輸入*/
p=p->next=new LINE;
p->data=new char[strlen(tmp)+1]; /*為結(jié)點(diǎn)分配空間 */
strcpy(p->data,tmp);
if(tmp[strlen(tmp)-1]==5) /*除去最后一個(gè)控制符 ^E */
{
40、 p->data[strlen(tmp)-1]='\0';
break;
}
}
p->next=NULL; /*最后的一個(gè)指針為空 */
head=head->next;
}
/*統(tǒng)計(jì)字母數(shù)*/
int CountLetter(LINE * &head)
{
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè) 41、數(shù)*/
for(int i=0;i 42、計(jì)數(shù)字?jǐn)?shù)*/
int CountNumber(LINE * &head)
{
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/
for(int i=0;i 43、L); /*遍歷 鏈表*/
return count;
}
/*統(tǒng)計(jì)空格數(shù)*/
int CountSpace(LINE * &head)
{
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/
for(int i=0;i 44、 if(p->data[i]==32)count++; /*計(jì)算空格數(shù),空格ASCII碼為32*/
}
while((p=p->next)!=NULL); /*遍歷 鏈表*/
return count;
}
/*統(tǒng)計(jì)文章的總字?jǐn)?shù)*/
int CountAll(LINE * &head)
{
LINE *p=head; /*保存鏈表的首地址*/
int count=0;
do 45、 /*計(jì)算總字符數(shù)*/
{
count+=strlen(p->data);
}
while((p=p->next)!=NULL); /*遍歷 鏈表*/
return count;
}
/*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/
int FindString(LINE * &head,char *str)
{
LINE *p=head;
int count=0;
int h=0;
int len1=0; 46、 /*保存當(dāng)前行的總字符數(shù)*/
int len2=strlen(str); /*待統(tǒng)計(jì)字符串的長(zhǎng)度*/
int i,j,k;
do
{
len1=strlen(p->data); /*當(dāng)前行的字符數(shù)*/
for(i=0;i 47、r(j=0;j 48、字符*/
{
char *p=strstr(s,str); /*從字符串s中尋找str第一次出現(xiàn)的位置*/
char tmp[80];
int len=strlen(s);
int i=len-strlen(p);
int j=i+strlen(str);
int count=0;
for(int m=0;m
49、p); /*返回新的字符串*/
}
void DelString(LINE * &head,char *str)
{
LINE *p=head;
do
{
if(strstr(p->data,str)!=NULL)delstringword(p->data,str);
}
while((p=p->next)!=NULL); /*遍歷 鏈表*/
}
/*向屏幕輸出文章*/
void OutPut(LINE * &head)
{ 50、
LINE *p=head;
do
{
printf("%s\n",p->data);
}
while((p=p->next)!=NULL); /*遍歷 鏈表*/
}
void main()
{
LINE *head;
printf("\n ***********************\n");
printf(" ** 班級(jí): ** 51、 \n");
printf(" ** 姓名: 田 龍 ** \n");
printf(" ** 學(xué)號(hào): ** ");
printf("\n ***********************\n");
printf("\n");
printf(" 52、 ** 文章編輯 ** \n");
printf("*************************************************************\n");
Create(head);
printf("輸入的文章為:\n");
OutPut(head);
printf("\n");
printf("全部字母數(shù):%d \n",CountLetter(head));
printf("數(shù)字個(gè)數(shù):%d \n",CountNumber(head));
printf("空格個(gè)數(shù): %d \n",CountSpa 53、ce(head));
printf("文章總字?jǐn)?shù): %d \n",CountAll(head));
char str1[20],str2[20];
printf("\n");
printf("請(qǐng)輸入要統(tǒng)計(jì)的字符串:");
scanf("%s",str1);
printf("%s出現(xiàn)的次數(shù)為:%d \n",str1,FindString(head,str1));
printf("\n");
printf("請(qǐng)輸入要?jiǎng)h除的某一字符串:");
scanf("%s",str2);
DelString(head,str2);
printf("刪除%s后的文 54、章為:\n",str2);
OutPut(head);
}
附錄四:飛機(jī)訂票系統(tǒng)——源程序
源程序:
#include 55、 char time_plane[16];
int total;
int left;
struct airline *next;
}airline;
typedef struct customer //乘客編號(hào)結(jié)構(gòu)體//
{ char name[8];
char air_num[8];
int seat_num;
struct customer *next;
}customer;
airline *start_air()
{ airl 56、ine *a;
a=(airline*)malloc(sizeof(airline));
if(a!=NULL)a->next=NULL;
return a;
}
customer *start_cus()
{ customer *c;
c=(customer*)malloc(sizeof(customer));
if(c!=NULL)c->next=NULL;
return c;
}
airline *modefy_airline(airl 57、ine *l,char *air_num)
{ airline *p;
p=l->next;
for(;p!=NULL;p=p->next)
{
if(strcmp(air_num,p->air_num)==0)
{ p->left++;
return l;
}
}
printf(" 對(duì)不起,沒有該航班!");
return 0;
} 58、
//增加飛機(jī)信息
int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,char *time_plane,int total,int left)
{
airline *q;
q=(airline*)malloc(sizeof(airline));
strcpy(q->air_num,air_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end 59、_place);
strcpy(q->time_plane,time_plane);
q->total=total;
q->left=left;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
//printf(" 添加航線成功!");
return OK;
}
//添加航線
airline *add_air(airline *p,char *air_num,char *plane_num,char *end_place,char *ti 60、me_plane,int total,int left)
{
airline *q,*pt;
pt=p;
q=(airline*)malloc(sizeof(airline));
strcpy(q->air_num,air_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end_place);
strcpy(q->time_plane,time_plane);
q->total=total;
61、 q->left=left;
for(p;p->next!=NULL;p=p->next);
q->next=p->next;
p->next=q;
return pt;
}
//增加客戶
int insert_cus(customer **p,char *name,char *air_num,int seat_num)
{ customer *q;
q=(customer*)malloc(sizeof(customer));
strcpy(q->name,name); 62、
strcpy(q->air_num,air_num);
q->seat_num=seat_num;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
return OK;
printf(" 添加客戶成功!");
}
//訂票
int book(airline *a,char *air_num,customer *c,char *name)
{ airline *p;
customer 63、 *q=c->next;
for(q;q->next!=NULL;q=q->next);
p=a->next;
for(;p!=NULL;p=p->next)
{
if(strcmp(air_num,p->air_num)==0)
{
if(p->left>0)
{
printf(" 您的座位號(hào)是:%d",(p->total-p->left+1));
insert_cus(&q,name,air_num, 64、p->total-p->left+1);
p->left--;
return OK;
}
else if(p->left==0)
{
printf(" 對(duì)不起,座位已滿!");
return 0;
}
}
}
printf(" 對(duì)不起,沒有該航班!");
return 1;
}
// 65、退票
int del_cus(customer *c,airline *l,char *name)
{ customer *p,*pr;
char air_num[8];
pr=c;
p=pr->next;
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{ strcpy(air_num,p->air_num);
l=modefy_airline(l,air_num);
66、 pr->next=p->next;
p=pr->next;
printf(" %s退票成功!",name);
return OK;
}
pr=pr->next;
p=pr->next;
}
printf(" 對(duì)不起,沒有該顧客!");
return ERROR;
}
//刪除航線
int del_airline(airline *l,customer *m,char *air_n)
{ airline *pt,*ptr;
customer *p,*pr;
ptr=l;
pr=m;
p=pr->next;
pt=ptr->next;
while(pt!=NULL)
{ i
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠各設(shè)備的主要作用大全
- 3.高壓電工考試判斷練習(xí)題含答案
- 企業(yè)電氣防爆知識(shí)
- 13 低壓電工電工作業(yè)模擬考試題庫(kù)試卷含答案
- 電氣設(shè)備維修的十項(xiàng)原則
- 2.電氣電纜與直流模擬考試復(fù)習(xí)題含答案
- 電氣節(jié)能措施總結(jié)
- 2.電氣電機(jī)(一)模擬考試復(fù)習(xí)題含答案
- 接地電阻測(cè)量原理與測(cè)量方法
- 3.高壓電工作業(yè)模擬考試題庫(kù)試卷含答案
- 礦山維修電工安全技術(shù)操作規(guī)程
- 電工基礎(chǔ)口訣總結(jié)
- 3.某電廠值長(zhǎng)面試題含答案解析
- 電工基礎(chǔ)知識(shí)順口溜
- 配電系統(tǒng)詳解