C语言入门(六)数组

数组

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。

数组属于构造数据类型,数组按类型可分为数值数组、字符数组、指针数组、结构数组等各种类别。

一维数组定义:

类型说明符 数组名[常量表达式],如 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");
    }
}

 

你可能感兴趣的:(C语言)