c第07章

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目 录
7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组
数组
——数据对象的组合
数组(array)是多个同类型数据对象的组合。
一个数组汇集了多个数据——数组元素。可 从数组出发处理各元素,或以统一方式处理一 批元素(所有元素)。
下标变量
在C语言中可以有单下标变量、双下标变
例如
float a[3][2],b[2][4]; 定义两个二维数组a和b。 其中:a数组有三行两列共6个元素,分别是: a[0][0]、a[0][1]、 a[1][0]、a[1][1]、 a[2][0]、a[2][1]; b数组有两行四列,共8个元素,分别是: b[0][0]、b[0][1]、b[0][2]、b[0][3]、 b[1][0]、b[1][1]、b[1][2]、b[1][3]。
数组的赋值
• 在定义数组后数组中的各个变量自动取随 机数。 • 可以在定义数组时对数组中的全部变量或 部分变量赋值。也可以在以后的语句中为 变量赋值。 • 在定义数组时为部分变量赋值后,其他元 素为0 。
例如
int b[10]; b[1]=3; 将3赋给b[1],其他元素为随机数 。 int a[5]={3,4,5,6,7}; 将五个数依次赋给a数组 int b[10]={3,2,1,0}; 将四个数依次赋给b[0]~b[3],其他元素为0
数组的引用
• 数组元素可以出现在表达式中,也可以出 现在赋值语句中。 • 数组元素的表现形式为: 数组名[下标表达式] 例如:a[1][2]=5; b=a[1][2]*8; c[3][4-1]=9
注意 1
• 引用数组元素时,只能单个引用,不能引 用整个数组 例如:int a[5]; a={3,4,5,6,7}; 是错误的, a[5]={3,4,5,6,7}; 也是错误的
例如
定义长度为10的整型类型一维数组,并 完成以下功能: ⑴ 从键盘输入10个整数,分别存放在10个 数组元素中; ⑵ 输出数组中的各元素值; ⑶ 按逆序输出数组中的各元素值。
程序如下
main ( ) { int a,x[10]; for (a=0;a<10;a++) scanf("%d",&x[a]); for (a=0;a<10;a++) printf("%4d",x[a]); printf("\n"); for (a=9;a>=0;a--) printf("%4d",x[a]); printf("\n"); }
例如
int a[5]; 定义一个一维数组a,它有5个元素,分 别是:a[0]、a[1]、a[2]、a[3]、a[4] 。
例如
main ( ) { int i,a[5]; for(i=0;i<=4;i++) a[i]=i; for(i=0;i<=4;i++) printf("%d,",a[i]); printf("\n"); } 运行结果为:0,1,2,3,4,
字符数组的定义
类型说明符 数组名[常量表达式] 例如:char c[10];
字符数组的赋值
• 字符数组定义后,自动为所有的变量赋随机值。
• 可以在定义数组时对数组中的全部变量或部分变 量赋值。也可以在以后的语句中为变量赋值。
• 可以用以单引号界定的单个字符逐个赋给数组的 各个元素: char str[4]={„G‟,‟o‟,‟o‟,‟d‟}; • 也可以用以双引号界定的字符串常量对字符数组 初始化: char str[4]={“Good”};
程序如下 (比较法)
main ( ) { int i,j,c,t,a[10]; for (i=0;i<10;i++) { Printf(“a[%d]=“,i); scanf("%d",&a[i]); } printf("\n"); for (i=0;i<=8;i++) for (j=i+1;j<=9;j++) if (a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;} for (i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); }
排序
由键盘输入10个数,计算机按由小到大排序输出
比较排序法的解题方法: • 将10个数存入数组a • 将a(0)与a(1)、a(2)……a(9)依次比较,哪个元素 的值比a(0)小,就将它与a(0)的值交换,这样就 将最小的数送到了a(0)中。 • 再将a(1)与a(2)、a(3)……a(9)依次比较,哪个元 素的值比a(1)小,就将它与a(1)的值交换,这样 就将最小的数送到了a(1)中。 • 重复以上步骤。 • 对于m个数,比较排序法的总运行次数为: (m-1)+(m-2)+ … +3+2+1 = m * ( m-1 ) / 2 .
思考
• 若由大到小排序,应该修改哪个语句? • 若这10个数由计算机随机产生,应该如何编 写程序? 提示:随机函数 random(n)在stdlib.h头文件 中。它的功能是:产生一个不大于n的随机 正整数。
例:用冒泡法对10个数排序。
排序过程: (1)比较第一个数与第二个数,若为逆序 a[0]>a[1],则交换;然后比较第二个数与第三个 数;依次类推,直至第n-1个数和第n个数比较为 止——第一趟冒泡排序,结果最大的数被安置在 最后一个(第n个)元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使 次大的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后, 排序结束
注意 2
• 下标不要超出数组的范围 例如: int a[3][4]; a[3][4]=6; 是错误的。
数组的应用
求四个数的和. main ( ) {int a[10]; int i; for(i=0;i<=3;i++)scanf("%d",&a[i]); for(i=1;i<=3;i++) {a[0]=a[0]+a[i]; printf("%d,",a[0]);} printf("%d\n",a[0]); }

38 49 49 38 65 76 97 97 76 13 27 97 13
38 49 65 13 76 27 13 76 27 30 76
38 49 65 13
38 13 49 13 49 27
13 38 38 27 13 27 30 38 30 38 49
13 27 30 38
13 27 30
字符型数组
• 在C语言中,存储字符串必须使用字符型数组。 • 字符型数组的每个数组元素存放一个字符,存 放的是字符的ASCII码。 • 通常,一个字符串用一维字符型数组来存放, 多个字符串用二维字符型数组来存放。
• 因为存储一个字符串时,系统自动在其末尾添 加一 个结束标志 ‘\0‟(数字0)。‘\0‟不包括在字符串长 度内。所以应当留有一个数组元素来存放‘\0‟。即定 义字符型数组的长度要大于所存放的字符个数。 •如果要将字符串”How are you”置于字符数组str1中, 可定义为:char str1[12]; • 如果要将三个字符串 ”How are you”、 ”Good morning” ”Good bey” 置于字符数组str2中,可定义为:char str2[3][13]; ( Good morning是12个字符)
量和多下标变量。 下标要用方括号括起来,下标可以是常量、 变量和表达式,计算机自动取整。 如:a[5]、b[2][3]、abc1[1][5][7]等。
数组
一组同名的下标变量叫数组,数组中的 每一个变量叫做数组中的元素。它们具 有同一的数据类型。 数组必须先定义再引用
数组的定义方式
• 一维数组的定义方式为: 类型说明符 数组名[常量表达式] • 二维数组的定义方式为:
a[i]a[i+1] 输出a[1] 到 a[n]
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t;} printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
• 未获赋值的多余元素自动补空字串 \0。
例如
char a[5]={'a','b','c','d','e'}; char a[5]={"abcde"} ; char a[5]="abcde" ;
13
27
13
27
30 38 49 65
13 27 65
27 30 65 30 65
27 30 49
30 49 65
27 30 97
30 97 初 始 关 键 字 n=8
30 76 97
第 一 趟
76 第 二 趟
第 三 趟 第 四 趟 第 五 趟 第 六 趟 第 七 趟
76 97
结 果
输入n 个数给a[1] 到 a[n] for j=1 to n-1 for i=1 to n-j 真 a[i]>a[i+1]
例如
float a[ ]={5.2,9.5,7.1,3.8};
如果用int代替float,计算机将自动取整
源自文库
int c[10]={0};
将0赋给a[0]~a[9] int b[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}} int b[3][4]={1,2,3,4,1,2,3,4,1,2,3,4}; 以上两句的功能相同
说明
• 所赋的值可以是表达式。 例如:int a[][4]={{0,1},{2/2},{2,6,4}}; • 在赋值表达式中,下标可以是表达式, 计算机自动取整。 • 结果为: 0 1 0 0 • 1 0 0 0 • 2 6 4 0
例如
main ( ) {int i,a[3]; a[3/2]=1; for (i=0;i<=10;i++)printf("%d,",a[i]); printf("\n"); } 结果: 32,1,187,-22,285,1,-24,1330,-20,0,14916,
将数组中数值最小的元素排在第一位 • 将10个数存入数组a • 将a(0)与a(1)、a(2)……a(9)依次比较,哪 个元素的值比a(0)小,就将它与a(0)的值 交换,这样就将最小的数送到了a(0)中。
程序如下
main ( ) { int a,b,t,x[10]={3,5,7,9,1,2,4,6,8,0}; for (a=0;a<10;a++) printf("%4d",x[a]); printf("\n "); for (a=0;a<10;a++) if(x[a]<x[0]) {t=x[0];x[0]=x[a];x[a]=t;} for (a=0;a<10;a++) printf("%4d",x[a]); printf("\n "); }
类型说明符 数组名[常量表达式] [常量表达式]
说 明
1.数组名的命名规则和变量名相同,下标 从0开始,方括号内是元素个数。 2.方括号内的常量表达式的值必须是整型 数,不能是变量。 3· 当定义数组语句中不同时给变量赋值时, 方括号内不得为空。 4· 二维数组在内存中是按行存放的。 5· 数组不能重复定义。 6· C语言允许使用多维数组。
例如
定义长度为10的整型类型一维数组, 从 键盘输入10个整数,分别存放在10个数 组元素中,然后将数组中的元素按逆序 存放后输出其值。
程序如下
main ( ) { int a,b,c,x[10]; for (a=0;a<10;a++) scanf("%d",&x[a]); for (a=0;a<10;a++) printf("%4d",x[a]); printf("\n"); for (a=0,b=9;a<b; a++;) {c=x[a];x[a]=x[b];x[b]=c; b--;} for (a=0;a<10;a++) printf("%4d",x[a]); printf("\n"); }
相关文档
最新文档