c语言第4章

发布时间:2021-06-05

c语言

1

第4章

数 组刘培华烟台大学 计算机学院

c语言

作业与实验实验 p1401.

2

实验7: 实验7:

作业1.

习题:p136 习题:p136 一、 二、 三、 四、 2、网上提交: p139 网上提交: 五 ( 1、 3、 5、 7)2010-12-22

c语言

第4章 数组

3

本章重点介绍 :4.1 一维数组 4.2 二维数组 4.3 字符数组与字符串2010-12-22

c语言

第4章 数组

4

如何解决下面的问题? 如何解决下面的问题?

成绩高于平均分的人数? 成绩高于平均分的人数?应该注意的问题: 应该注意的问题:1. 2. 3.

定义多少个变量? 定义多少个变量? 计算一门课的平均成绩并统计 采用哪种程序结构? 采用哪种程序结构?

如何接收并保存多个成绩? 如何接收并保存多个成绩? 如何计算平均分? 如何计算平均分? 如何统计人数? 如何统计人数?2010-12-22

c语言

5

程序超过300行 程序超过300行, 300 main() 重复严重, 重复严重,但 { 无法用循环结 float score1,score2,......score140,average,number; 构。printf(“Please input the score of student:”); scanf(“%f”,&score1); printf(“Please input the score of student:”); scanf(“%f”,&score2); ...... printf(“Please input the score of student:”); scanf(“%f”,&score140); ...... }2010-12-22

c语言

数组是由相同的数据类型按照一定顺序排列的 一组变量的集合。 一组变量的集合。 是一种构造数据类型。 是一种构造数据类型。 其中的数据可以是基本类型 int,flaot,char, (int,flaot,char,…)、指针类型和结构类 型等。 型等。 其中的数组元素通过下标来引用。 其中的数组元素通过下标来引用。 适用于处理大量同类型数据。 适用于处理大量同类型数据。 占用内存中连续的存储单元。 占用内存中连续的存储单元。

6

2010-12-22

c语言

4.1 一维数组4.1.1 一维数组的定义 数组名[常量表达式 常量表达式]; 数据类型 数组名 常量表达式例如: 例如: int a[10]; float score[5]; score[5]; “数据类型”: 是数组元素的数据类型。 数据类型” 是数组元素的数据类型。 “数组名”: 数组名”: 遵循C语言标识符规则 标识符规则。 遵循C语言标识符规则。 常量表达式” 表示数组中有多少个元素, “常量表达式”:表示数组中有多少个元素,即数 组的长度。它可以是整型常量、 组的长度。它可以是整型常量、整型常量表达式 或符号常量。 或符号常量。

7

2010-12-22

c语言

4.1.1 一维数组的定义(续) 一维数组的定义(以下数组定义是正确的: 以下数组定义是正确的: #define N 10 …… float score1[N], score2[N]; int num[10+N]; char c[26]; 以下数组定义是不正确的: 以下数组定义是不正确的: int array(10); int n; float score[n]; double b['a'.. 'd']; char str[ ];

8

2010-12-22

c语言

数组在内存的存放数组下

标从0开始。 数组下标从0开始。 一维数组的数组元素 低地址 在内存里按顺序存放。 按顺序存放 在内存里按顺序存放。 数组名代表数组的首 地址, score的值 地址,即score的值 与score[0] 的地址 值相同。 值相同。 高地址score数组

9

91.5 34.5 67.5 72.084.0

score[0] score[1] score[2] score[3] score[4]

2010-12-22

c语言

4.1.2 数组元素的引用格式: 格式:

10

数组名[下标表达式] 数组名[下标表达式]例如: 例如:输入学生成绩 for(i=0;i<5 for(i=0;i<5;i++) scanf( %f" &score[i]); scanf("%f",&score[i]); 例如:fib[n]=fib[n-1]+fib[n-2]; 例如:fib[n]=fib[n-1]+fib[n下标表达式的值必须是整型表达式。 下标表达式的值必须是整型表达式。 的值必须是整型表达式

2010-12-22

c语言

4.1.2 数组元素的引用(续) 数组元素的引用(说明: 说明:下标从0开始 下界为0), 开始( ),数组的最大下标 ① 下标从 开始(下界为 ),数组的最大下标 上界)是数组长度减1。 (上界)是数组长度减 。 例如: 例如: int a[10]; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查,如果引用的数组元素 编译系统不做越界检查, 编译系统不做越界检查 超出数组范围会破坏其他变量的值。 超出数组范围会破坏其他变量的值。

11

2010-12-22

c语言

4.1.2 数组元素的引用(续) 数组元素的引用(② [ ]是下标运算符, 是下标运算符, 引用数组元素时, 引用数组元素时 数组元素 根据数组的首地址 根据数组的首地址 下标数 和下标数,计算出 该元素的实际地址, 该元素的实际地址, 取出该地址的内容 取出该地址的内容 进行操作。 进行操作。 如引用 score[2]: (1)计算 2000+2*4=2008 计算 (2)取出 取出2008的内容 取出 的内容 2000H 2004H 2008H 200CH 218CH 91.5 34.5 67.5 72.084.0score[0] score[1] score[2] score[3] score[4]

12

2010-12-22

c语言

13

#define N 140 main() { float score[N],average; int n,i; Please input score:73.5 average=0; for(i=0;i<N;i++) Please input score:97 { printf("Please input score:"); average=85.25 scanf("%f",&score[i]); average=average+score[i]; n=1 } average=average/N; n=0; for(i=0;i<N;i++) if (score[i]>average) n++; printf("average=%5.2f\nn=%d\n",average,n); }2010-12-22

c语言

4.1.3 一维数组的初始化初始化:在定义数组时给数组元素赋初值。 初始化:在定义数组时给数组元素赋初值。1.在定义数组时,对全部数组元素赋初值 .在定义数组时, 例如: 例如:int a[5]={0,1,2,3,4}; 此时可以省略数组长度,例如: 此时可以省略数组长度,例如:int a[ ]={0,1,2,3,4}; 2.在定义数组时,对部分数组元素赋初值 .在定义数组时, 例如: 例如:int a[5]={1,2,3};系统为其余元素赋 0 。 系统为其余元素赋 3.当初值的个数多于数组元素的个数时,编译

出错 .当初值的个数多于数组元素的个数时, 例如: 例如: int a[5]={0,1,2,3,4,5};

14

2010-12-22

c语言

4.1.4 一维数组应用举例

15

【例4.1】将10个人的成绩输入计算机后按逆序显示。 4.1】 10个人的成绩输入计算机后按逆序显示。 个人的成绩输入计算机后按逆序显示 #define N 10 main( ) { int i;float score[N]; for (i=0; i<N; i++) scanf("%f",&score[i]); for (i=N-1; i>=0; i--) printf("%6.1f",score[i]); } 运行情况如下: 运行情况如下:67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0

2010-12-22

c语言

【例4.2】输入5个整数,找出最大数和最小数 4.2】输入5个整数, 所在位置,并把二者对调,然后输出。 所在位置,并把二者对调,然后输出。思路: 思路: 求最大/小值采用打擂台的方法 小值采用打擂台的方法。 求最大 小值采用打擂台的方法。 定义一维数组a存放被比较的数。 定义一维数组 存放被比较的数。 存放被比较的数 定义变量max:最大值, min:最小值, 定义变量 :最大值, :最小值, k:最大值下标 , j:最小值下标 。 : : 各数依次与擂主进行比较, 各数依次与擂主进行比较, 若a[i]>max 则: max=a[i]; k=i; 否则判断: 否则判断 若a[i]<min 则: min=a[i]; j=i; 当所有的数都比较完之后, 当所有的数都比较完之后,将a[j]=max; [k]=min; ; 输出a数组 数组。 输出 数组。

16

2010-12-22

c语言

17

main( ) { int a[5],max,min,i,j,k; 程序运行情况如下: 程序运行情况如下: for(i=0; i<5; i++) 5 7 2 3 1 scanf("%d",&a[i]); 5 1 2 3 7 min=a[0]; max=a[0]; j=k=0; for (i=1; i<5; i++) if (a[i]<min) { min=a[i]; j=i; } else if (a[i]>max) { max=a[i]; k=i ; } a[j]=max; a[k]=min; for (i=0; i<5; i++) printf("%5d",a[i]); printf("\ printf("\n"); }2010-12-22

c语言

【例4.4】冒泡法排序(从小到大)。 4.4】冒泡法排序(从小到大)。以6个数:3、7、5、6、8、0为例。 个数: 为例。 第一趟排序情况如下: 第一趟排序情况如下: 375680 比较, 第一次 3和7比较,不交换 3 7 5 6 8 0 和 比较 比较, 357680 第二次 7和5比较,交换 和 比较 比较, 356780 第三次 7和6比较,交换 和 比较 比较, 第四次 7和8比较,不交换 3 5 6 7 8 0 和 比较 比较, 356708 第五次 8和0比较,交换 和 比较 在第一趟排序中, 个数比较了 个数比较了5次 在第一趟排序中,6个数比较了 次,把6个数中 个数中 的最大数8排在最后 排在最后。 的最大数 排在最后。

18

2010-12-22

c语言

冒泡法排序 (续)第二趟排序情况如下: 第二趟排序情况如下:356708 比较, 第一次 3和5比较,不交换 3 5 6 7 0 8 比较, 第二次 5和6比较,不交换 3 5 6 7 0 8 比较, 第三次 6和7比较,不交换 3 5 6 7 0 8 比较, 356078 第四次 7和0比较,交换 在第二趟排序中,最大

数8不用参加比较,其余的5 在第二趟排序中,最大数8不用参加比较,其余的5个数比 较了4 把其中的最大数7排在最后,排出7 8。 较了4次,把其中的最大数7排在最后,排出7 8。 以此类推: 以此类推: 第三趟比较3 第三趟比较3次,排出 6 7 8 第四趟比较2 第四趟比较2次,排出 5 6 7 8 第五趟比较1 第五趟比较1次,排出 3 5 6 7 8 最后还剩下1个数0 不需再比较,得到排序结果: 最后还剩下1个数0,不需再比较,得到排序结果: 035678

19

2010-12-22

c语言

冒泡法排序 (续)从上述过程可以看到: 个数要比较n 从上述过程可以看到:n个数要比较n-1趟,而 在第j趟比较中,要进行n 次两两比较。 在第j趟比较中,要进行n-j次两两比较。 for (i=0; i<N; i++) 输入a[i] 输入 for (j=1;j<N; j++) for (i=0; i<N-j; i++) a[i]>a[i+1] T a[i]与a[i+1]交换 与 交换 输出a[0]~a[N-1] 输出冒泡法排序

20

F

2010-12-22

c语言

21

#define N 6 main( ) { int a[N]; 程序运行情况如下: 程序运行情况如下: 3 7 5 6 8 0 int i,j,t; 0 3 5 6 7 8 for (i=0; i<N; i++) scanf("%d",&a[i]); for (j=1; j<=N-1; j++) /*控制比较的趟数 */ j<=N控制比较的趟数 for (i=0; i<N-j; i++) /*两两比较的次数 */ i<N两两比较的次数 if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; } printf("The sorted numbers: \n"); …… }2010-12-22

    精彩图片

    热门精选

    大家正在看