码迷,mamicode.com
首页 > 编程语言 > 详细

十、数组(1):一维数组

时间:2018-05-13 17:19:14      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:arch   现在   容器   分享   越界   c99   amp   class   表示   

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来计算数组的元素个数。

 

十、数组(1):一维数组

标签:arch   现在   容器   分享   越界   c99   amp   class   表示   

原文地址:https://www.cnblogs.com/Strugglinggirl/p/9032672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!