c语言第07章数组

合集下载

C语言程序设计(李圣良)章 (7)

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数组

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章:数组

《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章 数组

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语言数组

大学课件C语言数组
第3趟排序后成为:37, 48, 12, 26, 49, 64, 75, 97 第4趟排序后成为:37, 12, 26, 48, 49, 64, 75, 97 第5趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
第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语言(第七章数组)

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章-结构体与其他构造数据类型(原)

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_数组

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语言--- 数组

c语言--- 数组
例:int a[10]; a 1010 95 a[0] a[1] 定义a为一维数组,有 10个元素,都是int型。 编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)
=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)

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语言第七章

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语言程序设计第七章 利用数组处理数据

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语言程序设计(第三版)谭浩强习题与答案 第七章

C语言程序设计(第三版)谭浩强习题与答案   第七章
printf("\n");}
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语言复习题及答案第七章数组

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数组课件教程

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章数组

《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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语言对数组引用有两种形式:
相关文档
最新文档