前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一维数组

一维数组

作者头像
pigeon
发布2022-04-11 17:37:39
2430
发布2022-04-11 17:37:39
举报
文章被收录于专栏:电子荣耀
数组

编写程序时经常会碰到需要存储大量数据的情况,例如,某个班有30名学生,要求输入30个学生的考试成绩并计算平均成绩,找出有多少个学生的成绩高于平均成绩。程序需要先输入这些数据并存储起来,计算平均值后,然后用每个成绩与平均值比较,统计大于平均值的数的个数。如果直接使用前面的知识,那么需要定义30个变量。从实际角度出发,这是不可行的,所以需要有一种好的方式去管理和存储大量数据。

包括C语言在内的高级语言都提供称为数组来存储大量数据。

一维数组

一维数组是数组中最简单的,只需要数组名与一个下标就能唯一地确定数组元素。定义一维数组时需要说明:数组名、数组元素的类型和数组元素的个数。其一般形式如下:

数据类型说明符 数组名[整型表达式];

说明:

(1) 数据类型说明符指定了数组中存放数据的数据类型。

(2) 数组名的命名规则与变量名相同,遵循标识符命名规则。

(3) 数组名后面方括号中说明了数组可以存放的元素的个数,通常是整型常量表达式。部分编译器也允许整型变量,但要求变量有确定的值。

(4) 数组定义后,其下标范围也就确定了。起始下标是0,最大下标是数组元素个数减1。

一维数组的存储

例如语句:

代码语言:javascript
复制
int a[10];

定义了一个数组名为a的数组,其中可以存放10个int类型数据。通过定义,在内存中分配了一段连续的内容空间,这段内存空间的起始地址存放在数组名中,内存空间有10个存储单元,每个存储单元可以存放1个int类型数据,该数组的下标范围是从0到9。

一维数组的引用

定义一维数组后就可以在程序中使用。C语言规定:只能引用数组的元素而不能一次引用整个数组和全部元素。

引用数组元素的一般形式如下:

数组名[下标]

说明:

(1) 下标是整型表达式,如果是浮点数,则系统自动去掉小数部分。

(2) 下标必须在合法的范围之内,即在0到元素个数减1之间。如果下标超出了合法范围,称为下标越界,有可能会导致程序运行过程中发生错误。

(3) 一个数组元素的使用方式与同类型的简单变量相同。

例:从键盘输入10个整数存放到数组中,然后将该数组中元素进行逆序排列,最后输出数组的全部数据。

思路分析:在程序定义一个能够存放10个整数的数组,使用循环语句依次输入每一个元素。对数组元素进行逆序可以对数组的前一半元素进行循环,每次将第i个元素与其对应的第9-i个元素进行交换。最后再使用循环语句依次输出所有元素。

答案参考:

代码语言:javascript
复制
#include <stdio.h>
   #define N 10             //数组元素的个数
   int main()
   {
       int i, temp;
       int a[N];            //定义数组
       for(i=; i<N; i++)   //循环输入N个整数
       {
           scanf("%d", &a[i]);   //输入第i个元素
       }
       for(i=; i<=(N-1)/; i++) //循环进行交换
       {
           temp = a[i];
           a[i] = a[N-1-i];
           a[N-1-i] = temp;
       }
       for(i=; i<N; i++)       //循环输入N个整数
       {
           printf("%d ", a[i]); //输出第i个元素
       }
       return ;
   }

结果示例:

一维数组的初始化

定义数组的同时可以给数组的各个元素赋值,称为数组的初始化。对一维数组进行初始化可以有以下几种形式。

(1) 在定义数组时,为数组全部元素赋予初值。例如:

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

(2) 定义数组时,可以给数组的部分元素赋值。例如:

int a[10] = {1, 2, 3, 4, 5};

(3) 对数组的全部元素赋初值时,可以省略数组定义中的数组长度。例如:

int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

例:从键盘输入10个整数,使用冒泡法对这10个整数进行从小到大的排序。

思路分析:冒泡排序是一种比较简单的排序算法,对n个数进行升序排序,需要进行n-1趟比较和交换,排序的基本过程如下。

第1趟需要进行n-1次比较,依次对第1和第2个、第2和第3个、…、第n-1和第n个比较,如果有不满足从小到大的就交换,第1趟完成后最大的数放到末尾;

第2趟需要进行n-2次比较,依次对第1和第2个、第2和第3个、…、第n-2和第n-1个比较,如果有不满足从小到大的就交换,第2趟完成后第2大的数放到倒数第2位;

依次类推,第n-1趟就只需比较第1和第2个数1次。

答案参考:

代码语言:javascript
复制
#include <stdio.h>
   #define N 10  //参加排序的数据的个数
   int main()
   {
       int i, j, temp;
       int a[N];
       for(i=; i<N; i++)
       {
           scanf("%d", &a[i]);
       }
       for(i=; i<N-1; i++)        //排序的趟
       {
           for(j=; j<N-1-i; j++)  //第i趟中相邻数据的比较与交换
           {
               if(a[j]>a[j+])     //如果相邻数据不是升序, 则交换
               {
                   temp = a[j];
                   a[j] = a[j+];
                   a[j+] = temp;
               }
           }
       }
       for(i=; i<N; i++)
       {
           printf("%d ", a[i]);
       }
       return ;
   }

结果示例:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子荣耀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档