上机说明 TSINGHUA UNIVERSITY PRESS 穷举:列举所有可能情况,逐个测试,如求完数 递推:从已知出发,利用递推公式向未知靠拢,如 Fibnacci数列 for(n=1;n<=1000;n++) sum=0 注意(循环) fl=1;f2=1 for(i=l; i<n; i++ 变量初值, 输出f1f2 n%i=0 语句位置 边界分析 for(i=1;i<=19;i++) sum+ fl=fl+n2 sumEn 数据类型 22=f2+f1 输出f1f2 拾出m for(i=l; i<n; i+ mol 出i eC语言程序设计(第三版)htt: ccf. tsinghua. edu.cn
C语言程序设计(第三版) http://ccf.tsinghua.edu.cn 1 上机说明 穷举:列举所有可能情况,逐个测试,如求完数 递推:从已知出发,利用递推公式向未知靠拢,如Fibnacci数列 for(i=1;i<=19;i++) f1=f1+f2 f2=f2+f1 输出f1 f2 输出f1 f2 注意 f1=1;f2=1 (循环) 变量初值, 语句位置, 边界分析, 数据类型 for(n=1;n<=1000;n++) for(i=1;i<n;i++) n%i==0 Y N sum+=i sum=0 sum==n Y N 输出m for(i=1;i<n;i++) m%i=0 Y N 出i
综合实验:子函数一迭代 K PRESS 法1:输入x1,计算x2,进行迭代,直到相邻两项很接近 法2:输入x1,计算x2,当相邻两项不接近时进行迭代 为x1赋初始迭代值 为x1赋初始迭代值 X2=f(x1) x2=f(X1 XI=x2 while( fabs(x1-x2 >1e-6) x2=f(x2) x1=f(x2) while(fabs(x1-x2)>1e-6 x2=f(XI 输出x2 输出x2 思路要清晰,注意(循环)变量初值,注意迭代步长 eC语言程序设计(第三版)htt: ccf. tsinghua. edu.cn2
C语言程序设计(第三版) http://ccf.tsinghua.edu.cn 2 综合实验:子函数--迭代 法1:输入x1,计算x2,进行迭代,直到相邻两项很接近 while(fabs(x1-x2)>1e-6) x1=f(x2) x2=f(x1) x2=f(x1) 为x1赋初始迭代值 输出x2 思路要清晰,注意(循环)变量初值,注意迭代步长 while(fabs(x1-x2)>1e-6) x1=x2 x2=f(x2) x2=f(x1) 为x1赋初始迭代值 输出x2 法2:输入x1,计算x2,当相邻两项不接近时进行迭代
二分法说明 TSINGHUA UNIVERSITY PRESS 方法1:输入两边界点,直到函数值异号。“计算中点与中点 值,用中点替换函数值与其同号的端点”,直到中点值接近零 方法2:输入两边界点,当同号时重新输入.当中点值不接近零时 “用中点替换函数值与其同号的端点,再计管中点与中点值” 输入x1与x2 输入x1与x2,计算y1,2 当yy2>0 yl=f(x1)’y2=f(x2)yl 输入x1与x2 直到yl*y20 while (fabs(yo>le-6) yoyo>0 x1=x0,y1=v0x2=x0,y2=y0 while(fabs(yo)>le-6) x1=x0, y1=y0 x2=X0, y2=y0 输出x0 x0=(x1+x2)/2,y0=f(x0 拾0 注意(循环)变量初值与循环类型的选择 eC语言程序设计(第三版)htt: ccf. tsinghua. edu.cn3
C语言程序设计(第三版) http://ccf.tsinghua.edu.cn 3 二分法说明 方法1:输入两边界点,直到函数值异号。“计算中点与中点 值,用中点替换函数值与其同号的端点”,直到中点值接近零 方法2:输入两边界点,当同号时重新输入.当中点值不接近零时, “用中点替换函数值与其同号的端点,再计算中点与中点值” 直到y1*y21e-6) y1=f(x1),y2=f(x2) y1 输出x0 y1*y0>0 Y N x1=x0,y1=y0 x2=x0,y2=y0 x0=(x1+x2)/2,y0=f(x0) 输入x1与x2 while(fabs(y0)>1e-6) x0=(x1+x2)/2,y0=f(x0) 输出x0 y1*y0>0 Y N x1=x0,y1=y0 x2=x0,y2=y0 x0=(x1+x2)/2,y0=f(x0) 当y1*y2>0 y1=f(x1),y2=f(x2) 输入x1与x2 输入x1与x2,计算y1,y2 注意(循环)变量初值与循环类型的选择
清华大学出版社 TSINGHUA UNIVERSITY PRESS 第七章
第七章
清华大学出版社 TSINGHUA UNIVERSITY PRESS ●引言 实际问题中常需处理同一类型的大批数据,如1000 个学生的成绩。每个成绩用一个变量存储则需定义的变 量过多,使用不方便 C语言引入数组,借助数组可以用名相同、下标不同 的变量表示同类型的大批数据,如S[们代表1号学生的 成绩,S[2]代表2号学生的成绩 用一组具有相同名字、不同下标的变量表示具有同 种类型的一组数据,这就是数组,如ints1000] 每个人3门课,则用s[T][1],s[1][2],s[1][3]s[2]1] ,根据下标个数分一维数组与多维数组
⚫引言 实际问题中常需处理同一类型的大批数据,如1000 个学生的成绩。每个成绩用一个变量存储则需定义的变 量过多,使用不方便 C语言引入数组,借助数组可以用名相同、下标不同 的变量表示同类型的大批数据,如s[1]代表1号学生的 成绩,s[2]代表2号学生的成绩 用一组具有相同名字、不同下标的变量表示具有同 种类型的一组数据,这就是数组,如int s[1000] 每个人3门课,则用s[1][1], s[1][2], s[1][3],s[2][1]… ,根据下标个数分一维数组与多维数组
清华大学出版社 TSINGHUA UNIVERSITY PRESS ●主要内容 7.1一維数组定义、引用、初始化和举例 7.2二维数组定义、引用、初始亿和举例 7.3字符数组定义、引用、初始化和举例 关键:数组的相关算法
⚫ 主要内容 7.1 一维数组定义、引用、初始化和举例 7.2 二维数组定义、引用、初始化和举例 7.3 字符数组定义、引用、初始化和举例 关键:数组的相关算法
清华大学出版社 TSINGHUA UNIVERSITY PRESS §7.1.1一维数组的定义 类型说明符数组名[常量表达式]; 例如:inta10; float b8],c[9 1)数组元素按顺序存储在一片连续的内存单元中,数 组名代表存储区域起始地址,即第一个“元素”地址 2)常量表达式不能包含变量,长度必须大于0 如intn; scant(w%d",&n);inta[n];不可,但可用 符号常量,如# define n10; int a n|;
类型说明符 数组名[常量表达式]; 例如: int a[10]; float b[8],c[9]; § 7.1.1一维数组的定义 1)数组元素按顺序存储在一片连续的内存单元中,数 组名代表存储区域起始地址,即第一个“元素”地址 2)常量表达式不能包含变量,长度必须大于0。 如 int n; scanf(“%d”,&n); int a[n]; 不可,但可用 符号常量,如#define N 10; int a[N];
清华大学出版社 TSINGHUA UNIVERSITY PRESS §7.1.2一维数组元素的引用 数组名[下标] 如:inta[3];a[1]=80; printf(w%d〃,a[1]) double b[3]; scanf(%1fm,&b[1]) 1)a[i]相当于一个变量,可赋值或输入,而数组名是地址 常量,不能被赋值 2)数组元素的下标从零开始,到N-1结束。如对inta[3] ,数组元素为a[0],a[1],a[2];而a[3]越界 3)C编译系统对数组不作下标越界检查,但越界操作会破 坏数组存储区域外的程序或数据,易造成程序出错,甚 至系统崩溃。如 scanf(“%d”,&a[3]);
数组名[下标] 如:int a[3];a[1]=80;printf(“%d”,a[1]); double b[3];scanf(“%lf”,&b[1]); § 7.1.2一维数组元素的引用 1)a[i]相当于一个变量,可赋值或输入,而数组名是地址 常量,不能被赋值 2)数组元素的下标从零开始,到N-1结束。如对int a[3] ,数组元素为a[0],a[1],a[2];而a[3]越界 3)C编译系统对数组不作下标越界检查,但越界操作会破 坏数组存储区域外的程序或数据,易造成程序出错,甚 至系统崩溃。如scanf(“%d”,&a[3]);
清华大学出版社 UNIVE 例7.1定义10元素的整型数组,元素0-9,之后逆序输出 #include stdio. h> 注意访问数组元素时 VO id main 循环变量开始和结束条 件的表示 int i, a [10] 定义之后,不能通过数 for(i=0;i=0;i-) a={1,2,3} printf("%d", a [i]); printf ( %d%d%d?, a printf(n")
例7.1 定义10元素的整型数组,元素0-9,之后逆序输出 #include void main() { int i,a[10]; for (i=0;i=0; i--) printf("%d ″ ,a[i]); printf("\n″); } 定义之后,不能通过数 组名对数组进行整体输入、 输出或赋值,如: int a[3]; a={1,2,3}; printf(“%d%d%d”,a); 注意访问数组元素时 循环变量开始和结束条 件的表示
7.1.3-维数组的初始化 初始化:定义数组的同时为数组元素赋值。方式: 1)全部元素赋初值 如inta[3]={8,5,9;则a[0]=8,a[1]=5,a[2]=9; 2)部分元素赋初值,其余元素自动初始化为0 如inta[3]={8,2};则a[0]=8,a[1]=2,a[2]=0 3)全部元素赋初值时,数组长度可以省略 如inta[]={8,5,9}等同于inta[3]={8,5,9} 注1:部分赋值时只能从首元素开始若干连续元素,如 inta[5]={,2,3};intb[5]={1,,3};错 注2:定义与赋值分开时,只能逐个元素赋值
§ 7.1.3一维数组的初始化 初始化:定义数组的同时为数组元素赋值。方式: 1)全部元素赋初值 如int a[3]={8,5,9};则a[0]=8,a[1]=5,a[2]=9; 2)部分元素赋初值,其余元素自动初始化为0 如int a[3]={8,2};则a[0]=8,a[1]=2,a[2]=0; 3)全部元素赋初值时,数组长度可以省略 如int a[]={8,5,9}等同于int a[3]={8,5,9} 注1:部分赋值时只能从首元素开始若干连续元素,如 int a[5]={,2,3};int b[5]={1, ,3};错 注2:定义与赋值分开时,只能逐个元素赋值