C 语言-数组

news2024/11/16 3:17:49

1. 数组

1.1 引入

需求:记录班级10个学员的成绩

需要定义10个变量
    存在的问题:
        变量名起名困难
        变量管理困难

需求:记录班级1000个学员的成绩

1.2 概念

作用:容纳 数据类型相同 的多个数据的容器

特点:

  • 长度不可变
  • 容纳 数据类型相同

名词:

元素:
	数组中存储的数据
下标:
	元素在数组中的位置,下标从0开始,长度-1结束
长度:
	数组中可存储元素个数

注意:

  • 数组中的数据在 内存中是连续存储的。

1.3 分类

  • 安存储的数据类型存储

    字符数组
    整形数组
    浮点型数组
    ...
    
  • 按维度分类

    一维数组
    二维数组
    ...
    

1.4 使用

1.4.1 定义与初始化

① 定义:

语法:

数据类型 数组名[长度] = {值1, 值2, 值3, 值4...};
② 初始化

全部初始化:

此时可省略长度不写

如:

int nums[5] = {1, 3, 5, 7, 9}
//此时可以长度不写
int nums01[] = {1, 3, 5, 7, 9}

部分初始化:

没初始化的部分,值默认为0。

如:

int num02[5] = {1, 3, 5}
③ 字符数组与字符串

比如:

char str01[5] = {'h','e','l','l','o'};

char str02[] = "hello";

注意:

  • 字符串 赋值给字符数组 系统将 默认为其在尾部加 \0
  • \0:字符串结束
#include <stdio.h>
int main(int argc, char const *argv[])
{
    char str01[5] = {'h','e','l','l','o'};
    char str02[] = "hello";
    printf("str01大小为:%d\n",sizeof(str01));
    printf("str02大小为:%d\n",sizeof(str02));
    return 0;
}

// 输出
// str01大小为:5
// str02大小为:6

1.4.2 使用

① 获取指定位置元素

语法:

数组名[下标]

如:

int nums[5] = {1, 3, 5, 7, 9};

取出并打印 第4个数
	printf("%d\n", nums[3]);
取出后赋值给别的变量
	int x = nums[4];
取出后赋值给数组的其他位置
	nums[1] = nums[4];
#include <stdio.h>
void fun01()
{
       int nums[5] = {1,3,5,7,9};
       printf("nums中下标为4的元素是:%d\n",nums[4]);
}
void fun02()
{
       int nums[5] = {1,3,5,7,9};
       int x = nums[4];
       printf("x=%d\n",x);
}


int main(int argc, char const *argv[])
{
       fun01();
       fun02();
       return 0;
}

// 输出:
// nums中下标为4的元素是:9
// x=9
② 修改指定位置元素

语法:

数组名[下标] = 值;

如:

int nums[5] = {1,3,5,7,9};
将数组中下标为1的元素修改为33
nums[1] = 33;

例:

#include <stdio.h>

void fun03()
{
       int nums[5] = {1,3,5,7,9};
       nums[1] = 33;
       printf("nums修改后下标为1的值是:%d\n",nums[1]);
}

int main(int argc, char const *argv[])
{
       fun03();
       return 0;
}

// 输出:
// nums修改后下标为1的值是:33
③ 计算数组长度

思路:

数组所占字节数大小/单个元素所占大小 = 长度

如:

int nums[] = {1,2,3,4,5,6,7,8,89,9,10,1,21,121,121,21,3,32};
int len = sizeof(nums) / sizeof(nums[0]);
int len = sizeof(nums) / sizeof(int);

例:

#include <stdio.h>

void fun04()
{
       int nums[] = {1,2,3,4,5,6,7,8,89,9,10,1,21,121,121,21,3,32};
       int len = sizeof(nums) / sizeof(nums[0]);
       //int len = sizeof(nums) / sizeof(int);
       printf("数组的长度为:%d\n",len);
}

int main(int argc, char const *argv[])
{
       fun04();
       return 0;
}

// 输出:
// 数组的长度为:18
④ 遍历

含义:将数组中的数据逐个取出

例:

#include <stdio.h>

void fun05()
{
       int nums[] = {1,2,3,4,5,6,7,8,89,9,10,1,21,121,121,21,3,32};
       //计算数组长度
       int len = sizeof(nums) / sizeof(nums[0]);

       //开启循环
       for(int i = 0; i < len; i++)
       {
           //取值
           int x = nums[i];
           //打印
           printf("%d,",x);
       }
       printf("\n");
}

int main(int argc, char const *argv[])
{
       fun05();
       return 0;
}

// 输出:
// 1,2,3,4,5,6,7,8,89,9,10,1,21,121,121,21,3,32,
⑤ 键盘输入数据存储到数组中

注意:字符串除外

例1:

void fun06()
{
       char cs[10] = {0};
       scanf("%c",&cs[0]);
       printf("%c\n",cs[0]);
}

/*
输入: 56
输出: 5
因为%c是char的占位符, 占一个字节
*/

例:

#include <stdio.h>

void fun07()
{
       int nums[5] = {0};
       for(int i = 0; i < 5; i++)
       {
           printf("请输入第%d个数",(i+1));
           scanf("%d",&nums[i]);
       }
       for(int i = 0; i < 5; i++)
       {
           printf("%d,",nums[i]);
       }
       printf("\n");
}

int main(int argc, char const *argv[])
{
       fun07();
       return 0;
}

/*
输出:
请输入第1个数12
请输入第2个数23
请输入第3个数12
请输入第4个数23
请输入第5个数25
12,23,12,23,25,
*/
⑥ 字符串录入

scanf

问题:不能录入空格
void fun08()
{
    char str[50] = {0};
    //会将空格或回车作为录入结束
    scanf("%s",str);
    printf("str=%s\n",str);
}

gets

问题:会出现bug
	假如没有定义数组长度,会报错
#include <stdio.h>

void fun09()
{
    char str[] = "";
    gets(str,sizeof(str),stdin);
    printf("str=%s\n",str);
}

int main(int argc, char const *argv[])
{
    fun09();
    return 0;
}

/*
hello
str=hello
*** stack smashing detected ***: ./a.out terminated
已放弃 (核心已转储)
*/

fgets

最优选择
语法:
	char *fgets(char *restrict str, int size, FILE *restrict stream))
	fgets(数组名,sizeof(数组名),stdin);
假如没有定义数组长度,会直接结束。
#include <stdio.h>

void fun10()
{
    char str[50] = "";
    fgets(str,sizeof(str),stdin);
    printf("str=%s\n",str);
}

int main(int argc, char const *argv[])
{
    fun10();
    return 0;
}

/*
输出:
hello world
str=hello world

*/
⑦ 数组与函数

注意:

  • 数组的本质是一个地址
  • 所以调用函数时传入数组其实传递的是数组名对应的地址
  • 此时当函数中将该数组中的内容修改
  • 那么调用该函数所传递的数组的值也将被修改

如:

#include <stdio.h>
void funA(int a)
{
    a = 10;
}

void funB(int nums[5])
{
    nums[0] = 10;
}
/*
要求定义一个函数,计算两数之和,要求返回和,加数,被加数
 */ 
void add(int a,int b,int nums[3])
{
    int x = a + b;
    nums[0] = x;
    nums[1] = a;
    nums[2] = b;
}
int main(int argc, char const *argv[])
{
    int x = 1;
    funA(x);
    printf("x= %d\n",x);

    int xs[5] = {1};
    funB(xs);
    printf("xs[0] = %d\n",xs[0]);

    int adds[3] = {0};
    add(10,2,adds);
    for(int i = 0; i < 3; i++)
    {
        printf("%d\n",adds[i]);
    }
    return 0;
}

/*
输出:
x= 1
xs[0] = 10
12
10
2
*/

1.5 扩展

因为数组本质是地址,所以 遍历时:nums[i] == *(nums+i)

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int nums[5] = {2,4,6,8,9};
    for(int i = 0; i < 5; i++)
    {
        printf("%d,",nums[i]);
        // printf("%d,",*(nums+i));
    }
    printf("\n");
    return 0;
}

/*
两个打印输出相同,如下:
2,4,6,8,9,
*/

2. 二维数组

2.1 概念

一维数组作为元素存储的数组 。

2.2 使用

2.2.1 定义与初始化

语法:

数据类型 数组名[x][y] = {
    {值1,值2,值3,...},
    {值11,值22,值33,...},
    {值111,值222,值333,...},
    ...
};

x:二维数组中存储的一维数组的个数

y:一维数组中可存储的元素的个数

如:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int nums[5][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9},
        {10,11,12},
        {13,14,15}
    };
    // 当数组全部初始化时可以省略长度不写
    // 二维数组的长度是一维数组的个数
    int nums[][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9},
        {10,11,12},
        {13,14,15}
    };

    int nums[3][3] = {
        {0},
        {0},
        {0}
    };

    int nums[3][3] = {0};
    int nums[3][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    int nums01[3][3] = {1,2,3,4,5,6,7,8,9};
    int nums02[3][3] = {0};
    
    return 0;
}

2.2.2 使用

① 取值
获取二维数组中下标为x的一维数组
	数组名[x]
获取二维数组中下标为x中下标为y的元素
	数组名[x][y]

例:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int nums01[3][3] = {1,2,3,4,5,6,7,8,9};
    int nums02[3][3] = {0};
    printf("nums01[0][2] = %d\n",nums01[0][2]);
    printf("nums02[0][2] = %d\n",nums02[0][2]);

    char strs[3][50] = {"hello", "world", "boboy"};
    printf("strs[0] = %s\n",strs[1]);

    return 0;
}

/*
输出:
nums01[0][2] = 3
nums02[0][2] = 0
strs[0] = world
*/
② 赋值
数组名[x][y] = 值;

注意:

因为数组不能修改其指向的地址(因为数组是常指针),所以数组不能重复初始化

所以以下语法是错误的

数组名[x] = 新数组;

常指针:可以修改其指向的内容中的值,但是不能修改其指向的地址

③ 长度
sizeof(数组名) / sizeof(数组中第一个元素) = 长度
④ 遍历

思路:

1,获取二维数组中一维数组的个数,即二维数组的长度,为x
2,获取一维数组中元素的个数,即一维数组的长度,为y
3,开启循环,逐个获取二维数组中的一维数组
4,在循环内遍历获取到的一维数组

例1:

#include <stdio.h>
void fun01()
{
    int nums[5][3] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int xlen = sizeof(nums) / sizeof(nums[0]);
    int ylen = sizeof(nums[0]) / sizeof(nums[0][0]);
    for(int i = 0; i < xlen; i++)
    {
        //nums[i]
        for(int j = 0; j < ylen; j++)
        {
            int x = nums[i][j];
            printf("%d,",x);
        }
        printf("\n");
    }
}

void fun02()
{
    char strs[3][5] = {
        {'a','b','c','d','e'},
        {'h','e','l','l','o'}
    };
    int xlen = sizeof(strs) / sizeof(strs[0]);
    int ylen = sizeof(strs[0]) / sizeof(strs[0][0]);
    for(int i = 0; i < xlen; i++)
    {
        for(int j = 0; j < ylen; j++)
        {
            printf("%c ",strs[i][j]);            
        }
        printf("\n");
    }
}

int main(int argc, char const *argv[])
{
    fun01();
    printf("###################\n");
    fun02();
    fun03();
    return 0;
}


/*
输出:
1,2,3,
4,5,6,
7,8,9,
10,11,12,
13,14,15,
###################
a b c d e 
h e l l o 
     
*/

例2:遍历字符串

#include <stdio.h>

void fun03()
{
    char strs[3][6] = {
        "abcde",
        "hello"
    };
    int xlen = sizeof(strs) / sizeof(strs[0]);
    for(int i = 0; i < xlen; i++)
    {
        printf("%s",strs[i]);            
        printf("\n");
    }
}

int main(int argc, char const *argv[])
{
    fun03();
    return 0;
}


/*
输出:
abcde
hello

*/

例3:键盘录入

#include <stdio.h>

//键盘录入多个字符串存储到数组中
void fun04()
{
    char strs[3][128] = {0};
    for(int i = 0; i < 3; i++)
    {
        fgets(strs[i],sizeof(strs[i]),stdin);
    }
    for(int i = 0; i < 3; i++)
    {
        printf("%s",strs[i]);
    }
}
int main(int argc, char const *argv[])
{
    fun04();
    return 0;
}


/*
输入:
hello
world
tom
输出:
hello
world
tom
*/

3. 算法

软件 = 算法 + 数据结构

算法 = 数学公式使用代码实现

优点:提高代码运行效率

如:

  • 代码
//计算100以内数之和
int sum = 0;
for(int i = 0; i < 100; i++)
    {
    	sum = sum + i;
    } 
printf("sum=%d\n",sum);

分析得知:
	以上代码共执行了303行
  • 数学
在数学中该问题的公式为: (首项+尾项) * 项数 / 2
	int sum = (0 + 99) * 100 / 2;
分析得知:
	以上代码共执行了1行

评判算法是否优良

  • 时间复杂度
  • 空间复杂度

3.1 常用算法

3.1.1 两数交换位置

int a = 1;
int b = 2;
int c = a;
a = b;
b = c;

3.1.2 寻找最值

思路:
1,假设数组中的一个数为最值
2,在使用数组中元素与其一一对比
3,如果取出的元素大于或小于最值,将假设的最值换为改值
4,当对比完成后,假设的最值就是真的最值

代码:

int nums[] = {6,21,33,67,1,29,32,14};
//寻找最小值
int min = nums[0];
for(int i = 0; i < sizeof(nums)/sizeof(nums[0]); i++)
    {
    	if(nums[i] < min)
        {
        	min = nums[i];
        }
} 
printf("最小值为:%d\n",min);

寻找最值下标

思路:
1,假设数组中的位置上的数为最小值,记录该位置为最值下标
2,在使用数组中元素与下标对应的值一一对比
3,如果取出的元素大于或小于下标对应的值,将假设的下标改为该数的下标
4,当对比完成后,假设的最下标就是最值下标

代码:

int nums[] = {6,21,33,67,1,29,32,14};排序
//寻找最小值下标
int minIndex = 0;
for(int i = 0; i < sizeof(nums)/sizeof(nums[0]); i++)
    {
    	if(nums[i] < nums[minIndex])
        {
       		minIndex = i;
        }
    } 
printf("最小值下标为:%d\n",minIndex);

3.2 排序

目的:将数组中的数据从大到小(降序)或从小到大(升序)排序

3.2.1 冒泡排序

核心思想:相邻比较,交换位置

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//生成随机数
void setNums(int nums[],int len)
{
    for(int i = 0; i < len; i++)
    {
        nums[i] = rand() % 100;
    }
}
//打印数组中的内容
void printNums(int nums[],int len)
{
    for(int i = 0; i < len; i++)
    {
        printf("%d ",nums[i]);
    }
    printf("\n");
}

void sort01(int nums[],int len)
{
    //冒泡排序
    for (int i = 0; i < len - 1; i++)
    {
        for(int j = 0; j < len-1; j++)
        {
            if (nums[j] > nums[j+1])
            {
                //交换位置
                int x = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = x;
            }
        }
    }
}
int main(int argc, char const *argv[])
{
    int nums[10] = {0};
    srand(time(NULL));
    int len = sizeof(nums)/ sizeof(nums[0]);
    setNums(nums,len);
    printNums(nums,len);
    sort01(nums,len);
    printNums(nums,len);
    return 0;
}
//25 70 74 40 78 42 91 54 50 20 
//20 25 40 42 50 54 70 74 78 91 

3.2.2 选择排序

核心思想:确定位置,与最值,交换位置

在这里插入图片描述

void sort02(int nums[],int len)
{
    //选择排序,外层循环一次找到一个最值并且放到目标位置
    for(int j = 0; j < len -1 ; j++)
    {
        int tagIndex = j;
        int minIndex = tagIndex;
        //取值: 目标位置~len
        for(int i = tagIndex; i < len; i++)
        {
            //寻找最值下标
            if(nums[minIndex] > nums[i])
            {
                minIndex = i;
            }
        }
        //目标位置不等于最值位置,则交换位置
        if (tagIndex != minIndex)
        {
            //交换位置,此时最值交换到目标位置
            int x = nums[tagIndex];
            nums[tagIndex] = nums[minIndex];
            nums[minIndex] = x;
        }
     }
}
//7 82 4 2 42 19 69 70 19 52 
//2 4 7 19 19 42 52 69 70 82

简化:

void sort02(int nums[],int len)
{
    for(int j = 0; j < len -1 ; j++)
    {
        int minIndex = j;
        for(int i = j; i < len; i++)
        {
            if(nums[minIndex] > nums[i])
            {
                minIndex = i;
            }
        }
        if (j != minIndex)
        {
            //交换位置
            int x = nums[j];
            nums[j] = nums[minIndex];
            nums[minIndex] = x;
        }
    }
}
//7 82 4 2 42 19 69 70 19 52
//2 4 7 19 19 42 52 69 70 82

3.3 查找

目的:查询数组中是否存在指定元素

3.3.1 顺序查找

核心思想:逐个比较

/*
    定义一个函数查找指定数据是否存在
    如果存在返回1
    否则返回0
    nums:要查找的数组
    len:数组长度
    tag:查找的数据
*/
int find01(int nums[],int len,int tag)
{
    for(int i = 0; i < len; i++)
    {
        if (nums[i] == tag)
        {
            return 1;
        }
    }
    return 0;
}

/*
    定义一个函数查找指定数据是否存在
    如果存在返回下标
    否则返回-1
    nums:要查找的数组
    len:数组长度
    tag:查找的数据
*/
int find02(int nums[],int len,int tag)
{
    for(int i = 0; i < len; i++)
    {
        if (nums[i] == tag)
        {
            return i;
        }
    }
    return -1;
}

3.3.2 二分查找

要求:查找的数组必须 是有序的

int find03(int nums[],int len,int tag)
{
    //排序
    sort01(nums,len);
    printNums(nums,len);
    //二分查找法
    //定义开始和结束下标
    int start = 0;
    int end = len - 1;
    while(start <= end)
    {
        //中间值下标
        int center = (start + end) / 2;
        //等于直接返回
        if (nums[center] == tag)
        {
            return center;
        }
        else if(nums[center] < tag)
        {
            start = center + 1;
        }
        else
        {
            end = center - 1;
        }
    }
    return -1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python实现two way ANOVA

文章目录 目的&#xff1a;用python实现two way ANOVA 双因素方差分析1. python代码实现1 加载python库2 加载数据3 统计样本重复次数&#xff0c;均值和方差&#xff0c;绘制箱线图4 查看people和group是否存在交互效应5 模型拟合与Two Way ANOVA&#xff1a;双因素方差分析6 …

ELFK集群部署(Filebeat+ELK) 本地收集nginx日志 远程收集多个日志

filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。 实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&#xff0c; 可以将数据转发到Logst…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

Python Pyvis库:可视化复杂网络结构的利器

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python Pyvis库&#xff1a;可视化复杂网络结构的利器&#xff0c;全文4000字&#xff0c;阅读大约12钟。 在数据科学和网络分析领域&#xff0c;理解和可视化复杂网络结构是…

JeecgBoot低代码开发—Vue3版前端入门教程

JeecgBoot低代码开发—Vue3版前端入门教程 后端接口配置VUE3 必备知识1.vue3新特性a. https://v3.cn.vuejs.org/b.setup的用法c.ref 和 reactive 的用法d.新版 v-model 的用法e.script setup的用法 2.TypeScript基础 后端接口配置 如何修改后台项目路径 http://127.168.3.52:8…

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录 Ubuntu systemd-analyze命令剖析目录简介systemd与systemd-analyze工作原理 安装和使用命令参数详解用例与示例显示启动时间&#xff08;systemd-analyze time&#xff09;列出启动过程中各个服务的启动时间&#xff08;systemd-analyze blame&#xff09;显示系统启动…

R语言单因素方差分析+差异显著字母法标注+逐行详细解释

R语言单因素方差分析 代码如下 df <- read.csv("data.csv",header TRUE,row.names 1) library(reshape2) df <- melt(df,idc()) names(df) <- c(trt, val) df aov1 <- aov(val~trt,datadf) summary(aov1)library(agricolae) data <- LSD.test(aov…

windows远程桌面登录,提示:“出现身份验证错误,要求的函数不受支持”

问题&#xff1a; windows登录远程桌面&#xff0c;提示&#xff1a;“出现身份验证错误&#xff0c;要求的函数不受支持”&#xff0c;如下图&#xff1a; 问题原因&#xff1a; windows系统更新&#xff0c;微软系统补丁的更新将 CredSSP 身份验证协议的默认设置进行了调…

【腾讯云云上实验室-向量数据库】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些&#xff1f;未来展望番外篇&#xff1a;腾讯云向量数据库的设计核心结语 前言 还是那句话&#xff0c;不用多说想必大家都能猜到&#xff0c;现在技术圈最火的是什么&#xff1f;非人工智…

ZZULIOJ 2466: 楼上瞎说,楼下才是,Java

2466: 楼上瞎说&#xff0c;楼下才是 题目描述 《九章算术》的内容十分丰富&#xff0c;全书采用问题集的形式&#xff0c;收有246个与生产、生活实践有联系的应用问题&#xff0c;其中每道题有问&#xff08;题目&#xff09;、答&#xff08;答案&#xff09;、术&#xff…

【Vulnhub 靶场】【DriftingBlues: 9 (final)】【简单】【20210509】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/driftingblues-9-final,695/ 靶场下载&#xff1a;https://download.vulnhub.com/driftingblues/driftingblues9.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年05月09日 文件大小&#xff1a;738 …

编程之外,生活的美好航程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

涵盖多种功能,龙讯旷腾Module第二期:电子结构及声子计算

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

Jmeter接口测试:jmeter_HTTP Cookie管理器看这一篇文章就够了

HTTP Cookie管理器 HTTP Cookie管理器可以像浏览器一样自动存储和发送cookie&#xff0c;以这种自 动收集的方式收集到的cookie不会在cookie manager中进行展示&#xff0c;但是运行后&#xff0c; 可以通过 查看结果树&#xff08;监听器&#xff09;可以查看到cookie信息 除…

WPF实战项目十九(客户端):修改RestSharp的引用

修改HttpRestClient&#xff0c;更新RestSharp到110.2.0&#xff0c;因为106版本和110版本的代码不一样&#xff0c;所以需要修改下代码 using Newtonsoft.Json; using RestSharp; using System; using System.Threading.Tasks; using WPFProjectShared;namespace WPFProject.S…

中国毫米波雷达产业分析4——毫米波雷达企业介绍

一、矽典微 &#xff08;一&#xff09;公司简介 矽典微致力于实现射频技术的智能化&#xff0c;专注于研发高性能无线技术相关芯片&#xff0c;产品广泛适用于毫米波传感器、下一代移动通信、卫星通信等无线领域。 整合自身在芯片、系统、软件、算法等领域的专业能力&#xf…

【驱动】SPI驱动分析(四)-关键API解析

关键API 设备树 设备树解析 我们以Firefly 的SPI demo 分析下dts中对spi的描述&#xff1a; /* Firefly SPI demo */ &spi1 {spi_demo: spi-demo00{status "okay";compatible "firefly,rk3399-spi";reg <0x00>;spi-max-frequency <48…

哈希思想的应用:位图、布隆过滤器及哈希切割

一.位图引入 给40定亿个不重复的无符号整数存储在文件中&#xff0c;如何判断一个数在不在其中&#xff1f; 分析&#xff1a;最容易想到的思路是将这些数字存储到某个能够实现快速查找的容器中&#xff0c;如红黑树或哈希表。 但是&#xff0c;10亿个字节大约占1G内存&#x…

使用JDBC操作数据库时,插入数据中文乱码

如图&#xff1a; 解决办法&#xff1a; 修改连接数据库的路径&#xff0c;即url 如下&#xff1a; 设置编码格式为utf-8 urljdbc:mysql://localhost:3306/qfedu?useUnicodetrue&characterEncodingUTF-8再次运行&#xff0c;插入数据即可

python pytorch实现RNN,LSTM,GRU,文本情感分类

python pytorch实现RNN,LSTM&#xff0c;GRU&#xff0c;文本情感分类 数据集格式&#xff1a; 有需要的可以联系我 实现步骤就是&#xff1a; 1.先对句子进行分词并构建词表 2.生成word2id 3.构建模型 4.训练模型 5.测试模型 代码如下&#xff1a; import pandas as pd im…