收藏 分享(赏)

【高清实用版】C语言详解.ppt

上传人:dzzj200808 文档编号:3350509 上传时间:2018-10-17 格式:PPT 页数:97 大小:436KB
下载 相关 举报
【高清实用版】C语言详解.ppt_第1页
第1页 / 共97页
【高清实用版】C语言详解.ppt_第2页
第2页 / 共97页
【高清实用版】C语言详解.ppt_第3页
第3页 / 共97页
【高清实用版】C语言详解.ppt_第4页
第4页 / 共97页
【高清实用版】C语言详解.ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

1、C语言程序设计小结,NotWay上传,内容,C语言程序设计基础数据类型、常用库函数 运算符、表达式、位运算控制结构与语句 数组,函数及其应用 编译预处理 指针结构体、共用体 、枚举文 件,函数是C语言程序的基本模块,下一张,上一张,【例】输入两个整数,判断大小,并输出大数。,#include /编译预处理命令 void main() /主函数main() int a,b;int max (int, int); scanf(“%d,%d“, 编译 连接 运行源程序.c 目标程序 .obj 可执行文件 .exe 结果,下一张,上一张,整型实型(浮点型) 字符型 char 枚举类型数组类型 结构体类

2、型 struct 共用体类型,单精度型 float 双精度型 double,基本类型构造类型指针类型 * 空类型 NULL自动类型 auto 静态类型 static 寄存器类型 register 外部类型 extern,数据类型存储类型,数据类型的分类,各种数据类型所表示的数据有一定范围,若将超出其范围的数据放入其中,会产生数据的“溢出”。Wirth 程序数据结构算法,下一张,上一张,基本整型 int 短整型 short 长整型 long 基本型 无符号型 unsigned 短整型长整型,变量类型,第2章 基本数据类型与常用库函数,字符集与标识符 基本数据类型 常量、变量 输入输出函数用法 常

3、用函数,字符集基本符号是ASCII字符集 标识符程序设计过程中用到的各种元素的名字 组成:英文字母、数字和下划线“_” ,首字符为字母或下划线。建议字符数不超过8个。 定义:见名知义、区分大小写字母、禁用保留字 Year,day,a_1,A_1,_Time %A,356B ,abc$基本数据类型 : 整型数据 类型标识符:unsigned short、int、longsizeof(int) 计算所占字节数 实型数据 float、double 字符型数据 char 以其ASCII码存放在内存,C语言保留字,除上述32个保留字(用小写字母表示)不能另作他用外, 象main、printf等库函数名,

4、 include、define、undef、indef、infdef、endif等 在C语言中具有特定的意义,也不要另作他用。,上一张,常量用来表示固定的数值和字符值的量 整型常量:十进制、八进制(0)、十六进制(0x),L|l、U|u0578、234 实型常量(浮点数):十进制小数形式(.) 、指数形式E|e ,F|f字符常量:A ,可以其ASCII码值参加运算, %c、%d转义字符 :n、ddd、xhh 、 、 符号常量代表常量的标识符 #define 符号常量 常量#define PI 3.1415926变量程序执行过程中,其值可以改变的量。 变量定义: 类型标识符 变量名列表;doub

5、le x, y =3.1; /使用前需定义、赋初值,常量、变量,表2.3 常用转义字符及其含义,下一张,上一张,输入输出函数,#include 从键盘读入一个字符: c = getchar(); 输出一个字符: putchar(c); putchar(65); putchar(x41); puts() 输出字符串并换行 puts(s1);gets() 读取字符串直到回车结束 gets(s1);格式输出函数 printf(”格式控制字符串”, 表达式列表); 格式输入函数 scanf(“格式控制字符串”, 地址列表); scanf(“i=%d, j=%f”, ,程序执行: 2 3.1415 1.

6、2 a 2 3.142 a 97,常用函数,#include /数学函数函数原型:double sqrt(double x) sin cos tan exp pow log log10.#include /字符函数tolower(A) isalpha isupper isdigit isalnum#include /其它常用函数exit(0); /正常终止程序,值传给调用过程;为1则异常终止程序,下一张,上一张,表. 常用的数学函数(math.h),下一张,上一张,第3章 运算符和表达式,运算符优先级、结合性、运算对象表达式形式、求解过程类型转换,下一张,C语言的表达式,书写规则:写在同一行,

7、只能使用圆括号且匹配 1 a+b 1.0/2 * ( (a+b) / (3*c) ) 2 3c(x+r)*8-a+b)7、 b*b-4ac-b /(2*a) 不能写成 -b/2*a = ,下一张,上一张,算术运算符: +、-、*、/、%、+ +、- - (整型变量) 关系运算符:、=、=、= =、!= 逻辑运算符: ! 、&、| 赋值运算符:.简单赋值运算符: =.复合算术赋值运算符:+=、-=、*=、/=、%=具右结合性(自右至左)的运算符:赋值、条件、单目运算符运算符优先级,条件运算符(三目运算符) ? : 逗号运算符: , 求字节数运算符: sizeof 强制类型转换 (类型) 括号运算

8、符: () 指针运算符: *、& 成员运算符: 、. 下标运算符: 位操作运算符: &、|、.复合位运算赋值运算符: &=、|=、=、=、=,下一张,上一张,运算符和表达式,?:,运算符和表达式,表达式-由数据和运算符按C语言的语法规则连接起来的式子。c = -a-b; / c = -a-b; a = a-1; 从左到右取最多个数的符号为一个合法运算符 a = bc2; / bc; a=0; 0=0 /* z=0 &、|组成的逻辑表达式, 只对能确定整个表达式值的最少数目的子表达式进行计算 */ sizeof(char) / 1 sizeof (类型标识符| 常量 |变量) , 返回字节长度。

9、,下一张,上一张,算术运算中的类型转换方向强制类型转换:(类型标识符)表达式i=5; j=2; (double)i/j (double)(i/j) double(i/j) / 2.5, 2.0, (int)(d*1000)/1000.0 / 将实数d保留3位小数 ,不四舍五入k / (int)pow(10,n-1) % 10 / 求整数的右边第n位上的数字/ pow返回值为double型,k/10n-1%10,下一张,上一张,内容,C语言程序设计基础数据类型、常用库函数 运算符、表达式 分支、循环结构程序设计 *数组,函数及其应用 编译预处理指针结构体、共用体 、枚举位运算文 件,结构化程序设

10、计,顺序结构按语句的先后次序依次执行程序选择结构根据给定条件,从两条或多条路径选择要执行的操作路径 双分支(单分支,if嵌套) if (表达式) 语句1 else 语句2 多分支 switch (表达式) case 常量表达式1: 语句序列1 default:语句序列n+1 循环结构在满足给定的条件下,反复执行某一组操作while (表达式) do for (表达式1; 表达式2; 表达式3) 语句 语句 语句while (表达式); 先判断,后执行 先执行,后判断 循环次数确定,先判断,后执行循环的嵌套 1!2! 10!、矩阵运算 转向语句break 立即结束循环,执行循环语句的后续语句。c

11、ontinue 跳过循环体尚未执行的语句,结束本次循环。goto,if语句的单分支形式: if (表达式) 语句;if语句的双分支形式: if (表达式) 语句1;else 语句2;if语句嵌套,下一张,上一张,注意:= = 、=,else-if嵌套的一般形式:,if (表达式1)语句1 else if (表达式2)语句2else if (表达式3)语句3else if (表达式n-1)语句n-1else 语句n /*用于处理“非上述情况”、前面各个if都不满足的缺省情况(若无时,可省略)、出错检查 */,下一张,上一张,【例】已知一分段函数x+lnx 当1x2y = x2+ex 当2x3lo

12、g10x 当3x41+x+x2 当x为其他值 当输入x的值时,编程计算出相应的函数值y。,#include ? void main() 变量类型定义输入?if 、while、for 结构 ?输出? ,下一张,上一张,#include #include void main() double x,y;printf(“Enter x=”);scanf(“%lf”, ,下一张,上一张,if (x=1 else ,if (x=1 else ,if (x=1 else ,printf(“y =%fn”, sqrt(x) +log(x)”);,y=sqrt(x)+double log(double x),#

13、include #include void main() double x,y;printf(“Enter x=”);scanf(“%lf”, ,下一张,上一张,if (x=1,if (x=1 ,if (x=1 ,C语言规定:else总是与前面最接近的、不带else的if配对。if (a=b)if (b=c) printf(“a=b=c”); else /else与第2个if配对printf (“a!=c”); if (a=b) if (b=c) printf(“a=b=c”); /加上 “” else /else与第1个if配对printf (“a!=c”);,上一张,#include vo

14、id main() int i, j, k;scanf(“%d”, j=0, k=5 j=99, k=-1 j=9, k=-1 j=0, k=0,下一张,上一张,二级题,程序运行: 5 ? 99 ? 12行改为:k=-1; j=i/10; 99 ?7行改为:if( (i/10)0) 12行改为:k=-1; 5 ?,switch语句,多路分支嵌套的if语句,程序的可读性较低。switch的一般形式:switch (表达式) /表达式值为整型或字符型case 常量1:语句组1 /语句组可为空或多条语句 case 常量2:语句组2 case 常量n:语句组ndefault:语句组n+1 /可省略 功

15、能:表达式值为常量i 从语句组i执行至break语句均不等 default:执行语句n+1,下一张,例】设考试成绩采用A(90-100分)、B(80-89分)、C(70-79分)、D(60-69分)、E(60分) 5级等级计分,编程判别某考试成绩等级是否满60分。,#include void main() char grade;printf(”Please input the grade:”); scanf(”%c”, ,下一张,上一张,下一张,上一张,while 语句,一般形式:while(表达式) 语句 1;语句 2;表达式循环条件,语句循环体。 while(表达式) 语句s;,下一张,【

16、例】统计输入字符的个数,并统计其中有多少个字符a,用【Enter】结束字符输入。,#include void main() int n=0, i=0;char c;while ( (c =getchar() != n) i+; if (c = = a) n+; printf(“输入字符总数i=%d,字符a数n=%dn“,i,n); ,下一张,上一张,【例4.13】 输入一个整数,统计它有几位数。,#include void main() int m, n=0; / n存放位数printf(“Input m: n“); scanf(“%d”, ,下一张,上一张,【例】求sum=ai,其中,ai为

17、从键盘输入的整数。,100,i=1,#include void main() int i, sum=0, a;for (i=1; i=100; i+) printf(“Enter a%d=“ ,n);scanf(“%d“, ,下一张,上一张,int i=1, sum=0, a;while (i=100) printf(“Enter a%d=“ ,n);scanf(“%d“, ,【例】用for 语句求sum=n。,100,n=1,#include void main() int n, sum=0;for (n=1; n=100; n+) sum=sum+n;printf(“sum=%dn“, s

18、um); ,下一张,上一张,阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。* 【程序说明】求 1 + 2/3 + 3/5 + 4/7 + 5/9 + 的前20项之和。 运行示例: sum = 11.239837 【程序】 #include void main( ) int i, b = 1;double s;(1) ;for (i = 1; i = 20; i+)s = s + (2) ; (3) printf( (4) , s); ,【供选择的答案】 (1) A、s = 0 B、s = 1 C、s = -1 D、s = 2(2) A、i/b B、double(i)/

19、double(b) C、i/2*i-1 D、(double)i/(double)b(3) A、; B、b = 2 * i 1; C、b = 1.0 * b; D、b = b + 2; (4) A、“sum = %dn“ B、“s = %cn“C、“sum = %fn“ D、“s = %sn“ADDC,#include void main() int i, m;printf(“input m:“);scanf(“%d“, ,上一张,【例】判断整数m(m2)是否为素数。 素数是除了1和他本身外,没有其他的因子的一个大于1的自然数。,int flag=1; for (i=2; i=m/2; i+)i

20、f (m%i= =0) flag=0; if (flag=1) printf(“Yes”); else printf(“No”);,【例5.13】输出100以内的所有素数。 在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别出的素数直接输出。 设置标志以标明某种状态的变化。,#include void main() int i, m, flag;for (m=2; m100; m+) flag=1; / 设置标志flag, 1表示素数 for (i=2; i=m/2; i+)if( m%i= = 0) flag=0; / 修改标志flag, 0表示非素数 break; / m不是

21、素数, 不需继续循环 if (flag= =1) printf(“%d,“, m); /判断标志,素数则输出m ,下一张,上一张,【例5.13】输出100以内的所有素数。 在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别出的素数直接输出。 设置标志以标明某种状态的变化。,#include void main() int i, m, flag;for (m=2; m100; m+) flag=1; / 设置标志flag, 1表示素数 for (i=2; i=m/2; i+)if( m%i= = 0) flag=0; / 修改标志flag, 0表示非素数 break; / m不是素

22、数, 不需继续循环 if (flag=0) continue;/判断标志,非素数, 跳过输出m, 进入下一次循环printf(“%d,“, m); ,下一张,上一张,【例6.5】判别和输出2100之间的素数,按每行8个素数输出。 #include #include int isprime(int n) int i; for (i=2; i= sqrt(n); i+)if (n%i=0) return 0; / 返回0,k非素数 return 1; / 返回1,k为素数; void main() int k, count=0;for (k=2; k=100; k+) / k从2100,穷举i是否

23、素数 if (isprime(k)=1) /调用函数prime(), 将实参k传递给形参n. 若返回1, k为素数 printf(“%5d“, k); count+;if (count%8=0) printf(“n“); /控制每行输出8个数据 ,下一张,上一张,2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97,【例4.25 】 计算 1!+2!+3!+10!,#include void main() int i, n, s=0, y;for (n=1; n=10; n+) /外循环y=1; for (

24、i=1; i=n; i+) /内循环计算n!y*=i; s+=y; /将n!累加到sprintf(“1!+2!+3!+10! =%d n”, s); ,下一张,上一张,int i; long s=0, y=1; for (i=1; i=10; i+) y*=i ; /计算n!s+=y; ,【程序说明】 输入一个正整数,按照从高位到低位的顺序输出各位数字。 运行示例:Enter an integer: 1902 The digits are: 1 9 0 2【供选择的答案】 (1) A、 t = 1; B、t = number; C、 ; D、number = 1;(2) A、t = 10 B、

25、power = 100 C、t != 0 D、number !=0(3) A、power = 0 B、digit != 0 C、number != 0 D、power = 1(4) A、number /= power; B、number %= 10;C、number %= power; D、number /= 10; BADC,#include void main( ) int digit, number, power, t;printf(“Enter an integer:“);scanf(“%d“, ,阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。* 【程序】#i

26、nclude void main( ) int k;for(k = 5; k 0; k-)if(k=3)continue; /* 第6行 */printf(“%d “, k); ,(13) 程序的输出是 。A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3 (14) 将第6行中的continue改为break后,程序的输出是 。A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3(15) 将第6行中的continue删除(保留分号)后,程序的输出是 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3(16) 将第6行全部删除后,程序的输出是 。A、5 4 3

27、2 1 B、5 4 2 1 C、5 4 D、3 BCAD,比较: for写程序较紧凑、清晰,能利用表达式给变量初始化并修改其值; while和do-while语句只能在循环之前进行初始化,在循环体中进行修改。若循环的次数确定,使用for较合适;否则,采用while或dowhile语句较为清晰。 dowhile语句是“先执行、后判断”,至少执行一次循环体;而while、for是“先判断、后执行”,若条件一开始就不成立,循环体一次都不执行。,下一张,上一张,while( ),.,do,while( );,for(),do,while( );,do,while( ),while( );,(A) 正确

28、的嵌套形式,(B) 不正确的嵌套形式,嵌套形式示意图,上一张,数组,一维数组 排序、查找算法 二维数组 字符数组和字符串,数组一批同类型相关数据的有序集合 一维数组由一个下标确定元素的数组 定义形式:数据类型 数组名 常量表达式int t10; int n=10,an; 通过对单个数组元素的引用来使用数组: 数组名下标 初始化: int j, t10; for(j=0;j10;j+) tj = j;for(j=0;j10;j+) scanf(“%d“, ,下一张,上一张,#define M 4 double aM;,字符数组 定义、初始化:char c5=L,i,k,e,0; char a3;

29、 a0=N ;char c5=“Like“; char c5=“Like“; char c5; c=“Like“; char c20; scanf(“%s”,c); printf(“String is %s”,c);/ 回车,Tab,空格 结束输入 逐个字符的输入/输出:getchar、putchar, scanf、printf用格式符%cchar c81; int i;for(i=0; (ci=getchar() != n; i+) ; / 输入字符串 字符串输入/输出函数:gets(str); / 回车结束输入 puts(str); 常用字符串函数: string.hstrcat(c1,c

30、2); / c1=c1c2 strcpy(c1,c2); / c1=c2strcmp(c1,c2) / =返回0; 返回1strlen(c1); / 注意110 二维字符数组:char str39=”Hzhou”, ”Shai”, ”Bjing”;gets(str1); strcpy(str0,”Abc”); puts(str2);,下一张,上一张,#include void main() int i;int f40=1,1;for (i=2; i40; i+)fi=fi-1+fi-2;for (i=0; i40; i+) if (i%5=0) printf(“n“); /每行输出5个数据pr

31、intf(“%8d“, fi); 程序执行:,1 1 2 3 58 13 21 34 5589 144 233 377 610.,下一张,上一张,【例6.2】利用数组求Fibonacci数列的前40项。fibonacci数列具有下面的性质:f1=1 (n=1) f2=1 (n=2)fn=fn-1+fn-2 (n3) 分析:利用数组元素fn-1 存储数列的第n项fn,int f40; for (i=0; i40; i+)if(i=0|i=1) fi=1;else fi=fi-1+fi-2;,排序 冒泡法排序 选择法排序【例】用冒泡法对8个数排序(从小到大)。 分析:将相邻两个数进行比较,将大数调

32、换到后面,经过一轮操作将最大数放在最后; 7次, j=0; jaj+1 ? 再对前n-1个数进行相同的比较交换操作,将次大数放在倒数第二的位置; 7次, i=0; i7;大数不断下沉,小数不断上冒直至所有数都按从小到大排列。3 4 7 0 2 8 7 1a0 a7,下一张,上一张,对8个数用冒泡法由小到大排序:8 6 3 1 2 9 5 4 a0a7 a0a1? a0a1 a1a2? a1a2 a2a3? a2a3 a6a7? a6a7for(i=0; iai+1) aiai+1; /第1趟 for(i=0; iai+1) aiai+1; for(i=0; iai+1) aiai+1; for

33、(i=0; iai+1) aiai+1; /第7趟,for(j=0; jai+1) aiai+1;,#include 冒泡法排序(升序) #define N 8 void main() int i, j;double aN, t;printf(“Input %d numbers:n“, N);for (i=0; iaj+1) /若相邻两元素不是小到大升序,则互换t=aj; aj=aj+1; aj+1=t;printf(“The sorted numbers are:n“);for (i=0; iN; i+) printf(“%5.2f“, ai); ,上一张,#include 冒泡法排序(升序

34、) #define N 8 void main() int i, j;double aN, t;printf(“Input %d numbers:n“, N);for (i=0; iaj+1) t=aj; aj=aj+1; aj+1=t;printf(“The sorted numbers are:n“);for (i=0; iN; i+) printf(“%5.2f“, ai); ,上一张,/ 降序?,【例】用选择法对8个数排序(从小到大)。第1次选择:在a0至a7中找最小数ak,将a0与ak值交换,第1次排序后将最小数放在最前a0处;k=0, j=17, aj ak ? k=j a0ak

35、第2次选择:在a1至a7中找最小数ak,将a1与ak值交换,第2次排序后将次小的数放在a1处;k=1, j=27, aj ak ? k=j a1ak 每次从未排序数中选最小数与未排序数中位置最前的数交换,直至所有数都按从小到大排列。i=0, i ak ? k=j,下一张,上一张,#include 选择法排序(升序) #define N 8 void main() int i, j, k;double aN, t; printf(“Input %d numbers: n“, N);for (i=0; iN; i+) scanf(“%lf“, ,上一张,#include 机考(程序改错): #de

36、fine N 10 用选择法对10个整数按升序排序 void main() int i, j, min, temp;int aN=5, 4, 3, 2, 1, 9, 8, 7, 6, 0; printf(“n The array is: n“); /* 输出数组元素 */for (i=0; iN; i+) printf(“%5d“, ai);for (i=0; iN-1; i+) /* 排序操作 */min=i; for (j=i+1; jN; j+)/*1*/if (amin=aj) min=j; /*2*/temp=amin; amin=aj; aj=temp; /*数据交换*/print

37、f(“The sorted numbers are: n“);for (i=0; iN; i+) printf(“%5d”, ai); /* 输出排序结果 */ ,上一张,if (aminaj) min=j;,temp=amin; amin=ai; ai=temp;,【例】使用顺序查找法,在n个数中查找某个数。,#include #include #define N 10 void main() int aN, i, x;printf(“Input %d numbers:n“,N);for(i=0; iN; i+) scanf(“%d“, ,下一张,上一张,#include void main

38、() int a33,temp;int i,j;for (i=0; i3; i+) / 输入for (j=0; j3; j+)scanf(“%d“, ,下一张,上一张,二维数组的程序实例 【例】将33矩阵转置并输出。 分析:矩阵转置即行列互换,第i行数据转置后变成第j列,数组元素ai, j与aj, i互换。,if (ij),【程序说明】 输入一个2 * 3的二维数组,找出最大值以及它的行下标和列下标,并输出该矩阵。 运行示例: Enter a array(2*3):3 2 10 -9 6 -1 max = a02 = 10 3 2 10 -9 6 -1 【供选择的答案】 (9) A、 ABCD

39、,【程序】 #include main( ) int col, i, j, row;int a23;printf(“Enter array(2*3):“);for(i = 0; i arowcol) (11) ;printf(“max = a%d%d = %dn“, row, col, arowcol);for(i = 0; i 2; i+) for(j = 0; j 3; j+)printf(“%4d“, aij);(12) ; ,【例6.14】输入一串字符,将其逆序存放并输出。 #include void main() char s81, t; int i, j;gets(s); for

40、(j=0; sj!=0; j+) ; / 字符串长度 j=strlen(s); for (i=0, j-; ij; i+, j-) t=si; si=sj; sj=t;printf(“%s“, s); ,下一张,上一张,for (j=0; (sj=getchar()!=n; j+) ;,第5章 函数,概述 函数的定义与调用 函数间参数传递 函数的嵌套调用和递归调用 变量的作用域和存储类别,C程序是由一个或多个函数组合而成,函数是C语言程序的基本模块。唯一主函数main是程序开始执行处,可调用其它函数。,下一张,上一张,Review,函数是具有独立功能的程序模块, 是C语言的基本构件。函数是一个

41、“黑盒子”。 在引用一个函数时,用户只需了解被调用函数的功能、是否需要提供数据、函数返回值即可;不必了解其内部的工作细节。 由于采用了函数结构,程序的层次结构清晰,便于编写、阅读和调试。分类: 从用户的角度: 标准库函数,用户自定义函数y=sin(x); 从函数的结果: 无返回值的函数,有返回值的函数void 从函数的形式看: 有参函数,无参函数,下一张,函数的定义与调用,函数定义的一般形式:数据类型 函数名(类型 形参, )函数体; 函数调用的一般形式为:函数名(实参1, 实参2, )用作函数表达式 z=max(x, y);作实参使用 z= max( max(x1, x2), x3); 独立

42、构成表达式语句 printf(“maxmum=%d“, z); 函数声明一般形式为:数据类型 函数名(类型 形参, );或:数据类型 函数名 (类型, 类型,); 如被调函数定义的位置在主调函数前,声明可省略。,下一张,#include void main() int x, y, z;int max(int a, int b); /函数声明 printf(“input two numbers:“);scanf(“%d%d“, ,下一张,【例】编写函数,输出10 个“*”号,并回车。#include void star() /无参函数 int i;for (i=0; i10; i+) print

43、f(“*”);printf(“n“);return; /无返回值、返回主调函数 void main() star(); / 函数调用 ,下一张,上一张,函数间参数传递,函数间参数传递:传数值(形参,实参,return)传地址(形参是数组或指针变量)一维形参数组定义的一般形式: void sort(int a , int n)int b10=1,6,7,0,8,4,3,2,9,5; sort(b,10);二维形参数组定义的一般形式: void change(int x 5, int n, int m)函数的嵌套调用:在一个函数的函数体内调用另一个函数不允许嵌套定义递归调用:被调用的函数是调用函数

44、自身时。 递归方法:将要解决的问题分解成比原问题规模小的类似子问题,而解决此子问题时又可用原问题的解决方法,依此原则逐步递推转化,最终将原问题转化为较小且有已知解的子问题。,下一张,例:数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。(省二级上机填空题) #include 1 . void main() printf(“ %ldn“,f(30) ); long f(int n) if ( 2 ) return 1;else return f(n-1)+f(n-2); /long f(int n); n = =1| n = = 2,下一张,上一张,【例】分析函数调用前后的实参值、形参值。 #include void main() double a, z;double mult(double);a=5.2;printf(“调用mult前:a=%.2lf n“, a); z=mult(a); /函数调用,形参值改变不影响 实参值aprintf(“调用mult后:a=%.2lf n“, a); printf(“z=%.2lf n“, z); double mult(double a) /形参a a=a*a; printf(“在mult中:a=%.2lf n“, a); return (a); ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报