C语言基础之数组

来源:互联网 发布:米维斯s和卡马d1c知乎 编辑:程序博客网 时间:2024/06/04 18:00
一 一维数组
1.相同数据类型的成员组成的一组数据.(整型数组,浮点型数组)
2.数组是一种构造类型,相同数据类型组成的新数据类型.数组的每个成员称为一个数组元素.
3.最简单的数组是一维数组.数组由相同数据类型  组成的一组有序的数据
4.一维数组的定义:
类型说明符  数组名[常量表达式] ={值1,值2...};     数组定义时,赋值个数 < 数组长度(没有初始化时  默认都是0,数组定义元素个数可以省略,元素个数由赋值初始值个数决定)
int a[5] = {2,3,3,4,5};  数据类型 变量名 = 初始值
int b[5]={2,3,4};
int c[5]={0};  数组访问时  下标不能越界   数组下标越界,很危险  
int arr3[3] = {1,2,3,4};  error
int d[]={2,3,4,5,6};
//int arr2[] = { }; 数组的长度是:0 ,没有意义
数组定义总结:数组中所有的成员的类型必须要相同
[   ]用来存放数组元素的个数,里面只能放常量表达式,不能使用变量
(int a = 3;int b[a] = {   };   error     使用了变量)
数组定义的时候,可以指定数组的长度,也可以不指定数组的长度,长度由赋值个数决定
5. 数组元素的访问:数组名+下标
数组下标:数组元素在数组中的序号.从0开始,到数组总个数-1;下标可以是常量也可以是变量,
定义数组,数组名前有类型修饰符,数组元素,不带类型修饰符.
注意事项:系统不会检测数组元素下标是否越界,编程时,必须保证数组下标不能越界.
数组是一个整体,不能直接参加运算,只能对单个元素进行处理,通常用到数组的地方都会用到循环
数组访问的时候可以使用变量.数组的遍历使用 for 循环进行

数组定义和使用总结:
1.数组的定义是有类型修饰符的,数组的使用则不需要
2.定义时[ ]中只能放常量表达式,使用的时候[ ]中可以用变量或常量表达 
3.定义时[ ]内可以不写任何数据,使用的时候[ ]内数组的下标不能省略
练习:
1.定义一个具有20个元素的整型数组,每个元素的取值范围是30——70之间,求数组元素的和
2.复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中
3.生成两个数组,每个数组都有10个元素,元素取值范围20—40之间,数组对应元素相加,放到另外一个数组中
二 数组排序
1.冒泡排序
int a[] = {90,30,19,12,17,8};
//6 - 1 为了防止数组越界    外层控制趟数
for(int j = 0;j < 6 - 1;j++){
//内层控制比较次数   6 -  j - 1为了防止数组越界
   for(int i = 0;i < 6 - 1 - j;i++)
  {
//如果前一个元素的值大于后一个元素的值,就交换它们的值
     if(arr[i] > arr[i + 1])
     {
           int temp = 0;
           temp = a[i];
           a[i] = a[i+1];
          a[i+1] = temp;
     }
  }
}
三 字符数组(也叫字符串)
1.字符数组:用来存放字符变量的数组称为字符数组
2.字符数组属于一维数组,定义方式与普通一维数组相似,只是类型是  char
3.字符数组的定义:
char string[] = {‘i’,’P’,’h’,’o’,’n’,’e’}; 或者 char string1[] =“iphone”;
4.字符型数组没有被赋值的时候,默认都是  \0
char str[5] = {‘i’,’p’};’i’,’\0’,’\0’,’\0’,’\0'
用%s 打印字符串的时候,一旦碰到 ‘\0’就结束输出
printf(“%s\n”,string);
5.有’\0’结束标识的字符数组也称为字符串,系统提供了很多字符串处理的函数
6.strlen() 计算字符串长度       strlen() 在计算字符串长度的时候只计算碰到的第一个’\0’前面的字符长度   碰到’\0’,就会停止计算
7.strcpy(字符串1,字符串2)  字符串拷贝函数
将字符串2的内容,拷贝到字符串1中,从第一个位置开始拷贝;一定要保证字符串数组1的长度足够的大
char a1[40] = “Hello World!!”;
char a2[]  = “I am coming”;
strcat(a1,a2);
printf(“%s”,a1);
8.strcmp( 字符串1,字符串2)字符串比较
1.字符串的比较,比较的是对应位置上的 ASCII 值的大小,如果返回值为正数,字符串1大,如果返回的是负数,字符串2大,如果为0,有两种情况:(1)说明两个对应位置的字母相等(2)它们同一位上都是 ’\0'
char s[] = “ABC”;
char s2[] = “ABD”;
printf(‘%d“,strcmp (s,s2));
它比较的是对应位置字符 ASCII 值,一旦发现对应位置的 ASCII值不相等直接返回
练习:
1.查找字符串中的空格  例如:”I love iOS, i was an iPhone5s”六个空格
2. 将字符串倒转,例如:”afjnpue”转化成字符串”eupnjfa”( 注意:是改变字符串本身,不是反想输出) 


四 sizeof 运算符
1.sizeof 不是函数,是运算符,用来计算数据类型和变量在内存中所占的字节数
unsigned 修饰的数据是没有符号(正负)之分的.
unsigned long length = sizeof (int);
printf(“%lu\n”,length);
int a = 10;
printf(“%lu\n”,sizeof(a));
//数组所占的字节数:数组元素个数  *  数据类型所占的字节数
int arr0[5] = {1,2,3,4,5}; 
printf(“%lu\n”,sizeof(arr0));

int arr[] = {1,2,2,34,5};
unsigned long Len = sizeof(arr)  /sizeof(int);
printf(“arr元素的个数:%lu\n”,Len);

总结:数组通常与循环相结合使用
数组下标从0开始,最大到数组容量减1
一定要注意下标越界问题
字符串数组在定义的时候一定要多留一个元素位置  留给’\0'
0 0
原创粉丝点击