C基础语法(二)---复杂数据类型(数组和字符串)

一、数组

数组的基本概念:数组就是用来存储一组数据的。

使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

素组的特点:只能存放一种数据类型,比如int 类型的数组、float 类型的数组,里面存放的数据称为“元素” 。

            

1.一维数组

数组的定义格式: 类型 数组名[元素个数]

定义的例子:

    int ages[50] = {1,2,3,4,....,50};

        ages[1] = 2; //数组元素的访问

    int ages[5] = {10,11}; //给前两个元素赋值

    int ages[5] = {[3] = 10,[4] = 11}; //给后两个元素赋值

    //在c语言中可以不写数组元素的个数

    int ages[] = {10,11,14}; 

    //这种写法是可以的,字符与int可以相互转换

    int ges['A'] = {10,11,12,13,14};

 错误的定义方法:

 1.int ages[];

 //只能在定义数组的同时进行初始化

 2.int ages[5];

   ages = {10,11,12,13,14}; 

          //如果想在定义数组的同时进行初始化,数组元素必须放常量

 3.int count = 5;

   int ages[count] = {1,2,3};

  可以改成下面的形式:定义数组和初始化不同时进行

    int count = 5;

    int ages[count];

    ages[0] = 1;

    ages[1] = 2;

内存分析:

如何计算数组元素的个数

    int ages[] = {10,22,33,44};

    int count = sizeof(ages)/sizeof(int)//这就是面向过程

    

             存储空间的划分(内存的分配时是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的) ;

数组名代表数组地址 ;

数组操作常见问题:数组下标越界异常

                  如 int args[2] = {1,2};

                     Printf("输出数组的第三个元素:%d",args[2]);   访问到了数组不存在的下标时发生。

                   

数组的其他使用:

    数组作为函数参数,可以省略元素个数。

    数组作为函数参数,传递的是整个数组的地址,修改函数形参数组元素的值,

    会影响到外面的实参数组。

    注:将数组名当做函数参数传递时,函数会把数组当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节。所以在函数中不能计算数组元素的个数。

  2.数组中的数组

也称多维数组,以二维数组为例。

二维数组是一个特殊的数组:它的元素是一维数组。

初始化方式:

     方法一:在定义的同时赋值

     int a[3][2] = {0};//所有元素都为0

      方法二:常规的赋值方法

      int a[3][2]= {1,2,3,4,5,6};

      方法三:分行赋值 

      int a[3][2] = {{1,2},{3,4},{5,6}};

      方法四:部分赋值法

      int a[3][2] = {{1,2},{0},{5,6}};

       方法五:

      int a[3][2]; //先定义

      for(int i = 0;i<3;i++) //用双重for循环赋值,i 和 j 表示二维数组下标

          for(int j = 0;j<2;j++)

             scanf("%d",&a[i][j]);   

注意错误:

        int a[3][2];

         a[3] = {};//因为每个元素为一个数组   

                                                                                                                                                                    

二、字符串

 什么是字符串:      

     很多个字符组合在一起就是字符串。

      '\0' 是字符串结束标志。

 字符串的初始化:

      char name[8] = "jack";

      char name2[8] = {'j','a','c','k','\0'};

      char name3[8] = {'j','a','c','k',0};

      以上三种方式在在内存中存储方式一样,字符串用数组存储。

      char name4[8] = {'j','a','c','k'}; // 会有警告,最好加上‘\0’结束标志

      char name5[] = {''j,'a','c','k'};  // 不算一个字符串,只能说是一个字符数组

      字符串的输出 "%s" , '\0' 是不会输出的

常用字符串处理函数:

     1.strlen函数:计算字符串的长度(不包括字符串结束标志 '\0')。

       strlen函数声明在string.h 文件中;

       计算的是字符数,并不是字数;

       计算的字符不包括 '\0'

       从某个地址开始数字符的个数,直到遇到' \0' 为止;

       #include"string.h"
main()
{
int k;
static char st[]="C Language";
k=strlen;
printf("The lenth of the string is %d\n",k);
}

     2.字符串输出函数 puts 格式:puts(字符数组名) 功能:把字符数组中的字符串输出到显示器。

#include"stdio.h"
main()
{
static char c[]="BASIC\ndBASE";
puts(c);
}


3.字符串输入函数gets 格式:gets(字符数组名) 功能:从标准输入设备上
输入一个字符串。
#include"stdio.h"
main()
{
char st[15];
printf("input string:\n");
gets;
puts;
}


tips:gets函数并不以空格作为字符串输入结束的标志,而只是以回车作为输入结束,这是与scanf不同的部分


4.字符串连接函数strcat 格式:strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1中字符串后面,并删去字符串
1后的串标志"\0",本函数返回字符数组1的首地址。
#include"string.h"
main()
{
static char st1[30]="My name is ";
int st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}


5.字符串拷贝函数strcpy 格式:strcpy(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串拷贝到字符数组1中,串结束标志 "\0"也一同
拷贝,字符数组2也可以是一个字符常量,就相当于把一个字符串赋予一个字符数组


#include"string.h"
main()
{
static char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);
printf("\n");
}


6.字符串比较函数strcmp格式:strcmp(字符数组1,字符数组2) 功能:
按照ASCII码顺序比较两个数组中的字符串,并有函数返回值返回比较结果


#include"string.h"
main()
{
int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
}

三、小练习

数组练习:

/*

随机产生个以内的数,按从小到大的顺序排序输出

思路:冒泡排序法

*/

#include <stdio.h>

int main()

{

//定义一个一维数组

int nums[5];

//请用户输入个以内的整数

printf("请输入个以内的整数,以逗号分隔:")

//scanf函数接收这些数字

scanf("%d,%d,%d,%d,%d",nums);

    

//定义第三方变量

int temp ;

//冒泡排序法

for(int i = 0;i < 4;i++)

{   

for(int j = i+1; j < 5;j++)

{

if(nums[i] > nums[j])

{

temp = nums[i];

nums[i] = nums[j];

nums[j] = temp;

}

}

}

    

//遍历数组

for(int i = 0;i < 5;i++)

{

printf("%d",nums[i]);

}

return 0;

}

输入5个数字:5,89,77,99,1

运行结果:1,5,77,89,99

字符串数组:

/*

  从键盘输入个字符串(仅仅包含英文字母和数字)

  对这个字符串从小到大排列并输出结果。

  */

#include <stdio.h>

#include <string.h>

int main()

{   

//定义一个二维数组

char ary[6][20];

//请用户输入字符串

for(int i = 0;i < 6;i++)

{

printf("请输入第%d个字符串,仅仅包括英文字母和数字:",i+1);

scanf("%s",ary[i]);

}

    

for(int i = 0;i < 5;i++)

{

for(int j = i+1;j < 6;j++)

{

if(strcmp(ary[i],ary[j]) > 0)

{

                  //定义一个第三方变量

char temp[50];

                                

                //将最小值排在前面

strcpy(temp,ary[i]);

strcpy(ary[i],ary[j]);

strcpy(ary[j],temp);

}

}

}

printf("由小到大排序:");

  

//遍历数组

for(int i = 0;i < 6;i++)

{

printf("%s",array[i]);

}

return 0;

}

 字符串操作:

/*

遍历字符串,找到与某个字符相同的字符,就返回,没有就返回

*/

#include <stdio.h>

#include <string.h>

int main()

//函数的声明

  int char_contains(char str[],char c);

  int result = char_contains("itcast",'t');

  printf("%d",result);

  return 0;

}

//定义函数

int char_contains(char str[],char c)

{

int i = -1;

while(str[++i] != c && str[++i] != '/0');

return str[i] == c ? 0 : 1;

}



基于MMSkeleton工具包的ST-GCN模型实现一种基于动态拓扑图的人体骨架动作识别算法python源码+使用说明.zip 改进ST-GCN模型的骨架拓扑图构建部分,使用持续学习思想动态构建人体骨架拓扑图. 将具有多关系特性的人体骨架序列数据重新编码为关系三元组, 并基于长短期记忆网络, 通过解耦合的方式学习特征嵌入. 当处理新骨架关系三元组时, 使用部分更新机制 动态构建人体骨架拓扑图, 将拓扑图送入ST-GCN进行动作识别。 运行MMSKeleton工具包参考[GETTING_STARTED.md](./doc/GETTING_STARTED.md) - 单独使用ST-GCN模型进行人体动作识别参考[START_RECOGNITION.md](./doc/START_RECOGNITION.md) - 训练基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/test_lifelong_model.py ``` - 测试基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/train_lifelong_model.py ``` - 可视化算法运行结果 基于web server搭建前端 [[参考]](https://blog.csdn.net/gzq0723/article/details/113488110) 1、前端模块:包含 'static与'templates'文件夹为界面展示相关的代码。 templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。 static里面的css和img用来修饰界面。 2、服务模块: servel.py里面是web服务的一个业务逻辑。 运行算法性能可视化web服务 ``` shell cd DTG-SHR python ./server.py ``` 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值