版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第七次作業(yè):結(jié)構(gòu)體1. 計(jì)算日期的差值(1)編寫一函數(shù),計(jì)算兩個(gè)日期之間的時(shí)間差,并將其值返回。 日期以年、月、日表示。 “時(shí)間差”以天數(shù)表示。 注意考慮日期之間的閏年。 函數(shù)的輸入?yún)?shù)為日期1和日期2, 函數(shù)的返回值為時(shí)間差,單位為天數(shù)。(2)編寫一程序,在主函數(shù)中輸入兩個(gè)日期,調(diào)用上述函數(shù)計(jì)算兩個(gè)日期之間的時(shí)間差,并將結(jié)果輸出。 為了計(jì)算簡(jiǎn)便,假設(shè)用戶輸入的日期1總是早于日期2。#include#includestruct dateint day;int month;int year;date1,date2;int totaldays(struct date *p,struct date
2、*q)int years,total=0,i;int monthday12=31,28,31,30,31,30,31,31,30,31,30,31;years=q-year-p-year;if(years=0)if(p-month=q-month)total=q-day-p-day;elsefor(i=p-month;imonth-1;i+)total+=monthdayi;total+=monthdayp-month-1-p-day+q-day;if(q-year)%4=0&(q-year)%100!=0)|(q-year)%400=0)if(p-monthmonth2)total+;els
3、e if(years!=0)for(i=p-month;imonth-1-p-day;for(i=0;imonth-1;i+)total+=monthdayi;total+=q-day;for(i=p-year+1;iyear);i+)total+=365;if(i%4=0&i%100!=0)|i%400=0)total+;if(p-year%4=0&p-year%100!=0)|p-year%400=0)&p-monthyear%4=0&q-year%100!=0)|q-year%400=0)&q-month2)total+;return total;void main()int days;
4、printf(please input date1(year,month,day):);scanf(%d,%d,%d,&date1.year,&date1.month,&date1.day);printf(please input date2(year,month,day):);scanf(%d,%d,%d,&date2.year,&date2.month,&date2.day);days=totaldays(&date1,&date2);printf(days=%dn,days);2. 結(jié)構(gòu)體數(shù)組應(yīng)用請(qǐng)定義一個(gè)描述學(xué)生基本信息的結(jié)構(gòu),包括姓名,學(xué)號(hào),籍貫,身份證號(hào),年齡,家庭住址,性別,聯(lián)系
5、方式等。并定義一個(gè)結(jié)構(gòu)體數(shù)組。編程:a) 編寫函數(shù) input() , 輸入基本信息(35條記錄);b) 編寫函數(shù) print(),輸出全體記錄信息;c) 編寫函數(shù) search(), 檢索一個(gè)指定的學(xué)生信息并返回, 由主函數(shù)打印到屏幕上;d) 說明,訪問結(jié)構(gòu)的時(shí)候,什么時(shí)候應(yīng)該用運(yùn)算符“.”,什么時(shí)候應(yīng)該用運(yùn)算符“-”。#include#includestruct studentchar name20;int num;char home20;char IDnum20;int age;char addr50;char sex;char phone20;stu10;void input(stru
6、ct student *p)scanf(%s %d %s %s %d %s %c %s,&p-name,&p-num,&p-home,&p-IDnum,&p-age,&p-addr,&p-sex,&p-phone);void print(struct student *p)printf(%s,%d,%s,%s,%d,%s,%c,%sn,p-name,p-num,p-home,p-IDnum,p-age,p-addr,p-sex,p-phone);int search(struct student stu,int n,char stu_name20)int i;for(i=0;in;i+)if(
7、strcmp(stu_name,)=0)return i;break;else continue;return n+1;void main()int n,i;char a20;printf(please input the number of the students:);scanf(%d,&n);for(i=0;in;i+)input(&stui);for(i=0;in;i+)print(&stui);printf(please input the name of the student you want to search:n);scanf(%s,&a);i=search
8、(stu,n,a);if(in)print(&stui);else if(i=n+1)printf(No this student!n);3. 一元多項(xiàng)式加法編寫一元多項(xiàng)式加法器,輸入兩個(gè)一元稀疏多項(xiàng) 式,然后對(duì)它們進(jìn)行加法操作。在具體實(shí)現(xiàn)上,要求用線性鏈表形式來存儲(chǔ)一個(gè)多項(xiàng)式,每個(gè)鏈表的節(jié)點(diǎn)包括兩個(gè)成員變量,系數(shù)和指數(shù)(均為整數(shù))。例如可以用下面的鏈表表示:說明:(1) 每個(gè)鏈表節(jié)點(diǎn)都是根據(jù)需要?jiǎng)討B(tài)創(chuàng)建的;(2) 程序采用多函數(shù)形式來實(shí)現(xiàn),至少包括創(chuàng)建鏈表、打印鏈表、加法函數(shù)等。(3) 多項(xiàng)式系數(shù)可正、可負(fù);指數(shù)肯定是非負(fù)整數(shù),且按照遞增順序排列輸入格式:第一行是一個(gè)整數(shù)M,表示第一個(gè)多項(xiàng)式
9、的項(xiàng)數(shù)。 接下來有M行,每行有兩個(gè)整數(shù)ci和ei,分別表示第i項(xiàng)的系數(shù)和指數(shù)。 再接下來是輸入第二個(gè)多項(xiàng)式,方法同第一個(gè)多項(xiàng)式輸入。輸出格式:輸出兩個(gè)多項(xiàng)式相加的結(jié)果。第一行是整數(shù)K,表示新多項(xiàng)式的項(xiàng)數(shù)。 接下來有K行,每一行為兩個(gè)整數(shù),分別代表系數(shù)和指數(shù)。#include#include#define LEN sizeof(struct poly)struct polyint c;int e;struct poly *next;poly110,poly210;void input(struct poly a,int m)for(int i=0;im;i+)scanf(%d,%d,&ai.c,
10、&ai.e);struct poly *linkcreate(struct poly a,int m)struct poly *head;struct poly *p1,*p2;p1=p2=(struct poly*)malloc(LEN);head=p1=&a0;for(int i=0;inext=p2;p1=p2;p1-next=NULL;return(head);void linkprint(struct poly *head)struct poly *p;printf(the polynomial:n);p=head;if(head!=NULL)doprintf(%dx%d,p-c,p
11、-e);p=p-next;if(p!=NULL)putchar(+);while(p!=NULL);putchar(n);struct poly* add(struct poly *head1,struct poly *head2)struct poly *p1,*p2,*p3,*p4;p1=p2=p3=p4=(struct poly*)malloc(LEN);p2=head2;dop1=head1;while(p1!=NULL)if(p2-e=p1-e)p1-c=p1-c+p2-c;p4=p2;p2=p2-next;p1=head1;else p3=p1;p1=p1-next;p1=head
12、1;while(p2-ep1-e)&(p1-next!=NULL)p3=p1;p1=p1-next;p4=p2;p2=p2-next;if(p4-ee)if(head1=p1)head1=p4;else p3-next=p4;p4-next=p1;elsep1-next=p4;p4-next=NULL;while(p2!=NULL);return (head1);void addprint(struct poly *head)struct poly *p1;printf(the new polynomial:n);p1=head;if(head!=NULL)doprintf(%dx%d,p1-
13、c,p1-e);p1=p1-next;if(p1!=NULL)putchar(+);while(p1!=NULL);putchar(n);void main()int m,n;struct poly *p,*q,*head;printf(please input the number of first terms:);scanf(%d,&m);input(poly1,m);p=linkcreate(poly1,m);linkprint(p);printf(please input the number of second terms:);scanf(%d,&n);input(poly2,n);
14、q=linkcreate(poly2,n);linkprint(q);head=add(p,q);addprint(head); 4. 循環(huán)淘汰 有N個(gè)同學(xué),編號(hào)分別為1,2,3,N,圍成一圈,隨便選定一個(gè)整數(shù)m,讓大家按順時(shí)針依次報(bào)數(shù),報(bào)到m的同學(xué)便會(huì)從圈子中退出,從而被淘汰,直到最后剩下一個(gè)人。編寫函數(shù)實(shí)現(xiàn)上述循環(huán)淘汰功能。編寫一個(gè)程序測(cè)試上述函數(shù)的功能,要求用戶能夠任意輸入N與m;程序輸入最后剩下人的編號(hào)。#include#include#define LEN sizeof(struct student)struct studentint num;struct student *next
15、;int win(int n,int m)struct student *p,*p1,*p2,*head;int i;p=(struct student*)malloc(LEN);head=p;for(i=0;inum=i+1;p1=p;p=(struct student*)malloc(LEN);p1-next=p;p1-next=head;p=head;p1=head;while(p1-next!=p1)/開始刪除元素i=1;dop1=p;p=p-next;i=i+1;while(i!=m);p2=p1;p2-next=p-next;p=p-next;return(p1-num);void
16、 main()int N,m,num;printf(please input N,m:);scanf(%d,%d,&N,&m);num=win(N,m);printf(the winner is NO.%d.,num);putchar(n);5. 工資單處理 (1) 編寫函數(shù):有兩個(gè)單向鏈表,頭指針分別為list1、list2,鏈表中每一結(jié)點(diǎn)包含員工號(hào)(員工號(hào)為關(guān)鍵字段,不重復(fù))、姓名、工資基本信息,請(qǐng)編一函數(shù),把兩個(gè)鏈表拼組成一個(gè)鏈表,并返回拼組后的新鏈表,按員工號(hào)升序排列。 (2)編寫函數(shù):利用指針數(shù)組,實(shí)現(xiàn)按照工資進(jìn)行升序排列的功能。返回排序完成的指針數(shù)組 (3)編寫一程序,分別輸出按員
17、工號(hào)排序后的新鏈表,以及按照工資排序的結(jié)果。假設(shè)鏈表list1初始化內(nèi)容為:002, name002,3000, 005, name005,2500, 003, name003,3500鏈表list2初始化內(nèi)容為:006, name006,2800, 004, name004,3700, 001, name001,3000, 007, name007, 3600, #include#include#includestruct staffchar num5;char name10;int wages;struct staff *next;a3=003,name003,3500,NULL,a2=0
18、05,name005,2500,&a3,a1=002,name002,3000,&a2,b4=007,name007,3600,NULL,b3=001,name001,3000,&b4,b2=004,name004,3700,&b3,b1=006,name006,2800,&b2;struct staff *rank_num(struct staff *list1,struct staff *list2)struct staff *head,*p1,*p2,*p3,*p4;head=NULL;p1=list1;p4=p1;while(p4!=NULL)/*老師,我在這題的想法是把它一個(gè)一個(gè)卸下
19、來然后按順序裝到另一個(gè)頭指針后,但是感覺這樣拆開很麻煩,尤其是我在插入的時(shí)候需要定義四個(gè)指針,做著做著就亂了,有什么更好的辦法嗎?*/if(head=NULL)head=p1;p2=p1;p1=p1-next;p2-next=NULL;elsewhile(strcmp(p1-num,p2-num)0&p2-next!=NULL)p3=p2;p2=p2-next;p4=p1;if(strcmp(p1-num,p2-num)next=p1;p4=p1-next;p1-next=p2;p1=p4;elsep2-next=p1;p4=p1-next;p1-next=NULL;p1=p4;p1=list
20、2;p4=list2;while(p4!=NULL)p2=head;while(strcmp(p1-num,p2-num)0&p2-next!=NULL)p3=p2;p2=p2-next;p4=p1;if(strcmp(p1-num,p2-num)next=p1;p4=p1-next;p1-next=p2;p1=p4;elsep2-next=p1;p4=p1-next;p1-next=NULL;p1=p4;return(head);struct staff *rank_pay(struct staff *head)struct staff *p1,*p2,*p3,*p4,*head2;p1=h
21、ead;head2=NULL;while(p1!=NULL)p2=head2;if(head2=NULL)head2=p1;p2=p1;p1=p1-next;p2-next=NULL;elsewhile(p1-wagesp2-wages)&p2-next!=NULL)p3=p2;p2=p2-next;p4=p1;if(p1-wageswages&p2!=NULL)if(head2=p2)head2=p1;else p3-next=p1;p4=p1-next;p1-next=p2;p1=p4;elsep2-next=p1;p4=p1-next;p1-next=NULL;p1=p4;return(
22、head2);void print(struct staff *p)printf(the rank:n);while(p!=NULL)printf(%s,%s,%dn,p-num,p-name,p-wages);p=p-next;putchar(n);void main()struct staff *list1,*list2,*head,*p;list1=&a1;list2=&b1;head=rank_num(list1,list2);p=head;print(p);p=rank_pay(head);print(p);putchar(n);6. 單向鏈表練習(xí)設(shè)節(jié)點(diǎn)結(jié)構(gòu):學(xué)號(hào)姓名后繼結(jié)點(diǎn)指針鏈表
23、結(jié)構(gòu):編程。要求程序?qū)崿F(xiàn)如下功能:a) 鏈表生成。鍵盤輸入學(xué)生信息,建立一個(gè)節(jié)點(diǎn)按學(xué)號(hào)遞增有序的單鏈表A=a1,a2,.,an,比如包含510條記錄; /假設(shè)輸入的學(xué)號(hào)依次為 2010002,2010005,2010009,2010007,2010003,2010000,姓名自己隨便定義b) 節(jié)點(diǎn)計(jì)數(shù)。對(duì)單鏈表A=a1,a2,.,an編寫節(jié)點(diǎn)計(jì)數(shù)函數(shù)f,求單鏈表中的節(jié)點(diǎn)個(gè)數(shù)。主函數(shù)調(diào)用節(jié)點(diǎn)計(jì)數(shù)函數(shù)f,并將其返回值(整數(shù))顯示到屏幕;c) 對(duì)單鏈表A=a1,a2,.,an編寫函數(shù)fv,將它倒序?yàn)锳=an,an-1,.,a1;d) 編寫輸出單鏈表函數(shù)list。每次操作(插入一個(gè)新節(jié)點(diǎn)或者倒序)之后
24、,調(diào)用函數(shù)list,在屏幕上顯示鏈表的全部記錄數(shù)據(jù)。e) 編寫一個(gè)函數(shù)search,輸入學(xué)號(hào),檢索鏈表A,如果指定學(xué)號(hào)記錄存在則返回指向該節(jié)點(diǎn)的指針,主函數(shù)打印紀(jì)錄信息。若學(xué)生紀(jì)錄不存在,則返回空指針,主函數(shù)給出檢索失敗的信息。#include#include#define LEN sizeof(struct student)struct studentint num;char name20;struct student *next;struct student *create()struct student *p1,*p2,*p3,*p4,*head;int n,i;p1=(struct s
25、tudent *)malloc(LEN);head=p1;printf(please input the total number of student:);scanf(%d,&n);printf(please input the information of student:n);for(i=0;inum,p1-name);p1-next=NULL;p3=head;while(p1-nump3-num&p3-next!=NULL)p4=p3;p3=p3-next;if(p1-numnum)if(head=p3)head=p1;else p4-next=p1;p1-next=p3;else p
26、3-next=p1;p1-next=NULL;p1=(struct student *)malloc(LEN);return(head);int f(struct student *head)int n=0;struct student *p1,*p2;p1=head;while(p1-next!=NULL)p2=p1;p1=p1-next;n=n+1;return(n);struct student *fv(struct student *head)struct student *p1,*p2,*head2;head2=head;p1=head;p2=head2;while(p1!=NULL
27、)if(p2=head2)p1=p1-next;p2-next=NULL;head2=p1;p1=p1-next;head2-next=p2;p2=head2;head2=p1;elsep1=p1-next;head2-next=p2;p2=head2;head2=p1;head2=p2;return(head2);void list(struct student *head)struct student *p;p=head;while(p!=NULL)printf(number/name:%d,%sn,p-num,p-name);p=p-next;struct student *search
28、(int m,struct student *head)struct student *p;p=head;while(p!=NULL)if(p-num=m)return(p);else p=p-next;return(NULL);void main()struct student *head1,*head2,*p;int n;head1=create();list(head1);printf(total nodeal to the total number is %dn,n=f(head1);head2=fv(head1);list(head2);printf(input the number
29、 of the student you want to search:);scanf(%d,&n);p=search(n,head2);if(p=NULL)printf(no this student!n);else printf(%d,%sn,p-num,p-name);7. 循環(huán)單鏈表(選作)。 將上一題鏈表結(jié)構(gòu)改為下面的形式,并在其上實(shí)現(xiàn)功能(a)(e)。/話說,老師,這一題我可以建完一個(gè)循環(huán)鏈表,后面又把他拆成了單鏈才做后面幾步嗎?#include#include#define LEN sizeof(struct student)struct studentint num;char n
30、ame20;struct student *next;struct student *create()struct student *p1,*p2,*p3,*p4,*p,*head;int n,i;p1=(struct student *)malloc(LEN);head=p1;printf(please input the total number of student:);scanf(%d,&n);printf(please input the information of student:n);for(i=0;inum,p1-name);p1-next=NULL;p3=head;while(p1-nump3-num&p3-next!=NULL)p4=p3;p3=p3-next;if(p1-numnum)if(head=p3)head=p1;else p4-next=p1;p1-next=p3;else p3-next=p1;p1-next=NULL;p=p1;p1=(struct student *)malloc(LEN);p-next=head;return(head);in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《內(nèi)蒙古館開館演講》課件
- 2025年度三人農(nóng)業(yè)科技項(xiàng)目合伙人合同范本3篇
- 2024防水材料購(gòu)銷合作合同版B版
- 2024高端住宅精裝修承攬協(xié)議版B版
- 動(dòng)物遺傳繁育知到智慧樹章節(jié)測(cè)試課后答案2024年秋甘肅畜牧工程職業(yè)技術(shù)學(xué)院
- 2024版工業(yè)級(jí)不銹鋼管訂貨協(xié)議版
- 劇院木地板施工合同
- 隧道智能化系統(tǒng)采購(gòu)合同
- 飛機(jī)檢修高空作業(yè)車租賃協(xié)議
- 鐵路工程安全施工協(xié)議
- 管理ABC-干嘉偉(美團(tuán)網(wǎng)COO)
- XX市“互聯(lián)網(wǎng)+”-土地二級(jí)市場(chǎng)交易建設(shè)方案
- 2023-2024學(xué)年度第一學(xué)期四年級(jí)數(shù)學(xué)寒假作業(yè)
- 大學(xué)軍事理論課教程第三章軍事思想第三節(jié)中國(guó)古代軍事思想
- 駕駛員勞務(wù)派遣投標(biāo)方案
- 家長(zhǎng)會(huì)課件:四年級(jí)家長(zhǎng)會(huì)語(yǔ)文老師課件
- 續(xù)簽勞動(dòng)合同意見征詢書
- 水封式排水器的研究
- 導(dǎo)線三角高程計(jì)算表(表內(nèi)自帶計(jì)算公式)
- 小學(xué)數(shù)學(xué)課堂教學(xué)評(píng)價(jià)表
- 鋼管裝卸安全管理規(guī)定
評(píng)論
0/150
提交評(píng)論