第七次作业:结构体
1. 计算日期的差值
(1)编写一函数,计算两个日期之间的时间差,并将其值返回。 日期以年、月、日表示。 “时间差”以天数表示。
注意考虑日期之间的闰年。
函数的输入参数为日期1和日期2, 函数的返回值为时间差,单位为天数。
(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。
为了计算简便,假设用户输入的日期1总是早于日期2。
#include
{int day;int month;int year;}date1,date2; int totaldays(struct date *p,struct date *q) { int years,total=0,i; int monthday[12]={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; else {for(i=p->month;i
total++; } if(((p->year%4==0&&p->year0!=0)||p->year@0==0)&&p->month<=2)total++; if(((q->year%4==0&&q->year0!=0)||q->year@0==0)&&q->month>2)total++; } return total; }
void main() { int days; printf(\ scanf(\ printf(\ scanf(\ days=totaldays(&date1,&date2); printf(\}
2. 结构体数组应用
请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。并定义一个结构体数组。编程:
a) 编写函数 input() , 输入基本信息(3~5条记录); b) 编写函数 print(),输出全体记录信息;
c) 编写函数 search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上; d) 说明,访问结构的时候,什么时候应该用运算符“.”,什么时候应该用运算符“->”。 #include
{char name[20];int num;char home[20];char IDnum[20];int age;char addr[50];char sex;char phone[20];}stu[10]; void input(struct student *p) {
scanf(\
um,&p->age,&p->addr,&p->sex,&p->phone); }
void print(struct student *p) {
printf(\
,p->age,p->addr,p->sex,p->phone); }
int search(struct student stu[],int n,char stu_name[20]) {
int i;
for(i=0;i return n+1; if(strcmp(stu_name,stu[i].name)==0){return i;break;} else continue; } void main() { } int n,i; char a[20]; printf(\scanf(\ for(i=0;i printf(\scanf(\i=search(stu,n,a); if(i else if(i==n+1)printf(\ 3. 一元多项式加法 编写一元多项式加法器,输入两个一元稀疏多项 式,然后对它们进行加法操作。 在具体实现上,要求用线性链表形式来存储一个多项式,每个链表的节点包括两个成员 变量,系数和指数(均为整数)。例如 A(x)?75?30x?95x8?50x9 , B(x)?80x?25x7?90x8 可以用下面的链表表示: 750301958509null801257908null 说明: (1) 每个链表节点都是根据需要动态创建的; (2) 程序采用多函数形式来实现,至少包括创建链表、打印链表、加法函数等。 (3) 多项式系数可正、可负;指数肯定是非负整数,且按照递增顺序排列 输入格式:第一行是一个整数M,表示第一个多项式的项数。 接下来有M行,每行有两个整数ci和ei,分别表示第i项的系数和指数。 再接下来是输入第二个多项式,方法同第一个多项式输入。 输出格式:输出两个多项式相加的结果。第一行是整数K,表示新多项式的项数。 接下来有K行,每一行为两个整数,分别代表系数和指数。 #include #define LEN sizeof(struct poly) struct poly {int c;int e;struct poly *next;}poly1[10],poly2[10]; void input(struct poly a[],int m) { for(int i=0;i struct poly *linkcreate(struct poly a[],int m) { struct poly *head; struct poly *p1,*p2; p1=p2=(struct poly*)malloc(LEN); head=p1=&a[0]; for(int i=0;i