【趣学C语言和数据结构100例】
【趣学C语言和数据结构100例】
问题描述
41.给出年、月、日,计算该日是该年的第几天解析:需要掌握函数:判断是否为闰年
42.(约瑟夫环问题)有 n 个人围成一圈,顺序排号。从第 1 个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位,用指针+数组实现。
43.有 10 个学生,每个学生的数据包括学号,姓名,3 门课的成绩,从键盘输入 10 个学生数据。要求输出 3 门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3 门课程成绩平均分数)。
44.采用头插法建立单链表,头插法常用于逆置
45.采用尾插法建立单链表
代码分析
41.经典闰年
分析:判断为该年的第几天——>则需要判断2月的天数,即判断是否为闰年。先输入年、月、日。创造数组存储月份。2月先默认28天(如果后续为闰年,则天数+1),先计算<该月的月天数所具有的天数。判断是否为闰年并且月份>=3时对天数进行++;然后输出总天数。
写一个判断闰年函数:
- 该年份能被4整除,但不能被100整除,是闰年。
- 该年份能被400整除,是闰年。
记忆:4和400可以,100不行
int leap(int year){
return year%4==0 && year%100!=0 || year%400==0;
}
42.约瑟夫环问题
分析:使用数组存储数据。先输入n,创造一个n大小的数组。赋初值为i+1(从1开始计数)。创造一个remain用来计数剩余人数,定义一个访问指针。只要remain剩余人数>1,就一直进行游戏。游戏开始,令p指向数组。在创造一个循环while(p!=people+n)(只要不到数组的最后一位,就一直判断,即用来遍历数组)(注意:p是一位一位的移动,到最后一位之后,使p指向数组的开头)游戏正式开始,如果p此时指向的不为0,就有效,则计数++;判断计数是否为3,如果为3,则计数归0,剩余人数-1,该位置赋值为0(*p=0,即退出圈子),并且进行p++。一直到remain剩余人数为1,遍历数组找到不为0的数,即最后留下的。
43.初识结构体
结构体的定义:
结构体知识:
//在C语言中定义:
typedef struct {
int x;
char y;
float z;
}student;
//在C++语言中定义:
struct student{
int x;
char y;
float z;
};
结构体的大小:
int+char+float=4+1+8=13
结构体定义并赋值(初始化默认为 0):
student a1;
a1.x=1;a1.y=2;a1.z=3;
student a1={
1,2,3};
分析:本题创造学号,姓名,3门课的成绩(数组),使用for循环即可解决问题。
44.链表之头插法
//链表知识:
//定义方式一:
typedef struct LNode {
int data;
struct LNode *next;
} LNode,*Liuklist;
//定义方式二(更优):
typedef struct LNode {
int data;
struct LNode *next;
} LNode;
typedef LNode *Liuklist;
//LNode 结构体定义了单链表节点的结构,包含 data 和 next 两个成员。
//Liuklist 被定义为指向 LNode 的指针,因此它可以用来表示单链表。
int mian(){
// 创建三个节点
LNode* node1 = (LNode*)malloc(sizeof(LNode));
LNode* node2 = (LNode*)malloc(sizeof(LNode));
LNode* node3 = (LNode*)malloc(