数组作为函数参数时注意以下事项:
- 数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度
- 数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致
数组的应用-冒泡排序
以升序排序为例冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。就像小学排队时按大小个排一样,将一个同学拉出来和后面的比比,如果高就放后面,一直把队伍排好。
#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 )
{
if(i != 9)
printf("%1.2f, ", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
else
printf("%1.2f", arr[i]); //%1.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 )
{
if(i != 9)
printf("%1.2f, ", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
else
printf("%1.2f", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
}
return 0;
}
数组的应用-数组查找功能
当我们购物之后,拎着购物袋回到家,会一一检查购物袋中的物品看是否缺少或者都是想购之物。那么应用到程序中,可以使用数组查找功能,看看是否存在该数据,如果存在并返回该元素的下标。
#include <stdio.h>
int getIndex(int arr[5],int value)
{
int i;
int index;
for(i=0;i<5;i )
{
/* 请完善数组查询功能 */
if(arr[i]==value)
{
index=i;
break;
}
index=-1;
}
return index;
}
int main()
{
int arr[5]={3,12,9,8,6};
int value = 8;
int index = getIndex(arr,value); //这里应该传什么参数呢?
if(index!=-1)
{
printf("%d在数组中存在,下标为:%d\n",value,index);
}
else
{
printf("%d在数组中不存在。\n",value);
}
return 0;
}
字符串与数组
C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:
char 字符串名称[长度] = “字符串值”; //[]中的长度是可以省略不写的
char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’}; //最后一个元素必须是’\0’,’\0’表示字符串的结束标志
注意:在输出字符串的时候可使用如下语句。
printf(“%s”,字符数组名字);
puts(字符数组名字);
字符串函数
常用的字符串函数如下(strlen,strcmp,strcpy,strcat,atoi):
使用字符串函数注意以下事项:
strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。比如:
strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小,例如:
strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝,比如: