《程序基本结构》PPT课件.ppt

上传人:大米 文档编号:577845231 上传时间:2024-08-22 格式:PPT 页数:93 大小:827.60KB
返回 下载 相关 举报
《程序基本结构》PPT课件.ppt_第1页
第1页 / 共93页
《程序基本结构》PPT课件.ppt_第2页
第2页 / 共93页
《程序基本结构》PPT课件.ppt_第3页
第3页 / 共93页
《程序基本结构》PPT课件.ppt_第4页
第4页 / 共93页
《程序基本结构》PPT课件.ppt_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《《程序基本结构》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《程序基本结构》PPT课件.ppt(93页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章 程序基本结构程序基本结构2.1 关系运算和逻辑运算关系运算和逻辑运算2.2 分支结构分支结构2.3 循环结构循环结构2.4 break和和continue语句语句2.5 goto 语句语句2.6 指针程序设计指针程序设计2.7 经典算法举例经典算法举例2024/8/221引言引言 第一章中我们学习了顺序结构的第一章中我们学习了顺序结构的C C程序设计方法,程序设计方法,但是实际应用中,很多问题仅有顺序结构的方法是但是实际应用中,很多问题仅有顺序结构的方法是无法解决的。无法解决的。算法算法问题问题1:输入三个整数,按从大到小的顺序输出。:输入三个整数,按从大到小的顺序输出。问题问题

2、2:编写程序计算:编写程序计算:1+2+3+1001+2+3+100。 算法算法2024/8/222问题问题问题问题1 1的算法:的算法:的算法:的算法:S1:输入输入3个整数,个整数,分别赋值给分别赋值给a,b,cS2: 如果如果ab, 则则a b bS3: 如果如果ac,ac,则则a ac cS4: S4: 如果如果bc,bc,则则b bc cS5: S5: 输出输出a,b,ca,b,c的值的值分支结构分支结构输入输入输入输入a,b,ca,b,c的值的值的值的值N N ababY Ya b b输出输出输出输出a,b,ca,b,c的值的值的值的值a c cbc c acacY YN N bc

3、bcY YN N2024/8/2232.1关系运算和逻辑运算关系运算和逻辑运算2.1.1 关系运算符和关系表达式关系运算符和关系表达式一、关系运算符一、关系运算符一、关系运算符一、关系运算符种:种:种:种: 、= 、=、=、!=!=说明:说明:说明:说明:1 1 1 1、优先级优先级优先级优先级:前前前前4 4 4 4种相同,后种相同,后种相同,后种相同,后2 2 2 2种也相同,但前种也相同,但前种也相同,但前种也相同,但前4 4 4 4种高于后种高于后种高于后种高于后两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都低于

4、算术运算符低于算术运算符低于算术运算符低于算术运算符而而而而高于赋高于赋高于赋高于赋值运算符值运算符值运算符值运算符。2 2 2 2、结合性结合性结合性结合性:自左至右自左至右自左至右自左至右ab-cab-ca(b-c)a(b-c)a=b=ca=b=ca=(b=c)a=(b=c)a=b!=ca=b!=ca=(b!=c)a=(b!=c)2024/8/224 二、关系表达式二、关系表达式二、关系表达式二、关系表达式用用用用关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子。其中其中其中其中被连接的表达式可

5、以是被连接的表达式可以是被连接的表达式可以是被连接的表达式可以是算术表达式算术表达式算术表达式算术表达式、关系关系关系关系表达式表达式表达式表达式、逻辑表达式逻辑表达式逻辑表达式逻辑表达式、赋值表达式赋值表达式赋值表达式赋值表达式或或或或字符表达式字符表达式字符表达式字符表达式。如:如:如:如:a+bc+da+bc+d、xy=c+dxy=c+d、aAaA关系表达式的值只能是关系表达式的值只能是关系表达式的值只能是关系表达式的值只能是1 1或或或或0 0,当表达式成立即为当表达式成立即为当表达式成立即为当表达式成立即为“ “真真真真” ”时,值为整数时,值为整数时,值为整数时,值为整数1 1;否

6、则为;否则为;否则为;否则为“ “假假假假” ”,值为整数,值为整数,值为整数,值为整数0 0。因此可看作。因此可看作。因此可看作。因此可看作整型表达式整型表达式整型表达式整型表达式。假设假设假设假设a=3, b=2, c=1a=3, b=2, c=1,求以下关系表达式的值:求以下关系表达式的值:求以下关系表达式的值:求以下关系表达式的值:ab (ab)=cab (ab)=cabc abc f=abb=c1 11 10 01 12024/8/2252.1.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式一、逻辑运算符一、逻辑运算符一、逻辑运算符一、逻辑运算符种:种:种:种: & | ! ! !

7、 !、优先级优先级优先级优先级:! ! ! !( ( ( (非非非非) ) ) )&( ( ( (与与与与) ) ) )|( ( ( (或或或或) ) ) )! ! ! ! ( ( ( (非非非非) ) ) )算术运算符算术运算符算术运算符算术运算符关系运算符关系运算符关系运算符关系运算符&|赋值运算符赋值运算符赋值运算符赋值运算符(高)(高)(高)(高)(低)(低)(低)(低)、结合性结合性结合性结合性:! ! ! !是右结合性,是右结合性,是右结合性,是右结合性,&和和和和|是左结合性是左结合性是左结合性是左结合性、逻辑运算真值表:、逻辑运算真值表:、逻辑运算真值表:、逻辑运算真值表:a

8、a a ab b b b! ! ! !a a a a! ! ! !b b b ba&ba&ba&ba&ba|ba|ba|ba|b非非非非0 0 0 0非非非非0 0 0 00 0 0 00 0 0 01 1 1 11 1 1 1非非非非0 0 0 00 0 0 00 0 0 01 1 1 10 0 0 01 1 1 10 0 0 0非非非非0 0 0 01 1 1 10 0 0 00 0 0 01 1 1 10 0 0 00 0 0 01 1 1 11 1 1 10 0 0 00 0 0 02024/8/226例:例:例:例:ab&x/yab&x/yab&x/yab&x/y( ( ( (ab)

9、&(x/y)ab)&(x/y)ab)&(x/y)a=1|!ba=1|!ba=1|!ba=1|!b( ( ( (a=1)|(!b)a=1)|(!b)a=1)|(!b)a=1)|(!b)二、逻辑表达式二、逻辑表达式二、逻辑表达式二、逻辑表达式逻辑表达式的值应该是逻辑表达式的值应该是逻辑表达式的值应该是逻辑表达式的值应该是“逻辑真逻辑真逻辑真逻辑真”或或或或“逻辑假逻辑假逻辑假逻辑假”。语言以数值语言以数值语言以数值语言以数值代表代表代表代表“真真真真”, ”, ”, ”, 以数值以数值以数值以数值代表代表代表代表“假假假假”;但参加运算的运算量可以是;但参加运算的运算量可以是;但参加运算的运算量可

10、以是;但参加运算的运算量可以是任何数值任何数值任何数值任何数值,进行判断时,进行判断时,进行判断时,进行判断时,非零值非零值非零值非零值代表代表代表代表“真真真真”,零值零值零值零值代表代表代表代表“假假假假”。若若若若a=100a=100a=100a=100,b=5b=5b=5b=5,则则则则! ! ! !a a a a=? =? =? =? a&ba&ba&ba&b=? =? =? =? a|ba|ba|ba|b=? =? =? =? !a&b!a&b!a&b!a&b=?=?=?=?4&0|24&0|24&0|24&0|2=?=?=?=? a+b | ca+b | ca & 0a & 03

11、8&2 | 58&2 | 5=-1 & x=-1 & x=-1 & x=-1 & x=1不能写为:不能写为:不能写为:不能写为: -1=-1=-1=-1=x=1x=1x=1xb)&(n=cd)(m=ab)&(n=cd)m=? n=?m=? n=?0 01 1注意:注意:注意:注意:2024/8/228C语言运算符的“优先级口决”1 小括中括指向点小括中括指向点,(),-,.)非反后来自加减非反后来自加减;(!+-)负类指针有地址负类指针有地址,(-,类型转换类型转换,*,&)长度唯一右在前长度唯一右在前.(sizeof,单目运算,从右至左单目运算,从右至左)先乘除,再求余先乘除,再求余,(*,

12、/,%)加减后,左右移加减后,左右移,(+,-,)关系运算左为先关系运算左为先.(,)等于还是不等于等于还是不等于,(=,!=)按位运算与异或按位运算与异或;(&,|)逻辑与,逻辑或逻辑与,逻辑或,(&,|)条件运算右至左条件运算右至左.(?:)赋值运算虽然多赋值运算虽然多,(=,+=,-=,*=,/=,%=,=,全体单目第二全体单目第二;/所有的单目运算符比如所有的单目运算符比如+-+(正正)-(负负)指针运算指针运算*&乘除余三乘除余三,加减四加减四;/这个这个“余余”是指取余运算即是指取余运算即%移位五,关系六移位五,关系六;/移位运算符:移位运算符:,关系:,关系:=b,ab,则则a

13、a b bS3:S3:输出输出a,ba,bC C语言单分支结构:语言单分支结构:语言单分支结构:语言单分支结构: if (if (表达式表达式表达式表达式) ) 语句语句语句语句; ; 2024/8/2211if (if (if (if (表达式表达式表达式表达式) ) ) ) 语句语句语句语句一般形式:一般形式:表达式表达式表达式表达式语句语句语句语句真真真真( (非非非非0)0)假假假假(0)(0)流程图:流程图:注意:此位置不注意:此位置不注意:此位置不注意:此位置不使用分号使用分号使用分号使用分号“ “;” ”!2024/8/2212#include void main( ) int

14、a,b,temp; printf(Input a,b:); scanf(%d%d,&a,&b); if (ab) /* 判断判断a、b的关系的关系 */ temp=a; a=b; b=temp; /* a大大于于b,则则交交换换a,b的值的值 */ printf(“Result is %d,%dn,a,b); /*按按从从小小到到大大顺顺序序输出输出 */例例2.1的的C语言程序如下:语言程序如下:复合语句:复合语句:在同一个在同一个条件下作为一个整体条件下作为一个整体执行的多条语句执行的多条语句2024/8/2213例例例例2.22.2输入三个数输入三个数输入三个数输入三个数x1,x2,x3

15、,x1,x2,x3,按从小到大的顺序输出这三个数。按从小到大的顺序输出这三个数。按从小到大的顺序输出这三个数。按从小到大的顺序输出这三个数。#include void main() int x1,x2,x3,temp; scanf(“%d%d%d”,&x1,&x2,&x3); if(x1x2) temp=x1;x1=x2;x2=temp; if(x1x3) temp=x1;x1=x3;x3=temp; if(x2x3) temp=x2;x2=x3;x3=temp; printf(“%d,%d,%d”,x1,x2,x3);输入输入输入输入a , b, ca , b, cab?ab?a ab ba

16、c?ac?bc?bc?a ac cb bc c输出输出输出输出a, b, ca, b, c是是是是是是是是是是是是否否否否否否否否否否否否输入:输入:3 5 13 5 1输出:输出:1 1,3 3,5 52024/8/22142.2.2 双分支结构双分支结构例例2.32.3: 输入两个整数,输出其中较大的一个。输入两个整数,输出其中较大的一个。 算法:算法:S1: S1: 输入两个整数输入两个整数a,ba,bS2: S2: 如果如果ab,ab,则输出则输出a a, 否则输出否则输出b bC C语言单分支结构:语言单分支结构:语言单分支结构:语言单分支结构: if (if (表达式表达式表达式表

17、达式) ) 语句语句语句语句1;1; elseelse 语句语句语句语句2;2; 2024/8/2215一般形式:一般形式:if (if (if (if (表达式表达式表达式表达式) ) ) ) 语句语句语句语句1 1 1 1elseelseelseelse 语句语句语句语句2 2 2 2流程图:流程图:表达式表达式表达式表达式语句语句语句语句2 2真真真真( (非非非非0)0)假假假假(0)(0)语句语句语句语句1 12024/8/2216例例例例2.3 2.3 输入两个整数,输出其中较大的一个。输入两个整数,输出其中较大的一个。输入两个整数,输出其中较大的一个。输入两个整数,输出其中较大的

18、一个。N-SN-S流程图流程图输入输入输入输入x1,x2x1,x2x1x2x1x2Y YN N输出输出输出输出x1x1输出输出输出输出x2x2#includevoid main() int x1,x2; scanf(“%d%d”,&x1,&x2); if(x1x2) printf(“%dn”,x1); else printf(“%dn”,x2);2024/8/22172.2.3 多分支结构多分支结构一、一、一、一、if if语句嵌套语句嵌套语句嵌套语句嵌套一般形式:一般形式:流程图:流程图:if (if (if (if (表达式表达式表达式表达式1)1)1)1) 语句语句语句语句1 1 1 1

19、else if (else if (else if (else if (表达式表达式表达式表达式2)2)2)2) 语句语句语句语句2 2 2 2 else if (else if (else if (else if (表达式表达式表达式表达式3)3)3)3) 语句语句语句语句3 3 3 3 else if (else if (else if (else if (表达式表达式表达式表达式n)n)n)n) 语句语句语句语句n n n n else else else else 语句语句语句语句n+1n+1n+1n+1表达式表达式表达式表达式1 1语句语句语句语句2 2真真真真( (非非非非0)0)

20、假假假假(0)(0)语句语句语句语句1 1表达式表达式表达式表达式2 2真真真真( (非非非非0)0)语句语句语句语句1 1语句语句语句语句2 2假假假假(0)(0) 2024/8/2219关于关于关于关于if if语句的说明语句的说明语句的说明语句的说明:1 1 1 1、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在C C C C语言语言语言语言中它也中它也中它也中它也可以是任意的数值表达式可以是任意的数值表达式可以是任意的数值表达式可以是任意的数值表达式。if (3)if

21、 (3) n=1; n=1;if (a)if (a) printf(%dprintf(%d, a);, a);if (n=3-3)if (n=3-3) x=1; x=1;elseelse x=-1; x=-1;2 2 2 2、表达式后面不能有任何标点符号表达式后面不能有任何标点符号表达式后面不能有任何标点符号表达式后面不能有任何标点符号!3 3 3 3、elseelseelseelse只能与只能与只能与只能与ifififif配对使用配对使用配对使用配对使用。仅。仅。仅。仅elseelseelseelse本身不能单独作为一个语本身不能单独作为一个语本身不能单独作为一个语本身不能单独作为一个语句使

22、用。句使用。句使用。句使用。if (x5)if (x5); ; y=x; y=x;elseelse y=2*x-1; y=2*x-1;if (x5)if (x5) ; ;y=x;y=x;elseelse y=2*x-1; y=2*x-1;将出现语法错误将出现语法错误将出现语法错误将出现语法错误2024/8/22204 4、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,但要但要但要但要用花括号括起来用花括号括起来用花括号括起来用花括号括起来构成复合语句构

23、成复合语句构成复合语句构成复合语句。if (ab) t=a; a=b; b=t; if (a+bc & b+ca & c+ab) s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%.2fn, area); else printf(It is not a trilateral!n);复合语句的复合语句的复合语句的复合语句的花括号后不能再写分号花括号后不能再写分号花括号后不能再写分号花括号后不能再写分号。复合语句。复合语句。复合语句。复合语句在语法上是一个整体,相当于一个语句。在语法上是一个整体,相当于一个语句。在语法上是一个

24、整体,相当于一个语句。在语法上是一个整体,相当于一个语句。2024/8/22215 5 5 5、ifififif语句的嵌套语句的嵌套语句的嵌套语句的嵌套在在在在ifififif语句的原语句的原语句的原语句的原“语句语句语句语句”中又包含一个或多个中又包含一个或多个中又包含一个或多个中又包含一个或多个ifififif语句语句语句语句1. 1. if (if (表达式表达式表达式表达式1)1) if (if (表达式表达式表达式表达式2) 2) 语句语句语句语句2. 2. if (if (表达式表达式表达式表达式1) 1) 语句语句语句语句1 1 elseelse if (if (表达式表达式表达

25、式表达式2) 2) 语句语句语句语句2 23. 3. if (if (表达式件表达式件表达式件表达式件1) 1) 语句语句语句语句1 1 elseelse if (if (表达式表达式表达式表达式2) 2) 语句语句语句语句2 2 else else 语句语句语句语句3 34. 4. if if ( (表达式表达式表达式表达式1)1) if if ( (表达式表达式表达式表达式2) 2) 语句语句语句语句1 1 elseelse 语句语句语句语句2 2二义性?二义性?二义性?二义性?语言规定:语言规定:语言规定:语言规定:elseelse总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配

26、对的总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if if配对。配对。配对。配对。if (if (表达式表达式表达式表达式1)1) if (if (表达式表达式表达式表达式2) 2) 语句语句语句语句1 1 else else 语句语句语句语句2 2 if (if (表达式表达式表达式表达式1)1) if (if (表达式表达式表达式表达式2) 2) 语句语句语句语句1 1 elseelse 语句语句语句语句2 22024/8/2222例例例例2.4 2.4 输入输入输入输入3 3个数,判断组成什么类型三角形个数,判断组成什么类型三角形个数,判断组成什么类型三角形个数,判断组成

27、什么类型三角形if(a+b)c&(b+c)a&(a+c)b)if(a+b)c&(b+c)a&(a+c)b) if ( if (a=b&b=ca=b&b=c) ) printf(“dengbian!nprintf(“dengbian!n”);”); else if(a=b|b=c|a=c) else if(a=b|b=c|a=c) printf(“dengyao!nprintf(“dengyao!n”);”); else else printf(“budengbian!nprintf(“budengbian!n”);”);else else printf(“Erro!nprintf(“Erro!

28、n”);”); 2024/8/2223例例例例2.2.2.2.5 5 5 5 编程求解函数:编程求解函数:编程求解函数:编程求解函数:-1-1 0 0 1 1( (x0)x0)(x0)y=y=程序程序1:if (x0) y=- -1;else if (x=0) y=0; else y=1;y=- -1y=0y=1x0x=0) if (x0) y=1; else y=0;else y=-1;y=- -1y=0y=1x=0x=0x0x0真真假假真真假假eg502.c2024/8/2224程序程序3:y=0;if (x!=0) if (x0) y=1; else y=-1;y=y=0 0 0 0x!

29、=0x!=0x0x0y=1y=-1真真真真假假假假-1-1 0 0 1 1( (x0)x0)(x0)y=y=2024/8/2225例:例:求一元二次方程求一元二次方程ax2+bx+c=0的根,的根,a,b,c由键由键盘输入。盘输入。分析:对于一元二次方程有以下几种可能:分析:对于一元二次方程有以下几种可能:a=0,不是二次方程;,不是二次方程;b2-4ac=0,有两个相等的实根;,有两个相等的实根;b2-4ac0,有两个不等的实根;,有两个不等的实根;b2-4acb?(a=100):(b=100) ab?printf(“”%dn”,a):printf(“%dn”,b)(4)表达式)表达式1、表

30、达式、表达式2和表达式和表达式3的类型都可以不同。的类型都可以不同。表达式值的类型是表达式表达式值的类型是表达式2、3中类型较高的类型。中类型较高的类型。例如:例如:xy?1:1.5 表达式值是表达式值是double类型类型(1)优先级高于赋值,低于关系运算符和算数运算符)优先级高于赋值,低于关系运算符和算数运算符例:例:x= ab? a:b+1;x= (ab)? a:(b+1);ab? a : cd? c : dab? a : (cd? c : d)if (ab) x=a;else x=b+1;2024/8/2229例例2.7:输入一个字符,如果是大写字母,转换为小写,:输入一个字符,如果是

31、大写字母,转换为小写,如果不是不转换。最后输出。如果不是不转换。最后输出。#includevoid main() char ch; scanf(“%c”,&ch); /*ch=getchar();*/ ch=(ch=A&ch=Z)?(ch+32):):ch; printf(“%c”,ch); /*putchar(ch);*/2024/8/2230三、三、三、三、 switchswitch(多分支)语句多分支)语句多分支)语句多分支)语句switchswitch结构与结构与结构与结构与else ifelse if结构是多分支选择的两种形式。结构是多分支选择的两种形式。结构是多分支选择的两种形式。

32、结构是多分支选择的两种形式。else ifelse if: 多条件并列测试,从中选一多条件并列测试,从中选一多条件并列测试,从中选一多条件并列测试,从中选一switchswitch: 单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行2024/8/22311 1、格式:、格式:、格式:、格式:switch(表达式表达式) case 常量表达式常量表达式1: 语句组语句组1;break; case 常量表达式常量表达式2: 语句组语句组2;break; case 常量表达式常量表达式n: 语句组语句组n

33、;break; default: 语句语句 组组n+12 2、功能:、功能:、功能:、功能:先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同、若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行、若无,再看有没有若无,再看有没有若无,再看有没有若无,再看有没有defaultdefault部分部分部分部分:若有若有若有若有defaultdefaul

34、t,则执行其后面则执行其后面则执行其后面则执行其后面的语句;若无的语句;若无的语句;若无的语句;若无defaultdefault,则则则则switchswitch语句什么也不做,流程转向其后语句什么也不做,流程转向其后语句什么也不做,流程转向其后语句什么也不做,流程转向其后继语句。继语句。继语句。继语句。2024/8/2232说明:说明:说明:说明:1 1、switchswitch后面括号内的表达式可以是后面括号内的表达式可以是后面括号内的表达式可以是后面括号内的表达式可以是整型整型整型整型,也可以是,也可以是,也可以是,也可以是字符型字符型字符型字符型2 2、各个、各个、各个、各个casec

35、ase后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;3 3、各个、各个、各个、各个casecase和和和和defaultdefault的出现次序不影响执行结果的出现次序不影响执行结果的出现次序不影响执行结果的出现次序不影响执行结果; ;4 4、casecase后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;例:例:例:例:#include #include void main ( )void main ( ) intint x, y

36、; x, y ; scanf(“%dscanf(“%d”, &x) ;/”, &x) ;/输入输入输入输入2 2? switch(x) switch(x) case 1 : y=10; case 1 : y=10; printf(%dnprintf(%dn, y) ;, y) ; case 2 : y=20; case 2 : y=20; printf(%dnprintf(%dn, y) ;, y) ; case 3 : y=30; case 3 : y=30; printf(%dnprintf(%dn, y) ;, y) ; default : y=0; default : y=0; pri

37、ntf(%dnprintf(%dn, y) ;, y) ; 5 5、casecase后常量后常量后常量后常量表达式只起语表达式只起语表达式只起语表达式只起语句标号的作用,句标号的作用,句标号的作用,句标号的作用,每个每个每个每个casecase之后通之后通之后通之后通常都有一个常都有一个常都有一个常都有一个breakbreak,使流程使流程使流程使流程跳出跳出跳出跳出switchswitch语句语句语句语句, ,否则流程转到否则流程转到否则流程转到否则流程转到下一个下一个下一个下一个case(default)case(default)中中中中继续执行;继续执行;继续执行;继续执行;2024/8

38、/22336 6、多个、多个、多个、多个casecase可以共用一组执行语句;可以共用一组执行语句;可以共用一组执行语句;可以共用一组执行语句;case 6 : case 6 : case 7 : case 7 : printf(Resetnprintf(Resetn); break; ); break; 但不能写成:但不能写成:但不能写成:但不能写成:casecase 6,76,7: : printf(Resetnprintf(Resetn); break;); break;7 7、switchswitch语句可以嵌套;但有多层语句可以嵌套;但有多层语句可以嵌套;但有多层语句可以嵌套;但有多

39、层switchswitch语句时,语句时,语句时,语句时,breakbreak只能退出本层的只能退出本层的只能退出本层的只能退出本层的switchswitch语句体;语句体;语句体;语句体;2024/8/2234举例:举例: 在学生成绩管理中,成绩经常要在百分制与等级制在学生成绩管理中,成绩经常要在百分制与等级制之间进行转换。之间进行转换。9090分以上为分以上为A A等,等,80-8980-89为为B B等,等,70-7970-79为为C C等,等,60-6960-69分为分为D D等,其余为等,其余为E E等。编制程序,根据输入的百分制,等。编制程序,根据输入的百分制,输出对应的等级。输出

40、对应的等级。 void main() int score; printf(Input score of student:); scanf(%d,&score); if(score=90) printf(A); else if(score=80) printf(B); else if(score=70) printf(C); else if(score=60) printf(D); else printf(E);2024/8/2235void main( ) int score,temp; printf(Input score of student:); scanf(%d,&score); te

41、mp=score/10; switch(temp) case 10: case 9: printf(A); break; case 8: printf(B); case 7: printf(C); break; case 6: printf(D); break; default: printf(E); break;2024/8/2236简单选择界面的编程。从键盘输入整数,输出不同的字符串:输入1,输出Good morning;输入2,输出Good afternoon;输入3,输出Good evening;输入4,输出Good night;输入其它数字,输出Bye-bye。2024/8/2237

42、问题问题2:编写程序计算:编写程序计算:1+2+3+100。 算法算法2.3 循环结构循环结构2.3.1 循环结构的引出循环结构的引出2024/8/2238问题问题问题问题2 2的算法:的算法:的算法:的算法:算法算法1:直接写出算式:直接写出算式 S1: result=1+2+3+4+5+100 容易实现吗?容易实现吗?算法算法2 2: 考考虑虑到到1+2+3+1001+2+3+100可可以以改改写写为为:(1+2)+3)+100)(1+2)+3)+100) S1: p1=1+2S1: p1=1+2 S2: p2=p1+3 S2: p2=p1+3 S3: p3=p2+4 S3: p3=p2+

43、4 S99: p99=p98+100 S99: p99=p98+100,结果在结果在p99p99里。里。 定义定义9999个变量,个变量,容易实现吗?容易实现吗?注意观察:每注意观察:每一步都类似一步都类似2024/8/2239算法算法3 3:S0: p=0, i=1S0: p=0, i=1 S1: p=p+i, i=i+1 S1: p=p+i, i=i+1 S2: p=p+i, i=i+1 S2: p=p+i, i=i+1 S3: p=p+i, i=i+1 S3: p=p+i, i=i+1 S99: p=p+i, i=i+ 1 S99: p=p+i, i=i+ 1 S100: p=S100:

44、 p=p+ip+i, i=i+ 1, i=i+ 1完全一样的完全一样的完全一样的完全一样的9999步步步步算法算法算法算法4 4:S0: p=0, i=1S0: p=0, i=1(循环初值)循环初值)循环初值)循环初值)S1: p=p+i, i=i+1S1: p=p+i, i=i+1(循环体)循环体)循环体)循环体) S2: S2: i=100i=100,则则则则返返返返回回回回重重重重新新新新执执执执行行行行步步步步骤骤骤骤S1S1及及及及S2S2;否否否否则则则则,算算算算法法法法结结结结束束束束(循环控制)。(循环控制)。(循环控制)。(循环控制)。循环结构循环结构2024/8/2240

45、循环控制结构一般由四部分组成:、进入条件、退出条件、循环体:循环体需要完成的功能(需要重复执行的语句) 、循环变量的修正 根据进入条件和退出条件,循环控制结构可以分为三种形式:、while结构:退出条件是进入条件的反条件。即满足 条件时进入,重复执行循环体直到进入的条件不再满足为止。、do-while结构:无条件进入,执行一次循环体后再判断是否满足再进入循环的条件。、for结构:与while结构类似,但结构更紧凑。适用于循环之前循环次数就已经确定的情况。2024/8/2241使用形式:while(表达式) 语句;真(非0)表达式成立吗?语句假(0)特点:先判断表达式,后执行语句2.3.22.3

46、.2 while while 语句语句2024/8/2242例:求1+2+3+100 i=1,sum=0i=100sum=sum+ii=i+1假真i=1,sum=0当i=100sum=sum+ii=i+12024/8/2243void main()int i, sum;i=1; sum=0;while (i=100) sum=sum+i; i+;printf (“sum=%dn”, sum);注意:while起作用的范围注意:要有改变循环结束条件的语句2024/8/2244void main()int i, n, sum;i=1; sum=0;while (i=n) sum=sum+i; i+

47、;printf (“sum=%dn”, sum);计算 1+2+3+n(n为任意正整数) scanf(%d,&n);思考问题:循环结束后循环变量的值是多少?2024/8/2245void main()int i , n, sum;i=1; sum=0;while (i=n) sum=sum+i; i=i+2;printf (“sum=%dn”, sum); scanf(%d,&n);计算 1+3+5+7+n(n为奇数)2024/8/2246例:输入一个字符,如果是大写字母,转换为小写,如果不例:输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输入是则不转换。输入“0”“0”结束程序

48、。结束程序。#include void main() char ch; while(ch=getchar()!=0) ch=(ch=A&ch=Z)?(ch+32):ch; printf(“%c”,ch); 2024/8/22472.3.3 do-while 2.3.3 do-while 语句语句使用形式: do 循环体语句 while(表达式);特点:先执行循环体语句,后判断表达式循环体语句表达式0(假)非0(真)注意:、循环部分为多个语句时,必须用大括号构成复合语句;、循环体中应有使循环趋于结束的语句2024/8/2248例:求1+2+3+100 sum=0i=1sum=sum+ii=i+1

49、i=100假真int i, sum;i=1; sum=0;do sum=sum+i; i+;while (i=100);printf (“%dn”, sum);void main()2024/8/2249while 和 do-while 循环的比较(?不同之处)main() int sum=0, i; scanf (“%d”, &i); while (i=10) sum=sum+i; i+; printf (“sum=%dn”, sum); main() int sum=0, i; scanf (“%d”, &i); do sum=sum+i; i+; while (i=10); printf

50、 (“sum=%dn”, sum); 2024/8/22502.3.4 for 语句语句一般形式: forfor(表达式1;表达式2;表达式3) 语句一般使用格式:for(循环变量赋初值;循环条件表达式;循环变量修正值) 循环体;2024/8/2251执行过程:(1)求解表达式1(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行(3)。若为假(值为0),则结束循环,转到(5)。(3)求解表达式3(4)转回执行(2)(5)循环结束,执行for语句下面的一个语句forfor(表达式1;表达式2;表达式3) 语句2024/8/2252for语句的三个表达式都可以缺

51、省,但两个分号不能缺省;如果在for语句之前已经给循环变量赋初值,则for语句的循环变量赋初值部分可以省略,但其后得分号不省略; 也可以将循环变量修正值的工作纳入到循环体中去做;说明:说明:i=1;for ( ; i=10; i+) m=m*i;如:for (i=1; i=10; ) m=m*i; i+;如:也可以省略for语句的第一和第三部分;i=1;for( ; i=10; ) m=m*i ; i+;如:for ( ; ; )但是注意不能两处同时修正值!2024/8/2255通常不缺省表达式2;有时缺省表达式2,此时不判断循环条件,循环将无终止的执行,即认为表达式2始终为真;在循环体内用i

52、f和break控制循环结束。for (i=1; ; i+) if (条件) break; sum=sum+i; 如果有多个循环变量赋初值,或多个循环变量值要修正,应在各变量之间用逗号隔开。for(i=1, j=10; i=j; i+, j- -) k=i+j;如:循环条件表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,每次系统判断该表达式的结果不为0,就执行一遍循环体。for(m=0;( c=getchar( ) ) != !;) m=m+c;如:考虑问题:运行程序时如何停止循环?2024/8/2256for、while、dowhile的互相转化i=1;sum=0;do

53、sum=sum+i; i+;while(i=100);for (i=1; i=100; i+) sum=sum+i;i=1; sum=0;while(i=100) sum=sum+i; i+;2024/8/2257输出所有的水仙花数。输出所有的水仙花数。(水仙花数就是一个三位数,这个数正好等于该数的(水仙花数就是一个三位数,这个数正好等于该数的每一位的立方和。每一位的立方和。 例如:例如: 153=1*1*1+5*5*5+3*3*3)void main()for()a=i/100;c=i%10; 2024/8/2258补充:循环的嵌套补充:循环的嵌套一个循环体内又包含另一个完整的循环结构,称为

54、循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。while ( ) while ( ) for ( ; ; ) for ( ; ; ) do do while ( ); while ( );while ( ) for ( ; ; ) for ( ; ; ) do while( ); while ( ) do while( ); 2024/8/2259例:输出如图所示的矩形:例:输出如图所示的矩形:* * * * * * * * * * * * * * * * *void main( ) printf(*n); printf(*n); printf(*n); printf(*n);void

55、main( ) int i, j ; i=1; while (i=4) while ( j=5 ) printf(“*”); j+;j=1;printf(“n”);i+;2024/8/2260#include void main( ) int i , j ; i=1; while (i=4) for (j=1; j=5;j+) putchar(*); putchar(n); i+; #include void main( ) int i , j ; for ( i=1; i=4; i+) for (j=1; j=5; j+) putchar(*); putchar(n); 例:输出如图所示的矩

56、形:例:输出如图所示的矩形:* * * * * * * * * * * * * * * * *内外层循内外层循环的循环环的循环控制变量控制变量不能重名不能重名2024/8/2261例:输出如图所示的三角形:例:输出如图所示的三角形:* * * * * * * *特点:第i行有i个星号#include void main( ) int i , j ; for( i=1; i=4; i+) for (j=1; ; j+) putchar(*); putchar(n); j=i2024/8/2262例:输出如图所示的等腰三角形:例:输出如图所示的等腰三角形:* * * * * * * * * * *

57、 * *特点:一共有4行,第i行有2i-1个星号;第i行的第1个星号前有4-i个空格#include main( ) int i , j ; for( i=1; i=4; i+) for (j=1; j=4-i; j+) putchar(32); for (j=1; j=2*i-1; j+) putchar(*); putchar(n); 2024/8/2263例:输出如图所示的菱形:例:输出如图所示的菱形:* * * * * * * * * * * * * * * * * * *分析:将图形分为上下两部分分别输出!2024/8/2264* * * * * * * * * * * * * *

58、* * * * *for ( i=1; i=4 ; i+) for ( j=1; j=4-i ; j+) putchar( ); for ( k=1; k=1 ; i- -) for ( j=1; j=4-i ; j+) putchar( ); for ( k=1; k=2*i-1 ; k+) putchar(*); putchar(n); 2024/8/2265几种循环的比较几种循环的比较、C语言中的三种循环结构都由表达式控制执行一个循环语言中的三种循环结构都由表达式控制执行一个循环体,体,一般情况下可以相互代替一般情况下可以相互代替;、用、用while和和do-while循环时,循环变量初

59、始化的操作应循环时,循环变量初始化的操作应在在while和和do-while语句之前完成;而语句之前完成;而for语句一般在表达式语句一般在表达式1中实现循环变量的初始化;中实现循环变量的初始化;、当、当循环次数及控制条件循环次数及控制条件要要在程序运行过程中确定在程序运行过程中确定时,时,选用选用while或或do-while语句;语句;、在、在初值、增量及控制条件明显初值、增量及控制条件明显,或,或循环次数已经给定循环次数已经给定的情况下,选用的情况下,选用for语句;语句;2024/8/2266、在循环的执行过程中,应、在循环的执行过程中,应不断的改变循环控制表达式不断的改变循环控制表达

60、式的值的值,以便逐步形成使它为,以便逐步形成使它为0 0的条件,否则将可能出现死的条件,否则将可能出现死循环;循环;、三种循环可以相互嵌套,形成多重循环,外循环可以、三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,包含多个或多重内循环,循环之间可以并列但不能相交循环之间可以并列但不能相交,并列的循环控制变量可以同名并列的循环控制变量可以同名,但,但嵌套的循环控制变量不嵌套的循环控制变量不能同名能同名;、不允许不允许用其它的控制语句用其它的控制语句把程序流程从循环体外转入把程序流程从循环体外转入循环体内循环体内,但必要时可以用,但必要时可以用breakbreak、gotogo

61、to等语句把流程从等语句把流程从循环体内转到循环体外。循环体内转到循环体外。2024/8/22672.4 break和和continue语句语句2.4.1 break语句语句1 1、格式:、格式: break;2、功能:、功能: 中止当前循环语句或中止当前循环语句或switch语句的执行语句的执行3、说明:、说明:、若是多重循环,、若是多重循环,break只能使流程跳出离只能使流程跳出离break最近的一层;最近的一层;、break只用于只用于switch语句语句和和循环语句循环语句。case 6 : case 6 : case 7 : case 7 : printf(Resetnprintf

62、(Resetn); break;); break;2024/8/2268例例2.14:计算:计算 r=1到到 r=10时的圆面积,直到面积大于时的圆面积,直到面积大于100为止为止#include void main( ) float r, area; for (r =1; r 100) break; printf(%6.2fn, area); 输出结果输出结果输出结果输出结果: : 3.14 3.14 12.56 12.56 28.26 28.26 50.24 50.24 78.50 78.502024/8/22692.4.2continue语句语句1、格式:、格式: continue;2、

63、功能:、功能: 提前结束本次循环体的执行提前结束本次循环体的执行(不再执行循环体中(不再执行循环体中continue后面的语句),后面的语句),接着进行下一次是否执行接着进行下一次是否执行循环的判定循环的判定3、说明:、说明:、continue语句只能用于语句只能用于循环语句循环语句中,它是一中,它是一种具有特殊功能的转移语句;种具有特殊功能的转移语句;、continue与与break不同不同:continue语句只结束语句只结束本次循环本次循环,而不是终止整个循环的执行;而,而不是终止整个循环的执行;而break语句语句则结束整个循环则结束整个循环,不再判断循环条件是否成立。,不再判断循环条

64、件是否成立。2024/8/2270例例2.15:把:把10到到20之间能被之间能被3整除的数输出整除的数输出#includevoid main( ) int n; for (n=10; n=20; n+) if (n%3!=0) continue; printf(%d , n); printf(“n%dn”,n)breakbreakbreakbreak; ; ; ;12 15 18 12 15 18 12 15 18 12 15 18 2121212110101010while ( )while ( ) break;break; .while ( )while ( ) continue;con

65、tinue; .2024/8/2271经典问题:判断素数经典问题:判断素数素数是除了素数是除了1和它自身不能被任一个数整除的数。和它自身不能被任一个数整除的数。算法提示:算法提示:1、可以让除数从、可以让除数从2n1逐个去除该数逐个去除该数n,判判断是否断是否被其中的任何一个整数整除被其中的任何一个整数整除,如果是,则说明不是,如果是,则说明不是素数。如果一直都没有出现过整除现象,则说明该数是素素数。如果一直都没有出现过整除现象,则说明该数是素数。数。for(i=2;i=n) printf(“ %d is sushu!”,n);2024/8/2272判断素数判断素数算法改进算法改进1:可以定义

66、一个标志变量,判断起来很方便。可以定义一个标志变量,判断起来很方便。flag0;for(i=2;in;i+) if(n%i=0) flag=1; break;if(flag=0) printf(“ %d is sushu!”,n);2024/8/2273判断素数判断素数算法改进算法改进2:可以进一步减少循环次数。循环的终止条件可可以进一步减少循环次数。循环的终止条件可缩小为缩小为n/2,或或k=n/2; 或或 k=for(i=2;i=k+1) printf(“ %d is sushu!”,n);2024/8/2274例:例:打印打印3100之间的全部素数。之间的全部素数。for (m=3; m

67、=100; m+=2) k=sqrt(m);for (i=2; i=k; i+) if (m%i=0) break; if (i= = ) printf(%-5d,m);k+1?void main() int i,k,m; 2024/8/2275判断n是否素数,补全程序main() int i, n, flag=0; for(i=2; _; i+) if ( _ ) flag=1; if ( _ ) printf(“是素数n”); inn%i=0flag=02024/8/2276经典算法一(穷举法):百鸡百钱问题一只公鸡值一只公鸡值5元,一只母鸡值元,一只母鸡值3元,三只小鸡值元,三只小鸡值1

68、元,元,总共有总共有100元钱要买一百只鸡,问有多少种方案?元钱要买一百只鸡,问有多少种方案?#include void main( ) int x,y,z; printf(* 百鸡问题百鸡问题 *n); for (x=1;x20;x+) for (y=1;y33;y+) for (z=3;z100;z+=3) if (5*x+3*y+z/3=100 & x+y+z=100) printf(cock:%d,hen:%d,chicken:%dn,x,y,z);2024/8/2277v程序使用了三层循环来解决问题,程序结程序使用了三层循环来解决问题,程序结构简单明了。但是我们设计程序不仅要正构简单

69、明了。但是我们设计程序不仅要正确无误,还要注意程序的执行效率。确无误,还要注意程序的执行效率。v一般来说,在循环嵌套中,内层循环执行一般来说,在循环嵌套中,内层循环执行的次数等于该循环嵌套结构中每一层循环的次数等于该循环嵌套结构中每一层循环重复次数的乘积。重复次数的乘积。 例如,上面的程序中,外层每循环一次,第二层例如,上面的程序中,外层每循环一次,第二层要循环要循环32次,而第三层要循环次,而第三层要循环32*33=1056次。这次。这样程序执行下来,最内层的样程序执行下来,最内层的if语句要执行语句要执行19*32*33次。所以我们在编写程序时,需要考虑次。所以我们在编写程序时,需要考虑尽

70、可能的减少循环执行的次数,特别是循环的嵌尽可能的减少循环执行的次数,特别是循环的嵌套。套。2024/8/2278对于“百鸡问题”,由方程组:x+y+z=100,5x+3y+z/3=100可以导出: x=4z/3-100 y=100-x-z这样就只有z一个未知数,如果知道了z就可以求出x值,进而求出y值。因此我们只要将z作为循环变量就可以了。2024/8/2279#include void main() int x,y,z; printf(“* 百鸡问题百鸡问题 *n”); for (z=3;z=1;day-) x1=(x2+1)*2; x2=x1; printf(peach are %dn,x

71、1);2024/8/22832.6 指针程序设计指针程序设计2.6.1指针指针1 1、指针指针指针指针的含义:变量的地址的含义:变量的地址的含义:变量的地址的含义:变量的地址指针变量就是一类存取其他变量或函数的地址的变量。指针变量就是一类存取其他变量或函数的地址的变量。指针变量就是一类存取其他变量或函数的地址的变量。指针变量就是一类存取其他变量或函数的地址的变量。说明说明说明说明:(1 1)系统为每个变量分配一个确定、唯一的地址。)系统为每个变量分配一个确定、唯一的地址。)系统为每个变量分配一个确定、唯一的地址。)系统为每个变量分配一个确定、唯一的地址。(2 2)存取变量的值时,有两种方式:)

72、存取变量的值时,有两种方式:)存取变量的值时,有两种方式:)存取变量的值时,有两种方式:1 1)直接访问直接访问直接访问直接访问:通过变量名;通过变量名;通过变量名;通过变量名;2 2)间接访问间接访问间接访问间接访问:通过变量的地址。:通过变量的地址。:通过变量的地址。:通过变量的地址。(3 3)变量的地址就是其所占内存空间的首地址。)变量的地址就是其所占内存空间的首地址。)变量的地址就是其所占内存空间的首地址。)变量的地址就是其所占内存空间的首地址。2024/8/22842 2、指针变量指针变量指针变量指针变量的定义:的定义:的定义:的定义: 基类型基类型基类型基类型 * *指针变量名指针

73、变量名指针变量名指针变量名=初始值初始值初始值初始值; ;变量名前的变量名前的* *表示该变量表示该变量是一个指针变量,以示是一个指针变量,以示与普通变量的区别。与普通变量的区别。可以是可以是C C语言中的任何一语言中的任何一种数据类型,是指针变量种数据类型,是指针变量所指向的对象的类型。所指向的对象的类型。初始值可以省略初始值可以省略初始值可以省略初始值可以省略例如:例如:例如:例如: intint i=65535, *pi=&i; i=65535, *pi=&i; /定义指针变量的同时赋初值定义指针变量的同时赋初值定义指针变量的同时赋初值定义指针变量的同时赋初值 char c=z,*pcc

74、har c=z,*pc; pcpc=&c;=&c; /先定义变量,再赋初值先定义变量,再赋初值先定义变量,再赋初值先定义变量,再赋初值 指针变量、变量、变量地址和变量的值的关系指针变量、变量、变量地址和变量的值的关系指针变量、变量、变量地址和变量的值的关系指针变量、变量、变量地址和变量的值的关系见下图见下图见下图见下图 2024/8/228501111000111111110001001000000000.01111100111111110001001000000000.1111111111111111000000000000000001111010变量的值变量的值0012FF670012FF

75、680012FF690012FF6A.0012FF700012FF710012FF720012FF73.0012FF780012FF790012FF7A0012FF7B0012FF7C内存地址内存地址指针变量指针变量 pi指针变量指针变量 pc整型变量整型变量 i字符变量字符变量 c变量名称变量名称 指针变量、变量、变量地址和变量的值的关系示意图指针变量、变量、变量地址和变量的值的关系示意图122 z655352024/8/22862.6.2 指针变量的使用指针变量的使用1、指针变量的赋值、指针变量的赋值(1)通过地址运算)通过地址运算(&)赋值赋值 例如:例如: float f, *p; p

76、=&f;(2)通过指针变量的初始化赋值)通过指针变量的初始化赋值 例如:例如:float f, *p=&f;(3)通过其他指针变量赋值)通过其他指针变量赋值 例如:例如:int i, *p1=&i, *p2; p2=p1;(4)用)用NULL给指针变量赋空值给指针变量赋空值 例如:例如:int *p; p=NULL;单目运算符单目运算符两个指针变量的两个指针变量的类型必须相同类型必须相同NULL是符号常量,是符号常量,和整数和整数0对应。对应。相当于:相当于:p=0;或或p=0;2024/8/2287除了上述除了上述4种情况外,指针变量还可以指向数种情况外,指针变量还可以指向数组、字符串、结构

77、体、函数、文件及调用标组、字符串、结构体、函数、文件及调用标准函数(准函数(malloc、calloc)等。)等。2024/8/22882、指针运算符(、指针运算符(*)通过指针变量可以间接地存取变量的数据。通过指针变量可以间接地存取变量的数据。例如:例如: 已知有定义:已知有定义:int x, *p; p=&x; 则则 x=6;和和*p=6;等价等价 scanf(“%d”,&x); 和和 scanf(“%d”,p);等价等价2024/8/2289例例2.18 由键盘输入一个正整数,求出其最由键盘输入一个正整数,求出其最高位数字。请用指针完成本题高位数字。请用指针完成本题#include vo

78、id main() int i,*p; p=&i; /指针变量指向变量指针变量指向变量i printf(请输入一个正整数:请输入一个正整数:); scanf(%d, p); /本语句等价于本语句等价于scanf(%d, &i); while (*p=10) *p= *p/10; /求出该正整数的最高位数字求出该正整数的最高位数字 printf(最高位数字是:最高位数字是:%dn, *p);2024/8/2290例例2.19 输入两个数,并按从大到小输出。输入两个数,并按从大到小输出。请用指针完成本题。请用指针完成本题。#include void main(void) int x,y,t; in

79、t *p,*q; p = &x; /指针变量指针变量p,指向整型变量,指向整型变量x q = &y; /指针变量指针变量q,指向整型变量,指向整型变量y scanf(“%d,%d”,p,q);/与与scanf(“%d,%d”,&x,&y)等价等价 if(*p*q) /相当于相当于 if(xy) t = *p; /相当于相当于t=x *p = *q; /相当于相当于x=y *q = t; /相当于相当于y=t printf(nx=%d y=%d,x,y ); /*也可用也可用printf(nx=%d y=%d,*p,*q );输出输出*/2024/8/2291#include void main

80、(void) int x,y; int *p,*q,*t; p = &x; /指针变量指针变量p,指向整型变量,指向整型变量x q = &y; /指针变量指针变量q,指向整型变量,指向整型变量y scanf(“%d,%d”,p,q);/与与scanf(“%d,%d”,&x,&y)等价等价 if(*p*q) /*以下语句仅仅是指针指向交换,以下语句仅仅是指针指向交换,x和和y的值并没有交换的值并没有交换*/ t = p; /指针指向交换指针指向交换 p = q; q = t; printf(nx=%d y=%d,*p,*q ); /*不能用不能用printf(nx=%d y=%d,x,y);输出输出*/ 2024/8/2292 题目:题目: 从键盘输入若干学生的成绩,直到输从键盘输入若干学生的成绩,直到输入入-1 -1为止,求其中的最高分并输出。要求为止,求其中的最高分并输出。要求用指针变量实现对变量的访问。用指针变量实现对变量的访问。 2024/8/2293

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号