1、日期结构体
【问题描述】
定义一个日期结构体类型(包括年、月、日),计算某日在本年中是第几天,注意闰年问题。
【输入形式】一个日期,包括年、月、日
【输出形式】该日期为该年的第几天
【样例输入】
2021 10 27
【样例输出】
300
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct date
{int year;int month;int day;
};
int main()
{struct date a;int i,s=0;int x[12]={31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d %d %d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++){s+=x[i];}if((a.month>2)&&((a.year%4==0&&a.year%100!=0)||(a.year%400==0))){s+=1;}printf("%d\n",s+a.day);return 0;
}
2、单项动态链表的创建与输出
【问题描述】
写一个建立单向动态链表的create()函数,从键盘输入n个学生的数据(num,score),约定学号不会为0,如果学号为0表示建立链表的过程完成,并写一个show()函数输出链表,输出格式: "%ld\t%5.1f\n"
表头输出格式:printf("num\tscore\n")
编写主函数调用create()和show()完成动态链表的创建与输出
【输入形式】n个学生的数据
【输出形式】链表中n个学生的信息
【样例输入】
1 99 2 88 3 77 4 66 5 55 0 |
【样例输出】
Now,These 5 records are: num score 1 99.0 2 88.0 3 77.0 4 66.0 5 55.0 |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
struct student
{int num;double score;struct student *next;
};
int n=0;
struct student *create()
{struct student *head;struct student *p1,*p2;p1=p2=(struct student *)malloc(sizeof(struct student));scanf("%d %lf",&p1->num,&p1->score);head=NULL;while(1){n++;if(n==1){head=p1;}else{p2->next=p1;}p2=p1;p1=(struct student *)malloc(sizeof(struct student));scanf("%d",&p1->num);if(p1->num==0){break;}scanf("%lf",&p1->score);}p2->next=NULL;return head;
}
void show(struct student *head)
{struct student *p;printf("Now,These %d records are:\n",n);printf("num score\n");p=head;if(head!=NULL)do{printf("%-4d %5.1f",p->num,p->score);p=p->next;if(p!=NULL){printf("\n");}} while(p!=NULL);
}
int main()
{struct student *head;head=create();show(head);return 0;
}
3、删除单向动态链表中指定的学生数据
【问题描述】
写一个建立单向动态链表的函数,从键盘输入n个学生的数据(num, score),约定学号不会为0,如果学号为0表示建立链表的过程完成,然后从键盘输入一个要删除学生的学号,并输出删除后的链表结果("%ld\t%5.1f\n")。
写三个函数create(), show(), del()各实现其功能。
表头输出格式:printf("num\tscore\n")
注意:如果要删除的学号在链表中不存在,则先输出:("%d not been found!\n",num); 然后再输出链表中的结点数据
【输入形式】
从键盘输入n个学生的数据,建立n个学生的动态链表
从键盘输入要删除的学生数据
【输出形式】
输出删除后链表结果
【样例输入】
1 99 2 88 3 77 4 66 5 55 0 3 |
【样例输出】
delete:3 Now,These 4 records are: num score 1 99.0 2 88.0 4 66.0 5 55.0 |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
struct student
{int num;double score;struct student *next;
};
int n=0;
struct student *create()
{struct student *del(struct student *head,int num);struct student *head;struct student *p1,*p2;p1=p2=(struct student *)malloc(sizeof(struct student));scanf("%d %lf",&p1->num,&p1->score);head=NULL;while(1){n++;if(n==1){head=p1;}else{p2->next=p1;}p2=p1;p1=(struct student *)malloc(sizeof(struct student));scanf("%d",&p1->num);if(p1->num==0){break;}scanf("%lf",&p1->score);}p2->next=NULL;scanf("%d",&p1->num);del(head,p1->num);return head;
}
struct student *del(struct student *head,int num)
{struct student *p1,*p2;p1=p2=head;while(num!=p1->num&&p1->next!=NULL){p2 = p1;p1 = p1->next;}if(num==p1->num){if(p1==head){head=p1->next;}else {p2->next=p1->next;}printf("delete:%d\n",num);n--;}else{printf("%d not been found!\n",num);}return head;
}
void show(struct student *head)
{struct student *p;printf("Now,These %d records are:\n",n);printf("num score\n");p=head;if(head!=NULL)do{printf("%-4d %5.1f",p->num,p->score);p=p->next;if(p!=NULL){printf("\n");}} while(p!=NULL);
}
int main()
{struct student *head;head=create();show(head);return 0;
}
4、动态链表插入学生数据
【问题描述】
写一个建立单向动态链表的函数,从键盘输入n个学生的数据(num,score),约定学号不会为0,如果学号为0表示建立链表的过程完成,然后从键盘输入一个要插入学生的数据,并输出插入后的链表结果,输出格式:("%ld\t%5.1f\n")。
写三个函数create(), show(), insert()各实现其功能。
注意:插入后的链表学号依旧按由小到大排列。
【输入形式】
从键盘输入n个学生的数据,完成建立链表
从键盘输入要插入的1个学生数据
【输出形式】
输出插入数据后链表
【样例输入】
1 99 2 88 3 77 4 66 5 55 0 9 90 |
【样例输出】
Now,These 6 records are: num score 1 99.0 2 88.0 3 77.0 4 66.0 5 55.0 9 90.0 |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
struct student
{int num;double score;struct student *next;
};
int n=0;
struct student *create()
{struct student *head;struct student *p1,*p2;p1=p2=(struct student *)malloc(sizeof(struct student));scanf("%d %lf",&p1->num,&p1->score);head=NULL;while(1){n++;if(n==1){head=p1;}else{p2->next=p1;}p2=p1;p1=(struct student *)malloc(sizeof(struct student));scanf("%d",&p1->num);if(p1->num==0){break;}scanf("%lf",&p1->score);}p2->next=NULL;return head;
}
struct student *insert(struct student *head,struct student *a)
{struct student *p0,*p1,*p2;p1=p2=head;p0=a;if(head==NULL){head=p0;p0->next=NULL;}else{while((p0->num > p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(p0->num<=p1->num){if(head==p1){head=p0;}else{p2->next=p0;}p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}n++;return head;
}
void show(struct student *head)
{struct student *p;printf("Now,These %d records are:\n",n);printf("num score\n");p=head;if(head!=NULL)do{printf("%-4d %5.1f",p->num,p->score);p=p->next;if(p!=NULL){printf("\n");}} while(p!=NULL);
}
int main()
{struct student *creat();struct student *insert(struct student *, struct student *);void print(struct student *);struct student *head, stu;head=create();scanf("%d %lf",&stu.num,&stu.score);head=insert(head,&stu);show(head);return 0;
}