C语言-4

C语言求4x4逆矩阵 // C Program helps to find the Inverse of Matrix of 4x4 Square matrix !! // I (Er. T.Tharesh Kumar) created the Inverse of matrix program to you all ! #include<stdio.h> #include<math.h> #include<conio.h> void trans(float [][4], fl 阅读详情

排序算法简介

/*
    学习内容:
        冒泡排序(最基本的排序方法)
        选择排序(冒泡的优化)
        插入排序(在合适的位置插入合适的数据)
*/

/*
    排序分类:
        1.内部排序
            待需要进行排序的数据全部存放到内存中,再进行排序 
        2.外部排序
            在排序过程中,需要对外存进行访问
            待排序的数据数量很大,内存无法全部容纳所有的数据 
*/

冒泡排序

/*
    冒泡排序:
    ---思路分析(以升序为例)
        在一排数据中,将第一个与第二个比较大小
        如果后面的数据比前面的小,就交换它们的位置(冒泡一次)
        然后比较第二个和第三个
        ...
        直到比较第 n-1 个数据和第 n 个
        每一次比较都将较大的一个数据向后移动
        所以第 n 个是最大的
        所以就排好了一个数据(冒泡一趟)
*/

# include <stdio.h>

int main()
{
    // 定义一个无序一维数组
    int arr[] = { 5, 7, 9, 1, 6, 2, 4, 3, 0, 8 };

    // 遍历,打印数组
    printf("数组,排序前:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }

    // 冒泡排序(升序:由小到大)
    int temp;
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    // 展示排序后,数组当前的结果
    printf("数组,排序后:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }

}

选择排序

/*
    选择排序:
    ---思路分析(以升序为例)
            选择排序可以看作是冒泡排序的优化
        不再多次交换值,而是选择当前趟数的最大(或最小值),最后再交换
            在 n 个数里,先找到最大的数,并且记录下标,然后将这个数与第 n 个数交换
        如果第 n 个数是最大的,那就不需要交换,重复比较,直到所有的数据排好序
*/

# include <stdio.h>

int main()
{
    // 定义一个无序一维数组
    int arr[] = { 5, 7, 9, 1, 6, 2, 4, 3, 0, 8 };


    // 遍历,打印数组
    printf("\n 数组,排序前:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }


    // 选择排序(升序:由小到大)---> 选择排序:选择一个你认为最大的数
    int temp;
    int maxIndex;
    for (int i = 9; i > 0; i--)
    {
        maxIndex = 0;    // 每次我都认为第一个最大,选择第一个,并记录下第一个的序号
        for (int j = 0; j <= i; j++)
        {
            if (arr[maxIndex] < arr[j])
            {
                maxIndex = j;
            }
        }

        if (maxIndex != i)
        {
            temp = arr[i];
            arr[i] = arr[maxIndex];
            arr[maxIndex] = temp;
        }

    }
    

    // 展示排序后,数组当前的结果
    printf("\n 数组,排序后:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }

}

插入排序

/*
    插入排序:
    ---思路分析(以升序为例)
        以第一个数为基准,后面的所有数都向着第一个数的方向,插队前进(这种插队不能跳着插队,只能插完一个继续接着插,前提是满足条件才能插队)
        其本质原理:依靠数与数之间的“相对关系”,从而将其整体排好序!

            1.轮到第一个数发挥            第一个数无法插队,它只能站着不动,停止插队
            2.轮到第二个数发挥            它和前面的数比较大小,若满足条件,则插一个队,然后停止插队(即:最多能够插队1次)
            3.轮到第三个数发挥            和前面的数比较大小,若满足条件,则插一个队,再继续和前面的数比较大小,若满足条件,则再插一个队,然后停止插队(即:最多能够插队2次)
            4.轮到第四个数发挥            比较大小,若可以,插一个队,再继续比较大小,若可以,再插一个队......(即:最多能够插队3次)
            5.轮到第五个数发挥            ......(即:最多能够插队4次)
            6.轮到第六个数发挥            ......(即:最多能够插队5次)

*/

# include <stdio.h>

int main()
{
    // 定义一个无序一维数组
    int arr[] = { 7, 5, 9, 1, 6, 2, 4, 3, 0, 8 };


    // 遍历,打印数组
    printf("\n 数组,排序前:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }


    // 插入排序(升序:由小到大) 
    int temp = 0;
    for (int i = 1; i < 10; i++)    // 轮到第 ?个数发挥
    {

        for (int j = i - 1; j >= 0; j--)    // 【比较、插队】,再【比较、插队】,再再【比较、插队】......
        {
            if (arr[j + 1] < arr[j])    // 满足插队条件
            {
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
            else   // 不满足插队条件
            {
                break;        // 没有达到"最多能插队的次数",就停止插队了,请马上自我了断,不要再进行无意义的比较,从而提高效率
            }
        }

    }


    // 展示排序后,数组当前的结果
    printf("\n 数组,排序后:\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%-3d", arr[i]);
    }

    return 0;
}

线性表

/*
    1.线性表:
       ---数据结构中最简单的一种存储结构,专门用于存储逻辑关系为"一对一"的数据 

    2.线性表存储结构,可细分为"顺序存储结构"和"链式存储结构",即如下所示
        线性表:
            1.顺序表(顺序存储结构)
            2.链表(链式存储结构)

    3.存储的类型要求
        使用线性表存储的数据,如同向数组中存储数据那样要求数据类型必须一致
        线性表存储的数据,要么全部都是整型,要么全部都是字符串
        一半整型,另一半是字符串的一组数据无法使用线性表存储

    4.前驱与后继:
        一组数据中的每个个体被称为“数据元素”(简称为“元素”)
            1.前驱
                某一元素的左侧相邻元素称为“直接前驱”,位于此元素左侧的所有元素都统称为“前驱元素”
            2.后继
                某一元素的后侧相邻元素称为“直接后继”,位于此元素右侧的所有元素都统称为“后继元素”
*/

在这里插入图片描述
在这里插入图片描述

顺序表

/*
    顺序表:
    ---它对数据的物理存储结构有要求
       顺序表存储数据时,会提前申请一块足够大小的内存
       然后将数据依次存储起来
       存储时做到数据元素之间不留一丝缝隙(即:连续)

*/

初始化顺序表

# include <stdio.h>
# include <malloc.h>


// 定义表格类型
typedef struct
{
    int* head;        // 指针,存储申请的内存首地址
    int length;        // 当前数据个数
    int size;        // 元素个数(最大容量)

}Table;


// 生成表格的函数
Table tableFunc()
{
    Table t;        // 定义一个变量 t ,其类型为“表格类型”
    // t 表格的初始化
    t.size = 5;                                // 表格最大容量(元素个数) = 5
    t.length = 0;                            // 表格当前数据个数(元素个数)= 0
    t.head = (int*)calloc(t.size,sizeof(int));    // 为表格开辟内存,并把内存首地址赋值给 t.head
    // 注意!上面的申请内存操作可能会出现申请失败的情况,返回值为 NULL
    if (!NULL)
    {
        printf("申请内存失败,程序终止!\n");
        exit(0);
    }
    
    return t;    // 返回 t 表格
}


int main()
{
    Table myTab = tableFunc();

    printf("%d \n", myTab.size);
    printf("%d \n", myTab.length);
    printf("%X \n", myTab.head);    // 内存地址一般用 %X 十六进制展示


    return 0;
}

顺序表的增删查改

/*
    顺序表元素:
    1.查(可以使用查找算法:  1.顺序查找    2.二分法查找)
    2.改
    3.增(增加到前面、中间、后面)------知识点补充:扩容函数:realloc(需要扩容的指针"*p",扩容后总的大小)
    4.删
*/

链表

/*
    1.链表:
        1.链表是通过指针,将不连续的内存连接起来,实现链式存储的

        2.内存实际上是不同时机申请的,地址不一定连续,但是可以通过指针联系起来

        3.链表是数据结构中线性表的一种,其中的每个元素实际上是一个“单独的结构体变量”,
        所有变量都“通过”每个元素中的“指针”连接在一起。

        4.以结构体为节点,将一个结构体看成“数据域”和“指针域”两个部分,
        “数据域”用于“存储数据”,“指针域”用于“连接下一个节点”,链表中每个结构体对象叫做节点,
        其中,第一个数据节点,叫做链表的“首元结点”。

        5.如果第一个节点不用于存储数据,只用于代表链表的起始点,则这个结点称为链表的“头结点”。
        

    2.链表特点:
        1.没有固定长度
        2.可以快速的插入和删除链表中的节点

    
    3.链表分很多种,单链表是其中最简单的一种(如下图)

*/

在这里插入图片描述

单链表

/*
    <单链表>

    1.链表节点一般是自定义的结构体类型

    2.结构体一般包含两部分:数据、指针
        数据:当前节点里面需要的数据
        指针:指向下一个节点(最后一个节点置空 为“尾节点”) 

*/

在这里插入图片描述

创建单链表

  • 项目结构
    在这里插入图片描述

  • 源代码

// main.c

# include <stdio.h>
# include "myList.h"

int main()
{
    Node* pList=CreateList(5);    // 创建一个可以存储5个东西的链表,并将返回值“地址”赋值给变量 pList
    showList(pList);    // 展示链表
    return 0;
}
// myList.c

# include <stdio.h>
# include "myList.h"
# include <stdlib.h>    // 申请内存时候要用

/*
创建链表
参    数:长度
返回值:头指针
*/
Node* CreateList(int length)
{
    // 判断长度
    if (length <= 0)
    {
        printf("Length Error!\n");
        return NULL;
    }

    // 开始创建链表

    // 1.创建头指针和尾指针
    Node *phead, *ptail;
    phead = ptail = NULL;

    // 2.申请内存:头结点
    phead = (Node*)malloc(sizeof(Node));

    // 3.处理异常情况
    if (NULL == phead)
    {
        perror("malloc failed!");
        exit(EXIT_FAILURE);
    }

    // 4.给头结点初值
    phead->pnext = NULL;    // 等价于 (*phead).pnext = NULL;
    phead->num = 0;

    // 5.尾指针
    ptail = phead;

    // 6.向头结点后面添加结点
    Node* p;
    DataType n;
    for (int i = 0; i < length; i++)
    {
        // 6.1 申请一个结点,检测,给值
         p= (Node*)malloc(sizeof(Node));
         if (NULL == p)
         {
             perror("malloc failed!");
             exit(EXIT_FAILURE);
         }
         p->pnext = NULL;
         printf("请输入数值>>>");
         scanf("%d", &n);
         p->num = n;

         // 6.2 将新申请的结点添加到链表中
         ptail->pnext = p;
         ptail = p;        // 更新尾结点
    }


    return phead;    // 9.返回头指针
}



/*
遍历链表
参    数:头指针
返回值:空
*/
void showList(const Node* const p)
{
    // 从首元结点开始遍历,而不是头结点(因为我们不使用头结点去存储值)
    Node* temp = p->pnext;
    if (NULL == temp)
    {
        printf("List is NULL!\n");
        return ;
    }
    printf("\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
    printf("当前链表数据:\n");
    while (temp)
    {
        printf("%-5d", temp->num);
        temp = temp->pnext;
    }
    printf("\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
}
// myList.h

#ifndef _MYLIST_    // 防止重复定义
#define    _MYLIST_

typedef int DataType;    // 可以灵活改变数据类型

struct node
{
    struct node* pnext;        // 指针域
    DataType num;            // 数据域
};

typedef struct node Node;    // 给结构体类型取别名



/*
    创建链表
    参    数:长度
    返回值:头指针
*/
Node* CreateList(int length);



/*
    遍历链表
    参    数:头指针
    返回值:空
*/
void showList(const Node* const p);



#endif    // _MYLIST_ 定义结束

单链表的查改增删

/*
    单链表的查、改、增、删
        1.查:确定查找方式,查找之后一般会返回“结点首地址”或者返回 NULL
        2.改:找到目标元素,直接修改该元素的值
        3.增:一定注意不能丢失指针指向
        4.删:记得释放内存

*/

栈

/*
    栈的定义:
    ---栈是一种只能从表的一端存储数据,且遵循“先进后出”原则的"线性存储结构"
        1.栈只能从一端(栈顶)取出,另一端(栈底)是封闭的
        2.在栈中,都必须从“栈顶”存储数据,且遵循“先进后出”原则

    
    入栈和出栈:
        1.入栈:将数据存到栈里面去 
        2.出栈:将数据从站里面取出来


    栈的实现方法:
    ---栈:“特殊”的线性存储结构
        1.顺序表:顺序栈(顺序存储结构)
        2.链  表:链  栈(链式存储结构)

*/

在这里插入图片描述

实现顺序栈

# include <stdio.h>

/* 1.元素入栈 */
// 参  数:存储结构,栈顶 top,数据 value
// 返回值: top
int putEle(int* arr, int top, int value)
{
    arr[++top] = value;
    return top;
}

/* 2.元素入栈 */
// 参  数:存储结构,栈顶 top
// 返回值: top
int takeEle(int* arr, int top)
{
    // 先判断
    if (top <= -1)
    {
        printf("操作失败!空栈!\n");
        return -1;
    }
    printf("当前出栈元素的值:%d\n", arr[top]);
    top--;
    return top;
}

int main()
{
    // 顺序表:为了理解简单化,我们使用列表
    int a[100];

    // top (记录栈顶)
    int top = -1;

    // 入栈(入5个)
    top = putEle(a, top, 1);
    top = putEle(a, top, 2);
    top = putEle(a, top, 3);
    top = putEle(a, top, 4);
    top = putEle(a, top, 5);

    // 出栈(出6个)
    top = takeEle(a, top);
    top = takeEle(a, top);
    top = takeEle(a, top);
    top = takeEle(a, top);
    top = takeEle(a, top);
    top = takeEle(a, top);

    return 0;
}

实现链栈

/*
    链栈:
        一般来说,我们将链表的“头结点”作为栈顶,“尾结点”作为栈底,这样的效率高一些(如图所示)

    注意事项:
        “头结点”是不断更新的,即“头结点”永远是“刚进来”的那个
        “尾结点”是不会更新的,即“尾结点”永远是“第一个进来”的那个

    ---如果用另外一种方式:
        头结点”作为栈底,“尾结点”作为栈顶,这种方式,每次新的元素入栈,都要从栈底遍历一遍到栈顶,才能入栈成功
        将会遍历很多次,效率非常低下
*/

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int data;
    struct Node* pnext;

}Node;


// 入栈函数
Node* eleIn(Node* p, int num)
{
    Node* temp = (Node*)malloc(sizeof(Node));
    temp->data = num;
    temp->pnext = p;
    p=temp;
    printf("当前进栈元素的值:%d\n", num);
    return p;
}


// 出栈函数
Node* eleOut(Node* p)
{
    if (p)
    {
        Node* temp = p;
        printf("当前出栈元素的值:%d\n", temp->data);
        p = temp->pnext;
        free(temp);
        temp = NULL;
    }
    else
    {
        printf("栈是空的!\n");
    }

    return p;
}



int main()
{
    Node* p = NULL;

    // 进栈(5次)
    p = eleIn(p, 1);
    p = eleIn(p, 2);
    p = eleIn(p, 3);
    p = eleIn(p, 4);
    p = eleIn(p, 5);

    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

    // 出栈(6次)
    p = eleOut(p);
    p = eleOut(p);
    p = eleOut(p);
    p = eleOut(p);
    p = eleOut(p);
    p = eleOut(p);

    return 0;
}

队列

/*
    <队列>

    1. 什么是队列
        队列:两端“开口”
        要求:只能从一端进入队列,另一端出队列

    2.队头和队尾
        队头:数据出队列的一端
        队尾:数据进队列的一端 

    3.实现队列
        1.顺序表:顺序队列
        2.链表:链式队列

*/

在这里插入图片描述

顺序队列

在这里插入图片描述

#include <stdio.h>


// 进队函数
int eleIn(int* arr,int tail,int num)
{
    arr[++tail] = num;
    printf("当前进入队列元素的值:%d\n", num);
    return tail;
}


// 出队(全部出队)
void allOut(int* arr, int head, int tail)
{
    while (head != tail)
    {
        printf("当前离开队列元素的值:%d\n", arr[head++]);
    }
    printf("当前离开队列元素的值:%d\n", arr[head++]);
}



int main()
{
    int a[10];    // 定义数组,用于存储数据
    int head = 0;
    int tail = -1;

    // 入队(进入5)
    tail = eleIn(a, tail, 1);
    tail = eleIn(a, tail, 2);
    tail = eleIn(a, tail, 3);
    tail = eleIn(a, tail, 4);
    tail = eleIn(a, tail, 5);

    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

    // 出队(全出去)
    allOut(a, head, tail);

    return 0;
}

链式队列

#include <stdio.h>
#include <stdlib.h>


// 创建结点类型
typedef struct QNode
{
    int data;
    struct QNode* pnext;
}QNode;


// 生成“头结点”的函数
createQueue()
{
    QNode* temp = (QNode*)malloc(sizeof(QNode));
    temp->data = 0;
    temp->pnext = NULL;
    return temp;
}


// 入队
eleIn(QNode* p, int num)    // 参数:(尾指针,要存储的数据)
{
    QNode* temp = (QNode*)malloc(sizeof(QNode));
    temp->data = num;
    printf("当前进入队列元素的值:%d\n", num);
    temp->pnext = NULL;
    p->pnext = temp;
    p = temp;
    
    return p ;
}


// 出队
void eleOut(QNode* phead)
{
    if (phead->pnext)    // “头结点”存储的地址不为空
    {
        QNode* temp = phead->pnext;    // “头结点”后面的首元结点
        printf("当前离开队列元素的值:%d\n", temp->data);
        phead->pnext = temp->pnext;
        free(temp);
        temp = NULL;
    }
    else
    {
        printf("队列为空!\n");
    }

    // return ;
}


int main()
{
    // 头指针和尾指针
    QNode* phead = NULL;
    QNode* ptail = NULL;
    
    // “上面的两针”都指向生成的“头结点”
    phead = ptail = createQueue();

    // 入队(进入5)
    ptail = eleIn(ptail, 1);
    ptail = eleIn(ptail, 2);
    ptail = eleIn(ptail, 3);
    ptail = eleIn(ptail, 4);
    ptail = eleIn(ptail, 5);

    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

    // 出队(出去6)
    eleOut(phead);
    eleOut(phead);
    eleOut(phead);
    eleOut(phead);
    eleOut(phead);
    eleOut(phead);

    return 0;
}
C语言输出4*5的矩阵 例14:C语言实现输出4*5的矩阵。 解题思路:可以用循环的嵌套来处理此问题,用外循环来输出一行数据,用内循环来输出一列数据。要注意设法输出矩阵的格式,即每输出完5个数据后换行。 源代码演示: #include<stdio.h>//头文件 int main()//主函数 { int i,j;//定义变量 int temp=0; for(i=1;i<5;i++)//for循环嵌套,外层循环做行 { for(j=1;j<6;j++,temp++)//for 阅读详情

相关推荐

4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...

;4X4矩阵键盘程序。主要原理为扫描键盘矩阵时,每次只有一行电平拉低。在逐次扫描拉低的这些行的同时,去读那些列的电平。;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位位CY里就可以检测出是0还是1.为1表示无按下,;为0表示该键按下。在扫描按键时,如无按下,则取码指针R1加1后,继续扫描 。如有键按下,转按键处理子程序,按键按下标志位;F0清0(表示按下)。此时,取...

weixin_39605345的博客 2067

log4cxx在C语言中使用

另外,还需要对每一个 _logger 对象编写对应的 日志接口函数(指的是下方代码中的宏和函数,例如:LOGGER_ERROR、logger_error等)。另外对于公网邮箱可能会做一些基本的垃圾邮件拦截策略,所以需要做一些基本的 DNS 设置,至少设置自己的 公网IP 为一个合法的 MX 记录值。log4cxx 支持 普通日志文件、按照文件大小轮转的日志、按照日期轮转的日志、syslog日志、控制终端、smtp、socket、数据流多种方式记录日志。配置的是 aaa@aaa.com 账号的登录地址。

一个金牛座猿猿子的技术分享空间 1435

明解C语言入门篇(第4章练习题)

4.1 #include&amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;gt; int main(void) { int retry; do { int no; printf(&amp;amp;amp;amp;quot;请输入一个整数:&amp;amp;amp;amp;quot;); scanf(&amp;amp;a

weixin_42916038的博客 2386

C4:4个函数,528行代码实现可自举的 C语言编译器

以下内容转载自https://www.toutiao.com/i6831502722718499340/ 引言 自从华为方舟编译器横空出世,一举成为全民网红之后,一下子点燃了大家对编译器的热情。不过,对于大多数人来说,编译器仍然是遥不可及的神秘存在。 今天,介绍一个国外大牛写的C语言编译器 - C4,揭开编译器的神秘面纱。原来实现一个具备基本功能的编译器,竟是如此简单! C4:4个函数实现的C语言编译器 C4, C in four functions。 它是一个C语言编译器项目(项目地址在文末.

Shanks 4879

R语言:决策树ID3/C4.5/CART/C5.0算法的实现

在前文中,我们已经详细介绍了决策树算法中的ID3/C4.5/CART算法的原理,以及决策树的剪枝问题。 ID3算法戳我 C4.5算法戳我 CART算法戳我 决策树剪枝问题戳我 本文将详细介绍如何用R语言实现决策树算法。 数据简介 本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“...

海军上将光之翼的博客 1万+

R语言之决策树CART、C4.5算法

决策树是以树的结构将决策或者分类过程展现出来,其目的是根据若干输入变量的值构造出一个相适应的模型,来预测输出变量的值。预测变量为离散型时,为分类树;连续型时,为回归树。 R语言的调用函数rpart(),J48(),prune()

Mezzie的博客 1万+

keil4汇编调用c语言,C语言调用汇编和汇编调用C语言

1.C语言调用汇编程序的入口是main,在main里调用汇编的函数。在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现。在汇编里面,用EXPORT 把C语言定义的函数名引进来,再开始编写函数名开始的段#includeextern int sum(int a,int b,int c,int d,int e,intf);intmain(){int result = sum(1,2...

weixin_29920047的博客 1549

【C语言】输出以下4*4矩阵。

【问题描述】 输出以下4*4矩阵。 【输出样例】 【样例说明】每个整数按照%3d格式输出,输出结束有换行符。 #include<stdio.h> #define N 4 int main() { int i,j; int a[N][N]; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i < j) a[i][j] = 0; else a[i][j] = 1;

xiamuandsansan的博客 9840

啊哈c语言4.10答案

啊哈c语言4.10答案 结果

m0_46298713的博客 767

C语言实现的机器学习C4.5算法详解

C4.5算法是机器学习中一个经典的决策树学习算法,由Ross Quinlan在1993年提出,其前身是著名的ID3算法。C4.5算法的核心思想是通过选择信息增益比最高的特征进行树的分支,构建出一棵能够正确分类的决策树。C4.5算法解决了ID3算法在处理连续属性和属性值缺失情况下的不足,通过引入增益率(gain ratio)和剪枝处理来避免过拟合现象,并提高了决策树对未知数据的泛化能力。

weixin_31659095的博客 1079

ImageNet分类实战:用PyTorch复现AlexNet的5个关键技巧(附代码)

本文详细介绍了使用PyTorch复现经典AlexNet模型进行ImageNet图像分类的五个关键工程技巧。内容涵盖模型架构的现代重构、训练策略优化、核心组件实现与替代方案,以及实用的训练调试方法,并提供了完整的代码示例,帮助开发者深入理解深度卷积神经网络的实现细节与优化思路。

i0j1k2l3m的博客 92

C语言作业4

我的回答:(1)结果为:CEF(2)简单解释:C.数组下标越界不会导致编译时错误,他会导致未定义行为,可能会造成程序崩溃或其他不可预测的问题,但不会明确给出“下标越界”的出错信息。E. 数组下标必须是整型数据类型,不能是浮点型或其他非整型类型。F. 在C语言中,声明数组时必须指定数组的大小,编译器不会自动分配内存大小,除非是在堆上使用动态内存分配函数。

2401_88060064的博客 1846

【NLG】(六)文本生成评价指标—— ROUGE原理及代码示例

前奏: 【NLG】(一)文本生成评价指标——BLEU原理及代码示例 【NLG】(二)文本生成评价指标—— METEOR原理及代码示例 【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例 【NLG】(四)文本生成评价指标—— diversity原理及代码示例 【NLG】(五)文本生成评价指标—— kl_divergence原理及代码示例 1.ROUGE原理 2.优缺点 3.如何算ROUGE ...

凝眸伏笔的博客 1万+

c语言%.4f,4f,4F法则是什么

4F法则是什么KISS 是keep it Simple Stupid,即“使之简单笨拙”。是指广告创意的简洁原则,广告创意主题要突出,信息要凝练,无关紧要的要删去。电视广告镜头要破除繁琐,反映主信息;平面广告要讲究视觉流程,突显主题,越单纯越易为受众接受。4F是指优秀的...c语言中.4f是什么意思.4f是用于输出浮点数的格式字符串,输出时保留四位小数,输出宽度为10位,不足十位右侧补空格,超过十...

weixin_30218749的博客 8717

Flutter UI代码生成实战:Cursor与MCP的企业级规范适配

本文探讨了在企业级Flutter项目中,如何通过配置Cursor Rules与定制Figma MCP工具,为AI代码生成设定严格的开发规范。该方法解决了AI生成代码与现有项目架构、命名约定及资源引用规范脱节的核心痛点,实现了从Figma设计稿到高质量、可维护Flutter UI代码的自动化流程,显著提升团队协作效率与代码一致性。

http9protocoller的博客 280

转录因子详细介绍(motif)

转录因子详细介绍(motif) TF: transcription factor转录因子TFBS: transcription factor binding site转录因子结合位点TFBS是序列内的location,TF特异结合在这里,这个site有这种特点 1 和一些参考相关的一个位置(开始,结束,strand),这些reference可以是染色体开始,geneTSS。也可以是一段sequence 2 A SITE可以是实验证实的(已知的),也可以是一些算法(预测的) 3 例子,下面这个图是酵母

wangprince2017 3万+

c语言获取mp4长度,C语言实现h264保存为mp4文件

【实例简介】C语言实现h264保存为mp4文件,包含vs2010编译通过的demo【实例截图】【核心代码】264tomp4└── 264tomp4├── Debug│ ├── CL.read.1.tlog│ ├── CL.write.1.tlog│ ├── cl.command.1.tlog│ ├── link.command.1.tlog│ ├── link.read.1.t...

weixin_42319263的博客 1309

Typora绘制思维导图

我们观察一下,其实思维导图就是树状结构的数据嘛,作为程序员,拿语言写树状结构的数据是很平常的事情。而且写代码可比画图省事多了,查阅资料可以知道,有一种`mermaid`语法,就是做这件事情的,支持 UML,甘特图,流程图等。

Peter Cheung的博客 7933

keil4如何将c语言转换成汇编语言_如何在KEIL中实现C语言嵌套汇编语言

一、讲解背景在单片机学习的过程中,掌握一点汇编语言是非常有必有的,作为低级语言汇编语言在单片机开发中有它不可取代的作用,比如每条指令可以精确的确定延时时间,便于理解非常适合硬件工程师学习。但是要提高单片机技能,必须掌握C 语言编程,因为C 语言有强大的模块化管理思想。我想在很多人学习的过程中即学了汇编语言,又学习了C 语言,那么一个问题便随之而产生,如果将C 语言与汇编语言相互结合,达到更好的...

weixin_39598796的博客 3641

【DRAM存储器六十二】DDR5介绍--引脚和基本功能简介

详述DDR5与DDR4的引脚区别和DDR5基本功能

highman110的博客 523

【技能】OpenClaw Memory 与 MemOS 两种 AI 记忆方案深度解析

摘要:本文对比了两种AI记忆系统方案。OpenClaw Memory是轻量级记忆助手,内置SQLite存储,支持语义搜索,部署简单成本低,适合日常对话记忆需求。MemOS是自学习系统,通过Neo4j和Qdrant实现技能自进化,但需部署4套服务,门槛高成本大。建议普通用户选择OpenClaw Memory,技术玩家可逐步尝试MemOS。两种方案各具优势,需根据实际需求选择。

海兰 195

c语言 log4c,LOG4C 的使用

注:【转载请注明文章来源、保持原样】最近想找个好用的Log工具,比较了一下流行的开源Log工具Log4c,Log4CPP, Log4CXX等,觉得还是Log4c比较合适。Log4cxx需要依赖于APR。Log4cpp较log4c移植性稍差些。Log4c基本上都是一些纯c的东西,移植性比其他二者都要好。上述工具都很优秀,但用熟练一种工具足以,这样有助于提高效率,以后如果有什么满足不了需要的在考虑其他...

weixin_33088763的博客 991

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4247

c语言中的%4d是什么意思?

这是printf的格式化参数,表示输出一个整型数值,输出宽度为4,且右对齐,如: printf( "%4d", 1 ); 1//输出1的前边有3个空格,补齐4位的宽度 printf( "%4d", 11); 11//输出11前边有2个空格,补齐4位的宽度 printf( "%4d", 11111 ); 11111//因为超过了4位,所以前边没有空格 如果要左对齐,则改为 %-4d ...

super_iron_man的博客 4万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c语言怎么打开mp4格式错误,c语言怎么播放MP4?

C语言编写?windows系统下的还是linux系统下的?不管有多简单,没有几千行代码是无法实现的。首先你要会在屏幕上显示图形,这个是显示视频时需要的,显示是最终结果,过程是解码MP4格式的文件,从中获取每一帧的图像数据,并将这些数据显示在屏幕上。其次,你要会让音频设备播放音频,视频中有声音的,需要播放。音频也要从mp4格式文件中解码出来,用C语言控制音频设备,将解码出来的音频数据输出至音频设备。...

weixin_29163797的博客 1490

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c4:简化C语言编译的极致尝试

c4:简化C语言编译的极致尝试 项目介绍 在编程世界中,C语言以其高效的性能和简洁的语法闻名于世。c4项目是一次对C语言编译过程的极简探索,它通过仅使用四个函数来实现C语言的编译过程,为开发者提供了一种全新的视角来理解C语言的编译机制。 项目技术分析 c4项目的核心在于其“极简”的理念,整个项目仅由四个主要函数构成,它们是: parse:解析源代码,将其转换成抽象语法树(AST)。 optimi...

gitblog_00210的博客 861

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: C语言-3
下一篇: Cpp-1
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值