《C语言程序设计 C语言控制语句.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计 C语言控制语句.pptx(112页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/4/13本章介绍l l数据输出l l数据输入l l顺序结构程序设计l l分支结构程序设计l l循环结构程序设计第1页/共112页2023/4/13程序的三种基本结构 顺序结构N-S结构图流程图ABAB选择结构选择结构YNABP成立?PTFAB第2页/共112页2023/4/13程序的三种基本结构循环结构NYP成立?A当P成立时A直到型循环直到型循环 A当P成立时YNAP成立?当型循环当型循环N-S结构图流程图第3页/共112页2023/4/133.1 结构化程序设计3种基本结构特点:只有一个入口和一个出口结构内的每一个框都有机会被执行结构内没有死循环仅包含3种基本结构的程序称为结构化
2、程序第4页/共112页2023/4/133.2顺序结构程序设计主要内容:字符输出函数格式输出函数字符输入函数格式输入函数顺序结构程序设计举例第5页/共112页2023/4/133.2.1 字符输出函数 函数调用的一般形式 putchar(ch)功能:在标准输出设备(即显示器屏幕显示器屏幕)上输出一个字符输出一个字符。l l例如:putchar(b);putchar(n);putchar(101);putchar(st);输出:b输出:回车换行输出:A第6页/共112页2023/4/13说明 putcharputchar是是C C语言的标准库函数,使用时必须加编译预处理命令:语言的标准库函数,使
3、用时必须加编译预处理命令:#include stdio.hinclude stdio.h 或#include include【例3.1】利用putchar函数输出字符。#includestdio.hincludestdio.hmain()charc1,c2;c1=a;c2=b;putchar(c1);putchar(c2);putchar(n);putchar(c1-32);putchar(c2-32);putchar(n);也可改为也可改为c1=c1=9797;c2=;c2=9898;输出结果:输出结果:ababABAB第7页/共112页2023/4/133.2.2 格式输出函数 函数调用的
4、一般形式 printf(格式控制字符串,输出表列)功能:按按格式控制所指定的格式,在标准输出设备上输出所指定的格式,在标准输出设备上输出 输出表列各项的值。输出表列各项的值。l l例如有程序段例如有程序段:inta=123,b=100;printf(%d%d%dn,a,b,a+b);printf(c=%d+%d=%dn,a,b,a+b);2023/4/13输出:123100223输出:输出:c=123+100=223 第8页/共112页2023/4/13格式控制字符串 用双引号括起的字符串,用于指定用双引号括起的字符串,用于指定输出数据的类型、格式、个数输出数据的类型、格式、个数 包括:包括:
5、非格式字符和和格式字符照原样输出printf(c=%d+%d=%dn,a,b,a+b);格式字符:指定输出3 3个十进制整型数,分别为变量 a a、b b、a ab b的值第9页/共112页2023/4/13输出格式说明符整型整型整型整型数据数据数据数据%d 以有符号以有符号以有符号以有符号十进制十进制十进制十进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数%o 以无符号以无符号以无符号以无符号八进制八进制八进制八进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数%x 以无符号以无符号以无符号以无符号十六进制十六进制十六进制十六进制形式输出整型数形式输出整型数形式输出整型
6、数形式输出整型数%u以无符号以无符号以无符号以无符号十进制十进制十进制十进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数实型实型实型实型数据数据数据数据%f以以以以小数小数小数小数形式输出实型数形式输出实型数形式输出实型数形式输出实型数%e 以以以以指数指数指数指数形式输出实型数形式输出实型数形式输出实型数形式输出实型数%g 按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数字符型字符型字符型字符型数据数据数据数据%c 输出输出输出输出一个字符一个字符一个字符一个字符%s 输出输出输出输出字符串字符串字符串字符串
7、其他其他其他其他%输出字符输出字符输出字符输出字符%本身本身本身本身在和格式符之间可以使用在和格式符之间可以使用附加说明符第10页/共112页2023/4/13附加格式说明符 l l输出长整型数(只可与输出长整型数(只可与输出长整型数(只可与输出长整型数(只可与d d、o o、x x、u u结合用)结合用)结合用)结合用)mm指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽).n n对实型数据对实型数据对实型数据对实型数据,指定输出,指定输出,指定输出,指定输出 nn位小数;位小数;位小数;位小数;对字符串对字符串对字符串对字符串,
8、指定左端截取,指定左端截取,指定左端截取,指定左端截取nn个字符输出个字符输出个字符输出个字符输出+使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出整数位数整数位数+小数位数小数位数+小数点小数点 自动对自动对n n位后小数四舍五入位后小数四舍五入 例如:%ld d 输出十进制输出十进制长整型数%m.nf f 右对齐,右对齐,mm位位域宽,n位小数或或n n个字个字符符%
9、-m.nf f 左对齐左对齐 第11页/共112页2023/4/13例3.2 整型数据的输出main()int aint a=1111,b b=2222;int mint m=-1-1;long nlong n=123456789123456789;printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);printf(m:%d,%o,%x,%un,m,m,m,m);printf(n=%dn,n);printf(n=%ldn,n);程序输出:程序输出:1122a=11,b=22m:-1,37777777777,ffffffff,4294967295n=123456789
10、n=123456789VC+环境下运行结果第12页/共112页2023/4/13例3.3 实型数据的输出main()float xfloat x=1234.561234.56,y y=1.234567891.23456789;double zdouble z=1234567.1234567891234567.123456789;printf(x=%f,y=%f n,x,y);printf(z=%fn,z);printf(z=%en,z);printf(z=%18.8fn,z);printf(x=%10.3fn,x);printf(x=%-10.3fn,x);printf(x=%4.3fnn,x
11、);程序输出:程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234567.12345679x=1234.560 x=1234.560 x=1234.560第13页/共112页2023/4/13例3.4 字符型数据的输出main()int mint m=9797;char chchar ch=BB;printf(m:%d%cn,m,m);printf(ch:%d%cn,ch,ch);printf(%sn,student);printf(%10sn,student);printf(%-10sn,student);print
12、f(%10.3sn,student);printf(%.3snn,student);程序输出:程序输出:m:97 ach:66 Bstudent studentstudent stustu第14页/共112页2023/4/13注意:printfprintf函数格式控制中的格式字符与输出表列函数格式控制中的格式字符与输出表列参数的个数和类型必须参数的个数和类型必须一一对应。格式说明符的格式说明符的%和后面的描述符之间不能有和后面的描述符之间不能有空格。空格。长整型数应该用长整型数应该用ld(或lo、lx、lu)格式输出,否则会出现输出错误。格式输出,否则会出现输出错误。printfprintf函
13、数的参数可以是常量、变量或表达式。函数的参数可以是常量、变量或表达式。第15页/共112页2023/4/133.2.3 字符输入函数 函数调用的一般形式 getchar()功能:从标准输入设备(即键盘键盘)上输入一个字符输入一个字符。l l例如:getchar();c=getchar();printf(%cn,getchar();第16页/共112页2023/4/13例如:【例3.5】getchar函数的应用。#includestdio.hincludestdio.hmain()charch;ch=getchar();ch=getchar();printf(%c%dn,ch,ch);print
14、f(%c%dn,ch-32,ch-32);程序运行时输入:程序运行时输入:mm 并按回车键后并按回车键后输出结果是:输出结果是:m109m109M77M77第17页/共112页2023/4/13说明:getchargetchar是是C C语言的标准库函数,使用时必须加编译预处理命令:语言的标准库函数,使用时必须加编译预处理命令:#include stdio.hinclude stdio.h 或#include include getchargetchar函数需要函数需要交互输入,接收到输入字符之后才继续执行程序。,接收到输入字符之后才继续执行程序。连续使用连续使用getchargetchar函
15、数时,要注意字符的输入形式函数时,要注意字符的输入形式 ,例如执行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必须连续输入两个必须连续输入两个字符,中间不能有字符,中间不能有其他字符其他字符第18页/共112页2023/4/133.2.4 格式输入函数 函数调用的一般形式 scanf(格式控制字符串,地址表列);功能:按格式控制指定的格式,从标准输入设备按格式控制指定的格式,从标准输入设备(即键盘即键盘)交互输入数据,并依次存放到对应地交互输入数据,并依次存放到对应地址表列参数指定的变量中址表列参数指定的变量中(即将输入值赋给变即将输入值赋给变量
16、量)。例如:scanf(%d%f,&a,&f);scanf(%o,%f,&b,&x);scanf(a=%d,b=%d,&a,&b);第19页/共112页2023/4/13格式控制字符串 用双引号括起的字符串,用于指定用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式输入数据的类型、格式、个数以及输入的形式 包括:包括:非格式字符和和格式字符照原样输入scanf(a=%d,b=%d,&a,&b);格式字符:指定输入2 2个十进制整型数赋给变量 a a 和 b b第20页/共112页2023/4/13输入格式说明符整型整型整型整型数据数据数据数据%d输入输入输入输入十进制十进制
17、十进制十进制整型数整型数整型数整型数%u输入无符号的输入无符号的输入无符号的输入无符号的十进制十进制十进制十进制整型数整型数整型数整型数%o输入输入输入输入八进制八进制八进制八进制整型数整型数整型数整型数%x输入输入输入输入十六进制十六进制十六进制十六进制整型数整型数整型数整型数实型实型实型实型数据数据数据数据%f输入输入输入输入小数小数小数小数形式的单精度实型数形式的单精度实型数形式的单精度实型数形式的单精度实型数%e输入输入输入输入指数指数指数指数形式的单精度实型数形式的单精度实型数形式的单精度实型数形式的单精度实型数字符型字符型字符型字符型数据数据数据数据%c输入输入输入输入单个字符单个
18、字符单个字符单个字符%s输入输入输入输入一个字符串一个字符串一个字符串一个字符串在和格式符之间可以使用附加说明符在和格式符之间可以使用附加说明符第21页/共112页2023/4/13附加格式说明符 l l与与与与d d、o o、x x、u u结合结合结合结合输入长整型数输入长整型数输入长整型数输入长整型数与与与与 f f结合结合结合结合输入输入输入输入doubledouble型数型数型数型数h h与与与与d d、o o、x x、u u结合结合结合结合输入短整型数输入短整型数输入短整型数输入短整型数mm指定输入数据的宽度指定输入数据的宽度指定输入数据的宽度指定输入数据的宽度*忽略读入的数据忽略读
19、入的数据忽略读入的数据忽略读入的数据(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)例如:%l ld、%l lo输入十进制、八进制长整型长整型数数%lf lf、%le%le输入双精度实型数%mmf输入m位数(域宽域宽)%*d忽略输入的一个整型数此变量接收下一个数据对对floatfloat和和doubledouble型指型指整数位数整数位数+小数点小数点+小数位数小数位数第22页/共112页2023/4/13例如:scanf(%d%d%d,&a,&b,&c);输入3个十进制整型数,以空白符空白符(空格空格、tabtab键键或
20、回车键)回车键)分隔 scanf(%d,%o,%f,&a,&b,&x);输入3个数,以“,”分隔scanf(a=%d,b=%d,&a,&b);输入的形式是:a=a=32,b=,b=28(普通字符要照原样输入)第23页/共112页2023/4/13程序举例例1:格式控制串中分隔符的应用。main()int a,b,c,d;scanf(%d%d,&a,&b);scanf(%d,%d,&c,&d);printf(n%d,%d,%d,%d,a,b,c,d);运行时输入:123,4输出:可以这样输入吗?123,4输出:1,2,3,41,2,3,4第24页/共112页2023/4/13例例2 2:c c格
21、式符的使用。格式符的使用。main()char c1,c2,c3;scanf(%c%c,&c1,&c2);scanf(%c,&c3);printf(“%c,%c,%cn,c1,c2,c3);运行时输入:ABC输出:?思考:思考:若输入若输入:AB(AB(回车回车)C C输出输出:?第25页/共112页2023/4/13例例3:f3:f格式符的使用。格式符的使用。main()float x,y;double z;scanf(%f,&x);scanf(%6f%6lf,&y,&z);printf(x=%f,y=%f,z=%12.8fn,x,y,z);运行时输入:531.56212.345678.31
22、5输出:注意:注意:floatfloat型型7 7位有效,位有效,doubledouble型型15161516位有效。位有效。x=531.562012,y=12.345000,z=678.31000000 x=531.562012,y=12.345000,z=678.31000000第26页/共112页2023/4/13例例4 4s s格式符的使用。格式符的使用。main()char a10,b10;scanf(%s%s,a,b);printf(%sn%sn,a,b);运行时输入:Howdoyoudo!输出:Howdo第27页/共112页2023/4/13例例5 5抑制符的使用。抑制符的使用。
23、main()main()int a,b;int a,b;scanf(scanf(“%2d%*3d%2d%2d%*3d%2d”,&a,&b);,&a,&b);printf(printf(“a=%d b=%da=%d b=%d”,a,b);,a,b);输入:1234567输出:?a=12 b=67第28页/共112页2023/4/13使用scanf函数应注意:要求要求在程序运行中输入数据,输入的数据个数,输入的数据个数和类型必须与格式说明符一一对应。和类型必须与格式说明符一一对应。地址参数形式:地址参数形式:&变量名(除数组或指针变量)。(除数组或指针变量)。格式控制中格式控制中有非格式字符时,时
24、,必须照原样输入。格式控制中格式控制中无非格式字符时,输入的时,输入的数值型数据和字符串用空白符分隔,用空白符分隔,字符型数据不必分不必分隔。隔。double型数据输入时,必须用数据输入时,必须用%lf或或%le格式。格式。实型数输入时域宽输入时域宽不能用m.n形式的附加说明。的附加说明。为了减少不必要的输入量,格式控制中尽量不为了减少不必要的输入量,格式控制中尽量不要出现普通字符,也不要使用要出现普通字符,也不要使用 n n 、tt 等转等转义字符。义字符。第29页/共112页2023/4/13l lscanf(%c%c%c,&ch1,&ch2,&ch3);要输入:abc 不能输入:a b
25、c l l注意数值型数据与注意数值型数据与char型数据的混合输入型数据的混合输入注意(续):格式符之间若无普通字符,则:输入的数值型数据数值型数据用空白符分隔输入的 charchar型数据型数据不必分隔 例如:例如:scanf(%d%d,&m,&n);scanf(%c,&ch);错误输入:32 28 a 正确输入:32 28a 第30页/共112页2023/4/133.2.5 顺序结构程序设计举例顺序结构程序的一般算法描述变量定义变量赋值运算处理输出结果可用:变量初始化赋值语句输入函数调用语句注意各个语句的顺序注意各个语句的顺序第31页/共112页2023/4/133.2.5 顺序结构程序设
26、计举例【例3-11】数据交换。从键盘输入a、b的值,输出交换以后的值。思路:思路:在计算机中交换变量a和b的值:a=b;b=a;正确的交换方法:a123b78c?12378123c=a;a=b;b=c;第32页/共112页2023/4/13程序:main()int a,b,c;printf(ninput a,b:);scanf(%d,%d,&a,&b);printf(nbefore exchange:a=%d b=%dn,a,b);c=a;a=b;b=c;/*数据交换*/printf(after exchange:a=%d b=%dn,a,b);程序运行情况如下:inputa,b:32,57
27、beforeexchange:a=32b=57afterexchange:a=57b=32第33页/共112页2023/4/13举例(补充)【例3.6】已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式:其中:设定义:整型变量a、b、c实型变量s、area第34页/共112页2023/4/13程序如下:#include math.hmain()int a,b,c;float s,area;scanf(%d,%d,%d,&a,&b,&c);s=1/2*(a+b+c);area=sqrt(s(s-a)(s-b)(s-c);printf(area=%8.3f n,area);程序运行情况如
28、下:3,4,5 area=6.000实际上还需要判断实际上还需要判断a a、b b、c c是否能构成三角形,即应该是否能构成三角形,即应该进行选择判断处理进行选择判断处理 第35页/共112页2023/4/13举例(补充)【例3.7】从键盘输入两个整数,输出它们相除的余数及商(要求保留2位小数)。例如输入的例如输入的mm和和n n分别为分别为100100和和1818,输出形式为:,输出形式为:mmn n1010m/n=5.56m/n=5.56main()intm,n;printf(ninputm,n:);scanf(%d,%d,&m,&n);printf(nm%n=%dn,m%n);print
29、f(m/n=%.2f%.2fn,(float)(float)m/n);第36页/共112页2023/4/13举例:【例3-12】输入时间(时、分、秒),然后打印输出共计多少秒?分析:第37页/共112页2023/4/13程序如下:#include void main()short hour,min,sec;long total;printf(%nEnter hour:min:sec:);scanf(%d:%d:%d,&hour,&min,&sec);total=hour*3600+min*60+sec;printf(n The total second=%ld,total);程序运行情况如下:
30、Enterhour:min:sec:3:10:50 Thetotalsecond=11450思考:思考:totaltotal的数据类型的数据类型如何处理?如何处理?第38页/共112页2023/4/1339提出问题:自然语言:如果 则 否则C语言:分支语句问题问题1 1:如何根据收入,确定他的纳税比例及纳税额?如何根据收入,确定他的纳税比例及纳税额?问题问题2 2如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?第39页/共112页2023/4/13403.3 分支结构程序设计3.3.1 if条件分支语句3.3.2 switch多路开关语句第40页/共112页2023/4/134
31、1单分支语句语句一般格式 if(表达式表达式)语句语句l l功能:功能:计算计算表达式的值表达式的值,如果如果是一个非是一个非0 0值(即值(即逻辑真),就执行内嵌语句,逻辑真),就执行内嵌语句,否则否则(即逻(即逻辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:内嵌语句,可为:赋值语句赋值语句函数调用语句函数调用语句控制语句控制语句复合语句复合语句空语句空语句可为算术、关系、逻辑、赋值可为算术、关系、逻辑、赋值等合法的表达式等合法的表达式第41页/共112页2023/4/1342单分支语句的算法:例如:if if(x0)m+;if if(ab)c=
32、a;a=b;b=c;表达式非0TF语句N-S结构图结构图语句流程图流程图NY表达式非0?第42页/共112页2023/4/1343双分支语句 语句一般格式if(表达式表达式)语句语句1 1 else 语句语句2 2 功能:计算表达式的值表达式的值,如果如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。第43页/共112页2023/4/1344双分支语句的算法:例如:if if(x0)m+;elseelse m-;if if(ch=a&ch=z)ch=ch-32;printf(%cn,ch);else
33、else printf(%cn,ch);表达式非0TF语句1语句2N-S结构图结构图语句1语句2流程图流程图NY表达式非表达式非0?第44页/共112页2023/4/1345多分支语句 语句一般格式if(表达式表达式1 1)语句语句1 1 else if(表达式表达式2 2)语句语句2 2 else if(表达式表达式n-1n-1)语句语句n-1n-1 else 语句语句 n n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完哪个语句分支,都转到后续语句第45页/共112页2023/4/1346多重分支语句的算法流程图表达式表达式2?2?表达式表达式1?1?
34、语句语句n n 语句语句1 1 语句语句2 2语句语句n-1n-1Y YN NY YN NN NY Y表达式表达式n-1?n-1?第46页/共112页2023/4/1347多重分支语句的算法N-S结构图 表达式表达式1 1?T FT F 表达式表达式2 2?语句语句1 1 T FT F 语句语句2 2 表达式表达式n-1n-1?T F T F 语句语句n-1 n-1 语句语句n nl l例如:例如:if if(a0)x=-1;(a0)2 (x=0)3x2 (x0)第48页/共112页2023/4/1349程序分析:第49页/共112页2023/4/1350程序:#include void ma
35、in()float x,y;printf(n);scanf(%f,&x);if(x0)y=x-7;if(x=0)y=2;if(x=A&ch=A&ch=65&ch=65&ch=A&ch=A&ch=Z?ch+32:ch);putchar(n)第52页/共112页2023/4/1353(3)if语句的嵌套如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。【例3.9】比较两个整数的关系。#includemain()intx,y;printf(EnterintegerXandY:);scanf(%d%d,&x,&y);if(x!=y)if(xy)printf(XYn);elseprintf
36、(Xy)printf(XYn);elseprintf(XYn);elseprintf(X=Yn);提倡缩格书写提倡缩格书写有利于阅读程序第53页/共112页2023/4/1354l l双(或多)分支双(或多)分支if语句的嵌套形式语句的嵌套形式if(表达式表达式)if语句语句elseif语句语句 if语句嵌套的形式单if语句的嵌套形式 if if(表达式)if 语句 可以是各种形式的if语句可以是各种形式的if语句如果是简单if语句,必须用“”括起第54页/共112页2023/4/1355if(c=50)printf(50=c=100n);elseprintf(c50n);elseif(c=1
37、50)printf(100c150n);if(c=50)printf(50=c=100n);elseprintf(c50n);例如:if(c=50)printf(50=c=100n);与哪个if 配对?匹配规则匹配规则:在在嵌套的嵌套的ififelseelse语句语句中,中,elseelse总是与总是与上面的上面的、离它最近的离它最近的、在同一复合语在同一复合语句中还没有配对的句中还没有配对的ifif配对。配对。else printf(cb)if if(ac)if if (ad)flag=1;elseelse flag=2;elseelse flag=3;if(ab)if(ac)if(ad)f
38、lag=1;elseflag=2;elseflag=3;flag=3flag=3的条件:的条件:flag=3flag=3的条件:的条件:的条件:的条件:当当cca abb时时当当 aa bb时时例如:第56页/共112页2023/4/1357举例【例3.10】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。定义变量x输入x的值x是奇数TF输出“odd”x是5的倍数输出“even”TF是5的倍数x%2!=0?x%5等于0?第57页/共112页2023/4/1358程序:main()int x;scanf(%d,&x);if(x%2!=0)printf(%d is an
39、odd n,x);if(x%5=0)printf(%d is the times of 5 n,x);else printf(%d is an even n,x);等价于等价于if(if(x%2x%2).).等价于等价于if(if(!(x%5)!(x%5).).思考:如果没有思考:如果没有,算法和输出如何?,算法和输出如何?第58页/共112页2023/4/1359学习if语句的难点正确用表达式描述条件例如:当x大于5小于10时令x自增 if(5x10 )x+;l lifelse语句的配对语句的配对l l正确判断内嵌语句正确判断内嵌语句例如:if(xy)x=x+3;y=y-2;elsex=x-
40、3;y=y+2;第59页/共112页2023/4/1360选择结构举例【例3.13】输入年份,判别该年是否为闰年。思路:思路:年份年份yearyear为闰年的条件为为闰年的条件为 能够被能够被4 4整除,但不能被整除,但不能被100100整除的年份;整除的年份;能够被能够被400400整除的年份。整除的年份。只要满足任意一个就可以确定它是闰年。只要满足任意一个就可以确定它是闰年。例如:例如:19961996年、年、2002008 8年是闰年年是闰年20062006年、年、19001900年不是闰年年不是闰年设定标志变量leapleap,只要符合其中一个条件的就是闰年,令 leap=1leap=
41、1;否则令 leap=0leap=0 第60页/共112页2023/4/1361算法:定义变量year、leap 输入年份year 能被能被4 4整除且整除且 不能被不能被100100整除?整除?T F 能被能被400400整除?整除?leap=1 T F leap=1 leap=0 leap=1?T F 是闰年 不是闰年year%400=0year%400=0year%4=0&year%100!=0第61页/共112页2023/4/1362程序:main()int year,leap;scanf(%d,&year);if(year%4=0&year%100!=0)leap=1;else if
42、(year%400=0)leap=1;else leap=0;if(leap=1)printf(%d is a leap year n,year);else printf(%d is not a leap year n,year);第62页/共112页2023/4/13633.3.2 switch多路开关语句 switch语句的一般形式 switch(表达式表达式)case 常量表达式1:语句序列语句序列1 1 case 常量表达式2:语句序列语句序列2 2 case 常量表达式n:语句序列语句序列n n default:语句序列语句序列n+1n+1 功能:计算表达式的值,与常量表达式的值比较
43、,等于第i个值时,顺序执行语句序列i、i+1、n+1若与所有常量表达式值都不相等,执行语句序列n+1。第63页/共112页2023/4/1364switch语句的算法描述例如:例如:switch(a)case5:printf(&);case5:printf(&);case2:printf(#);default:printf($);当a等于5,输出:$$当a等于2,输出:#$#$当a是其他值,输出:$第64页/共112页2023/4/1365说明:“case 常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语
44、句序列。就从哪个位置开始顺序向下执行语句序列。语句位置影响运行结果语句位置影响运行结果例如:例如:switch(a)case2:printf(#);default:printf($);case5:printf(&);case5:printf(&);当a等于2,输出:#$$&当a是其他值,输出:$&$&当a等于5,输出:&switch与与break语句结合才能实现语句结合才能实现程序的分支程序的分支break;break;当a等于2,输出:#当a等于5,输出:&当a是其他值,输出:$第65页/共112页2023/4/1366switch语句的简单应用【例3.11】已知x=100,y=15,要
45、求输入一个算术运算符(+、-、*或/),并对x和y进行指定的算术运算。思路:思路:设设x x和和y y为为floatfloat型型变量并赋初值;变量并赋初值;输入的运算符输入的运算符opop为为charchar型型变量;变量;根根据据opop的的值值(为为+、-、*、/)进进行行x x和和y y的相加、相减、相乘、相除运算(选择分支);的相加、相减、相乘、相除运算(选择分支);还还要要考考虑虑到到输输入入字字符符不不是是+、-、*或或/时时的的情情况况第66页/共112页2023/4/1367程序:#include stdio.hmain()float x=100,y=15,z;char op
46、;op=getchar();switch(op)case+:z=x+y;break;case -:z=x-y;break;case *:z=x*y;break;case /:z=x/y;break;default:z=0;if(int)z!=0)printf(%f%c%f=%fn,x,op,y,z);else printf(%c is not an operatorn,op);实型数通常不使用z=0或z!=0的比较可用if(if(int)(int)z)z)代替第67页/共112页2023/4/1368注意:switchswitch语句的语句的书写格式:语句体本身必须用花:语句体本身必须用花括号
47、括起;括号括起;casecase和和defaultdefault后面如果有多条语如果有多条语句,则不必加花括号;句,则不必加花括号;casecase和常量表达式和常量表达式之间必须有空格;必须有空格;defaultdefault可以写在语句体的可以写在语句体的任何位置,也可以省略。,也可以省略。break语句可以改变可以改变casecase的语句标号作用,的语句标号作用,终止后续后续casecase语句序列的执行。语句序列的执行。switchswitch语句和语句和breakbreak语句结合,可以实现程序的选择控制。语句结合,可以实现程序的选择控制。允许switch嵌套使用,但同一个,但同一
48、个switchswitch语句中,语句中,任意两个任意两个casecase的常量表达式值不能相同。的常量表达式值不能相同。第68页/共112页2023/4/13693.4 循环结构程序设计while循环控制do-while循环控制for循环控制循环的嵌套第69页/共112页2023/4/13703.4.1 while循环控制 语句一般格式 while(表达式表达式)语句语句 l l一般为一般为关系关系表达式或表达式或逻辑逻辑表达表达式,也可以是式,也可以是C C语言其他类型语言其他类型的合法表达式的合法表达式 l l用来控制循环体是否执行用来控制循环体是否执行l l称为称为内嵌语句内嵌语句,可
49、以是基本语句、,可以是基本语句、控制语句,也可以是复合语句控制语句,也可以是复合语句l l是循环重复执行的部分是循环重复执行的部分 第70页/共112页2023/4/1371功能:计算表达式的值,当为非,当为非0 0(逻辑真)时,执(逻辑真)时,执行行内嵌语句,每执行一次,就判断一次表达式,每执行一次,就判断一次表达式的值,当表达式的值为的值,当表达式的值为0 0 时结束循环,转去执时结束循环,转去执行行whilewhile后面的语句。后面的语句。当表达式为真语句N-SN-S结构图结构图N NY Y流程图流程图表达式非0?语句循环控制条件循环控制条件循环体循环体第71页/共112页2023/4
50、/1372例如:【例3.14】编写程序,求100个自然数的和即:s=1+2+3+s=1+2+3+100+100 思路:寻找加数与求和的规律 加数i i从1变到100,每循环一次,使i增1,直到i的值超过100。i i的初初值值设为1。求和设变量sumsum存放和,循环求sum=sum+isum=sum+i,直至i超过100。第72页/共112页2023/4/1373算法和程序:main()int i,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);程序输出结果:sum=5050i i:循环控制变量循环控制变量sumsum:累