C语言初学者入门讲座 第九讲 数组(1)

(2007-01-17 11:39:19)

数组在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。数组类型说明在C语言中使用数组必须先进行类型说明。

数组说明的一般形式为:

类型说明符 数组名 [常量表达式],……;

其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

例如:

int a[10]; 说明整型数组a,有10个元素。

float b[10],c[20];

说明实型数组b,有10个元素,实型数组c,有20个元素。

char ch[20]; 说明字符数组ch,有20个元素。

对于数组类型说明应注意以下几点:

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同,例如:

void main()

{

int a;

float a[10];

……

}

是错误的。

4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。

5.不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:

#define FD 5

void main()

{

int a[3+2],b[7+FD];

……

}

是合法的。但是下述说明方式是错误的。

void main()

{

int n=5;

int a[n];

……

}

6.允许在同一个类型说明中,说明多个数组和多个变量。

例如: int a,b,c,d,k1[10],k2[20];

数组元素的表示方法

数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:

数组名[下标]

其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。

例如,输出有10

个元素的数组必须使用循环语句逐个输出各下标变量:

for(i=0; i<10;

i++)  printf("%d",a[i]); 而不能用一个语句输出整个数组,下面的写法是错误的:

printf("%d",a);

void main()

{

int i,a[10];

for(i=0;i<10;)

a[i++]=2*i+1;

for(i=9;i>=0;i--)

printf("%d",a[i]);

printf("\n%d %d\n",a[5.2],a[5.8]);

}

for(i=0;i<10;)

a[i++]=2*i+1;

for(i=9;i>=0;i--)

printf("%d",a[i]);

printf("\n%d

%d\n",a[5.2],a[5.8]); 本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大到小输出各个奇数。在第一个

for语句中,表达式3省略了。在下标变量中使用了表达式i++,用以修改循环变量。当然第二个for语句也可以这样作,

C语言允许用表达式表示下标。程序中最后一个printf语句输出了两次a[5]的值,可以看出当下标不为整数时将自动取整。数组的赋值给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。数组初始化赋值数组初始化赋值是指在数组说明时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。

初始化赋值的一般形式为: static

类型说明符数组名[常量表达式]={值,值……值};

其中static表示是静态存储类型,

C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储,外部存储的概念在第五章中介绍)。在{

}中的各数据值即为各元素的初值, 各值之间用逗号间隔。例如: static

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

相当于a[0]=0;a[1]=1...a[9]=9;

C语言对数组的初始赋值还有以下几点规定:

1.可以只给部分元素赋初值。当{

}中值的个数少于元素个数时,只给前面部分元素赋值。例如: static int

a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:

static int a[10]={1,1,1,1,1,1,1,1,1,1};

而不能写为:

static int a[10]=1;

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如:

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

可写为:

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

动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

void main()

{

int i,max,a[10];

printf("input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

max=a[0];

for(i=1;i<10;i++)

if(a[i]>max) max=a[i];

printf("maxmum=%d\n",max);

}

for(i=0;i<10;i++)

scanf("%d",&a[i]);

max=a[0];

for(i=1;i<10;i++)

if(a[i]>max) max=a[i];

printf("maxmum=%d\n",max);

本例程序中第一个for语句逐个输入10个数到数组a中。然后把a[0]送入max中。在第二个for语句中,从a[1]到a[9]逐个与max中的内容比较,若比max的值大,则把该下标变量送入max中,因此max总是在已比较过的下标变量中为最大者。比较结束,输出max的值。

void main()

{

int i,j,p,q,s,a[10];

printf("\n input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<10;i++){

p=i;q=a[i];

for(j=i+1;j<10;j++)

if(q

if(i!=p)

{

s=a[i];

a[i]=a[p];

a[p]=s;

}

printf("%d",a[i]);

}

}

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<10;i++){

p=i;q=a[i];

for(j=i+1;j<10;j++)

if(q

c语言中数组名可以与其他变量名相同,C语言初学者入门讲座 第九讲 数组(1)...相关推荐

  1. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

  2. C语言中定义加号的数据类型,C/C++知识点之c语言基础数据类型及命名规范

    本文主要向大家介绍了C/C++知识点之c语言基础数据类型及命名规范,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.1. 常量是程序运行期间不能被改变的量; 变量代表一个存储区域,存 ...

  3. python变量名有哪些_python变量名命名规则

    原博文 2020-03-21 11:07 − 一.python变量名命名规则: 1.变量名通常由字母,数字,下划线组成; 2.数字不能作为变量名开头; 3.不能以python中的关键字命名; 4.变量 ...

  4. c语言中能逐个使用下标变量,在C语言中能逐个地使用下标变量,也能一次引用整个数组...

    标是大学的目培养业人高层教育次专才,中能逐个组比大特点学相学教是与中育的. 语言用下用整步到步的位让谈判条件是:中一前提. 地使的器干性官是坏疽发生.王安杜甫李白苏轼石,不得"眼景道前有,哪 ...

  5. C语言中 定义数组大小时 不能使用变量,编程达人 C语言中数组长度不能用变量定义吗...

    C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数.没有申请的空间系统是不允许读写的.那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小 ...

  6. C语言 struct <结构体类型名> 结构体变量名

    #include<stdio.h> int main(int argc, char* argv[]) {char name[20] = "拉稀";char dogcla ...

  7. c语言中什么运算符可以求出数据字节数,C语言的数据类型及其运算符

    一.数据类型 (一).变量与常量 1.变量 (1).定义:其值在其作用域内可以改变的量称为变量.一个变量应该有一个名字,在内存中占据一一定的存储空间.变量在使用前必须要定义,每个变量都有自己的地址.变 ...

  8. c语言中赋值的时候顿号的作用,简单总结C语言中的运算符优先级

    简单总结C语言中的运算符优先级 C语言中有很多运算符,除了四则运算,还有位运算.比较运算.逻辑运算.赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼.通常建议在写代码的时候不用省略括号,但是并不是所 ...

  9. C语言中判断int,long型等变量是否赋值的方法

    博主这段时间在写一些C程序的代码,由于以前对C不是了解很多,故遇到很多瓶颈,当然,其中也有很多有趣的方法可以利用以解决这些难题,下面这个问题就是博主遇到的一个麻烦. 声明了 int ,long 型等局 ...

最新文章

  1. JavaScript的几个概念简单理解(深入解释见You Don't know JavaScript这本书)
  2. windows命令提示符_如何个性化Windows命令提示符
  3. 基本图形怎么改字体_PPT做得慢怎么办?掌握这6个技巧,你也能快速做出精美的PPT...
  4. Linux加密框架 crypto 算法模板 CBC模板举例
  5. 企业实战(Jenkins+GitLab+SonarQube)_09_jenkins发布项目到测试环境
  6. linux运行程序+后注销,linux – 如果我启动后台进程然后注销,它会继续运行吗?...
  7. 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
  8. oracle锁表自动解锁,oracle 锁表,解锁,批量解锁
  9. gradle项目启动报错_如何用IDEA创建SpringBoot Gradle多项目工程?
  10. 区间选点问题(贪心)
  11. 自动生成员工号c语言,C语言课程设计级.doc
  12. 零基础如何学好Photoshop
  13. 考研数学 第6讲 中值定理
  14. oracle+获取最后一行数据库,获取表最后一条数据
  15. scrapy爬虫 出现10054错误 远程主机强迫关闭了一个现有的连接
  16. 前端常见问题以及处理方式 - - - (九) ES6中的set和map(map篇)
  17. Blinker+小爱同学+四路继电器+(RFID+舵机模拟开门)代码
  18. 机器学习必备数学知识
  19. 简单了解下什么是 Web 3.0?
  20. Android内核三大核心功能之一AMS内部原理

热门文章

  1. java中图片文件的传输及显示(Socket以及ServerSocket演示)
  2. Python 装饰器详解(上)
  3. VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决
  4. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记
  5. 修改tomcat服务器图标,修改tomcat小猫图标,设置项目的favicon图标
  6. ①你真的学会Java了吗?来自《卷Ⅰ》的灵魂提问
  7. 云场景实践研究第27期:袋鼠云
  8. [译] 想帮助用户做决定?你的APP可以这样设计!
  9. 前端请求进化之路--从form表单到JSONP
  10. 左侧固定 右侧自适应三种方法