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

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

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

时间: 2024-11-09 21:36:16

十、数组(1):一维数组的相关文章

php多维数组化一维数组

一.使用foreach <?php function arr_foreach ($arr) { static $tmp=array(); if (!is_array ($arr)) { return false; } foreach ($arr as $val ) { if (is_array ($val)) { arr_foreach ($val); } else { $tmp[]=$val; } } return $tmp; } $a = array(1,2=>array(3,4=>

数组(一维数组数组 )

数组:具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合称为数组. 一维数组定义的时候,需要数据类型.能够存放元素的数量int[] n = new int[5];按照顺序:索引 从0开始(搜索字符总比实际长度少1)n[0] = 3;n[1] = 3;n[2] = 3;n[3] = 3;n[4] = 3;n[5] = 3;错误,索引号超出界限(因为之际为5 ,搜索长度只能到4) 数组就是一个比较整体的概念.把类别区分开,然后引入变量表示顺序.利用冒泡循环来的到结

PHP学习之中数组-遍历一维数组【2】

在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: <?php /* range()原型: * array range ( mixed $start , mixed $limit [, number $step = 1 ] ) * 参数说明: * start 序列的第一个值. limit 序列结束于 limit 的值. step 如果给出了 step 的值,

数组(一维数组、二维数组)

数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意. 这些其实和泛型有些类似,数组的操作没有泛型方便,但是性能却不是泛型所能比拟的 声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面.在 C# 中,将方括号放在标识符后是不合法的语法. int[] table; // not int table[]; 另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分.这使您可

将二维数组转为一维数组的2种方法

如何将下面的二维数组转为一维数组. 代码如下: $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'name'=>'mary' ), array( 'id'=>'78', 'name'=>'lili' ), ); 第一种方法: 代码如下: foreach($msg as $k => $v){ $ids[] = $id; $names[] = $name; } 第二种方法: 代

implode 多维数组转一维数组并字符串输出

//多维数组返回一维数组,拼接字符串输出 public function r_implode( $glue, $pieces ) { foreach( $pieces as $r_pieces ) { if( is_array( $r_pieces ) ) { $retVal[] = self::r_implode( $glue, $r_pieces ); } else { $retVal[] = $r_pieces; } } return implode( $glue, $retVal );

多维数组变成一维数组

将多维数组变成一维数组: /** * @method 多维数组变成一维数组 * @staticvar array $result_array * @param type $array * @return type */ private function array_multi2array($array) { static $result_array = array(); foreach ($array as $key => $value) { if (is_array($value)) { $t

[C++]二维数组还是一维数组?

记得刚学习C++那会这个问题曾困扰过我,后来慢慢形成了不管什么时候都用一维数组的习惯,再后来知道了在一维数组中提出首列元素地址进行二维调用的办法.可从来没有细想过这个问题,最近自己写了点代码测试下,虽然还是有些不明就里,不过结果挺有意思. 为了避免编译器优化过度,用的是写操作,int,测试分为不同大小的空间,同样大小空间不同的行和列数.分别记录逐行写入,逐列写入,按间隔写入,空间申请和释放的时间. 测试代码 一维数组的申请和释放 1 // Create 2 int *m = new int[n_

C# 数组、一维数组、二维数组、多维数组、锯齿数组

C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请使用集合. 二.一维数组: 声明及初始化: class Program { static void Main(string[] args) { //方法一 int[] num = new int[3];//声明一个长度为3的值类型的数组: num[0] = 3;//为数组赋值: num[1] = 5

把简单的二维数组变成一维数组

在工作中我们经常需要把二维数组变成一维数组.那么就需要循环拿出来,其实有时候我们可以使用一些小技巧,借助php的内置函数来实现,但是我说的只是简单的二维数数组$arr= array('name'=>array('a'=>'abc','b'=>'bcd','c'=>'cde'));如果我们使用array_pop(),就可以拿到一维数组了,array_pop()本来是删除并返回数组的最后一个元素. 所以我们就可以将上诉的$arr变成array('a'=>'abc','b'=>