在许多程序中,数组很重要。数组可以作为一种存储多个相关项的便利方式。

数组(array)是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素(element)。例如,以下声明:

float debs[20];

声明debts是一个内含20个元素的数组,每个元素都可以存储float类型的值。数组的第1个元素是debts[0],第2个元素是debts[1],以此类推,直到debts[19]。注意,数组元素的编号从0开始,不是从1开始。可以给每个元素赋float类型的值。例如,可以这样写:

debts[5] = 32.54;debts[6] = 1.2e+21

实际上,使用数组元素和使用同类型的变量一样。例如,可以这样把值读入指定的元素中:

scanf("%f", &debts[4]); //

这里要注意一个潜在的陷阱:考虑到影响执行的速度,C编译器不会检查数组的下标是否正确。下面的代码,都不正确:

debts[20] = 88.32;   // no such array elementdebts[33] = 828.12;  // no such array element

编译器不会查找这样的错误。当运行程序时,这会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至导致程序异常中断。

数组的类型可以是任意数据类型。

int nannies[22];   /* an array to hold 22 integers        */char actors[26];   /* an array to hold 26 characters      */long big[500];     /* an array to hold 500 long integers  */

字符串

字符串,可以把字符串存储在char类型的数组中(一般而言,char类型数组的所有元素都存储char类型的值)。如果char类型的数组末尾包含一个表示字符串末尾的空字符0,则该数组中的内容就构成了一个字符串。

Character arrays and strings.

用于识别数组元素的数字被称为下标(subscript)、索引(indice)或偏移量(offset)。下标必须是整数,而且要从0开始计数。数组的元素被依次存储在内存中相邻的位置,如图6.7所示。

The char and int arrays in memory

在for循环中使用数组

程序中有许多地方要用到数组,程序清单6.19是一个较为简单的例子。该程序读取10个高尔夫分数,稍后进行处理。使用数组,就不用创建10个不同的变量来存储10个高尔夫分数。而且,还可以用for循环来读取数据。程序打印总分、平均分、差点(handicap,它是平均分与标准分的差值)。

// scores_in.c -- uses loops for array processing#include #define SIZE 10#define PAR 72int main(void){    int index, score[SIZE];    int sum = 0;    float average;    printf("Enter %d golf scores:", SIZE);    for (index = 0; index < SIZE; index++)        scanf("%d", &score[index]);  // read in the ten scores    printf("The scores read in are as follows:");    for (index = 0; index < SIZE; index++)        printf("%5d", score[index]); // verify input    printf("");    for (index = 0; index < SIZE; index++)        sum += score[index];         // add them up    average = (float) sum / SIZE;    // time-honored method    printf("Sum of scores = %d, average = %.2f", sum, average);    printf("That's a handicap of %.0f.", average - PAR);    return 0;}

先看看程序清单6.19是否能正常工作,接下来再做一些解释。下面是程序的输出:

Enter 10 golf scores:

99 95 109 105 100

96 98 93 99 97 98

The scores read in are as follows:

99 95 109 105 100 96 98 93 99 97

Sum of scores = 991, average = 99.10

That's a handicap of 27.

程序运行没问题,我们来仔细分析一下。首先,注意程序示例虽然输入了11个数字,但是只读入了10个数字,因为循环只读了10个值。由于scanf()会跳过空白字符,所以可以在一行输入10个数字,也可以每行只输入一个数字,或者像本例这样混合使用空格和换行符隔开每个数字(因为输入是缓冲的,只有当用户键入Enter键后数字才会被发送给程序)。

然后,程序使用数组和循环处理数据,这比使用10个单独的scanf()语句和10个单独的printf()语句读取10个分数方便得多。for循环提供了一个简单直接的方法来使用数组下标。注意,int类型数组元素的用法与int类型变量的用法类似。要读取int类型变量fue,应这样写:scanf("%d", &fue)。要读取int类型的元素score[index],所以这样写scanf("%d", &score[index])。

编程风格

该程序示例演示了一些较好的编程风格。

第一,用#define指令创建的明示常量(SIZE)来指定数组的大小。这样就可以在定义数组和设置循环边界时使用该明示常量。如果以后要扩展程序处理20个分数,只需简单地把SIZE重新定义为20即可,不用逐一修改程序中使用了数组大小的每一处。

第二,下面的代码可以很方便地处理一个大小为SIZE的数组:

for (index = 0; index < SIZE; index++)

第三,程序能重复显示刚读入的数据。这是很好的编程习惯,有助于确保程序处理的数据与期望相符。

最后,注意该程序使用了3个独立的for循环。这是否必要?是否可以将其合并成一个循环?当然可以,读者可以动手试试,合并后的程序显得更加紧凑。但是,调整时要注意遵循模块化(modularity)的原则。

模块化隐含的思想是:应该把程序划分为一些独立的单元,每个单元执行一个任务。这样做提高了程序的可读性。也许更重要的是,模块化使程序的不同部分彼此独立,方便后续更新或修改程序。在掌握如何使用函数后,可以把每个执行任务的单元放进函数中,提高程序的模块化。

c++ 数组换行_C语言的数组的构建与打印相关推荐

  1. c定义一个整型数组_C语言学习|数组

    一.数组的定义 数组:由若干类型相同的相关数据项按顺序存储在一起形成的一组同类型有序数组的集合 元素:用一个统一的名字标识这组数据,这个名字称为数据名,构成数据的每一个数据项 下标:从0开始的整数,遵 ...

  2. c语言向自定数组_C语言一维数组的定义和引用

    C语言一维数组的定义和引用 C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必须先进行定义.一维数组的定义方式为: 类型 ...

  3. strcmp可以比较数组么_C语言数组越界了,后果很严重,如何避免?

    素材来源:嵌入式ARM所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一.在 C 语言中,数 ...

  4. 定义整型数组_C语言基础-数组怎么用

    到目前为止,我们了解到C语言中可以使用整型,浮点型和字符型的数据类型来描述我们人类世界的各种数据,但是这些还远远不够-- 我们在IOT领域经常会遇到这样一个数据使用场景:某天的固定时间内,会有多台(我 ...

  5. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  6. 一维数组反转c语言_C语言实现数组的循环左移,右移,翻转的示例

    数组结合指针可以实现很多有趣的功能,比如下面这个程序: 假设数组为 : 12345 如果左移一次即为:23451 ,依次类推 如果右移一次即为:51234 ,依次类推 翻转则为:54321 我们来实现 ...

  7. c++什么时候数组溢出_C语言,营养丰富的C语言五,变长数组不是动态数组

    大家好,感谢朋友的支持阅读和关注,虽然我提出的这些小知识点看得人很少,但是每涨一个阅读和关注,都能让我开心很久,所以再次感谢一起学习的朋友们. 查余补漏: 在前几次的讲解中,有朋友提出C语言的内存分配 ...

  8. 三维数组地址计算_C语言进阶之路:数据类型 - 多维数组与指针!我的心中只有学习!...

    1. 关于数组的首地址: 2. 数组其他元素的地址: 例子中, 数组的元素在内存中应该是这样排列的: [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] 下面是通过指针 ...

  9. 一维数组c语言,c语言一维数组_C语言一维数组入门教程

    摘要 腾兴网为您分享:C语言一维数组入门教程,优衣库,小米手环,小米钱包,小度等软件知识,以及胎教宝典,一级建造师题库软件,康佳渠道,刷点卷,一加系统,音乐节拍器,liveuc视频会议,辽宁省政务服务 ...

最新文章

  1. 面向对象的三个基本特征 和 五种设计原则
  2. Linxu内核模块开发入门(金荣的第一篇个人技术博客)
  3. c++后台管理系统_【获奖案例】第三届全国医院物联网大会“中国医院物联网应用十大优秀案例”安徽医科大学第一附属医院手术室行为管理系统...
  4. 数学建模_随机森林分类模型详解Python代码
  5. 笨方法“学习python笔记之文件操作
  6. qwt+qt5.4.1+win7 环境搭建(完美版)
  7. AttributeError: module ‘onnxruntime‘ has no attribute ‘InferenceSession‘
  8. ncverilog脚本_NC-Verilog控制命令
  9. 最优化理论——最速下降法
  10. Broadcom WICED Wi-Fi 研究BCM943362WCD4之STM32F205+43362通信
  11. 秦偲洺 荣获 火星少年计划 第三季 全球线上评选人气奖
  12. redhat 7.4系统安装英伟达独立显卡驱动步骤
  13. 邮件服务器SASL TLS 反垃圾邮件系统
  14. 苹果无线耳机连接不上_为什么我们一定要买TWS真无线耳机?
  15. 【飞轮储能】基于matlab simulink飞轮储能(永磁同步电机)仿真【含Matlab源码 2421期】
  16. Oracle数据仓库参考架构
  17. num_workers
  18. 拓嘉辰丰电商:拼多多店铺指标有哪些对于参加活动比较重要
  19. 信号发生器输出电阻与负载电阻问题,影响实际的信号输出
  20. B2c商城系统介绍源码

热门文章

  1. 推荐一款非常好用的java反编译工具(转)
  2. Input.GetAxis 获取轴
  3. 替换字符串中指定的字符--随手源码
  4. 无废话ADO.NET 第二章 关于连接
  5. 某金融产品妹纸:四种姿势教你跪舔程序员不要不要的
  6. 【入门必读】产品经理如何培养自己的逻辑思维方式
  7. 【pmcaff专栏】陆蔚青:漫谈商业智能
  8. oracle用户登录的认证方式
  9. 分析一次STP无法生效的故障
  10. unity的自带特性