版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第3章 程序控制结构2第3章 程序控制结构3.1 语句3.2 输入与输出3.3 程序顺序结构3.4 程序选择结构3.5 程序循环结构33.1 语句语句(statement)是C程序的最小单位程序由一条一条语句组成语句执行的次序则称为流程C语言语句分为简单语句、复合语句和控制语句43.1.1 简单语句1表达式语句x=a+b; /赋值语句赋值语句t=a,a=b,b=t; /a和和b交换交换a+b+c; /运算但无实际意义运算但无实际意义表达式表达式; /用分号结束用分号结束53.1.1 简单语句2函数调用语句printf(a+b=%d,a+b); /输出函数调用语句输出函数调用语句函数调用函数调
2、用(实参实参); /用分号结束用分号结束63.1.1 简单语句3空语句4声明部分printf(“a+b=%d”,a+b); ; /第第2个即为空语句个即为空语句; /单个分号单个分号声明部分声明部分.;执行语句执行语句.;73.1.2 复合语句复合语句(compound statement),又称语句块,简称块(block) 局部声明部分局部声明部分.;语句序列语句序列.;83.1.2 复合语句复合语句内的每条语句必须以分号(;)结尾,但复合语句右大括号()已表示结尾,因此其后不需要分号。如果在后面添加分号,意思变为一个复合语句与一个空语句。 /复合语句复合语句 double s, a=5,
3、b=10, h=8; /局部声明局部声明 s=(a+b)*h/2.0; printf(area=%lfn, s); /复合语句不需要分号结尾复合语句不需要分号结尾93.1.2 复合语句复合语句内部可以进行变量定义或类型声明,这些定义或声明仅在复合语句内部可以使用,称为块的局部作用域 。 int t,a=10,b=7; /定义局部变量定义局部变量t、a、b t=a,a=b,b=t; /仅在这个复合语句里使用仅在这个复合语句里使用103.1.2 复合语句复合语句允许嵌套,即在复合语句里还可以包含复合语句。 /复合语句复合语句 double v1,r=5; /局部声明局部声明 v1=4*3.1415
4、926*r*r*r/3; /嵌套的复合语句嵌套的复合语句 double v2,h=12; /嵌套的局部声明嵌套的局部声明 v2=3.1415926*r*r*h; printf(%lf,%lfn,v1,v2); /嵌套的复合语句结尾嵌套的复合语句结尾 /复合语句结尾复合语句结尾113.1.3 注释可以在程序中编写注释(comments),有两种形式:/*.*/块注释语法形式: /*.注释内容注释内容*/123.1.3 注释/行注释语法形式: 说明:(1)注释仅是对源程序的说明文字,它不是程序代码,对程序运行没有任何影响。实际上,在编译程序时所有注释内容将被忽略。 /.注释内容注释内容 133.1
5、.3 注释(2)/*.*/块注释允许多行注释,以(/*)开头,以(*/)结尾,这中间的任何内容均是注释内容。注释可以是任何来自于字符集的字符组合,包括换行符,也允许中文等非ASCII字符。/*.*/不允许嵌套143.1.3 注释(3)/行注释表示从(/)开始直到本行末尾的所有字符均是注释内容。/注释只能注释一行,如果要注释多行就要写多次。一般/注释适用于短小精简的注释,/*.*/注释适用于大段注释。(4)编译器将整个注释理解为一个空白字符,相当于一个空格的作用。 153.1.4 语句的写法(1)多数情况下,在一个程序行里只写一个语句,这样的程序写法清晰,便于阅读、理解和调试。 (2)注意使用空
6、格或TAB来作合理的间隔、缩进、对齐,使程序形成逻辑相关的块状结构,养成优美的程序编写风格。 (3)C语言允许在一行里写多个语句 。(4)C语言允许将一个语句拆成多行来写 。163.2 输入与输出所谓输入是指从外部输入设备(如键盘、鼠标等)向计算机输入数据,输出是指从计算机向外部输出设备(如显示器、打印机等)输出数据。 173.2 输入与输出C语言输入输出操作是通过函数实现的。不同的函数能够处理形式多样的输入输出操作,支持不同的输入输出设备。若在程序中调用标准输入输出函数,应该用文件包含命令将头文件stdio.h包含到程序中,命令形式为: #include 183.2.1 字符输入与输出1字符
7、输出putchar函数putchar函数的作用是向显示终端输出一个字符,一般形式为:putchar(c);193.2.1 字符输入与输出例3.1 1 #include 2 int main() 3 4 char a=C, b=6; 5 putchar(a); /字符型变量,输出字符型变量,输出 C 6 putchar(b+0); /整型表达式,输出整型表达式,输出 6 7 putchar(110);/转义字符转义字符(八进制八进制)输出输出 H 8 putchar(n);/转义字符转义字符(换行换行),输出,输出 换行换行 9 return 0; 10 203.2.1 字符输入与输出例3.1
8、1 #include 2 int main() 3 4 char a=C, b=6; 5 putchar(a); /字符型变量,输出字符型变量,输出 C 6 putchar(b+0); /整型表达式,输出整型表达式,输出 6 7 putchar(110);/转义字符转义字符(八进制八进制)输出输出 H 8 putchar(n);/转义字符转义字符(换行换行),输出,输出 换行换行 9 return 0; 10 C6H程序运行屏幕213.2.1 字符输入与输出2字符输入getchar函数getchar函数的作用是从键盘终端输入一个字符,一般形式为:getchar()223.2.1 字符输入与输出
9、例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 return 0; 8 233.2.1 字符输入与输出例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 ret
10、urn 0; 8 abc程序运行屏幕abc243.2.1 字符输入与输出例3.2 1 #include 2 int main() 3 4 char c1, c2, c3; 5 c1=getchar(); c2=getchar(); c3=getchar(); 6 putchar(c1);putchar(c2);putchar(c3); 7 return 0; 8 ab程序运行屏幕abc253.2.2 格式化输出1printf函数printf函数的作用是向标准输出设备(显示终端)输出格式化的数据,一般形式为:(1)格式控制格式控制为字符串形式,称为格式控制串printf(格式控制格式控制,输出项
11、列表输出项列表.);26它主要有两种内容:格式说明。格式说明总是以百分号(%)字符开始,后跟格式控制字符,例如%d、%f等。它的作用是将输出项转换为指定格式输出。一般字符。除格式说明之外的其他字符,包含转义字符。一般字符根据从左向右的出现顺序直接输出到显示终端上,ASCII控制字符的输出有特殊的含义。 3.2.2 格式化输出% flags width .prec h | l | L | F | N type273.2.2 格式化输出表3-1 printf格式说明域含义域域域选域选描述描述含义含义type必需必需类型类型字符字符决定输出项转换为字符、字符串还是数值决定输出项转换为字符、字符串还是
12、数值flags可选可选标志标志字符字符控制输出的对齐、符号、空格及八进制和控制输出的对齐、符号、空格及八进制和十六进制前缀。可以出现多个标志十六进制前缀。可以出现多个标志width可选可选宽度宽度说明说明指定输出项的最小显示宽度指定输出项的最小显示宽度.prec可选可选精度精度说明说明指定输出项的最大输出字符数或浮点数小指定输出项的最大输出字符数或浮点数小数精度数精度h/l/L/F/N可选可选大小大小修饰修饰指明输出项类型大小或指针的远近指明输出项类型大小或指针的远近283.2.2 格式化输出表3-2 printf类型字符含义字符字符类型类型输出格式输出格式dint带符号的十进制整数带符号的十
13、进制整数uint无符号十进制整数无符号十进制整数oint无符号八进制整数无符号八进制整数x或或Xint无符号十六进制整数(若输出为字母,无符号十六进制整数(若输出为字母,x用用abcdef,X用用ABCDEF)293.2.2 格式化输出表3-2 printf类型字符含义字符字符类型类型输出格式输出格式fdouble具有具有dddd.dddd格式的带符号数值,格式的带符号数值,dddd为一位或多位十进制数字。小数点前数字个数为一位或多位十进制数字。小数点前数字个数取决于数的量级;小数点后面数字个数取决于取决于数的量级;小数点后面数字个数取决于所要求的精度所要求的精度e或或Edouble具有具有d
14、.dddde/ddd格式的带符号数值,格式的带符号数值,其中其中d为单个十进制数字,为单个十进制数字,dddd为一位或多位为一位或多位十进制数字,十进制数字,ddd为三位十进制数。用为三位十进制数。用e或或E表表示指数示指数g或或double以以f或或e格式输出的带符号数值,对给出的值及格式输出的带符号数值,对给出的值及其精度,其精度,f和和e哪个简洁就用哪个。只有当值的哪个简洁就用哪个。只有当值的指数小于或大于、等于精度说明时才使用指数小于或大于、等于精度说明时才使用e格式。尾部的被截断,只有小数点后跟位格式。尾部的被截断,只有小数点后跟位或多位数字时才出现小数点。用或多位数字时才出现小数点
15、。用e或或E表示指数表示指数303.2.2 格式化输出表3-2 printf类型字符含义字符字符类型类型输出格式输出格式cchar单个字符单个字符s字符串字符串指针指针直到第一个非空字符(直到第一个非空字符(0)或满足精度的字符)或满足精度的字符串串%输出百分号输出百分号%313.2.2 格式化输出表3-3 printf标志字符含义标志标志意义意义默认默认在给定域宽内左对齐输出在给定域宽内左对齐输出结果(右边用空格填充)结果(右边用空格填充)右对齐(左边用空格右对齐(左边用空格或填充)或填充)如果输出值是有符号数,如果输出值是有符号数,则总是加上符号(或)则总是加上符号(或)只在负数前加()只
16、在负数前加()空格空格如果输出值是有符号数或如果输出值是有符号数或为正数,则以空格作为前为正数,则以空格作为前缀加到输出值前;如果空缀加到输出值前;如果空格和标志同时出现,则格和标志同时出现,则忽略空格忽略空格无无323.2.2 格式化输出表3-3 printf标志字符含义标志标志意义意义默认默认#指明使用如下的指明使用如下的“转换样转换样式式”转换输出参数转换输出参数若类型若类型字符为字符为对输出参数的影响对输出参数的影响x或或X在任何非在任何非0输出值前加上输出值前加上0 x或或0Xe,E,f强制在所有情况下输出值强制在所有情况下输出值总是包含小数点总是包含小数点 只有小数点后面有数只有小
17、数点后面有数字时才显示它字时才显示它g,G同同e和和E,强制在所有情况,强制在所有情况下输出值中总是包含小数下输出值中总是包含小数点并阻止截断尾部的点并阻止截断尾部的0只有小数点后面有数只有小数点后面有数字时才显示它,截断字时才显示它,截断尾部的尾部的0333.2.2 格式化输出表3-4 printf宽度说明宽度宽度说明说明对输出域宽度的影响对输出域宽度的影响n至少有至少有n个字符宽度输出,如果输出值中的宽度小于个字符宽度输出,如果输出值中的宽度小于n个,个,则输出用空格填充直到最小宽度规定(如果则输出用空格填充直到最小宽度规定(如果flags 为,为,则填充在输出值的右边,否则在左边)则填充
18、在输出值的右边,否则在左边)0n至少有至少有n个字符宽度输出,如果输出值中的字符宽度小于个字符宽度输出,如果输出值中的字符宽度小于n个,则输出用个,则输出用0填充在输出值的左边(对于左对齐无效)填充在输出值的左边(对于左对齐无效)*间接设置宽度,此时由输出项列表提供宽度值,且它必间接设置宽度,此时由输出项列表提供宽度值,且它必须在输出项的前面须在输出项的前面343.2.2 格式化输出表3-5 printf精度说明精度精度说明说明精度影响精度影响.n类型类型含义含义e,E,f精度值指定小数点后数字的个数。四舍五入精度值指定小数点后数字的个数。四舍五入g,G精度值指定可输出的有效数字的最大数目精度
19、值指定可输出的有效数字的最大数目s精度值指定可输出字符的最大数目,超出精精度值指定可输出字符的最大数目,超出精度值范围的字符不予输出度值范围的字符不予输出353.2.2 格式化输出表3-5 printf精度说明精度精度说明说明精度影响精度影响(无)(无)精度按默认精度按默认值:值:类型类型默认值默认值e,E,f6g,G打印打印6个有效数字,尾部的个有效数字,尾部的0串被截断串被截断s输出直到空字符(输出直到空字符(0)为止)为止.0或或仅有仅有.类型类型含义含义363.2.2 格式化输出续表3-5 printf精度说明精度精度说明说明精度影响精度影响e,E,f,g,G输出不打印小数点(及其后的
20、小数)输出不打印小数点(及其后的小数)s无任何字符输出无任何字符输出*间接设置精度,此时由输出项列表提供精度间接设置精度,此时由输出项列表提供精度值,且它必须在输出项的前面。如果宽度说值,且它必须在输出项的前面。如果宽度说明和精度说明同时使用明和精度说明同时使用*,则先出现宽度值,则先出现宽度值,接着是精度值,然后才是输出项。接着是精度值,然后才是输出项。373.2.2 格式化输出表3-6 printf类型大小修饰含义大小修饰大小修饰 type类型字符类型字符输出参数被解释为输出参数被解释为hd,o,x,X短整型(短整型(short)u无符号短整型(无符号短整型(unsigned short)
21、ld,o,x,X长整型(长整型(long)u无符号长整型(无符号长整型(unsigned long)e,E,f,g,G双精度浮点型(双精度浮点型(double)Le,E,f,g,G长双精度浮点型(长双精度浮点型(long double)383.2.2 格式化输出int a=123,b=-1,c=12345;long h=-1; short i=-1,j=32767;char c1=97;double x=12.3456,y=12,z=12.123456789123;/输出整型数据输出整型数据printf(%d,%u,%x,%X,%on,a,a,a,a,a);/十进制、无符号、十六进制和八进制十
22、进制、无符号、十六进制和八进制/输出结果:输出结果:123,123,7b,7B,173printf(%d,%u,%x,%X,%on,b,b,b,b,b);/十进制、无符号、十六进制和八进制,负数为补码十进制、无符号、十六进制和八进制,负数为补码/-1,4294967295,ffffffff,FFFFFFFF,37777777777393.2.2 格式化输出printf(%ld,%lu,%lx,%lon,h,h,h,h,h);/长整型,负数为补码长整型,负数为补码/输出结果:输出结果:-1,4294967295,ffffffff,37777777777printf(%hd,%hu,%hx,%ho
23、n,i,i,i,i,i);/短整型,负数为补码短整型,负数为补码/输出结果:输出结果:-1,65535,ffff,177777printf(%hd,%hdn,j,j+1); /短整型,数据溢出短整型,数据溢出/输出结果:输出结果:32767,-32768/输出带格式的整型数据输出带格式的整型数据p r i n t f ( % d , % 4 d , % - 4 d , % 4 d , % -4dn,a,a,a,c,c);/宽度、右对齐、左对齐、实际宽度宽度、右对齐、左对齐、实际宽度/输出结果:输出结果:123, 123,123 ,12345,12345403.2.2 格式化输出printf(%
24、+d,%+d,% d,% dn,a,-a,a,-a); /填充正填充正负符号、填充空格负符号、填充空格/输出结果:输出结果:+123,-123, 123,-123printf(%04d,%04d,%04d,%-04dn,a,b,c,a); /左边填充左边填充0、右边不影响、右边不影响/输出结果:输出结果:0123,-001,12345,123 printf(%#d,%#x,%#X,%#on,a,a,a,a);/填充十六进制、八进制前缀填充十六进制、八进制前缀/输出结果:输出结果:123,0 x7b,0X7B,0173printf(%*dn,5,a); /由输出项指定宽度由输出项指定宽度/输出结
25、果:输出结果: 123413.2.2 格式化输出printf(%8.2d,%-8.2dn,a,a);/精度对整型无作用精度对整型无作用/输出结果:输出结果: 123,123 /输出字符型数据输出字符型数据printf(%d,%cn,c1,c1); /字符型数值、字符型数值、ASCII码码/输出结果:输出结果:97,a/输出带格式的字符型数据输出带格式的字符型数据printf(%12c,%012c,%-012cn,c1,c1,c1); /宽度、宽度、右对齐、左对齐右对齐、左对齐/ a,00000000000a,a 423.2.2 格式化输出/输出浮点型数据输出浮点型数据printf(%lf,%e
26、,%gn,x,x,x);/小数格式、指数格式、最简格式小数格式、指数格式、最简格式/输出结果:输出结果:12.345600,1.234560e+001,12.3456printf(%lf,%e,%gn,y,y,y);/小数格式、指数格式、最简格式小数格式、指数格式、最简格式/输出结果:输出结果:12.000000,1.200000e+001,12/输出指定精度的浮点型数据输出指定精度的浮点型数据printf(%lf,%10lf,%10.2lf,%.2lfn,x,x,x,x);/默认默认精度、宽度、精度精度、宽度、精度/12.345600, 12.345600, 12.35,12.35433.2
27、.2 格式化输出/输出带格式的浮点型数据输出带格式的浮点型数据printf(%+lf,%+lf,% lf,% lfn,y,-y,y,-y);/填充正负符号、填充空格填充正负符号、填充空格/+12.000000,-12.000000, 12.000000,-12.000000printf(%06.1lf,%-06.1lfn,y,y);/左边填充左边填充0、右边不影响、右边不影响/输出结果:输出结果:0012.0,12.0 printf(%.*f,%*.*fn,6,x,12,3,x);/由输出项指定宽度、宽度与精度由输出项指定宽度、宽度与精度/输出结果:输出结果:12.345600, 12.346
28、443.2.2 格式化输出/输出字符串输出字符串printf(%s,%6s,%-6sn,Java,Java,Java);/宽度对字符串的影响宽度对字符串的影响/输出结果:输出结果:Java, Java,Java printf(%s,%.3s,%6.3sn,Basic,Basic,Basic);/精度对字符串的影响精度对字符串的影响/输出结果:输出结果:Basic,Bas, Bas453.2.2 格式化输出/特殊输出特殊输出printf(%n,c1);/两个两个%表示输出一个表示输出一个%,输出项,输出项/输出结果:输出结果:%printf(%d,%dn,a,b,c);/格式数目小于输出项数,忽
29、略多余输出项格式数目小于输出项数,忽略多余输出项/输出结果:输出结果:123,-1printf(%d,%d,%dn,a,b);/格式数目大于输出项数,输出结果不确定格式数目大于输出项数,输出结果不确定/输出结果:输出结果:123,-1,2367460printf(%d,%lfn,x,a);/类型不对应,输出结果不确定类型不对应,输出结果不确定/输出结果:输出结果:2075328197,0.000000463.2.3 格式化输入scanf(格式控制格式控制,输入项列表输入项列表.);1scanf函数scanf函数的作用是从标准输入设备(键盘终端)读取格式化的数据,一般形式为:% * width
30、h | l | L | F | N type473.2.3 格式化输入表3-7 scanf类型字符含义类型字类型字符符期望读入(应输入)的类型期望读入(应输入)的类型d十进制整数十进制整数o八进制整数八进制整数x或或X十六进制整数十六进制整数u无符号十进制整数无符号十进制整数483.2.3 格式化输入表3-7 scanf类型字符含义类型字类型字符符期望读入(应输入)的类型期望读入(应输入)的类型e,E,f,g,G由下列成分组成的浮点数:可选的符号或,包括由下列成分组成的浮点数:可选的符号或,包括小数点在内的一个或多个十进制数字序列,可选的指小数点在内的一个或多个十进制数字序列,可选的指数符(数
31、符(e或或E)其后的带符号整数。)其后的带符号整数。+/- ddddddddd . dddd E | e +/- dddc字符。指定字符。指定c后,通常被跳过的空白符将被读入,如果后,通常被跳过的空白符将被读入,如果要读下一个非空白符,要使用要读下一个非空白符,要使用%1ss字符串。默认情况下,输入字符串以空白符作为结束。字符串。默认情况下,输入字符串以空白符作为结束。493.2.3 格式化输入(3)*禁止字符*禁止字符的含义是从输入数据中读取类型相当的数据,但跳过这个数据,即不将它保存到输入项中。(4)宽度说明宽度控制从输入数据中读出的最大字符数。转换并存放到相应输入项中。如果读width个
32、字符前遇到空白符或不能根据指定格式进行转换的字符,则读入的字符个数将少于width个。503.2.3 格式化输入(5)大小修饰大小修饰指明输入的类型大小,与printf的大小修饰含义相同。 513.2.3 格式化输入int a,b,c; long h; short i;char k,m; double x,y;scanf(%d%ld%hd%lf%le,&a,&h,&i,&x,&y);/输入整型、长整型、短整型、浮点型输入整型、长整型、短整型、浮点型/输入:输入:1 2 3 1.23 3.25 结果结果a=1,h=2,i=3,x=1.23,y=3.25/输
33、入:输入:1 -1 32768 12.3 12e5 结果结果a=1,h=-1,i=-32768,x=12.3,y=1.2e6523.2.3 格式化输入scanf(%d%d%d,&a,&b,&c);/连续输入用空格、连续输入用空格、TAB、回车间隔、回车间隔/输入:输入:1 2 3 结果结果a=1,b=2,c=3/输入:输入:1,2,3 结果结果a=1,b,c不确定(输入逗号不匹配空白不确定(输入逗号不匹配空白符,符,scanf终止)终止)scanf(%d,%d,%d,&a,&b,&c);/输入必须匹配一般字符输入必须匹配一般字符/输入:输入:1,
34、2,3 结果结果a=1,b=2,c=3/输入:输入:1 2 3 结果结果a=1,b,c不确定(输入空格不匹配逗号,不确定(输入空格不匹配逗号,scanf终止)终止)533.2.3 格式化输入scanf(a=%db=%dc=%d,&a,&b,&c);/输入必须匹配一般字符输入必须匹配一般字符/输入:输入:a=1b=2c=3 结果结果a=1,b=2,c=3/输入:输入:1 2 3 结果结果a,b,c不确定(输入不匹配不确定(输入不匹配a=,scanf终终止)止)scanf(%4d%4d,&a,&b); /指定宽度指定宽度/输入:输入:12 12345 结果结
35、果a=12,b=1234/输入:输入:123456789 结果结果a=1234,b=5678scanf(%1d%*2d%3d,&a,&b); /禁止字符禁止字符/输入:输入:123456789 结果结果a=1,b=456,23读取但不保读取但不保存存543.2.3 格式化输入scanf(%d%c%d%c,&a,&k,&b,&m);/输入字符型输入字符型/输入:输入:12c34a 结果结果a=12,k=c,b=34,m=a/输入:输入:12 c 34 a 结果结果a=12,k=空格空格,b,m不确定(输入不确定(输入c不匹配不匹配%d,scanf终
36、止)终止)scanf(%d%d,&a,&b,&c);/格式数目小于输出项数,多余输入项未被输入格式数目小于输出项数,多余输入项未被输入scanf(%d%d%d,&a,&b);/格式数目大于输出项数,崩溃性错误格式数目大于输出项数,崩溃性错误scanf(%d%lf,&x,&a);/类型不对应,严重错误类型不对应,严重错误553.3 程序顺序结构通常情况下,语句以其出现的顺序执行一个语句执行完会自动转到下一个语句开始执行,这样的执行称为顺序执行。顺序执行反映了程序“按部就班”的执行规律,多数情况下,程序的执行就是这样的。 563.3.1 顺序
37、执行图3.1 求圆面积的执行次序顺序执行的次序是佷重要的 573.3.2 跳转执行从问题求解的一般过程来看,还需要跳转执行。 选择语句:if语句、switch语句;循环语句:while语句、do语句、for语句;跳转语句:goto语句、break语句、continue语句、return语句。 583.3.2 跳转执行goto语句的作用是使程序无条件跳转到别的位置,语法形式为:这里的标号是一个自定义的标识符,标号语句形式为:标号标号: 语句序列语句序列.goto 标号标号;593.3.2 跳转执行 1 goto L1; /语句序列语句序列 10 L1: x=a+b; /语句序列语句序列执行第1行
38、时,程序跳转到L1标号语句所在的第10行继续运行:603.4 程序选择结构1. if语句2. switch语句613.4.1 if语句if语句的作用是计算给定的表达式,根据结果选择执行相应的语句,语句形式有两种:if形式:if-else形式:if (表达式表达式) 语句语句1; else 语句语句2;if (表达式表达式) 语句语句1;623.4.1 if语句图3.2 两种形式的if语句执行流程PT F内嵌 语句633.4.1 if语句图3.2 两种形式的if语句执行流程643.4.1 if语句当ab时,执行t=a,a=b,b=t运算,即a和b相互交换,若a小于等于b则什么也不做;总而言之,无
39、论a和b之前是什么数,执行这段程序后,a肯定小于等于b。 if ( ab ) t=a, a=b, b=t;653.4.1 if语句(1)if语句中的子语句既可以是简单语句,又可以是复合语句或控制语句,但必须是“一个语句”的语法形式 1 if (ab) 2 x=a+b; y=a-b; 3 else 4 x=a-b; y=a+b;663.4.1 if语句(2)子语句往往会有多条语句,甚至更复杂的情形,这时可以使用复合语句 1 if (ab) 2 x=a+b; y=a-b; 3 4 else 5 x=a-b; y=a+b; 6 673.4.1 if语句总是交换的代码(不好的code风格): 1 if
40、 ( ab ) 2 3 t=a; 4 a=b; 5 b=t; 6 ; 1 if ( ab ) 2 t=a; 3 a=b; 4 b=t; 5 ;683.4.1 if语句一般地,if语句的表达式为关系、逻辑运算表达式也可以为其他表达式,但按逻辑值来理解:a=5,b=2;if ( a ) x=a*10;693.4.1 if语句表3-8 数值按逻辑值处理的结果数值数值逻辑值逻辑值aaa!=0!aa=00假假假假真真真真非非0真真真真假假假假7070例:将所给数学条件写成C的逻辑表达式1)1a 8 并且 1 b 102)a和b都是正的或都是负的(a、b符号相同)3)a和b之一为0,但不能都为04) a能
41、被5或7整除Leap year condition: (yearnum%4=0)&(yearnum%100!=0)| (yearnum%400=0)&(yearnum%100=0)(a=1&a=1&b0&b0)|(a0&b0(a*b=0)&(a+b!=0)(a%5=0)|(a%7=0)71用形式逻辑变量表示润年条件:int LeapisTrue;LeapisTrue=(yearnum%4=0)&(yearnum%100!=0)|(yearnum%400=0)&(yearnum%100=0);71723.4.1 if语句例3
42、.3 1 #include 2 #include 3 int main() 4 5 double a,b,c; 6 printf(input a,b,c:); 7 scanf(%lf%lf%lf,&a,&b,&c); 8 /判断三边长是否构成三角形判断三边长是否构成三角形 9 if (a+bc & a+cb & b+ca) 10 double s,t; 11 t=(a+b+c)/2.0; 12 s=sqrt(t*(t-a)*(t-b)*(t-c); 13 printf(area=%lfn,s); 14 733.4.1 if语句例3.3 15 else p
43、rintf(errorn); 16 return 0; 17 743.4.1 if语句例3.3 15 else printf(errorn); 16 return 0; 17 area=6.000000程序运行屏幕input a,b,c:3 4 5753.4.2 switch语句switch语句switch语句的作用是计算给定的表达式,根据结果选择从多个分支入口执行,语句形式为:switch ( 表达式表达式 ) case 常量表达式常量表达式1 : 语句序列语句序列1 case 常量表达式常量表达式2 : 语句序列语句序列2 case 常量表达式常量表达式n : 语句序列语句序列n defa
44、ult : 默认语句序列默认语句序列763.4.2 switch语句图3.3 switch语句执行流程773.4.2 switch语句(1)switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句;既可以是简单语句,又可以是复合语句和控制语句。如果没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。 783.4.2 switch语句 1 switch (n) 2 case 7 : printf(step5n); 3 case 6 : 4 case 5 : printf(step4n); 5 case 4 : 6 7 printf(step3
45、n);printf(step2n); 8 9 case 2 : printf(step1n); 10 default: printf(step0n); 11 793.4.2 switch语句(3)switch语法中default分支是可选的,若没有default分支且没有任何case标号的值相等时,switch语句将什么也不做,直接执行后续语句。(4)switch语句分支选择可以是C语言的任意表达式,但其值必须是整数(含字符类型)、枚举类型,或者包含能转换成这两种类型的类型。 803.4.2 switch语句(5)switch语法中的case分支必须是常量表达式且互不相同,即为整型、字符型、枚
46、举类型的常量值,但不能包含变量。例如若c是变量,则“case c=a & c=z:”的写法是错的。case分支后面的冒号是必须的,即使没有后面的语句序列。 813.4.2 switch语句在switch语句中任意位置上,只要执行到break语句,就结束switch语句的执行,转到switch结构后续语句。break;823.4.2 switch语句更常见的switch结构应该如下,它提供了程序多分支选择执行流程。switch ( 表达式表达式 ) case 常量表达式常量表达式1:语句序列语句序列1;break; case 常量表达式常量表达式2:语句序列语句序列2;break; ca
47、se 常量表达式常量表达式n:语句序列语句序列n;break; default :默认语句序列默认语句序列833.4.2 switch语句图3.4 结构化的switch流程843.4.3 选择结构的嵌套1if语句的嵌套(1)第一种形式,在else分支上嵌套if语句,语法形式为:if ( 表达式表达式1 ) 语句语句1else if ( 表达式表达式2 ) 语句语句2else if ( 表达式表达式3 ) 语句语句3.else if ( 表达式表达式n ) 语句语句nelse 语句语句m853.4.3 选择结构的嵌套图3.5 嵌套if语句第一种形式的执行流程863.4.3 选择结构的嵌套例3.4
48、 1 #include 2 int main() 3 4 int score; 5 scanf(%d,&score); 6 if (score = 90 ) printf(An); 7 else if (score = 80 ) printf(Bn); 8 else if (score = 70 ) printf(Cn); 9 else if (score = 60 ) printf(Dn); 10 else printf(En); 11 return 0; 12 873.4.3 选择结构的嵌套1if语句的嵌套(2)第二种形式,在if和else分支上嵌套if语句,语法形式为: if (
49、 表达式表达式1 ) if ( 表达式表达式2 ) 语句语句1 else 语句语句2else if ( 表达式表达式3 ) 语句语句3 else 语句语句4883.4.3 选择结构的嵌套图3.6 嵌套if语句第二种形式的执行流程893.4.3 选择结构的嵌套例3.5 1 #include 2 int main() 3 4 int a,b,c,d,t; 5 scanf(%d%d%d%d,&a,&b,&c,&d); 6 if(ab) t=a,a=b,b=t; / 结果结果ac) t=a,a=c,c=t; / 结果结果ad) t=a,a=d,d=t; / 结果结果a=
50、d 9 / 结果结果 a c) t=b,b=c,c=t; / 结果结果bd) t=b,b=d,d=t; / 结果结果b=d 12 / 结果结果 a b d) t=c,c=d,d=t; / 结果结果c=d 14 / 结果结果 a b c d 903.4.3 选择结构的嵌套例3.5 15 printf(%d,%d,%d,%dn,a,b,c,d); 16 return 0; 17 9191例:根据 x求y值。 3x - 11 (0 x 10) y= 2x + 5 (10 x 20) x (20 x 30)输入 x x10 T F 输出X无效3x-11yT输入xx0&x30 x10 x202x
51、+5yxy输出yFFFTT x0&x30T F x20 T F y=x y=3x-11 y=2x+5 输出x无效 输出 y T x=0&x30) if (x10) y=3*x-11; else if (x20) y=2*x+5; else y=x; printf(”x=%7.2f,y=%7.2fn”, x,y); else printf(”%7.2f is invalid.n”, x); return 0; 54933.4.3 选择结构的嵌套2switch语句的嵌套switch语句是可以嵌套的: 1 int a=15, b=21, m=0; 2 switch(a%3) 3 ca
52、se 0: m+; 4 switch(b%2) 5 default: m+; 6 case 0 : m+; break; 7 8 case 1: m+; 9 943.4.4 选择结构程序举例例3.6 1 #include 2 int main() 3 4 int y,m,d,Days; 5 printf(input y,m,d:); 6 scanf(%d%d%d,&y,&m,&d); /输入日期输入日期 7 switch(m) /计算每月的天数计算每月的天数 8 case 2 : 9 Days=28; 10 if(y%4=0&y%100!=0)| (y%400=
53、0) Days+; 11 break; 12 case 4 : case 6 : 13 case 9 : case 11 : Days=30;break; 953.4.4 选择结构程序举例例3.6 14 default: Days=31; /其余月份为其余月份为31天天 15 16 d+; 17 if (dDays) d=1,m+; /判断月末判断月末 18 if (m12) m=1,y+; /判断年末判断年末 19 printf(%d-%d-%dn,y,m,d); 20 return 0; 21 963.4.4 选择结构程序举例例3.7 1 #include 2 int main() 3 4
54、 int m,d,t; 5 printf(input m,d:); 6 scanf(%d%d,&m,&d); /输入月份和日期输入月份和日期 7 t = m=t) m+;/在一个月的在一个月的t号之后月份加一号之后月份加一 9 switch(m) 10 case 2 : printf(宝瓶宝瓶n);break; 11 case 3 : printf(双鱼双鱼n);break; 12 case 4 : printf(白羊白羊n);break; 13 case 5 : printf(金牛金牛n);break; 14 case 6 : printf(双子双子n);break; 973
55、.4.4 选择结构程序举例例3.7 15 case 7 : printf(巨蟹巨蟹n);break; 16 case 8 : printf(狮子狮子n);break; 17 case 9 : printf(室女室女n);break; 18 case 10 : printf(天秤天秤n);break; 19 case 11 : printf(天蝎天蝎n);break; 20 case 12 : printf(射手射手n);break; 21 default : printf(摩羯摩羯n); 22 23 return 0; 24 983.4.4 选择结构程序举例图3.7 星座与日期规律9999例:
56、设计一个简单的菜单选择程序,根据选择可实现a与b的四则运算。#include “stdio.h”int main( ) int a, b; char c1; printf(”1. Addn”); printf(”2. Subtractn”); printf(”3. Multiplyn”); printf(”4. Dividen”); printf(”Enter your choice:”); c1=getchar( );55100100 c1=getchar( ); if (c1=1 & c1=4 ) printf(”Enter a,b:”); scanf(“%d,%d”, &
57、a,&b); switch(c1) case 1 : printf(“%dn”,a+b); break; case 2 : printf(“%dn”,a-b); break; case 3 : printf(“%dn”,a*b); break; case 4 : printf(“%fn”,(float)a/b); else printf(“Invalid selection.”);return 0;1013.5 程序循环结构1. while语句2. do语句3. for语句102C语言实验安排:周语言实验安排:周2晚晚19:00-21:4502011201、2、3、4曹光前曹光前 4-
58、16周周 教室:3层北1033.5.1 while语句while语句while语句的作用是计算给定的表达式,根据结果判定循环执行语句,语句形式为:其中的语句称为子语句,又称循环体,圆括号内的表达式称为循环条件。 while ( 表达式表达式 ) 语句语句;1043.5.1 while语句while语句的执行过程是:计算表达式,无论表达式为何种类型均将这个值按逻辑值处理;如果值为真,则执行子语句,然后重复;如果值为假,则while语句结束,执行后续语句。 1053.5.1 while语句图3.8 while语句执行流程ExpressionRepetition body1063.5.1 while
59、语句【例3.8】 求即 1001nsn123100s 1073.5.1 while语句图3.8 while语句执行流程1083.5.1 while语句例3.8 1 #include 2 int main() 3 4 int n=1,sum=0; 5 while (n=100) /循环直到循环直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 9 printf(sum=%dn,sum); 10 return 0; 11 1093.5.1 while语句例3.8 4 int n=1,sum=0; 5 while (n=100) /循环直到循环直到n大于大于100
60、6 sum=sum+n; /累加和累加和 7 n=n+1; 8 第4行先做循环前的初始化,n为1,sum为0。第5行while语句时n=100的结果为真,则执行循环体;循环体是复合语句,先计算sum累加,则sum变为0+1的结果,再让n累加1。1103.5.1 while语句例3.8 4 int n=1,sum=0; 5 while (n=100) /循环直到循环直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 重复第5行的比较和执行过程,则n值越来越趋向100,n=100也越来越趋向假,sum逐渐为累加和的结果;当n为100时,n=100为真,sum为 的结果,n值累加到101,则n=100为假,while语句结束。1113.5.1 while语句例3.8 4 int n=1,sum=0; 5 while (n=100) /循环直到循环直到n大于大于100 6 sum=sum+n; /累加和累加和 7 n=n+1; 8 第4行叫循环初始,即进入循环前的初始计算过程。如果不给n和sum赋初值可不可以? 1123.5.1 while语句例3.8 4 int n=1,sum=0; 5 while (n=10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外贸商务信函合同范例
- 天府新区航空旅游职业学院《数值分析初步》2023-2024学年第一学期期末试卷
- 七年级英语下册 Unit 1 Dream homes Grammar教学实录 (新版)牛津版
- 游艇生产采购合同范例
- 外墙翻修安全合同范例
- 政府卖杨树合同范例
- 唐山学院《商务智能应用》2023-2024学年第一学期期末试卷
- 武侯区保安合同范例
- 商业大厦租赁合同范例
- 七年级语文上册 第三单元 10 再塑生命的人教学实录1 新人教版
- 质控竞聘课件
- 2024-2025学年统编版道德与法治三年级上册 期末测试卷(含答案)
- 教育学原理项贤明第九章教师与学生
- 严禁在学校组织宗教活动
- 2023-2024学年广东省湛江市赤坎区某中学七年级上学期期末数学试卷及参考答案
- (完整)苏教版小学五年级上册数学口算练习题
- 北京市西城区2022-2023学年高三上学期期末生物试题 附解析
- 《中文歌曲在对外汉语文化教学中的应用研究》
- 2024年云南省中考物理试题含答案
- GB/T 28569-2024电动汽车交流充电桩电能计量
- 政府采购评审专家考试题及答案
评论
0/150
提交评论