第四天 周末过得真快,你的任务完成了么

本文解析了C语言中空指针概念、sprintf和printf的区别,以及scanf与getchar的输入技巧。重点讲解了链表相加的实现,包括如何处理进位和链表构建。同时介绍了头文件保护和缓冲模式的运用,以及LeetCode问题2.两数相加的解题思路。

第四天 今天的任务为《明解C语言中级篇》后半本6-10章内容+一道leetcode2.两数相加

后面章节也是以实际的编程实战程序为主,其中穿插知识点,要注意的内容如下:
1、空指针是一个特殊指针,它能够区别于指向任何对象/函数的指针,整数0能转换成任意的指针类型,转换结果为空指
针。表示空指针的是宏NULL ,它被称为空指针常量。
2、sprintf函数和printf函数都可以把参数展开并整理后输出,不同的是前者把参数输出到用方指定的数组中,后者输出到标准
输出流(控制台画面)。
3、scanf函数和getchar函数获取键盘输入信息时需要按下回车键,而getch函数(非标准库)无需按回车键就可以立即获取信
息。与之对应的putch函数把字符显示在画面上,不需要通过fflush函数进行清空操作。
4、包含头文件保护的头文件

		#ifndef _ _HEADERXX
		#define _ _HEADERXX
					/* 声明及定义*/
		#endif

5、C语言支持三种缓冲模式:
全缓冲:进行完整的缓冲。输入/输出的字符被存储到缓冲区,当缓冲区存满时才会把缓冲区的内容传送给程序/主机环境。
行缓存:以行为单位进行缓冲。输入/输出的字符被存储到缓冲区,当缓冲区存满时或者读取/写入换行字符,才会把缓冲区
的内容传送给程序/主机环境。
无缓存:不进行缓冲。只要条件允许输入/输出的字符直接传送给程序/输出目标的主机环境。
6、可以使用setvbuf/setbuf函数更改缓存办法,但不一定成功,依赖于编程环境和运行环境。
7、C语言有三个标准流:stdin(标准输入流)使用scanf函数、getchar函数读取字符、stdout(标准输出流)printf函数、
putchar函数向该流输出、stderr(标准错误流)使用fprintf函数和fputc函数向该流进行输出。

leecode
2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *head = NULL, *tail = NULL;
    int carry = 0;
    while (l1 || l2) {
        int n1 = l1 ? l1->val : 0;//取出l1的第一个节点存储的数值
        int n2 = l2 ? l2->val : 0;//取出l2的第一个节点存储的数值
        int sum = n1 + n2 + carry;  //计算相同位的数值和并加上上一次计算的进位
        if (!head) {             //判断存储结果的链表是否为空,若为空则开辟空间进行存储计算结果
            head = tail = malloc(sizeof(struct ListNode)); //开辟动态存储空间
            tail->val = sum % 10;  //赋值
            tail->next = NULL; //为下一个节点指向为空
        } else {
            tail->next = malloc(sizeof(struct ListNode));//若存储结果的链表不为空则直接在尾部存储结果
            tail->next->val = sum % 10;
            tail = tail->next;
            tail->next = NULL;
        }
        carry = sum / 10; //计算进位
        if (l1) {
            l1 = l1->next; //更新要计算的下一个节点
        }
        if (l2) {
            l2 = l2->next;
        }
    }
    if (carry > 0) {  //检查最后一次计算是否存在进位,若存在则再附加一个结点保存结果
        tail->next = malloc(sizeof(struct ListNode));
        tail->next->val = carry;
        tail->next->next = NULL;
    }
    return head; //输出链表的结果
}

PS:该代码为leetcode官方答案,加上自己的注释。侵删。

内容概要:本文提出了一种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值