c语言第07章数组
C语言程序设计(李圣良)章 (7)

一般形式如下:
struct
{
成员列表;
}变量名列表;
例如,可以直接定义结构体变量st1、st2:
struct
{
char id[9];
/* 学号 */
char name[10];
/* 姓名 */
char sex;
/* 性别 */
int age;
/* 年龄 */
float score;
/* 成绩 */
}st1,st2;
型变量x和y表示点的x坐标和y坐标。
# include <stdio.h>
# include <math.h>
struct point
/* 点 */
{ float x;
/* x坐标 */
float y; /* y坐标 */
};
main()
第7nt p1;
float l;
采用定义变量的方式来定义数据成员。
第7单元 结构体和共用体 (4) 结构体类型定义必须以分号结束。 例如,根据图7-1的分析可以设计结构体类型如下:
struct student
{
char id[9];
char name[10];
char sex;
int age;
float score;
};
/* 学号 */ /* 姓名 */
\n",tomor.year,tomor.month,tomor.day); }
第7单元 结构体和共用体 图7-3 例7-1程序运行结果
第7单元 结构体和共用体 3. 结构体变量的初始化 在结构体变量定义的同时可以为其整体赋初值,方法与数
组的初始化相似,将各个数据成员的值按声明类型时的顺序依 次排列,使用逗号间隔,全部放在大括号中,整体赋值给变量。 例如:
C语言板书7数组

7
4. 可在定义时对 静态数组 和 外部存储(全局)数组 赋初值, 方法如下: 赋初值 方法如下 对全部元素赋初值 int a[10] ={10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; 对部分元素赋初值 int a[10]={0,1,2,3,4}; 如此,只有前 个元素初值确定,后 个元素由系 只有前5个元素初值确定 如此 只有前 个元素初值确定 后5个元素由系 统设置. 统设置.
10
7.1.3 一维数组的应用 数列. 例:求Fibonacci 数列. 定义数组,并赋初值 定义数组 并赋初值 int f [20]={1,1}; 用循环for实现 用循环 实现: 实现 for (i=2; i<20; i++) f [i]=f [i –2]+f [i –1]; 注意:下标越界问题 注意 下标越界问题:i =2且i<20 下标越界问题 且
5
§7.1 一维数组
7.1.1 一维数组的定义 形式: 数组名[ 形式 类型说明符 数组名 常量表达式]; 例: int a [20]; float x [100]; 1. 数组名的确定方法同变量名. 数组名的确定方法同变量名. 2. C语言用方括号 ]表示数组元数个数. 语言用方括号[ 表示数组元数个数. 语言用方括号 表示数组元数个数
29
二维数组一般用二重循环 有一个3× 的矩阵 的矩阵, 例2. 有一个 ×4的矩阵,要求编程序求出其中值 最大的那个元素的值,以及所在的行号和列号. 最大的那个元素的值,以及所在的行号和列号. 先用N- 流程图表示算法 先用 -S流程图表示算法
1
for循环
表达式1只执行一次 表达式3的执行时间在循环体最后,在循 环中每次都要执行. 正常循环结束时,循环变量的值为最后 一次进入循环的值加或减步长. 正常非循环结束时,循环变量的值为最 后跳出循环时的值.
《C语言程序设计基础与实训教程》第7章:数组

/webnew/
7.1.4 一维数组的应用举例
例7.5 将数组中的数按颠倒的顺序重新存放。要求,在操 作时只能借助一个临时存储单元而不能另外开辟数组。 分析:题目要求是按颠倒的顺序重新存放数据,而不是按 逆序输出。 可以使用两个变量i和j,i和j的初值分别为0和9,将a[i] 与a[j]对调,然后i++,j--,接着再将a[i]与a[j]对调。如些 重复操作,直到i>=j时,对调完成。 程序
分析:该数组元素的值是有规律的序列, ( 从 开始算起 开始算起) 分析 : 该数组元素的值是有规律的序列 , 第 i(i从0开始算起) 个 元素的值为: 元素的值为:10+2*i。 。 输出该数组时,由于该数组有30个元素,在一行中输出不太美观, 输出该数组时,由于该数组有 个元素,在一行中输出不太美观, 个元素 所以,这里我们选择每行输出6个元素。 所以,这里我们选择每行输出 个元素。 个元素
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
/webnew/
7.1.3 一维数组元素的引用
注意: (1)数组元素的引用方式与数组说明符的形式非常相近,都是 “数组名[表达式]”形式,但两者的意义完全不同。 出现的位置不同。定义数组时,“数组名[表达式]”出现在 定义语句中,表示的是定义了一个名为“数组名”的数组,表达式的值 表示该数组中所包含元素的个数。作为数组元素的引用方式时,“数组 名[表达式]”出现在其它执行语句中,表示是数组中的下标为“表达式” 值的那个元素。 表达式的格式不同。定义数组时,“表达式”必须为常量表 达式。作为数组元素的引用方式时,表达式可以变量、常量或函数构成 的合法C表达式。 (2)在C语言中,起始下标规定为0,最大值应为:数组长度-1。 如果发生了下标越界的现象,可能破坏了其它存储单元的数据,甚至破 坏程序代码。 (3)下标必须是整型表达式,若为小数,则自动取整。如a[2.6] 系统自动默认为a[2]。
C语言基础 第7章 数组

一维数组: float mark[100];
低地址
每个数据元素占用 的字节数,就是基
类型的字节数 一个元素占4个字节
高地址
86.5 mark[0]
92.0 mark[1]
77.5 mark[2]
52.0 mark[3]
.
.
.
.
.
.
94.0
mark[99]
第7章 数组
7.1.2 一维数组的初始化 ❖ 初始化:在定义时指定初始值,编译器把初值
例:int a[10] = {0,1,2,3,4}; 仅前5个元素赋初值,后5个元素自动赋为0。 3、全部元素均初始化为0,不允许简写。 int a[10] = {0,0,0,0,0,0,0,0,0,0}; 不能写成:int a[10]={0*10};
第7章 数组
❖ 不能简写为:
❖ static int a[10] = {0*10};
第7章 数组
❖ 注意: 2)C语言不允许对数组的大小做动态定义, 如:
❖ int n;
❖ scanf("%d",&n);
❖ int a[n]; ❖ 因为在编译时,C编译器根据已知数组大
小分配内存。//只针对全局变量
❖ 说明:
1)数组名:按标识符规则。本例a就是数 组名。
2)整型常量表达式:表示数组元素个数 (数组的长度)。可以是整型常量或符 号常量,不允许用变量。整型常量表达 式在说明数组元素个数的同时也确定了 数组元素下标的范围,下标从0开始~整 型常量表达式-1(注意不是1~整型常量 表达式)。
7.1.3 数组元素的引用
❖ C语言规定,不能引用整个数组,只能逐 个引用元素,元素引用方式:
大学课件C语言数组

第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);
C语言(第七章数组)

对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
C语言讲义第07章-结构体与其他构造数据类型(原)

atoi(char*str);将数字字符串转换为整型。
atof(char*str);将数字字符串转换为双精度的 实型。 atol(char*str);将数字字串转换长整型。 使用上述函数,要包含头文件"stdlib.h"。
7.1 结构体
• 例7-1类型转换函数在结构体变量数据输 入中的应用示例。定义结构体类型及变 量,输入一个学生的有关信息并输出。 例7-1源程序
7.1 结构体
结构体变量一旦进入其作用域,系统便根据结构体类 型定义时成员排列的先后,自动为结构体变量的每一 个成员分配相应的存储空间。结构体变量的各个成员 均有自己的存储空间,结构体变量所占存储空间的大 小为各成员所占空间之和。 例如:student1 所占空间大小为:8 + 10 + 1+ 4 * 2 = 27(字节)。
例如:指针变量p1,p2指向结构体变量x。
p1 = p2 = &x; 例如:通过结构体指针p1和p2来引用结构体变量x成员。以下三种 方式是等价的。 x.no、、x.score[0] p1->no、p1->name、p1->score[0]
(*p2).no、(*p2).name、(*p2).score[0]
7.2 结构体数组的定义和引用
• 结构体数组的输入与输出一般在循环结构中进行, 一次循环可以输入或输出一条结构体记录。 • 例7-3定义一个结构体数组用于存储和显示三个学 生的基本信息。
例7-3源程序
• 程序运行结果如下:
no. 06030217 06050105 06010116 name zhang san li si wang wu sex m m f age 19 18 18 depart Economy & Commerce engineering Computer science
chap07_数组

数组长度为常量
int a[10];
定义一个含有10个整型元素的数组 a
char c[200];
定义一个含有200个字符元素的数组 c
float f[5];
定义一个含有5个浮点型元素的数组 f
2、数组的内存结构
int a[10]; 假设系统规定int类型占用2个 字节,则对于数组a,其内存 分配形式 只要知道了数组第一个元素的 地址以及每个元素所需的字节 数,其余各个元素的存储地址 均可计算得到。
a[0]=1, a[1]=2,...… a[9]=10
静态数组、动态数组的初始化
static int b[5] = {1, 2, 3, 4, 5}; 静态存储的数组如果没有初始化,所有元素自动赋0 static int b[5]; 动态存储的数组如果没有初始化,所有元素为随机值 auto int c[5]; 等价与 int c[5];
例 7-2 计算fibonacci数列
用数组计算fibonacci数列的前10个数,并 按每行打印5个数的格式输出。
1, 1, 2, 3, 5, 8, 13, …… 用数组计算并存放fibonacci数列的前10个数 f[0] = f[1] = 1
f[n] = f[n-1] + f[n-2]
2≤n≤9
#include <stdio.h> int main(void) { int i; int fib[10] = {1, 1}; /* 数组初始化 */ 1 1 for(i = 2; i < 10; i++) 8 13 fib[i] = fib[i - 1] + fib[i - 2]; for(i = 0; i < 10; i++){ printf("%6d", fib[i]); if((i + 1) % 5 == 0) /* 5个数换行 */ printf("\n"); } return 0; }
c语言--- 数组

=10×2
数组名表示数组所 1012 在内存首地址也是 a[0]的地址,是地 1014 址常量 :
1028
80
66 :
第7章 数 组
引言
一维数组 二维数组 字符数组与字符串
7.1 引言
一、数组的引入 为了便于处理一批类型相同的数据,引入了数组类型.
例:某班有40名学生,求该班成绩的平均分
#include <stdio.h> main( ) { int j , sum , s ; float ave ; sum=0; for(j=1; j<=40 ; j++) { scanf(“%d”,&s); sum=sum+s; } ave=sum/40; printf(“ave=%f”,ave); } 假设现在要保存每个学 生的成绩,那就需要40个变 量,但这样一来输入、输出、 计算都会变得繁琐,若成千 上万数据,显然不合适。 在这种情况下,我们可以 使用数组类型,声明一个数 组含有40个整型元素,每个 数组元素存放一个成绩,这 样,成绩的输入、输出、计 算就可通过循环来实现.
• 如果要对n个数据排序,就需要进行n-1轮的比较,每次都对相 邻两个数进行比较,将较大的数交换到后一个元素中。每1轮 的比较都找出未排好的数据中的最大数放在这几个数的后面。 • 例如,第1轮需要比较n-1次,在n个数中找出最大数放在数组 的最后1个元素中;
• 第2轮将对剩下的前n-1个数进行比较,需要比较(n-1)-1次,将 前n-1个数中的最大者放入数组的倒数第2个元素中; • ……以此类推,第n-1轮需要进行1次比较,将剩下的2个数中 的较大者放入a[1]中,将最小的数放入a[0]中。 • 当第n-1轮比较进行完后,所有的数据都按照升序在数组中排 列。
c语言 第7章 数组(4)

void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。
C语言第七章

4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?
C语言程序设计第七章 利用数组处理数据

一维数组的存储: 计算机中用连续的内存单元存放各个元素。 如:int a[5];其内存存储为:
保存数组所需内存量与数组元素的基本类型和数组大小有关。 总字节数=sizeof(基本类型)*数组元素个数 如上例:= sizeof(int)*5 第i个元素的地址=第1个元素的地址+i*sizeof(基本类型)
类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号 间隔。 例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
整理课件
C语言对数组的初始化赋值还有以下几点规定:
有 5个元素。但是其下标从0开始计算。因此5个元素分别为
a[0],a[1],a[2],a[3],a[4]。
不能在方括号中用变量来表示元素的个数, 但是可以是符
号常数或常量表达式。
例如:
#define FD 5
main( )
{ int a[3+2],b[7+FD];
……
}是合法的。
但是下述说明方式是错误的。
for (i=0; i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); return 0; }
使a[0]~a[9]的值为0~9 先输出a[9],最后输出a[0]
整理课件
一维数组的初始化
数组初始化赋值是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为:
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}
C语言程序设计(第三版)谭浩强习题与答案 第七章

7.6打印出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ Байду номын сангаасf(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
c语言复习题及答案第七章数组

第七章数组(8学时)学习目的与要求:1、 重点掌握一维数组的定义和引用;2、 基本掌握二维数组的定义和引用;3、 重点掌握字符型数组的定义与引用;4、 能正确使用字符串处理函数;5、 学会使用数组解决实际问题。
重点:1、 一维数组的定义与引用;2、 二维数组的定义与引用;3、 字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[常量表达式];(1) (1)数组名后必须用方括弧[],用其他括弧均错误 ;(2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;二、填空题1、下面fun 函数的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。
请填空。
fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2j } while(x); }( 1996 年 4 月) 2 22、以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相2、一维数组的引用:数组名[下标r ■」 \ for ( i =0 ; i<7 ; i printf((2)将整个字符串一次输入输出,用格式符 如^ chaLG1f10]; scanf (“ %s ” , c1); int num[N];(2003 年 9 月)25、有以下程序main (){ char a[ ]={ ‘a ' , ‘b ' , ‘c ' , ‘d ',i=sizeof(a); j=strle n( a);printf( “%d,%d b ” i,j);} 程序运行后的输出结果是()。
A ) 9,9B )8,9(2002 年 9 月) 21、C 22、C 23、D 24、B 25、D “ %c , c1[ i ]); %s ; 100]; D) int N=100; e ' , ‘f ' , ‘g ' , ‘h ' , ‘ 0' }; int i,j; C ) 1, 8 D ) 9, 8同字符的ASCII码之差。
C语言7数组课件教程

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
13
C 程序设计
第7章 数组
§遍历所有二维数组元素a[n][m] for(i=0;i<n;i++) for(j=0; j<m; j++) {
printf(“%d”,a[i][j]); }
14
C 程序设计
6
a[0]1例[0] ai[n0t]0a[[12]][a3[0]=0][{2{]1a,2[1}4],{[04]}}a;[15][1] a[10][2]
a[0111][0] a[0222][1] a[3034][2] a[4140][0] a[5150][1] a[6100][2]
aaa[[[000]]][[[1000]]] aaa[[[000]]][[2[111]]] aaa[[[000]]][0[[222]]] aaa[[[111]]][4[[000]]] aaa[[[111]]][0[[111]]] aaa[[[111]]]0[[[222]]]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[10]1[43] 9 11 13 15
a[2] a[2210]71[06] a2[210]91[81] a2[220]12[02] a2[220]32[23]
每个元素a[i]由包含4个元素 的一维数组组成
输出:max和row,colum
colum = j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum); 16
《C语言程序设计》第7章数组

{temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; }; printf("\nthe result of sort:\n"); /*输出排序后的数据*/ for(i=0; i<NUM; i++) printf("%d ",data[i]);
}
7.2 2维数组的定义和引用
1 0 0 0
int a[3][4]={{1},{0,6}, {0,0,11}}; 0 6 0 0
0 0 11 0
int a[3][4]={{1},{5,6}};
1 0 0 0 5 6 0 0 0 0 0 0
int a[3][4]={{1},{}, {9}};
1 0 0 0 0 0 0 0 9 0 0 0
(1)首先将相邻的A[1]与A[2]进行比较,如果 A[2]的值小于A[1]的值,则交换两者的位置, 使较小的下沉,较大的上浮;接着比较A[2]与 A[3],同样使小的下沉,大的上浮。依此类推, 直到比较完A[n-1]和A[n]后,A[n]为具有最大排 序码(数值)的元素,称第一趟排序结束。
(2)然后在A[1]~A[n-1]区间内,进行第二趟排
7.3.2 字符数组的初始化
字符数组的初始化,可以通过为每个数 组元素指定初值字符来实现。
如:
char c[10]={‘I’,’□’,’a’,’m’,’□’,’h’,’a’,’p’,’p’,’y’};
char c2[ ]={‘c’,’h’,’i’,’n’,’a’}; char d[2][3]={{‘□’,’*’,’□’},{‘*’,’□’,’*’}};
x x[0] —— x[0][0] x[0][1] x[0][2] x[0][3] x[1] —— x[1][0] x[1][1] x[1][2] x[1][3] x[2] —— x[2][0] x[2][1] x[2][2] x[2][3]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该语句执行: num[0]=1;num[1]=2;num[2]=3;num[3]=0;num[4]=0;
数组
注意:
放在{ }内的初始数据个数不一定要与数组大小一致。所以: 如果初始化数据个数少于数组元素的个数,剩余元素将被自动 初始化为0。因此可以采用语句 int cj[10]={0};将数组cj的元 素初始化为0。 特别地:数组的元素不能自动初始化,程序设计人员至少要将 第一个数组元素初始化为0才能使所有剩余元素自动被初始化为0。 如果初始化数据过多,会出现一条警告信息。
for (i=0;i<=SIZE-1;i++) if(a[i] == x)break; if (i< SIZE) printf(“%d,poster is %d\n”,x,i); else printf(“no find %d \n”,x); } 演示6_2.C
数组
【例13】已知一维数组中存放10个互不相同的整数,从键盘输入 一个数,并从数组中删除与该值相同的元素中的值。 #include<stdio.h> 说明: 做删除操作时,首先要 #define SIZE 10 找到删除元素的位置, main() 找到后,立即用break语 {int a[SIZE]={1,2,35,6,39,47,53,4,5,10}; int i,j,x; 句推出循环并进行删除 for (i=0;i<SIZE;i++) 操作,删除操作实质是 printf(“%4d”,a[i]); 把一些数组元素向前移 printf(“please enter a x:\n”); 动一位。最后一位的删 scanf(“%d”,&x); 除不必移位,直接输出 for (i=0;i<SIZE;i++) 前size-1位。 if(a[i]= =x)break; for (j=i;j<SIZE-1;j++) a[j]=a[j+1]; for (i=0;i<SIZE-1;i++) printf(“%4d”,a[i]); printf(“\n”); } 演示6_3.C
num[0] num[1] num[2] num[3] num[4]
该语句执行后: num[0]=1;num[1]=2;num[2]=3;num[3]=4;num[4]=5;
数组
注意:
如果在定义一维数组的同时给出全部元素的初始值,则数组 长度可以省略。C 语言编译系统将自动根据初始化数据的个数来 确定数组的长度。数组元素的个数就是初始化数据列表中数据的 个数。例如:int a[ ]={1,2,3,4,5};编译系统将确定数组a 的 长度为5。 2)对数组的部分元素赋初值。 例如: int num[5]={1,2,3} ; num 1 2 3 0 0 num[0] num[1] num[2] num[3] num[4]
数组
【例9】: int a[2]; scanf(“%d%d”, &a[1],&a[2]); ——??
错误: 在C语言中数组元素的下标由 0开始,一个数组的下标的合 法范围在0~n-1,因此该题正确的写法是: int a[2]; scanf(“%d%d”, &a[0],&a[1]);
【例10】:int a[10]; float i=3; a[i]=10; ——?? 错误: 数组元素是通过数组名[下标]来访问的,其中下标必须是 大于0的整数、整型变量或整型表达式,在这段程序中,i是浮 点数,不能做数组元素的下标。
数组元素名 指定该数组 的数据个数 数组长度 cj[0] cj[1] cj[2] ……………………cj[9] cj[10] 数组名: 数组中的所有元素具有相同的名字cj。
数组
使用下标的优点?
由于有了下标,元素在数组中的位置(或者说是排列顺序)就 被唯一的确定下来。我们采用数组名+[下标]就可以准确访问到数组 中的每一个元素。 如图所示: cj[0]代表cj数组中的第一个元素。cj[9]代表cj数组中的第十个元 素。一般地: cj[i-1]引用了数组cj的第i个元素。C语言是一个有 趣的语言,它喜欢从0开始计数,而不是从1开始,所以这10个元素 的编号是从0到9。
数组
什么是数组???
这些数据称为 数组元素
就是一组具有固定数目的、有序的、类型相同的数据 的集合。根据数组下标的多少,数组可以分为一维数组和 多维数组。
车厢号10
…
车名
车厢号2 车厢号1
火车
数组
一个数组就是一组连续的内存空间,用来保存数据, 数组中的每一项称为一个元素。
用于访问的、具有相 同的数据类型。在程 序设计中相当于变量 名的用法。 为标识数组中的每个 元素,C语言对其进 行编号。这个编号称 之为数组元素下标。 (C语言规定下标从0 数组元素下标 开始)。
C语言程序设计
数组
学习目标:
数组是程序设计语言中最基本、最重要的组成 部分。在本章中将学习数组的特点和使用方法,并 通过典型例题学习数组的一般应用。
• 清楚数组的基本概念 • 理解数组的声明、初始化及引用方式
• 学会数组的编程
数组
数组是C语言中较为简单和常用的一种构造型的数据类型。
用变量来解决: 例如: #include <stdio.h> 计算10个同学 main() 的成绩:计算 { float cj1,cj2,cj3, …cj10; /*定义10个变量*/ 平均成绩、打 float pj; 印低于平均成 scanf(“%f”,&cj1); /*输入10个数据*/ 绩的同学成绩。 scanf(“%f”,&cj2); … scanf(“%f”,&cj10); pj=cj1+cj2+…+cj10; pj=pj/10; /*求平均值*/ /*打印低于平均成绩的同学成绩*/ if (cj1<pj) printf(“%f\n”,cj1); if (cj1<pj) printf(“%f\n”,cj2); … if (cj1<pj) printf(“%f\n”,cj10); }
1)对整个数组的引用;只给出数组名即可。
2)对数组元素的引用;需要给出数组名[下标]的形式。 可以是整型常 量、整型变量 或整型表达式 数组元素的引用类似于单个变量,可以自由存取。但是它与一 般变量相比有以下几个特点: 1. 数组元素是通过数组名加上该元素在数组中的位置(既数组元素 下标)来访问的。例如:a[3]代表的是数组a的第4个元素。其中 下标是整数或整型表达式。
数组
【例11】:指出并改正下列程序段中的错误。 (1)#define SIZE 100; (2)正确 (2)int b[10]={0} ,i; (3)for (i=0;i<=10;i++) b[i]=1; (4)SIZE=10; (1) 错误:使用了“;” 改正:去掉“;”
(3) 错误:引用了越界元素b[10]; 改正:循环控制最终值为9。
(4)数组说明中的数组长度说明,在以下两种情况下不必或不能 予以说明:一种情况是数组作为函数的参数,在函数的参数 说明部分不必予以说明;第二种情况是在定义数组时,如果 直接对数组进行初始化赋值,则可以省略长度说明,数组的 长度由所赋初值的个数决定。
数组
(2)一维数组的初始化
在声明数组的同时可以对数组进行初始化赋值,其方法是将初 值放在定义中的{}内,初值相互之间“,”隔开。并用“=”将其赋给 数组。 1)对数组的全部元素赋初值。 例如: num 1 int num[5]={1,2,3,4,5}; 2 3 4 5
数组
2. 数组元素的下标是由0开始的,因此一个数组a[n]的合法下标范 围是0~n-1。 使用时超过这个范围的下标访问元素将得到数组 有效元素之外的一个随机值。例如:a[-1];a[n]等。 但是C语言编译系统不检查数组下标的越界的错误。所以在编程 时要注意避免这类问题发生。 常见的错误就是引用了超出数组范围的数组元素。 3. 数组元素的赋值是逐个元素的进行,不允许将一个数组作为一个 整体赋值给另外一个数组。例如:int a[3],b[5];语句 b=a; 的赋值方式是错误的,除了数组初始化外,也不允许采用在{} 中列表的方式对数组元素整体赋值。 例如:int a[5]; a={1,2,3,4,5};是错误的。 但: int a[5] ={1,2,3,4,5};是正确的。 4. 数组名num代表的是数组num在内存中的首地址,因此可以用数组名 num来代表数组元素num[0]的地址。 scanf(“%d”,&num[0]); scanf(“%d”,num);
初始化数据元素的个数允许少于数组的长度;但不 能多于数组的长度。 常见错误:
在应该对数组元素初始化时忘记了数组元素的初始化。从而导 致运行结果出错。
数组
【例6】:int a[ ]; ——?? 错误: 只有在进行初始化的数据说明是才 能允许省略长度。在仅进行说明而 没有初始化数据时,不能省略长度。 因为编译系统无法知道这个数组的 究竟有多大。
C语言的数组有两个特点:
(1)数组的个数必须确定,不允许变动,但数组元素的 值可以改变; (2)数组元素的类型必须是相同的,不允许混合的。
数组
一维数组:只有一个下标的数组。
(1)一维数组的定义 格式: 类型说明符
指明数组中每个 元素的数据类型
数组名[常量表达式];
数组大小: 指明数组中所包含 的元素的个数
【例7】:float f[10]={1.1,2.2}; ——?? 可以: 初始化数据的个数允许少于数组长 度,此时,未被初始化的数据部分 将被编译系统自动请0。语句执行 后:f[0]=1.1;f[1]=2.2; f[2]=f[3]=…=f[9]=0;
数组
(3)一维数组的引用
C语言对数组引用有两种形式: