C语言编程学习day5

1、有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
**思路:**因为输入的是整体,所以通过time%100将小时与分钟分别取出。特别需要注意的是当前的分钟数加上流逝时间%60后的分钟数,如果仍然>60,则小时还需加1。此外,还有可能是计算之前的时间,所以输入的流逝时间是负数,还需取反。

#include 

int main(){
    
    int N, M;
    int hour = 0;
    int minute = 0;
    int S_hour = 0;
    int S_minute = 0;
    scanf("%d%d", &N, &M);
    
    minute = N % 100;
    hour = N / 100;
    
    if(M >=0){
        S_hour = M / 60; //取出流逝时间为几个小时
        S_minute = M % 60;//流逝时间取小时整后的分钟
    
        if(S_minute + minute >= 60){//流逝时间取整后的分钟数,与当前时间的分钟数之和>60,则小时需加1
            printf("%d\n", (hour + S_hour+1)*100 + (minute+S_minute)%60);
        }else{
            printf("%d\n", (hour + S_hour)*100 + (minute+S_minute));
        }
    }else{
        M = -M; //算当前时间的之前时间
        S_hour = M / 60;
        S_minute = M % 60;
        
        
        if(minute - S_minute >=0){
            if(hour - S_hour != 0){
                 printf("%d\n", (hour - S_hour)*100 + (minute-S_minute));
            }else{
                printf("0%d\n", (minute-S_minute));
            }           
        }else {
            if(hour - S_hour - 1 != 0){
                printf("%d\n", (hour - S_hour - 1)*100 + (60-S_minute + minute));
            }else{
                printf("0%d\n", (60 + minute - S_minute));
            }            
        }
}
    
    
    return 0;
}

2、回顾了一下寒假写的二叉树相关代码。
2.1二叉树结点结构体

typedef struct BINARYTREE{
	char data; //数据域
	struct BINARYTREE* lchild;//左孩子
	struct BINARYTREE* rchild;//右孩子
}BinaryTree;

2.2动态创建二叉树(通过先序序列创建二叉树)

//先序创建二叉树
BinaryTree* CreateBinaryTree(){
	char ch;
	scanf("%c", &ch);//输入结点值
	
	BinaryTree* node;//定义结点
	if(ch == '#'){//#代表空结点
		node = NULL;
	}else{
		node = (BinaryTree*)malloc(sizeof(BinaryTree));
		node->data = ch;
		node->lchild = CreateBinaryTree();
		node->	rchild = CreateBinaryTree();
	}
	return node;//返回根结点
}

2.3先序遍历二叉树

void PreOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	printf("%c ", root->data);//打印结点值
	PreOrder(root->lchild); //递归遍历左子树
	PreOrder(root->rchild); //递归遍历右子树
}

2.4中序遍历二叉树

void InOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	InOrder(root->lchild);//打印结点值
	printf("%c ", root->data);//打印结点值
	InOrder(root->rchild); //递归遍历右子树
}

2.5后续遍历二叉树

void PostOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	PostOrder(root->lchild);//打印结点值
	PostOrder(root->rchild); //递归遍历右子树
	printf("%c ", root->data);//打印结点值
}

2.6完整代码

#include 
#include 

//二叉树结点结构体
typedef struct BINARYTREE{
	char data; //数据域
	struct BINARYTREE* lchild;//左孩子
	struct BINARYTREE* rchild;//右孩子
}BinaryTree;

//先序遍历二叉树
void PreOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	printf("%c ", root->data);//打印结点值
	PreOrder(root->lchild); //递归遍历左子树
	PreOrder(root->rchild); //递归遍历右子树
}

//中续遍历二叉树
void InOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	InOrder(root->lchild);//打印结点值
	printf("%c ", root->data);//打印结点值
	InOrder(root->rchild); //递归遍历右子树
}
//后续遍历二叉树
void PostOrder(BinaryTree* root){
	if(root == NULL){
		return;
	}
	PostOrder(root->lchild);//打印结点值
	PostOrder(root->rchild); //递归遍历右子树
	printf("%c ", root->data);//打印结点值
}


//先序创建二叉树
BinaryTree* CreateBinaryTree(){
	char ch;
	scanf("%c", &ch);//输入结点值
	
	BinaryTree* node;//定义结点
	if(ch == '#'){//#代表空结点
		node = NULL;
	}else{
		node = (BinaryTree*)malloc(sizeof(BinaryTree));
		node->data = ch;
		node->lchild = CreateBinaryTree();
		node->	rchild = CreateBinaryTree();
	}
	return node;//返回根结点
}

int main(){
	
	BinaryTree* root = CreateBinaryTree();
	printf("Create success!\n");
	printf("PreOrder: ");
	PreOrder(root);
	printf("\n");
	printf("InOrder: ");
	InOrder(root);
	printf("\n");
	printf("PostOrder: ");
	PostOrder(root);
	return 0;
}

输入格式与二叉树:
C语言编程学习day5_第1张图片
遍历结果:
C语言编程学习day5_第2张图片
**总结:**今天就写了几道数学题,然后就选了一道逻辑较复杂的。然后,今天写代码的时间少,就回顾了一下寒假写的二叉树。当时是跟着视频敲,也是比较深入的理解,今天自己写的时候,90%多都能写出,只是在动态创建二叉树的一些细节做的不好(比如忘了需要返回创建的根节点,所以创建二叉树的函数也应该是结构体定义的类型),不过通过今天的再次复写,记忆与理解都非常深刻了。最后,二叉树的3种遍历都相对简单,通过递归遍历即可,但仍需注意对根节点的判空操作。

你可能感兴趣的:(c语言,学习,开发语言)