您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C语言的数组的构建与打印

时间:2020-07-23 09:36:53  来源:  作者:
C语言的数组的构建与打印

 

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

数组(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 element
debts[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类型的数组末尾包含一个表示字符串末尾的空字符,则该数组中的内容就构成了一个字符串。

C语言的数组的构建与打印

Character arrays and strings.

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

C语言的数组的构建与打印

The char and int arrays in memory

在for循环中使用数组

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

// scores_in.c -- uses loops for array processing
#include <stdio.h>
#define SIZE 10
#define PAR 72
int main(void)
{
    int index, score[SIZE];
    int sum = 0;
    float average;

    printf("Enter %d golf scores:n", SIZE);
    for (index = 0; index < SIZE; index++)
        scanf("%d", &score[index]);  // read in the ten scores
    printf("The scores read in are as follows:n");
    for (index = 0; index < SIZE; index++)
        printf("%5d", score[index]); // verify input
    printf("n");
    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 = %.2fn", sum, average);
    printf("That's a handicap of %.0f.n", 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)的原则。

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



Tags:C语言 数组   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在许多程序中,数组很重要。数组可以作为一种存储多个相关项的便利方式。数组(array)是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值。整个数组有一...【详细内容】
2020-07-23  Tags: C语言 数组  点击:(76)  评论:(0)  加入收藏
1、{0} 初始化int arr1[3] = {0}; 使用 {0} 的方式最简洁,一般在定义的时候使用。2、for 循环初始化int arr2[3];for (int i = 0; i < 3; i++) { arr2[i] = i;}使用 for...【详细内容】
2020-07-05  Tags: C语言 数组  点击:(168)  评论:(0)  加入收藏
▌简易百科推荐
一、简介很多时候我们都需要用到一些验证的方法,有时候需要用正则表达式校验数据时,往往需要到网上找很久,结果找到的还不是很符合自己想要的。所以我把自己整理的校验帮助类分...【详细内容】
2021-12-27  中年农码工    Tags:C#   点击:(1)  评论:(0)  加入收藏
引言在学习C语言或者其他编程语言的时候,我们编写的一个程序代码,基本都是在屏幕上打印出 hello world ,开始步入编程世(深)界(坑)的。C 语言版本的 hello world 代码:#include <std...【详细内容】
2021-12-21  一起学嵌入式    Tags:C 语言   点击:(10)  评论:(0)  加入收藏
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  今朝我的奋斗    Tags:c#   点击:(21)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  梦回故里归来    Tags:shell脚本   点击:(16)  评论:(0)  加入收藏
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互...【详细内容】
2021-12-15  linux上的码农    Tags:c/c++   点击:(17)  评论:(0)  加入收藏
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添&lsquo;\0&lsquo;printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  灯-灯灯    Tags:C语言   点击:(46)  评论:(0)  加入收藏
函数调用约定(Calling Convention),是一个重要的基础概念,用来规定调用者和被调用者是如何传递参数的,既调用者如何将参数按照什么样的规范传递给被调用者。在参数传递中,有两个很...【详细内容】
2021-11-30  小智雅汇    Tags:函数   点击:(19)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  C语言编程    Tags:C语言   点击:(46)  评论:(0)  加入收藏
一、为什么需要使用内存池在C/C++中我们通常使用malloc,free或new,delete来动态分配内存。一方面,因为这些函数涉及到了系统调用,所以频繁的调用必然会导致程序性能的损耗;另一...【详细内容】
2021-11-17  深度Linux    Tags:C++   点击:(37)  评论:(0)  加入收藏
OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列...【详细内容】
2021-11-11  zls315    Tags:C#   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条