数组与结构.pptVIP

  • 7
  • 0
  • 约1.17万字
  • 约 67页
  • 2017-09-25 发布于北京
  • 举报
2005-11 第2-3讲 数据组织与排序问题 数组的概念、定义和初始化 冒泡排序的算法 二维数组 字符数组与字符串 结构与结构数组 3.1 一维数组 数组 含有相同数据类型的元素的系列集合。 是同类型的组合。 某公司的职工名单列表 某班学生的考试成绩 客户及其电话号码列表 …… 例如: 要用数组变量x表示5个数字的集合(35,40,20,57,19) int x[5]; x[0] = 35; x[1] = 40; x[2] = 20; x[3] = 57; x[4] = 19; 一维数组的声明 一般形式 数据类型 数组名[数组的长度]; float score[50]; char name[20]; int num[10]; 数组名的命名规则同变量名; 数组的长度(大小)必须是一个整型数字常量或符号常量,用以表示该数组中元素的个数。 C语言中不允许对数组的大小作动态定义。 int n; scanf(%d, n); int a[n]; ×错! 数组元素的引用 数组名[数组元素的下标值] 数组的元素是由下标来区分的,下标的值可以是C的任何整型表达式的值(包括整型变量及整型常量)。 在C语言中,数组元素的下标总是从0开始的。 使用数组时,只能分别对数组的各个元素进行操作。 使用数组元素时,其下标值不得超过声明时所规定的上下界,否则运行时将出现数组越界错误。 例3-1, 数组类型的使用,将数组A的内容倒序传给数组B 一维数组的初始化 数组初始化可以在如下两个阶段进行: 编译时 运行时 编译时初始化——直接在声明数组时初始化 数组元素全部初始化 int a[3] = {1, 2, 3}; float fa[5] = {0.0}; //使数组元素全部为0 int a[3] = {1, 2, 3, 4}; ×错 在声明数组时,若对数组元素全部初始化,则数组的大小可以省略 int a[ ] = {1, 2, 3}; 可以部分初始化数组元素,即初始化的数量可以小于声明的大小。这时,剩余的元素被初始化为0 或空。 float fa[5] = {1.0, 2.0, 3.0}; char city[5] = { B}; 运行时初始化 在运行时显式地初始化数组,通常用于大数组的初始化。 也可以使用诸如scanf 之类的函数来初始化数组。 数组的存储 数组元素在内存中是顺序、连续存储的。 数组名是数组元素的内存首地址。 一维数组是按照下标的顺序连续存储的。 数组的下标是该元素到数组开始的偏移量。 例如: int A[4]; 例3-2,把有5个元素的数组用冒泡排序法按升序排列 冒泡排序法(bubble sort)—— 使较小的值像空气泡一样逐渐“上浮”到数组的顶部,而较大的值逐渐“下沉”到数组的底部。 以5个数(2,5,4,3,1)的排序过程为例 例3-3,标准偏差的计算。 在统计学中,标准偏差用来计算数据与其平均数的偏差。计算n 项标准偏差的公式如下: 其中 且 计算标准偏差的算法: 读取n 项数据(xi) 计算这些项的和与平均数 计算方差 计算标准偏差 例3-4,利用牛顿(Newton)迭代法求非线性方程 在[1,2]内的解。 牛顿迭代法的核心思想 首先寻找一个合理的初始解 x0,然后用曲线 y=f (x)在 x0处的切线与 x轴的交点 x1替代 x0,从而形成一个迭代策略。 牛顿迭代格式的推导 假设y=f (x)是某定义域内的连续可微的实函数,x* 为f (x)的零点,x0为x*附近的已知点。 过x0作曲线y=f (x)的切线,它与x轴的交点为x1,那么当x0充分接近x*时,从图中看出, x1比x0更接近x*。 如果x1不满足精度要求,可以用x1替代x0 ,重复上面的过程,从而能够形成一个算法。 利用高等数学中关于导数的几何解释,f (x)在x0处的导数f (x0)就是曲线 y =f (x)在x0处的切线的斜率,利用点斜式方程: 算法 说明: a,b分别为区间的左右端点,ε为允许误差; x0为初始解; y0 , z0分别为 x0处的函数值和导数值; x1为以x0为初值经一次迭代后得到的改进值。 1)if( f(a) 0 ) x0 = a; else x0 = b; 2) y0 = f(x0); z0 = f(x0); 3) x1=x0-y0/z0; y1 = f(x1); 4) if( |x1-x0| ε ) goto 6) 5) x0=x1; y0=y1; z0= f(x0); g

文档评论(0)

1亿VIP精品文档

相关文档