十数组:一维数组

Posted Strugglinggirl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十数组:一维数组相关的知识,希望对你有一定的参考价值。

1、数组的使用

什么是数组?

——是一种容器(放东西的东西),特点是:

(1) 其中所有的元素具有相同的数据类型;

(2)  一旦创建,不能改变大小;

数组中的元素在内存中是连续依次排列的。

——可以出现在赋值的左边或右边

a[2]=a[1]+6;

 

定义数组

——<类型>  变量名称 [元素数量];

int grades[100];
double weight[20];

——元素数量必须是整数

C99之前:元素数量必须是编译时刻确定的字面量

 

数组的单元

——数组的每个单元就是数组类型的一个变量

——使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数:

grades[0];
grades[99];
average[5];
有效的下标范围

——编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写。

——一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃。(segmentation fault)

——但是可能运气好,没造成严重后果。

——所以这是程序员的责任来保证程序只适应有效的下标值:[0,数组的大小-1]。

长度为0的数组?

——int a[0];

——可以存在,但是无用。

2、数组的例子

投票统计

——写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束。

#include<stdio.h>

int main()
{ 
    const int Number=10; //数组大小C99 
    int x;
    int count[Number];   //定义数组 
    int i; 
    
    //初始化数组 
    for(i=0;i<Number;i++)
    {
        count[i]=0;
    }
    
    scanf("%d",&x);
    while(x!=-1)
    {
        if(x>=0&&x<=9){
            count[x]++;  //数组参与运算 
        }
        
        scanf("%d",&x);
    }
    
    //遍历数组输出 
    for(i=0;i<Number;i++){
        printf("%d :%d\\n",i,count[i]);
    }
    
    return 0;
 } 

 

 

 

3、数组运算

——在一组给定的数据中,如何找出某个数据是否存在?

 

#include<stdio.h>

/**
找出key在数组a中的位置
@param key 要寻找的数字
@param a  要寻找的数组
@param length 数组a的长度
@return 如果找到,返回其在a中的位置; 返回如果找不到则返回-1 
*/
int search(int key,int a[],int length);

int main()
{
    int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
    int x;
    int loc;
    
    printf("请输入一个数字:");
    scanf("%d",&x);
    
    loc=search(x,a,sizeof(a)/sizeof(a[0]));
    
    if(loc!=-1){
        printf("%d在第%d个位置上\\n",x,loc);
    }else{
        printf("%d不存在\\n",x);
    }
    
    return 0;
}

int search(int key,int a[],int length)
{
    int ret=-1;
    int i;
    for(i=0;i<length;i++){
        if(a[i]==key){
            ret=i;
            break;
        }
    }
    return ret;
}

数组的集成初始化
 int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
数组的大小

——sizeof给出整个数组所占据的内容的大小,单位是字节。

sizeof(a)/sizeof(a[0])

——sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数。

 数组的赋值

——数组变量本身不能被赋值

 int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
 int b[]=a;//这是错误的。 

——要把一个数组的所有元素交给另一个数组,必须采用遍历。

for(i=;i<length;i++){
   b[i]=a[i];
}

 

遍历数组

——通常都是使用for循环。

 数组作为函数参数时,往往必须再用另一个参数来传入数组的大小。

int search(int key,int a[],int length);

——数组作为函数的参数时:

(1)不能在[]中给出数组的大小;

(2)不能再利用sizeof来计算数组的元素个数。

 

以上是关于十数组:一维数组的主要内容,如果未能解决你的问题,请参考以下文章

实验十——一维数组的定义及引用

十数组:一维数组

实验十——一维数组的定义及引用

实验十——一维数组的定义及引用

实验十——一维数组的定义及引用

实验十——一维数组的定义及引用