6-1数组初体验
C语言中的数组初始化是有三种形式的,分别是:
1、 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
2、 数据类型 数组名称[] = {元素1,元素2…元素n};
3、 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n;
注意:
在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。
6-4数组作为函数参数
int arr1[] = {10,41,3,12,22};
int arr2[] = {1,2,3,4,5};
replaceMax(arr1,arr2[0]); //将数组arr1和数组arr2的第一个元素传入函数中
6-5数组的应用(一)
冒泡排序
#include <stdio.h>
int main()
{
double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
int i,j;
printf("\n************排队前*************\n");
for(i=0;i<10;i++)
{
printf("%.2f, ", arr[i]); //%.2f表示小数点后精确到两位
}
for(i=8; i>=0; i--)
{
for(j=0;j<=i;j++)
{
if(arr[j]>arr[j+1]) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[j]; //将前面的数赋值给temp
arr[j] = arr[j+1]; //前后之数颠倒位置
arr[j+1] = temp; //将较大的数放在后面
}
}
}
printf("\n************排队后*************\n");
for(i=0;i<10;i++)
{
printf("%.2f, ", arr[i]); //%.2f表示小数点后精确到两位
}
return 0;
}
6-7字符串与数组
使用数组来定义我们所要的字符串。一般有以下两种格式:
1、char 字符串名称[长度] = “字符串值”;
2、char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
注意:
1、[]中的长度是可以省略不写的;
2、采用第2种方式的时候最后一个元素必须是’\0’,’\0’表示字符串的结束标志;
3、采用第2种方式的时候在数组中不能写中文。
在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。例如:
运行结果:
6-8字符串函数
常用的字符串函数如下:
使用字符串函数注意以下事项:
1、strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。比如:
2、strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小,例如:
3、strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝,比如:
4、strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串,如:
6-9多维数组
多维数组的初始化与一维数组的初始化类似也是分两种:
1、数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n] = {{值1,…,值n},{值1,…,值n},…,{值1,…,值n}};
2、数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n]; 数组名称[下标1][下标2]…[下标n] = 值;
多维数组初始化要注意以下事项:
1、采用第一种始化时数组声明必须指定列的维数。因为系统会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数;
2、采用第二种初始化时数组声明必须同时指定行和列的维数。
注:
二维数组中第二个[ ]里的为列数。
6-11多维数组的遍历
判断二维n*n数组下标是否为对角线元素:
if((i+j)%(n-1)==0);