C语言程序设计第3章C语言控制语句.ppt
第第3 3章章 C C语言控制语句语言控制语句 C C 语言程序设计语言程序设计2023/1/16本章介绍本章介绍l l数据输出数据输出l l数据输入数据输入l l顺序结构程序设计顺序结构程序设计l l分支结构程序设计分支结构程序设计l l循环结构程序设计循环结构程序设计2023/1/16程序的三种基本结构程序的三种基本结构 顺序结构顺序结构N-S结结构构图图流流程程图图ABAB选择结构选择结构YNABP成成立立?P T F A B2023/1/16程序的三种基本结构程序的三种基本结构循环结构循环结构NYP成立成立?A当当P成立时成立时 A直到型循环直到型循环直到型循环直到型循环 A当P成立时YNAP成立成立?当型循环当型循环当型循环当型循环N-S结结构构图图流流程程图图2023/1/163.1 结构化程序设计结构化程序设计l l3种基本结构特点:种基本结构特点:只有一个入口和一个出口只有一个入口和一个出口 结结构构内内的的每每一一个个框框都都有有机机会会被被执执行行 结构内没有死循环结构内没有死循环l l仅仅包包含含3种种基基本本结结构构的的程程序序称称为为结结构化程序构化程序2023/1/163.2顺序结构程序设计顺序结构程序设计l主要内容:主要内容:字符输出函数字符输出函数 格式输出函数格式输出函数 字符输入函数字符输入函数 格式输入函数格式输入函数 顺序结构程序设计举例顺序结构程序设计举例2023/1/163.2.1 字符输出函数字符输出函数 l l函数调用的一般形式函数调用的一般形式putchar(ch)l l功能:功能:在标准输出设备(即在标准输出设备(即显示器屏幕显示器屏幕)上)上输输出一个字符出一个字符。l l例如:例如:putchar(b);putchar(n);putchar(101);putchar(st);输出输出:b输出输出:回车换行回车换行输出输出:A2023/1/16说明说明 l lputchar是是C语语言言的的标标准准库库函函数数,使使用用时时必必须加编译预处理命令:须加编译预处理命令:#include stdio.h 或或#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;输出结果:输出结果:输出结果:输出结果:abab AB AB2023/1/163.2.2 格式输出函数格式输出函数 l l函数调用的一般形式函数调用的一般形式 printf(格式控制字符串格式控制字符串,输出表列输出表列)l l功能:功能:按按格式控制格式控制所指定的格式,在标准所指定的格式,在标准输出设备上输出输出设备上输出 输出表列各项的值。输出表列各项的值。l l例如有程序段例如有程序段:inta=123,b=100;printf(%d%d%dn,a,b,a+b);printf(c=%d+%d=%dn,a,b,a+b);2023/1/16输出:输出:123 100 223 输出:输出:c=123+100=223 2023/1/16格式控制字符串格式控制字符串 l l用双引号括起的字符串,用于指定用双引号括起的字符串,用于指定输出数输出数据的类型、格式、个数据的类型、格式、个数l l包括:包括:非格式字符非格式字符和和格式字符格式字符照原样输出照原样输出 printf(c=%d+%d=%dn,a,b,a+b);格式字符格式字符:指定输出:指定输出3 3个十进制整型数,个十进制整型数,分分别为变量别为变量 a a、b b、a ab b的值的值2023/1/16输出格式说明符输出格式说明符整型整型整型整型数据数据数据数据%d d 以有符号以有符号以有符号以有符号十进制十进制十进制十进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数%o o 以无符号以无符号以无符号以无符号八进制八进制八进制八进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数%x x 以无符号以无符号以无符号以无符号十六进制十六进制十六进制十六进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数%u%u以无符号以无符号以无符号以无符号十进制十进制十进制十进制形式输出整型数形式输出整型数形式输出整型数形式输出整型数实型实型实型实型数据数据数据数据%f f以以以以小数小数小数小数形式输出实型数形式输出实型数形式输出实型数形式输出实型数%e e 以以以以指数指数指数指数形式输出实型数形式输出实型数形式输出实型数形式输出实型数%g g 按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数字符型字符型字符型字符型数据数据数据数据%c c 输出输出输出输出一个字符一个字符一个字符一个字符%s s 输出输出输出输出字符串字符串字符串字符串其他其他其他其他%输出字符输出字符输出字符输出字符%本身本身本身本身l l在和格式符之间可以使用在和格式符之间可以使用在和格式符之间可以使用在和格式符之间可以使用附加说明符附加说明符附加说明符附加说明符2023/1/16附加格式说明符附加格式说明符 l l输出长整型数(只可与输出长整型数(只可与输出长整型数(只可与输出长整型数(只可与d d、o o、x x、u u结合用)结合用)结合用)结合用)mm指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽).n n对实型数据对实型数据对实型数据对实型数据,指定输出,指定输出,指定输出,指定输出 nn位小数;位小数;位小数;位小数;对字符串对字符串对字符串对字符串,指定左端截取,指定左端截取,指定左端截取,指定左端截取nn个字符输出个字符输出个字符输出个字符输出+使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出整数位数整数位数整数位数整数位数+小数位数小数位数小数位数小数位数+小数点小数点小数点小数点 自动对自动对自动对自动对n n位后小数四舍五入位后小数四舍五入位后小数四舍五入位后小数四舍五入 例如:例如:例如:例如:%l ldd输出十进制输出十进制输出十进制输出十进制长整型数长整型数长整型数长整型数%m.nm.nff右对齐,右对齐,右对齐,右对齐,mm位位位位域宽域宽域宽域宽,n n位小数位小数位小数位小数或或或或n n个字符个字符个字符个字符%-m.nm.nff左对齐左对齐左对齐左对齐 2023/1/16例例3.2 整型数据的输出整型数据的输出main()main()intainta=1111,b b=2222;intmintm=-1-1;longnlongn=123456789123456789;printf(%d%dn,a,b);printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);printf(m:%d,%o,%x,%un,m,m,m,m);printf(m:%d,%o,%x,%un,m,m,m,m);printf(n=%dn,n);printf(n=%dn,n);printf(n=%ldn,n);printf(n=%ldn,n);程序输出:程序输出:程序输出:程序输出:1122a=11,b=22m:-1,37777777777,ffffffff,4294967295n=123456789n=123456789VC+环境下运行结果2023/1/16例例3.3 实型数据的输出实型数据的输出main()main()floatxfloatx=1234.561234.56,y y=1.234567891.23456789;doublezdoublez=1234567.1234567891234567.123456789;printf(x=%f,y=%fn,x,y);printf(x=%f,y=%fn,x,y);printf(z=%fn,z);printf(z=%fn,z);printf(z=%en,z);printf(z=%en,z);printf(z=%18.8fn,z);printf(z=%18.8fn,z);printf(x=%10.3fn,x);printf(x=%10.3fn,x);printf(x=%-10.3fn,x);printf(x=%-10.3fn,x);printf(x=%4.3fnn,x);printf(x=%4.3fnn,x);程序输出:程序输出:程序输出:程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234567.12345679x=1234.560 x=1234.560 x=1234.5602023/1/16例例3.4 字符型数据的输出字符型数据的输出main()main()intmintm=9797;charchcharch=BB;printf(m:%d%cn,m,m);printf(m:%d%cn,m,m);printf(ch:%d%cn,ch,ch);printf(ch:%d%cn,ch,ch);printf(%sn,student);printf(%sn,student);printf(%10sn,student);printf(%10sn,student);printf(%-10sn,student);printf(%-10sn,student);printf(%10.3sn,student);printf(%10.3sn,student);printf(%.3snn,student);printf(%.3snn,student);程序输出:程序输出:程序输出:程序输出:m:97 ach:66 Bstudent studentstudent stustu2023/1/16注意:注意:l lprintfprintf函数格式控制中的格式字符与输出表列参函数格式控制中的格式字符与输出表列参函数格式控制中的格式字符与输出表列参函数格式控制中的格式字符与输出表列参数的个数和类型必须数的个数和类型必须数的个数和类型必须数的个数和类型必须一一对应一一对应一一对应一一对应。l l格式说明符的格式说明符的格式说明符的格式说明符的%和后面的描述符之间不能有空和后面的描述符之间不能有空和后面的描述符之间不能有空和后面的描述符之间不能有空格。格。格。格。l l长整型数应该用长整型数应该用长整型数应该用长整型数应该用ldld(或或或或lolo、lxlx、lulu)格格格格式输出,否则会出现输出错误。式输出,否则会出现输出错误。式输出,否则会出现输出错误。式输出,否则会出现输出错误。l lprintfprintf函数的参数可以是常量、变量或表达式。函数的参数可以是常量、变量或表达式。函数的参数可以是常量、变量或表达式。函数的参数可以是常量、变量或表达式。2023/1/163.2.3 字符输入函数字符输入函数 l l函数调用的一般形式函数调用的一般形式getchar()l l功能:功能:从标准输入设备(即从标准输入设备(即键盘键盘)上)上输入一个输入一个字符字符。l l例如:例如:getchar();c=getchar();printf(%c n,getchar();2023/1/16例如:例如:【例【例3.5】getchar函数的应用。函数的应用。#includestdio.hincludestdio.hmain()charch;ch=getchar();ch=getchar();printf(%c%dn,ch,ch);printf(%c%dn,ch-32,ch-32);程序运行时输入:程序运行时输入:程序运行时输入:程序运行时输入:mm 并按回车键后并按回车键后并按回车键后并按回车键后输出结果是:输出结果是:输出结果是:输出结果是:m109m109M77M772023/1/16说明:说明:l lgetchar是是C语语言言的的标标准准库库函函数数,使使用用时时必必须加编译预处理命令:须加编译预处理命令:#include stdio.h 或或#include l lgetchar函数需要函数需要交互输入交互输入,接收到输入字,接收到输入字符之后才继续执行程序。符之后才继续执行程序。l l连续使用连续使用getchar函数时,要注意字符的输函数时,要注意字符的输入形式入形式,例如执行如下程序段:例如执行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必须连续输入两个必须连续输入两个必须连续输入两个必须连续输入两个字符,中间不能有字符,中间不能有字符,中间不能有字符,中间不能有其他字符其他字符其他字符其他字符2023/1/163.2.4 格式输入函数格式输入函数 l l函数调用的一般形式函数调用的一般形式 scanf(scanf(格式控制字符串格式控制字符串格式控制字符串格式控制字符串,地址表列地址表列地址表列地址表列);l l功能:功能:按格式控制指定的格式,从标准输入设按格式控制指定的格式,从标准输入设按格式控制指定的格式,从标准输入设按格式控制指定的格式,从标准输入设备备备备(即键盘即键盘即键盘即键盘)交互输入数据,并依次存放到对应地交互输入数据,并依次存放到对应地交互输入数据,并依次存放到对应地交互输入数据,并依次存放到对应地址表列参数指定的变量中址表列参数指定的变量中址表列参数指定的变量中址表列参数指定的变量中(即将输入值赋给变量即将输入值赋给变量即将输入值赋给变量即将输入值赋给变量)。l l例如:例如:scanf(%d%f,&a,&f);scanf(%d%f,&a,&f);scanf(%o,%f,&b,&x);scanf(%o,%f,&b,&x);scanf(a=%d,b=%d,&a,&b);scanf(a=%d,b=%d,&a,&b);2023/1/16格式控制字符串格式控制字符串 l l用双引号括起的字符串,用于指定用双引号括起的字符串,用于指定输入数输入数据的类型、格式、个数以及输入的形式据的类型、格式、个数以及输入的形式 l l包括:包括:非格式字符非格式字符和和格式字符格式字符照原样输入照原样输入 scanf(a=%d,b=%d,&a,&b);格式字符格式字符:指定输入:指定输入2 2个十进制整型数个十进制整型数赋给赋给变量变量 a a 和和 b b2023/1/16输入格式说明符输入格式说明符整型整型整型整型数据数据数据数据%d d输入输入输入输入十进制十进制十进制十进制整型数整型数整型数整型数%u u输入无符号的输入无符号的输入无符号的输入无符号的十进制十进制十进制十进制整型数整型数整型数整型数%o o输入输入输入输入八进制八进制八进制八进制整型数整型数整型数整型数%x x输入输入输入输入十六进制十六进制十六进制十六进制整型数整型数整型数整型数实型实型实型实型数据数据数据数据%f f输入输入输入输入小数小数小数小数形式的单精度实型数形式的单精度实型数形式的单精度实型数形式的单精度实型数%e e输入输入输入输入指数指数指数指数形式的单精度实型数形式的单精度实型数形式的单精度实型数形式的单精度实型数字符型字符型字符型字符型数据数据数据数据%c c输入输入输入输入单个字符单个字符单个字符单个字符%s s输入输入输入输入一个字符串一个字符串一个字符串一个字符串l l在和格式符之间可以使用附加说明符在和格式符之间可以使用附加说明符在和格式符之间可以使用附加说明符在和格式符之间可以使用附加说明符2023/1/16附加格式说明符附加格式说明符 l l与与与与d d、o o、x x、u u结合结合结合结合输入长整型数输入长整型数输入长整型数输入长整型数与与与与 f f结合结合结合结合输入输入输入输入doubledouble型数型数型数型数h h与与与与d d、o o、x x、u u结合结合结合结合输入短整型数输入短整型数输入短整型数输入短整型数mm指定输入数据的宽度指定输入数据的宽度指定输入数据的宽度指定输入数据的宽度*忽略读入的数据忽略读入的数据忽略读入的数据忽略读入的数据(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)例如:例如:例如:例如:%l ld d、%l loo输入十进制、八进制输入十进制、八进制输入十进制、八进制输入十进制、八进制长整型数长整型数长整型数长整型数%lf lf、%le%le输入双精度实型数输入双精度实型数输入双精度实型数输入双精度实型数%mmff输入输入输入输入mm位数(位数(位数(位数(域宽域宽域宽域宽)%*dd忽略输入的一个整型数忽略输入的一个整型数忽略输入的一个整型数忽略输入的一个整型数此变量接收此变量接收下一个数据下一个数据对对对对floatfloat和和和和doubledouble型指型指型指型指整数位数整数位数整数位数整数位数+小数点小数点小数点小数点+小数位数小数位数小数位数小数位数2023/1/16例如:例如:l lscanf(%d%d%d,&a,&b,&c);输入输入3个十进制整型数,以个十进制整型数,以空白符空白符(空格空格、tab键键或或回车键)回车键)分隔分隔l lscanf(%d,%o,%f,&a,&b,&x);输入输入3个数,以个数,以“,”分隔分隔l lscanf(a=%d,b=%d,&a,&b);输入的形式是:输入的形式是:a=32,b=28(普通字符要照原样输入)普通字符要照原样输入)2023/1/16程序举例程序举例例例1:格式控制串中分隔符的应用。:格式控制串中分隔符的应用。main()main()inta,b,c,d;inta,b,c,d;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);scanf(%d,%d,&c,&d);scanf(%d,%d,&c,&d);printf(n%d,%d,%d,%d,a,b,c,d);printf(n%d,%d,%d,%d,a,b,c,d);运行时输入:运行时输入:1 23,4输出:输出:可以这样输入吗?可以这样输入吗?1 2 3,4输出:输出:1,2,3,41,2,3,42023/1/16例例2:c格式符的使用。格式符的使用。main()main()char c1,c2,c3;char c1,c2,c3;scanf(%c%c,&c1,&c2);scanf(%c%c,&c1,&c2);scanf(%c,&c3);scanf(%c,&c3);printf(“%c,%c,%cn,c1,c2,c3);printf(“%c,%c,%cn,c1,c2,c3);运行时输入运行时输入运行时输入运行时输入:ABCABC输出输出输出输出:?思考:思考:思考:思考:若输入若输入若输入若输入:A B(A B(回车回车回车回车)C C输出输出输出输出:?2023/1/16例例3:f格式符的使用。格式符的使用。main()main()float x,y;double z;float x,y;double z;scanf(%f,&x);scanf(%f,&x);scanf(%6f%6lf,&y,&z);scanf(%6f%6lf,&y,&z);printf(x=%f,y=%f,z=%12.8fn,x,y,z);printf(x=%f,y=%f,z=%12.8fn,x,y,z);运行时输入:运行时输入:运行时输入:运行时输入:531.562531.562输出输出输出输出:注意:注意:注意:注意:floatfloat型型型型7 7位有效,位有效,位有效,位有效,doubledouble型型型型15161516位有效。位有效。位有效。位有效。x=531.562012,y=12.345000,z=678.31000000 x=531.562012,y=12.345000,z=678.310000002023/1/16例例4s格式符的使用。格式符的使用。main()chara10,b10;scanf(%s%s,a,b);printf(%sn%sn,a,b);运行时输入:运行时输入:How do you do!输出:输出:Howdo2023/1/16例例5抑制符的使用。抑制符的使用。main()inta,b;scanf(“%2d%*3d%2d”,&a,&b);printf(“a=%db=%d”,a,b);输入:输入:1234567输出:输出:?a=12 b=672023/1/16使用使用scanf函数应注意:函数应注意:l l要求要求要求要求在程序运行中输入数据在程序运行中输入数据在程序运行中输入数据在程序运行中输入数据,输入的数据个数和,输入的数据个数和,输入的数据个数和,输入的数据个数和类型必须与格式说明符一一对应。类型必须与格式说明符一一对应。类型必须与格式说明符一一对应。类型必须与格式说明符一一对应。l l地址参数形式:地址参数形式:地址参数形式:地址参数形式:&变量名变量名变量名变量名(除数组或指针变量)。(除数组或指针变量)。(除数组或指针变量)。(除数组或指针变量)。l l格式控制中格式控制中格式控制中格式控制中有非格式字符有非格式字符有非格式字符有非格式字符时,时,时,时,必须照原样输入必须照原样输入必须照原样输入必须照原样输入。l l格式控制中格式控制中格式控制中格式控制中无非格式字符无非格式字符无非格式字符无非格式字符时,输入的时,输入的时,输入的时,输入的数值型数据数值型数据数值型数据数值型数据和字符串和字符串和字符串和字符串用空白符分隔,用空白符分隔,用空白符分隔,用空白符分隔,字符型数据字符型数据字符型数据字符型数据不必分隔。不必分隔。不必分隔。不必分隔。l ldoubledouble型型型型数据输入时,必须用数据输入时,必须用数据输入时,必须用数据输入时,必须用%lf lf或或或或%le le格式。格式。格式。格式。l l实型数实型数实型数实型数输入时域宽输入时域宽输入时域宽输入时域宽不能用不能用不能用不能用m.nm.n形式形式形式形式的附加说明。的附加说明。的附加说明。的附加说明。l l为了减少不必要的输入量,格式控制中尽量不要为了减少不必要的输入量,格式控制中尽量不要为了减少不必要的输入量,格式控制中尽量不要为了减少不必要的输入量,格式控制中尽量不要出现普通字符,也不要使用出现普通字符,也不要使用出现普通字符,也不要使用出现普通字符,也不要使用 n n 、t t 等转义字等转义字等转义字等转义字符。符。符。符。2023/1/16l lscanf(%c%c%c,&ch1,&ch2,&ch3);要输入:要输入:abc 不能输入:不能输入:a b c l l注意数值型数据与注意数值型数据与char型数据的混合输入型数据的混合输入注意(续)注意(续):l l格式符之间若无普通字符,则:格式符之间若无普通字符,则:输入的输入的数值型数据数值型数据用空白符分隔用空白符分隔 输入的输入的char型数据型数据不必分隔不必分隔例如:例如:scanf(%d%d,&m,&n);scanf(%c,&ch);错误输入:错误输入:32 28 a 正确输入:正确输入:32 28a 2023/1/163.2.5 顺序结构程序设计举例顺序结构程序设计举例顺序结构程序的一般算法描述顺序结构程序的一般算法描述变量定义变量定义变量赋值变量赋值运算处理运算处理输出输出结果结果可用:可用:变量初始化变量初始化赋值语句赋值语句输入函数调用语句输入函数调用语句注意各个语句的顺序注意各个语句的顺序注意各个语句的顺序注意各个语句的顺序2023/1/163.2.5 顺序结构程序设计举例顺序结构程序设计举例【例【例3-11】数据交换。从键盘输入】数据交换。从键盘输入a、b的值,的值,输出交换以后的值。输出交换以后的值。思路:思路:在计算机中交换变量在计算机中交换变量a和和b的值的值:a=b;b=a;正确的交换方法:正确的交换方法:a123b78c?12378123c=a;a=b;b=c;2023/1/16程序:程序:main()main()inta,b,c;inta,b,c;printf(ninputa,b:);printf(ninputa,b:);scanf(%dscanf(%d,%d,&a,&b);%d,&a,&b);printf(nbeforeexchange:a=%db=%dn,a,b);printf(nbeforeexchange:a=%db=%dn,a,b);c=a;a=b;b=c;/*c=a;a=b;b=c;/*数据交换数据交换数据交换数据交换*/printf(afterexchange:a=%db=%dn,a,b);printf(afterexchange:a=%db=%dn,a,b);程序运行情况如下:程序运行情况如下:input a,b:32,57 before exchange:a=32 b=57 after exchange:a=57 b=32 2023/1/16举例(补充)举例(补充)【例【例3.6】已知三条边】已知三条边a、b、c,求三角形面求三角形面积。计算三角形面积的海伦公式:积。计算三角形面积的海伦公式:其中:其中:设定义:设定义:整型变量整型变量 a、b、c实型变量实型变量 s、area2023/1/16程序如下:程序如下:#includemath.hincludemath.hmain()main()inta,b,c;inta,b,c;floats,area;floats,area;scanf(%d,%d,%d,&a,&b,&c);scanf(%d,%d,%d,&a,&b,&c);s=1/2*(a+b+c);s=1/2*(a+b+c);area=area=sqrtsqrt(s(s-a)(s-b)(s-c);(s(s-a)(s-b)(s-c);printf(area=%8.3fn,area);printf(area=%8.3fn,area);程序运行情况如下:程序运行情况如下:3,4,5 area=6.000 实际上还需要判断实际上还需要判断实际上还需要判断实际上还需要判断a a、b b、c c是否能构成三角形,即应该是否能构成三角形,即应该是否能构成三角形,即应该是否能构成三角形,即应该进行选择判断处理进行选择判断处理进行选择判断处理进行选择判断处理 2023/1/16举例(补充)举例(补充)【例【例【例【例3.73.7】从键盘输入】从键盘输入】从键盘输入】从键盘输入两个整数两个整数两个整数两个整数,输出它们相除的,输出它们相除的,输出它们相除的,输出它们相除的余数及商(要求保留余数及商(要求保留余数及商(要求保留余数及商(要求保留2 2位小数)位小数)位小数)位小数)。例如输入的例如输入的例如输入的例如输入的mm和和和和n n分别为分别为分别为分别为100100和和和和1818,输出形式为:,输出形式为:,输出形式为:,输出形式为:mmn n1010m/n=5.56 m/n=5.56 main()intm,n;printf(ninputm,n:);scanf(%d,%d,&m,&n);printf(nm%n=%dn,m%n);printf(m/n=%.2f%.2fn,(float)(float)m/n);2023/1/16举例:举例:【例【例3-12】输入时间(时、分、秒),然后输入时间(时、分、秒),然后打印输出共计多少秒?打印输出共计多少秒?分析:分析:2023/1/16程序如下:程序如下:#includevoidmain()shorthour,min,sec;longtotal;printf(%nEnterhour:min:sec:);scanf(%d:%d:%d,&hour,&min,&sec);total=hour*3600+min*60+sec;printf(nThetotalsecond=%ld,total);程序运行情况如下:程序运行情况如下:Enter hour:min:sec:3:10:50 The total second=11450思考:思考:思考:思考:total total 的数据类型的数据类型的数据类型的数据类型如何处理?如何处理?如何处理?如何处理?2023/1/1640提出问题:提出问题:l l自然语言:自然语言:如果如果则则否则否则l lC语言:语言:分支语句分支语句问题问题1 1:如何根据收入,确定他的纳税比例及纳税额?如何根据收入,确定他的纳税比例及纳税额?如何根据收入,确定他的纳税比例及纳税额?如何根据收入,确定他的纳税比例及纳税额?问题问题2 2如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?2023/1/16413.3分支结构程序设计分支结构程序设计3.3.1 if条件分支语句条件分支语句3.3.2 switch多路开关语句多路开关语句2023/1/1642单分支语句单分支语句l l语句一般格式语句一般格式if(表达式表达式)语句语句l l功能:功能:计算计算计算计算表达式的值表达式的值表达式的值表达式的值,如果如果如果如果是一个非是一个非是一个非是一个非0 0值(即值(即值(即值(即逻辑真),就执行内嵌语句,逻辑真),就执行内嵌语句,逻辑真),就执行内嵌语句,逻辑真),就执行内嵌语句,否则否则否则否则(即逻(即逻(即逻(即逻辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:内嵌语句,可为:赋值语句赋值语句函数调用语句函数调用语句控制语句控制语句复合语句复合语句空语句空语句可为算术、关系、逻辑、赋值可为算术、关系、逻辑、赋值等合法的表达式等合法的表达式2023/1/1643单分支语句的算法:单分支语句的算法:l l例如:例如:if(x0)m+;if(ab)c=a;a=b;b=c;表达式非表达式非0 T F 语句语句N-S结构图结构图语句语句流程图流程图NY表达式非表达式非0?2023/1/1644双分支语句双分支语句l l语句一般格式语句一般格式if(表达式表达式)语句语句1else语句语句2l l功能:功能:计算计算计算计算表达式的值表达式的值表达式的值表达式的值,如果如果如果如果它的值是一个非它的值是一个非它的值是一个非它的值是一个非0 0值值值值(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句1 1,之后跳过内,之后跳过内,之后跳过内,之后跳过内嵌语句嵌语句嵌语句嵌语句2 2,执行后续语句;,执行后续语句;,执行后续语句;,执行后续语句;否则否则否则否则跳过内嵌语句跳过内嵌语句跳过内嵌语句跳过内嵌语句1 1,执行内嵌语句,执行内嵌语句,执行内嵌语句,执行内嵌语句2 2,之后执行后续语句。,之后执行后续语句。,之后执行后续语句。,之后执行后续语句。2023/1/1645双分支语句的算法:双分支语句的算法:l l例如:例如:ifif(x0)m+;(x0)m+;elseelsem-;m-;if if(ch=a&ch=a&ch=z)ch=ch-32;ch=ch-32;printf(printf(%cn,ch%cn,ch););elseelseprintf(printf(%cn,ch%cn,ch););表达式非表达式非0 T F 语句语句1 语句语句2N-S结构图结构图 语句语句1 语句语句2流程图流程图NY表达式非表达式非0?2023/1/1646多分支语句多分支语句l l语句一般格式语句一般格式if(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2elseif(表达式表达式n-1)语句语句n-1else语句语句nl l功能:功能:依次计算并判断表达式依次计算并判断表达式依次计算并判断表达式依次计算并判断表达式i i,为非为非为非为非0 0时执行后面的时执行后面的时执行后面的时执行后面的语句,都为语句,都为语句,都为语句,都为0 0时,执行语句时,执行语句时,执行语句时,执行语句n n 无论执行完哪个语句分支,都转到后续语句无论执行完哪个语句分支,都转到后续语句无论执行完哪个语句分支,都转到后续语句无论执行完哪个语句分支,都转到后续语句2023/1/1647多重分支语句的算法多重分支语句的算法l l流程图流程图表达式表达式表达式表达式2?2?表达式表达式表达式表达式1?1?语句语句语句语句n n 语句语句语句语句1 1 语句语句语句语句2 2语句语句语句语句n-1n-1Y YN NY YN NN NY Y表达式表达式表达式表达式n-1?n-1?2023/1/1648多重分支语句的算法多重分支语句的算法l lN-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)2023/1/1650程序分析:程序分析:2023/1/1651程序:程序:#include#includevoidmain()voidmain()floatx,y;floatx,y;printf(n);printf(n);scanf(%f,&x);scanf(%f,&x);if(x0)y=x-7;if(x0)y=x-7;if(x=if(x=0)y=2;0)y=2;if(x0)y=3*x*x;if(x=A&=A&chch=Z=65&=65&chch=90=A&ch=A&ch=Z?ch+32:ch);putchar(n)2023/1/1654(3)if语句的嵌套语句的嵌套l l如果如果if的内嵌语句中又使用了一个的内嵌语句中又使用了一个if语句,语句,则构成则构成if语句的嵌套。语句的嵌套。【例【例3.9】比较两个整数的关系。比较两个整数的关系。#includemain()intx,y;printf(EnterintegerXandY:);scanf(%d%d,&x,&y);if(x!=y)if(xy)printf(XYn);elseprintf(Xy)printf(XYn);elseprintf(XYn);elseprintf(X=Yn);提倡缩格书写提倡缩格书写提倡缩格书写提倡缩格书写有利于阅读程序有利于阅读程序2023/1/1655l l双(或多)分支双(或多)分支if语句的嵌套形式语句的嵌套形式if(表达式表达式)if语句语句elseif语句语句if语句嵌套的形式语句嵌套的形式l l单单if语句的嵌套形式语句的嵌套形式if(表达式表达式)if语句语句可以是各种形式的可以是各种形式的if语句语句可以是各种形式的可以是各种形式的if语句语句如果是简单如果是简单if语句,语句,必须用必须用“”括起括起2023/1/1656if(c=50)printf(50=c=100n);elseprintf(c50n);elseif(c=150)printf(100c150n);if(c=50)printf(50=c=100n);elseprintf(c50n);例如:例如:if(c=50)printf(50=c=100n)