您好,欢迎来到好兔宠物网。
搜索
您的当前位置:首页C语言程序设计P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

C语言程序设计P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

来源:好兔宠物网

视频:

P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

项目四  应用数组进行程序设计

任务一:冒泡排序

知识要点:一维数组


一、任务分析

用冒泡法对任意输入的 10 个整数进行由小到大的排序。

1.首先是定义一个一维数组包含10个元素来存放这10个整数;

2.懂得冒泡法排序的思想,利用循环的嵌套来解决问题;

3.利用这个一维数组来输出排好序的10个整数。

二、必备知识与理论

1. 认识数组

在C语言中,数组必须是静态的,没有提供动态数组的类型。也就是说,定义一个数组之后,就确定了它的维数和所容纳的同类元素的个数(即数组大小)。这就构成了数组类型的两个特点:

(1)数组大小必须是确定的,不允许随机变动。

(2)数组元素的数据类型必须相同,不允许出现混合类型。

也就是说,数组只可以处理同样类型的有限个成批数据信息。在软件设计中尤其是一维数组、二维数组应用最广。

注意:数组的维数和大小是在定义数组时就确定的,程序运行的时候不能改变。

2.一维数组的定义

数组变量也要遵循“先定义后引用”的原则。一维数组定义的一般形式为:

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

例如: int m[8];

它表示定义一个整型数组,数组名是m,数组m中有8个元素。

数组定义中要注意以下几个问题:

(1)“类型说明符”可以是任何一种基本数据类型或构造数据类型。

(2)“数组名”的命名规则和变量命名规则相同,都遵循标识符的命名规则。

(3)数组名后的常量表达式是用方括号[]括起来的,不能使用圆括号。如:int a(10);用法是不对的。

(4)“常量表达式”表示数组中数据元素的个数,即数组长度。通常是一个整型常量,符号常量也行,不能包含变量。例如在m[8]中,表示数组m有8个元素,下标从0开始一直到7,这8个数组元素分别是:m[0]、m[1]、m[2]、m[3]、m[4]、m[5]、m[6]、m[7],注意没有m[8]。若使用m[8]会出现下标越界的错误。

(5)一个数组定义语句中可以只定义一个数组,也可以定义多个数组,还可以同时定义数组和变量。

例如:double a[10],b[6];/*定义了一个有10个元素的双精度型数组a和一个有6个元素的双精度型数组b*/

char f[8],e1;/*定义了一个有8个元素的字符型数组f和一个字符型变量e1*/

3.一维数组的引用

数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。在C语言中,凡是一般简单变量可以使用的地方都可以使用数组元素。

一维数组元素的表示形式如下:

数组名[下标]

注意:在编译和执行程序时,系统不检查数组的下标是否越界,因此在编程时,要注意下标越界问题,以免发生错误。

4. 一维数组的初始化

在定义数组的同时给数组元素赋初值称为数组的初始化。

一维数组初始化的一般形式为:

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

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

(1)可以只给部分元素赋初值。没有赋初值的元素:对于数值型数组,自动赋初值为0;对字符型数组,自动赋初值为空字符。

例如:int m[8]={1,2,3,4};

定义的数组m有8个元素,但大括号内只有4个初值,这表示只给前面4个元素赋初值,后4个元素值均为0。即 m[0]=1,m[1]=2,m[2]=3,m[3]=4,m[4]=0,m[5]=0,m[6]=0,m[7]=0。

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如:给数组m中的8个元素全部赋值“2”只能用以下形式来表示:

int m[8]={2,2,2,2,2,2,2,2};

而不能为了方便写成如下的形式:

int m[8]=2;

(3)如果给全部数组元素赋初值,则在数组说明中,可以不指定数组的长度,其长度等于花括号中数值的个数。

例如:int m[5]={1,2,3,4,5};

可写为:int m[ ]={1,2,3,4,5};

(4)当花括号内提供的初值个数多于数组元素的个数时,系统编译时将会出错。

三、任务实施

本任务是用冒泡法对任意输入的10个整数进行由小到大排序。

冒泡法的算法思想是: n个数排序,将相邻两个数依次进行比较,将小数调在前面,大数放在后面,这样逐次比较,直至将最大的数移至最后;然后再将n-1个数继续比较,重复上面操作,直至比较完毕。由于排序过程类似每次将最大的数沉到下面,把小的数浮到上面,所以称为冒泡法排序,也有称为沉石子法的。

若对10个数据进行排序,则算法可以描述为:

(1)定义数组a的长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们的习惯。

(2)利用循环的嵌套来解决问题。由上面的算法分析,可以看出10个数据的数组升序排列,需要进行9趟排序。每趟的排序仅在内层循环中对数组中的数据两两进行比较,而外层循环仅说明了总共需要比较的趟数,不会处理数组中的元素。另外,根据上述问题的分析,可以看出内、外层循环变量之间的变化规律,每趟执行的内循环的次数和相应的趟数之和为定值。可采用二重循环实现冒泡法排序,外循环控制进行比较的次数,内循环找出最大的数,并放在最后位置(即沉底)。

冒泡法排序的程序代码如下:

#include <stdio.h>

main()

{                   

int a[11]; /*数组a的长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们的习惯*/

int i,j,t;

printf("input l0 numbers:\n");  /* 输出提示信息 */

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

    scanf("%d",&a[i]);  /* 设置循环语句,通过键盘将10个整数分别放到 a[1]到a[10]中*/

 printf("\n");

   for(j=1;j<=9;j++)   /* 外循环,10个数排序进行9次*/

       for(i=1;i<=10-j;i++)   /* 内循环,10-外循环次数=内循环次数 */

          if(a[i]>a[i+1])

            {t=a[i];a[i]=a[i+1];a[i+1]=t;} /*借助于中间变量t交换数据*/

          printf("the sorted numbers:\n");

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

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

 }

运行结果如下:

 input l0 numbers:

 1  0  4  8  12  65  -76  100  -45  123↙

 the sorted numbers:

-76  -45  0  1  4  8  12  65  100  123

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto1234.com 版权所有 湘ICP备2023017662号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务