数组
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
数组属于构造数据类型,数组按类型可分为数值数组、字符数组、指针数组、结构数组等各种类别。
一维数组定义:
类型说明符 数组名[常量表达式],如 int a[10]。
允许在同一个类型说明中,说明多个数组和多个变量,如:int a,b,c,d,k1[10],k2[20]
例子1
/*一维数组的引用*/
#include
void main()
{
int i, a[10];
for(i=0 ; i<=9 ; i++)
{
a[i] = i;
}
for(i=9 ; i>=0 ; i--)
{
printf("%d",a[i]);
}
}
给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法
初始化赋值:如 int a[10] = {0,1,2,3,4,5,6,7,8,9};
例子2
/*输入10个数,输出最大的数*/
#include
void main()
{
int i, max, a[10];
printf("input 10 numbers:\n");
for(i=0 ; i<10 ; i++)
{
scanf("%d",&a[i]);
}
max = a[0];
for(i=1 ; i<10 ; i++)
{
if(a[i] > max)
max = a[i];
}
printf("maxnum = %d\n",max);
}
例子3
/*对数组使用冒泡排序*/
#include
void main()
{
int i, j , temp ,a[10];
printf("input 10 numbers:\n");
for(i=0 ; i<10 ; i++)
{
scanf("%d",&a[i]);
}
for(i=0 ; i<9 ; i++)
{
for(j=i+1 ; j<10 ; j++)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i=0 ; i<10 ;i++)
{
printf("%5d",a[i]);
}
printf("\n");
}
例子4
/*将数组a[2][3]转化为b[3][2]*/
#include
void main()
{
int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2];
int i, j;
for(i=0 ; i<2 ; i++)
{
for(j=0 ; j<3 ; j++)
{
b[j][i] = a[i][j];
printf("%3d",a[i][j]);
}
printf("\n");
}
for(j=0 ; j<3 ; j++)
{
for(i=0 ; i<2 ;i++)
{
printf("%3d",b[j][i]);
}
printf("\n");
}
}
例子5
/*从键盘上输入9个整数,保存在二维数组中,并输出第一行和第一列的所有元素,其他地方不显示*/
#include
void main()
{
int a[3][3];
int i,j;
for(i=0 ; i<3 ; i++)
{
for(j=0 ; j<3 ; j++)
{
printf("input a[%d][%d]:\n",i,j);
scanf("%d",&a[i][j]);
}
}
printf("\n");
printf("the result a[3][3]:\n");
for(i=0 ; i<3 ; i++)
{
for(j=0 ; j<3 ; j++)
{
if(i==1 || j==1)
{
printf("%3d",a[i][j]);
}
else
{
printf(" "); //也可以是printf("%3c",' ');
}
}
printf("\n");
}
}
二分法:折半查找
例子6
/*假设在数组a中的数据是由小到大顺序排列的: -12, 0, 6, 16, 23, 56, 80, 100, 110, 115
,从键盘上输入一个数,判定该数是否在数组中,若在,输出所在序号(用二分法求解)*/
#define M 10
#include
void main()
{
int a[M] = {-12,0,6,16,23,56,80,100,110,115};
int n, low, mid, high, found;
low = 0;
high = M-1;
printf("input number:");
do
{
scanf("%d",&n);
getchar(); /*取空字符消耗程序进程,若没有此句,输入错误时程序将以错误的数字执
行,并陷入死循环*/
}while(na[M-1]);
for( ; low<=high ; )
{
mid = (low+high)/2;
if(n == a[mid])
{
found = 1;
break;
}
else if(n > mid)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
if(found == 1)
{
printf("the index of %d is %d\n",n,mid+1);
}
else
{
printf("this number is not a right number!\n");
}
}