数组和字符串

数组:
1、一维数组的定以和使用
定以和声明:

变量定以:在定以变量的时候会被分配空间大小
变量声明:只是告诉编译器存在此变量

1)数组是什么
相同数据类型的集合
2)数组有什么用
批量保存数据和处理数据
3)特点
空间连续,数组名即为数组的首地址

数组的定义:
格式:

数据类型 数组名[len];
数据类型:基本数据类型+构造数据类型
数组名:合法标识符
int num[5];
变量名:num
变量的类型:int []

初始化数组:
1)不初始化
格式:

数据类型 数组名[len];

提示:不建议不初始化数组,因为未初始化的数组,内部空间的数据时杂乱的
2)部分初始化
格式::

  数据类型 数组名[len]={元素初始值};

提示:元素的初始值个数小于len
注意:部分初始化数组的方式,初始化部分数据会被赋予{}内的初始值,未被初始化的部分

3)省略长度初始化
格式:

 数据类型 数组名[ ]={元素初始值};

提示:省略长度初始化就是在定以数组的时候不指定数组的长度,数组的长度由后面数组的
初始化元素个数决定

4)全部初始化
格式:

 数据类型 数组名[len]={元素初始值};

元素的调用:
数组元素的调用采用的是下标法
索引:就是元素在数组中的编号
方式:

  数组名[索引号]
#include <stdio.h>
int main()
{
  /*int age1=25;
  int age2=26;
  int age3=27;
  int age4=24;
  int age5=23;*/
  int i=0;
  int age[5]={22,23,24,25,26};
  
  /*
  printf("age[0]=%d\n",age[0]);
  printf("age[1]=%d\n",age[1]);
  printf("age[2]=%d\n",age[2]);
  printf("age[3]=%d\n",age[3]);
  printf("age[4]=%d\n",age[4]);
  */
  for(i=0;i<5;i++)
  {
    printf("age[%d]=%d\n",i,age[i]);
  }
  return 0;

数组的赋值方式:
初始化:就是在定以变量的时候进行赋值操作

int num=10;

不同变量的初始化值:

int0
float 0
double 0
char 空
指针 NULL
字符串: \0
赋  值:先定义变量后给变量赋值
int num=10;
num=20;

数组的赋值方式是同索引操作
格式:

 数组名[索引号]=;

数组的大小:
数组是相同数据类型的集合,数组的大小就是集合的大小,集合的大小就是通过集合中“存储数据的个数*存储的数据的类型”
也可以通过sizeof运算符获取
且数组的空间是连续性的
和数组相关的常用操作:
1)求最值

#include <stdio.h>
int main()
{
  int i=0,max=0,tmp=0;
  int age[5]={22,28,24,21,26};
  for(i=0;i<5;i++)
  {
    if(max<age[i])
    {
      max=age[i];
      tmp=i;
    }
  }
  printf("sizeof(age)=%lu\n",sizeof(age));
  printf("数组的最大值为=%d,下标为%d\n",max,tmp);
  return 0;

2)排序
对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。
冒泡排序法的方法就是“两两比较求最值,值交换”

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
  int i=0,j=0,tmp=0;
  time_t times=0;
  int num[10]={0};
  times=time(NULL);
  srand(times);
  for(i=0;i<10;i++)
  {
    num[i]=rand()%100;
  }
  for(i=0;i<10;i++)
  {
    printf("num[%d]=%d  ",i,num[i]);
  }
  printf("\n");
  for(i=0;i<10;i++)
  {
    for(j=0;j<10-1-i;j++)
    {
      if(num[j]>num[j+1])
      {
        tmp=num[j];
        num[j]=num[j+1];
        num[j+1]=tmp;
      }
    }
  }
  for(i=0;i<10;i++)
  {
    printf("num[%d]=%d  ",i,num[i]);
  }
  printf("\n");
  return 0;

选择排序法:
固定一个值,两两比较求最值

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
  int i=0,j=0,tmp=0,min=0;
  time_t times=0;
  int num[10]={0};
  times=time(NULL);
  srand(times);
  for(i=0;i<10;i++)
  {
    num[i]=rand()%100;
  }
  for(i=0;i<10;i++)
  {
    printf("num[%d]=%d  ",i,num[i]);
  }
  printf("\n");
  for(i=0;i<10;i++)
  {
    min=i;
    for(j=i+1;j<10-i;j++)
    {
      if(num[min]>num[j])
      {
        min=j;
      }
    }
    if(min!=i)
    {
      tmp=num[min];
      num[min]=num[i];
      num[i]=tmp;
    }
  }
  for(i=0;i<10;i++)
  {
    printf("num[%d]=%d  ",i,num[i]);
  }
  printf("\n");
  return 0;

2、二维数组的定以和使用
一维数组就是多个数据的集合
一位数组中的元素是一个单个数据
二维数组:就是一维数组中存放一维数组
二维数组中的元素是一个一维数组
二维数组的定以:
格式:

   数据类型 数组名[row][column];
    row:行数
    column:列数
注意:在定以二维数组的时候行可以省略但是列不能省略
如:

二维数组的初始化:
方式一:不初始化

  数据类型 数组名[row][column];
不对二维数组的成员进行赋值操作

方式二:部分初始化

 数据类型 数组名[row][column]={数组元素};
数组元素的个数小于 row*column

方式三:省略行长度初始化

数据类型 数组名[ ][column]={数组元素};
行数等于数组元素的个数除以column
假如初始化中数组的元素个数为8个,列数为3
行位:8/3+1 
未初始化的数为0

方式四:全部初始化

   数据类型 数组名[row][column]={数组元素};
数组元素的个数等于 row*column
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
  int num[2][3]={1,2,3,4,5,6};
  int num1[2][3]={{1,2,3},{4,5,6}};
  int num2[2][3]={1,2,3,4,5};
  int num3[][3]={1,2,3,4,5,6,7};
  //int num4[2][]={1,2,3,4,5,6,7,8,9,0};列不能省略
  int i=0,j=0;
  for(i=0;i<2;i++)
  {
    for(j=0;j<3;j++)
    {
      printf("num[%d][%d]=%d\t",i,j,num2[i][j]);
    }
    printf("\n");
}
  return 0;

3、字符数组
4、字符串函数
在字符串函数中出现n的地方都是来限制长度
字符串长度获取:strlen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
  int i=0;
  char str[]="hello";
  char str1[]={'h','e','l','l','o'};
  printf("sizeof(str)=%lu\n",sizeof(str));
  printf("sizeof(str1)=%lu\n",sizeof(str1));
  printf("strlen(str)=%lu\n",strlen(str));
  printf("strlen(str1)=%lu\n",strlen(str1));
  return 0;
}

字符串的拼接:
strcat:

#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
  int i=0;
  char str[15]="hello";
  char buf[6]="world";
  printf("%s\n",strcat(str,buf));
  printf("%s\n",strncat(str,buf,2));
  return 0;
}

字符串的比较:
strcmp, strncmp - compare two strings

#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);

strcmp:比较字符串是否相同
size_t n:指定比较的字节数
int:整型返回值,用来表示s1>s2(>0) 或者 s1=s2(=0)或者 s1<s2(0<)
注意:比较字符串的函数strcmp比较的是两个字符串在ASCII中的位置对应的值,若在
ASCII中的位置靠后说明值比较大,只有两个字符完全相同的时候才相同,如两个字符的
开头相同会继续向后进行比较直到比较出大小

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
  int ret=0;
  char str[15]="hellp";
  char buf[6]="hello";
  ret=strcmp(str,buf);
  if(ret>0)
  {
    printf("str>buf\n");
  }
  else if(ret==0)
    printf("str=buf\n");
  else 
    printf("str<buf\n");
  printf("%d\n",strncmp(str,buf,4));
  return 0;
}

字符串的拷贝:
strcpy:string copy

strcpy:将源字符串拷贝到目标字符串

strncpy:将源字符串的前n个拷贝到目标字符串,只是覆盖目标字符串的前n个字节

#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
  int ret=0;
  char str[15]="hello";
  char buf[6]="world";
 // printf("%s\n",strcpy(str,buf));
  printf("%s\n",strncpy(str,buf,4));
  return 0;
}

字符串的获取函数:
gets:

字符串输出函数:
int puts(const char *s);
const char *s:待输出的字符串的首地址

int fputs(const char *s, FILE *stream);
const char *s:待输出的字符串的首地址
FILE *stream:输出到的文件流,我们用stdout

#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
char buf[20]={0};
gets(buf);
puts(buf);
return 0;
}

#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
char buf[20]={0};
//gets(buf);//等同于scanf("%s",buf);
//puts(buf);//等同于printf("%s",buf);
fgets(buf,20,stdin);
fputs(buf,stdout);
return 0;
}

字符串输出
putchar()

字符的输入:
getchar:
int getchar(void);
int:用来接收获取到的单个字符的ascii码

int getc(FILE *stream);
int:用来接收获取到的单个字符的ascii码
FILE *stream:标准输入流stdin

字符输出:
putchar:
int fputc(int c, FILE *stream);
int putchar(int c);
int c:待输出的字符
FILE *stream:输出的目标流,此处是标准输出流stdout

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
  char ch=' ';
  char buf[20]={0};
  //gets(buf);//等同于scanf("%s",buf);
  //puts(buf);//等同于printf("%s",buf);
  fgets(buf,20,stdin);
  fputs(buf,stdout);
  //ch=getchar();
  //putchar(ch);
  ch=fgetc(stdin);
  fputc(ch,stdout);
  printf("\n");
  return 0;
}

提示:带有f的函数接口针对的输入输出流比较多,不带有f的接口只能对标准输入输出操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值