第九章:结构体_第1页
第九章:结构体_第2页
第九章:结构体_第3页
第九章:结构体_第4页
第九章:结构体_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 定义两个日期结构体变量(包括年、月、日)。输入两个日期值,比较两个日期的大小(越靠后越大),输出较大的日期。2、 将1题中输入的日期进行验证,保证日期的正确性。(1)不可为负数;(2)年份1900-2056之间,月份在1-12之间;(3)日期在1-31日以内(注意各月份的日期数判断及闰年的判断)(Year % 4 =0 && Year % 100 !=0 | Year % 400 =0)3、 输入两个日期,编程交换两个日期值,保证第一个日期是较大的日期(日期的大小比较用函数表达)。4、 计算某日期是一年中的第几天。5、 计算两日期间相差的天数。6、 利用基姆拉尔森计算公式

2、:W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7,计算任意日期是星期几。说明:1)在公式中d表示日期中的日数,m表示月份数,y表示年数。2)注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。7、 打印出任意月份的日历表。8、 输入5位同学的一组信息(结构数组),包括学号、姓名、数学成绩、计算机成绩,求得每位同学的平均分和总分,然后按照总分从高到低排序。9、 有一批图书(利用结构数组),每本书有:书名(name),作者(author) , 编号(nu

3、m),出版日期(date)四个数据,希望输入后按书名的字母顺序将各书的记录排列好,供以后查询。今输入一本书的书名,如果查询到库中有此书,打印出此书的书名,作者,编号和出版日期。如果查不到此书,则打印出“无此书”。10、 利用指针重做9题:分别设计函数(1)结构数组的数据输入;(2)结构数组的输出;(3)数组排序;(4)查询;关于链表:11、 参考第8题,编写函数,建立动态链表,输入几位同学的信息(学号、姓名、数学、计算机、平均分、总分),然后在屏幕上输出这些数据。12、 将11题中,各同学的总分与平均分计算出来,并输出所有数据;13、 建立函数,为上题 中的链表添加一个新的节点。14、 建立按

4、姓名查找某同学记录的函数,找到返回该节点的地址,未找到返回NULL;15、 在某个同学纪录之前插入一个新的节点。(某同学记录之后插入一个新的节点)16、 删除找到的某个同学记录的节点。17、 单向链表逆置;.18、 对单链表按照数学成绩从高到低排序;(只交换除指针成员next之外的其他成员变量的值)19、 对两个链表进行连接;两个有序链表合并(保持有序);20、 利用指针,交换链表中任意两个节点;(p,q为需要交换的两个节点,首先保证p<=q,并作为传递的参数,函数中分为几种情形: 21、 利用20题函数,重写链表的排序;(以下例题开始使用带头节点的链表,可以减小编程的难度)22、 利用

5、链表完成习题:有17个人围成一圈(编号为016),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号?23、 利用插入法,每输入一个节点数据就按顺序插入到链表的某个位置,输入完成即链表排序完成,输出链表的各节点数据。24、 编写程序,建立环形链表及双向链表(带头节点),并正向、反向输出双向链表中所有节点数据;25、 编写双向链表的节点插入、删除、交换、排序函数26、 编写一个完整、简易的成绩管理系统:说明:1)结构体定义:Student学号num,姓名name,班级classes,语文chinese,数学math,英

6、语english,总分sum;2)系统功能:a.成绩录入; b.添加数据(在链表的末尾添加);c.删除某生成绩数据;d.成绩修改;e.成绩排序(第一关键字班级,第二关键字总分);f.成绩输出(指定班级输出或全部输出,要输出一项人数信息);27、参考答案第2题:main() struct Date int year; int month; int day; d1; printf("input date 1(year-month-day):n");scanf("%d-%d-%d",&d1.year,&d1.month,&d1.day)

7、; if(yzyear(d1.year)&&yzmonth(d1.month)&&yzday(d1.year,d1.month,d1.day) printf("yes"); else printf("no"); getch();yzyear(int year) if(year<1900|year>2056) return 0; return 1;yzmonth(int month) if(month<1|month>12) return 0; return 1;yzday(int year,int

8、month,int day) switch (month) case 1:case 3:case 5:case 7:case 8:case 10:case 12: if(day>=1&&day<=31) return 1; break; case 4:case 6:case 9:case 11: if(day>=1&&day<=30) return 1; break; case 2: if(year%4=0&&year%100!=0|year%400=0)&&day>=1&&day&l

9、t;=29) return 1; else if(!(year%4=0&&year%100!=0|year%400=0)&&day>=1&&day<=28) return 1; break; return 0;第3题:struct Date int year,month,day;int main(void) struct Date d1,d2,tmp; int x; printf("input d1(yyyy-mm-dd):n"); scanf("%d-%d-%d",&d1.year,&

10、amp;d1.month,&d1.day); printf("input d2(yyyy-mm-dd):n"); scanf("%d-%d-%d",&d2.year,&d2.month,&d2.day); x=later(d1,d2); if(x<0) tmp=d1;d1=d2;d2=tmp; printf("%d-%d-%d",d1.year,d1.month,d1.day); printf(" %d-%d-%d",d2.year,d2.month,d2.day); getc

11、h(); return 0;later(struct Date d1,struct Date d2) if(d1.year!=d2.year) return d1.year-d2.year; else if(d1.month!=d2.month) return d1.month-d2.month; else if(d1.day!=d2.day) return d1.day-d2.day; else return 0;第4题:struct Date int year; int month; int day;int main(void) struct Date d1; int n; printf(

12、"input date 1(year-month-day):n"); scanf("%d-%d-%d",&d1.year,&d1.month,&d1.day); n=daysInYear(d1); printf("from %d-1-1 to %d-%d-%d,%d days",d1.year,d1.year,d1.month,d1.day,n); getch(); return 0;int daysInYear(struct Date d) int m13=0,31,28,31,30,31,30,31,31,

13、30,31,30,31; int i,sum=0; if(leapyear(d.year) m2=29; for(i=1;i<d.month;i+) sum+=mi; sum+=d.day; return sum;int leapyear(int year) if(year%4=0&&year%100!=0|year%400=0) return 1; return 0;第5题:(利用前几题的函数)struct Date int year; int month; int day;int main(void) struct Date d1,d2,tmp; int n; pri

14、ntf("input date 1(year-month-day):n"); scanf("%d-%d-%d",&d1.year,&d1.month,&d1.day); printf("input date 2(year-month-day):n"); scanf("%d-%d-%d",&d2.year,&d2.month,&d2.day); if(later(d1,d2)<0) tmp=d1;d1=d2;d2=tmp; n=datediff(d1,d2); p

15、rintf("from %d-%d-%d to %d-%d-%d,%d days",d2.year,d2.month,d2.day,d1.year,d1.month,d1.day,n); getch(); return 0;int datediff(struct Date d1,struct Date d2) int i,sum=0; for(i=d2.year;i<d1.year;i+) if(leapyear(i) sum+=366; else sum+=365; sum-=daysInYear(d2); sum+=daysInYear(d1); return s

16、um;第6题:(0:星期天 1:星期一 )int weekday(struct Date d1) int y=d1.year,m=d1.month,d=d1.day,w; if(m=1|m=2) m+=12; y-; w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7; return (w+1)%7;第7题:calendar(struct Date d1) struct Date d2=d1; int y=d1.year,m=d1.month,d=d1.day,w,i; int mm13=0,31,28,31,30,31,30,31,31,30,31,30,31

17、; if(leapyear(y) mm2=29; d2.day=1; w=weekday(d2); printf("SUNtMONtTRUtWENtTHUtFRItSATn"); for(i=0;i<w;i+) printf("t"); for(i=1;i<=mmm;i+) if(i=d) textcolor(YELLOW); clreol(); printf("%dt",i); normvideo(); clreol(); else printf("%dt",i); if(i+w)%7=0) prin

18、tf("n"); 第8题:struct Student int num; char name20; int math; int computer; float aver; int sum;int main(void) struct Student stu5,tmp; int i,j; printf("input student infomation:n"); for(i=0;i<5;i+) printf("-STUDENT %d-nSID:",i+1); scanf("%d",&stui.num);

19、printf("NAME:"); scanf("%s",); printf("MATH:"); scanf("%d",&stui.math); printf("COMPUTER:"); scanf("%d",&puter); for(i=0;i<5;i+) stui.sum=stui.math+puter; stui.aver=stui.sum/2; for(i=0;i<5;i+) for(j=i+

20、1;j<5;j+) if(stui.sum<stuj.sum) tmp=stui;stui=stuj;stuj=tmp; for(i=0;i<5;i+) printf("-STUDENT %d-nSID:",i+1); printf("%dt",stui.num); printf("NAME:"); printf("%st",); printf("MATH:"); printf("%dt",stui.math); printf("

21、COMPUTER:"); printf("%dt",puter); printf("AVER:"); printf("%ft",stui.aver); printf("SUM:"); printf("%dtn",stui.sum); getch(); return 0;第10题: #include "Stdio.h"#include "Conio.h"#define N 2struct Date int year,month,da

22、y;struct Book char name30; char author20; int num; struct Date pubdate;int main(void) struct Book books10,*p; int i; p=books; inputbook(p,N); sort(p,N); outputbook(p,N); inputname(p); window(1,1,80,25); normvideo(); clrscr(); getch(); return 0;inputname(struct Book *p) char ch30,*q; int i; q=ch; whi

23、le(1) window(20,8+N+3,60,8+N+5); textbackground(WHITE); textcolor(BLACK); clrscr(); gotoxy(2,1); cprintf("your found:(*)"); gets(q); if(strcmp(q,"*")=0) break; i=found(q,p,N); gotoxy(2,2);clreol(); if(i>=0) printf("%st%st%dt%d-%d-%d",(p+i)->name,(p+i)->author,

24、(p+i)->num,(p+i)->pubdate.year,(p+i)->pubdate.month,(p+i)->pubdate.day); else printf("not found!"); getch(); found(char *q,struct Book *p,int n) int i; for(i=0;i<n;i+) if(strcmp(q,(p+i)->name)=0) return i; return -1;inputbook(struct Book *p,int n) int i; for(i=0;i<n;i+

25、) window(20,5,50,10); textbackground(WHITE); textcolor(BLACK); clrscr(); gotoxy(8,1); cprintf("-BOOK INFOMATION-n"); gotoxy(2,2); cprintf("book name:"); gets(p->name); gotoxy(2,3); cprintf("author:"); gets(p->author); gotoxy(2,4); cprintf("num:"); scanf(

26、"%d",&(p->num); gotoxy(2,5); cprintf("pubdate(yyyy-mm-dd):"); scanf("%d-%d-%d",&(p->pubdate.year),&(p->pubdate.month),&(p->pubdate.day); getchar(); p+; outputbook(struct Book *p,int n) int i; window(20,12,60,12+N+2); textbackground(WHITE); te

27、xtcolor(BLACK); clrscr(); gotoxy(6,1); printf("book infomationn"); gotoxy(2,2); printf("nametauthortnumtpubdaten"); for(i=0;i<n;i+) gotoxy(2,i+3); printf("%st%st%dt%d-%d-%dn",p->name,p->author, p->num,p->pubdate.year,p->pubdate.month,p->pubdate.day)

28、; p+; sort(struct Book *p,int n) int i,j; struct Book tmp; for(i=0;i<n;i+) for(j=i+1;j<n;j+) if(strcmp(p+i)->name,(p+j)->name)>0) tmp=*(p+i);*(p+i)=*(p+j);*(p+j)=tmp; 第11题:#include "Stdio.h"#include "Conio.h"#define LEN sizeof(struct Student)struct Student int num;

29、 char name20; int math,computer; float aver; int sum; struct Student *next;int n;int main(void) struct Student *create(); struct Student *head; head=create(); outputstu(head); getch(); return 0;struct Student *create() struct Student *p1,*p2,*head; char yn; p1=p2=head=NULL; n=0; while(1) n+; p1=(str

30、uct Student *)malloc(LEN); inputstu(p1); if(n=1) head=p1; else p2->next=p1; p2=p1; printf("continue?(Y/N)"); yn=getchar(); if(yn='Y'|yn='y') continue; else break; p2->next=NULL; return head;outputstu(struct Student *head) struct Student *p; int i=0; p=head; printf(&qu

31、ot;numtnametmathtcomputern"); while(i<n) printf("%dt%st%dt%dn",p->num,p->name,p->math,p->computer); p=p->next; i+; inputstu(struct Student *p) printf("num:"); scanf("%d",&p->num); getchar(); printf("name:"); gets(p->name); prin

32、tf("math:"); scanf("%d",&p->math); printf("computer:"); scanf("%d",&p->computer); getchar();第12题:count(struct Student *head) struct Student *p; p=head; while(p!=NULL) p->sum=p->math+p->computer; p->aver=(float)p->sum/2; p=p->nex

33、t; outputall(struct Student *head) struct Student *p; p=head; printf("numtnametmathtcomputtavertsumn"); while(p!=NULL) printf("%dt%st%dt%dt%5.2ft%dn",p->num,p->name,p->math,p->computer,p->aver,p->sum); p=p->next; 第13题:addone(struct Student *head) struct Stude

34、nt *p,*q; p=head; while(p->next!=NULL) p=p->next; q=(struct Student *)malloc(LEN); inputstu(q); p->next=q; q->next=NULL; count(q);第14、15题:(14题:find函数,15题:insertone函数,另对前几题中函数稍做了些调整,下面把所有函数完整列出)#include "Stdio.h"#include "Conio.h"#define LEN sizeof(struct Student)struc

35、t Student int num; char name20; int math,computer; float aver; int sum; struct Student *next;int n;int main(void) struct Student *create(); struct Student *newone(); struct Student *find(struct Student *head,char *ch); struct Student *insertone(struct Student *head,char *ch); struct Student *head,*f

36、; char c20,*ch; int xx; head=create(); outputstu(head); ch=c; getchar(); printf("where you insert:"); gets(ch); head=insertone(head,ch); if(head!=NULL) outputstu(head); else printf("not found!"); getch(); return 0;struct Student *insertone(struct Student *head,char *ch) struct St

37、udent *p,*q,*r; q=newone(); p=find(head,ch); if(p=NULL) printf("not found!n"); return head; if(p!=head) r=head; while(r->next!=p) r=r->next; r->next=q; q->next=p; return(head); else head=q; q->next=p; return(head); printhead(int n) if(n=0) printf("numtnametmathtcomputen

38、"); else printf("numtnametmathtcomputtavertsumn");printbody(struct Student *p,int n) if(n=0) printf("%dt%st%dt%dn",p->num,p->name,p->math,p->computer); else printf("%dt%st%dt%dt%5.2ft%dn",p->num,p->name,p->math,p->computer,p->aver,p->s

39、um);outputone(struct Student *p) printhead(0); printbody(p,0);struct Student *find(struct Student *head,char *ch) struct Student *p; p=head; while(p) if(strcmp(p->name,ch)=0) return(p); p=p->next; return(NULL);struct Student *create() struct Student *p1,*p2,*head; char yn; p1=p2=head=NULL; n=0

40、; while(1) n+; p1=newone(); if(n=1) head=p1; else p2->next=p1; p2=p1; printf("continue?(Y/N)"); yn=getchar(); if(yn='Y'|yn='y') continue; else break; p2->next=NULL; return head;outputstu(struct Student *head) struct Student *p; p=head; printhead(0); while(p) printbody

41、(p,0); p=p->next; inputstu(struct Student *p) printf("num:"); scanf("%d",&p->num); getchar(); printf("name:"); gets(p->name); printf("math:"); scanf("%d",&p->math); printf("computer:"); scanf("%d",&p->co

42、mputer); getchar();count(struct Student *head) struct Student *p; p=head; while(p!=NULL) p->sum=p->math+p->computer; p->aver=(float)p->sum/2; p=p->next; outputall(struct Student *head) struct Student *p; p=head; printhead(1); while(p!=NULL) printbody(p,1); p=p->next; addone(stru

43、ct Student *head) struct Student *p,*q; p=head; while(p->next!=NULL) p=p->next; q=newone(); p->next=q; q->next=NULL; count(q);struct Student *newone() struct Student *p; p=(struct Student *)malloc(LEN); inputstu(p); return(p);第16题:struct Student *delone(struct Student *head,char *ch) str

44、uct Student *p,*r; p=find(head,ch); if(!p) printf("not found!n"); return head; if(p=head) head=p->next; free(p); else r=head; while(r->next!=p) r=r->next; r->next=p->next; free(p); return head;第17题:struct Student *reverselink(struct Student *head) struct Student *p,*q; p=hea

45、d; q=NULL; while(head!=NULL) head=head->next; p->next=q; q=p; p=head; return q;第18题:sort(struct Student *head) struct Student tmp; int t; char ch20; struct Student *p,*q,*r; p=head; while(p!=NULL) q=p->next; while(q!=NULL) if(p->math>q->math) t=p->num;p->num=q->num;q->n

46、um=t; strcpy(ch,p->name);strcpy(p->name,q->name);strcpy(q->name,ch); t=p->math;p->math=q->math;q->math=t; t=p->computer;p->computer=q->computer;q->computer=t; q=q->next; p=p->next; 第19题(第二问):struct Student *join(struct Student *head1,struct Student *head2) s

47、truct Student *head3,*p,*q,*r; p=head1;q=head2;r=NULL; if(head1->math < head2 ->math) head3=head1; p=p->next; else head3=head2; q=q->next; r=head3; while(p!=NULL&&q!=NULL) if(p->math < q->math) r->next=p; r=p; p=p->next; else r->next=q; r=q; q=q->next; if(p!=NULL) r->next=p; if(q!=NULL) r->next=q; return head3;第20题:struct Student *exchange(struct Student *head,struct Student *p,struct Student *q) struct Student *findprenode(struct Student *head,struct Student *p); struct Student *p_pre,*p_nex,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论