第七次作业参考答案_668804622
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("请输入第二个多项式的项数:"); scanf("%d", &m2); printf("请输入第二个多项式(一项一行升幂排列,格式: 系数 指数):\n"); head2 = create(m2); p0 = add(head1,head2); p = p0; while(p != NULL) { n++; p = p->next; } printf("\n相加后的多项式项数为:%d\n", n); printf("\n相加后的多项式为:\n"); print(p0); }
void print(struct student stu[]) { printf("姓名 \n"); for(int i=0; i<N; i++) printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name, stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address, stu[i].sex, stu[i].phone); } 学号 籍贯 身份证号 年龄 地址 性别 电话
void print(struct polynomial *head) { struct polynomial *p; p = head; while(p != NULL) { printf("%d %d\n", p->a, p->x); p = p->next; } }
struct polynomial *add(struct polynomial *head1, struct polynomial *head2) { struct polynomial *p1, *p2, *p3; p1 = head1; while(head2 != NULL) { p3 = head2; head2 = p3->next; while(((p1->x)<(p3->x)) && (p1->next!=NULL)) { p2 = p1; p1 = p1->next; } if(p1->x > p3->x) { if(p1 == head1) { head1 = p3; p3->next = p1; } else { p2->next = p3; p3->next = p1; } } else if(p1->x == p3->x) { p1->a = p1->a + p3->a; if(p1->a == 0) { if(p1 == head1) head1 = p1->next; else { p2->next = p1->next; p1 = p1->next; } } } else { p1->next = p3; p3->next = NULL; //p1移动至末尾 //若相加后该项的系数为0,则将其删去 //如果相等则相加 //如果p1的次数大 //找到插入点 //将后者往前者中插
void search(struct student stu[], char name[]) { int flag=0; for(int i=0; i<N; i++) if(strcmp(stu[i].name, name)==0) { printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name, stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address, stu[i].sex, stu[i].phone); flag = 1; } if(flag == 0) printf("没有该学生的信息!\n\n"); }
Hale Waihona Puke int isLeap(int year) {
if(year%400==0 || (year%4==0 && year%100!=0)) return 1;
else return 0; }
int dif(struct date a, struct date b) { int i; long day=0, day1=0, day2=0; int d[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}}; // day变量为年份a到年份b前一年的年份总天数 for(i=a.year; i<b.year; i++) if(isLeap(i)) day += 366; else day += 365; // day1变量为年份a年初到当天的年内总天数 for(i=1; i<a.month; ++i) day1 += d[isLeap(a.year)][i]; day1 += a.day; // day1变量为年份b年初到当天的年内总天数 for(i=1; i<b.month; ++i) day2 += d[isLeap(b.year)][i]; day2 += b.day; return day + day2 - day1; }
#define N 3 {
struct student
char name[20]; char num[15]; char place[20]; char id[20]; int age; char address[100]; char sex; char phone[15]; } stu[N]; void input(struct student stu[]); void print(struct student stu[]); void search(struct student stu[], char name[]);
void main() { struct polynomial *head1, *head2, *p0, *p; int m1, m2, i, n=0; printf("请输入第一个多项式的项数:"); scanf("%d", &m1); printf("请输入第一个多项式(一项一行升幂排列,格式: 系数 指数):\n"); head1 = create(m1);
参考截图:
第 2 题:结构体数组应用
请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭 住址,性别,联系方式等。并定义一个结构体数组。编程: a) b) 编写函数 input() , 输入基本信息(3~5 条记录) ; 编写函数 print(),输出全体记录信息;
c) d)
struct polynomial *create(int m) { struct polynomial *p1, *p2, *head=NULL; p1 = p2 = (struct polynomial *) malloc(LEN); scanf("%d %d", &p1->a, &p1->x); head = p1; for(int i=1; i<m; i++) { p1 = (struct polynomial *) malloc(LEN); scanf("%d %d",&p1->a,&p1->x); p2->next = p1; p2 = p1; } p1->next = NULL; return(head); }
参考截图:
第 3 题:一元多项式加法
编写一元多项式加法器,输入两个一元稀疏多项式,然后对它们进行加法操作。 在具体实现上, 要求用线性链表形式来存储一个多项式, 每个链表的节点包括两个成员 变量,系数和指数(均为整数)。例如
A( x) 75 30 x 95 x 8 50 x 9 ,
void main() { char name[20]; input(stu); print(stu); printf("\n请输入想要查找的学生姓名: "); scanf("%s", name); search(stu, name); }
void input(struct student stu[]) { for(int i=0; i<N; i++) { printf("请输入第%d个学生的信息:\n", i+1); printf("姓名: "); scanf("%s", stu[i].name); printf("学号: "); scanf("%s", stu[i].num);
printf("籍贯: "); scanf("%s", stu[i].place); printf("身份证号: "); scanf("%s", stu[i].id); printf("年龄: "); scanf("%d", &stu[i].age); printf("家庭住址: "); scanf("%s", stu[i].address); fflush(stdin); printf("性别(M/F): "); scanf("%c", &stu[i].sex); printf("电话: "); scanf("%s", stu[i].phone); printf("\n"); } }
可以用下面的链表表示:
B( x) 80 x 25 x 7 90 x 8
说明: (1) 每个链表节点都是根据需要动态创建的; (2) 程序采用多函数形式来实现,至少包括创建链表、打印链表、加法函数等。 (3) 多项式系数可正、可负;指数肯定是非负整数,且按照递增顺序排列 输入格式:第一行是一个整数M,表示第一个多项式的项数。 接下来有M行,每行有两个整数ci和ei,分别表示第i项的系数和指数。 再接下来是输入第二个多项式,方法同第一个多项式输入。 输出格式:输出两个多项式相加的结果。第一行是整数K,表示新多项式的项数。 接下来有K行,每一行为两个整数,分别代表系数和指数。 参考代码:
编写函数 search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上; 说明, 访问结构的时候, 什么时候应该用运算符 “.” , 什么时候应该用运算符 “->” 。 (运算符前是结构体变量时用“.” ,是指向结构体变量的指针时用“->” )
参考代码:
#include <stdio.h> #include <string.h> //增加程序的可扩展性
stustruct多项式polynomialprintfisleap第七次作业参考答案
第七次作业参考答案
(结构体)
第 1 题:计算日期的差值
(1)编写一函数,计算两个日期之间的时间差,并将其值返回。 日期以年、月、日表示。 “时间差”以天数表示。 注意考虑日期之间的闰年。 函数的输入参数为日期1和日期2, 函数的返回值为时间差,单位为天数。 (2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并 将结果输出。 为了计算简便,假设用户输入的日期1总是早于日期2。 参考代码:
#include<stdio.h>
struct date { int year; int month; int day; }; int isLeap(int year); int dif(struct date a, struct date b);
void main() { struct date a, b; printf("请输入日期1(空格分隔,年月日):\n"); scanf("%d%d%d", &a.year, &a.month, &a.day); printf("请输入日期2(空格分隔,年月日,晚于日期1):\n"); scanf("%d%d%d", &b.year, &b.month, &b.day); printf("相差天数为:"); printf(" %d 天\n", dif(a, b)); } //判断一个年份是否是闰年的函数
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct polynomial)
struct polynomial { int a; int x; struct polynomial *next; };
struct polynomial *create(int); void print(struct polynomial *); struct polynomial *add(struct polynomial *, struct polynomial *);