最新c c++语言程序设计(西电版第3章 程序设计基础(共133张ppt课件).pptx
1 第三章第三章 程序设计程序设计(chn x sh j)(chn x sh j)基础基础第一页,共一百三十三页。3.1 3.1 程序结构和语句程序结构和语句3.2 3.2 数据的输入和输出数据的输入和输出3.3 3.3 顺序顺序(shnx)(shnx)结构的程序设计结构的程序设计3.4 3.4 选择结构的程序设计选择结构的程序设计3.5 3.5 循环结构的程序设计循环结构的程序设计3.6 3.6 程序设计的风格程序设计的风格3.7 3.7 小结小结第二页,共一百三十三页。3N-S结结构构图图流流程程图图ABABYNABP成立成立? P T F A B第三页,共一百三十三页。4NYP成立成立?A当当P成立时成立时 A A直到P成立时NYAP成立成立?N-S结结构构图图流流程程图图第四页,共一百三十三页。5程序包括数据程序包括数据(shj)描述和数据描述和数据(shj)操作。操作。数据描述主要定义数据结构(用数据类型表数据描述主要定义数据结构(用数据类型表示)和数据初值。示)和数据初值。数据操作的任务是对已提供的数据进行加工。数据操作的任务是对已提供的数据进行加工。C程序对数据的处理和加工是通过语句的执程序对数据的处理和加工是通过语句的执行来实现的。行来实现的。第五页,共一百三十三页。6C C语言语言数 据 操数 据 操作语句作语句简单语句简单语句特殊语句特殊语句流程控 制 语流程控 制 语句句表达式语句表达式语句( (表达式表达式;);)函数调用语句函数调用语句( (函数名函数名( (参数表参数表););)空语句空语句(;)(;)复合语句复合语句(一条或多条语句一条或多条语句)注释语句注释语句(/(/* *注释文本注释文本* */)/)结构化语句结构化语句非结构 化 语非结构 化 语句句条件语句条件语句(if(if语句,语句,switchswitch语句语句) )循环语句循环语句(while(while语句,语句,do-whiledo-while语句,语句,forfor语语句句) )限定转向语句限定转向语句(break(break语句,语句,continuecontinue语句,语句,returnreturn语语句句) )非限定转向语句非限定转向语句(goto(goto语句语句) )第六页,共一百三十三页。 例如:例如:int a,b; float function( int, int);7C程序由函数程序由函数(hnsh)组成。组成。函数的格式:函数的格式:函数名(参数表)函数名(参数表) 说明部分;说明部分; 执行部分;执行部分;可执行语句可执行语句第七页,共一百三十三页。l表达式后面加一个分号,构成表达式后面加一个分号,构成(guchng)表达式语句表达式语句x=3; y=y+5; x=a-b & c | d ; printf(x=%d, y=%dn,x,y); sort(a,10); 8分号是语句分号是语句(yj)必不可少的一部分必不可少的一部分l简单语句简单语句是程序中使用最频繁的语句,来自于是程序中使用最频繁的语句,来自于一个表达式或者函数调用,结尾用分号就构成一个表达式或者函数调用,结尾用分号就构成一个语句。一个语句。第八页,共一百三十三页。9表达式语句中最常用的是赋值语句,有以下三表达式语句中最常用的是赋值语句,有以下三种种(sn zhn)(sn zhn)常用形式:常用形式: 简单赋值:简单赋值:变量变量= =表达式;表达式;例如:例如: x=2*y+1;s=sqrt(5); 多重赋值:多重赋值:变量变量1=1=变量变量2=2=变量变量n=n=表达式表达式;例如:例如: a=b=c=2;i=j=k=m+1; 复合赋值:复合赋值:变量双目操作符变量双目操作符= =表达式;表达式;例如:例如: sum+=i;等价于等价于sum=sum+i;第九页,共一百三十三页。空语句、复合语句都属于特殊语句。空语句、复合语句都属于特殊语句。(1 1)如果语句只有一个分号,就是空语句。)如果语句只有一个分号,就是空语句。 程序执行空语句时不产生任何动作。它程序执行空语句时不产生任何动作。它可以作为循环语句中的空循环体;或代替模可以作为循环语句中的空循环体;或代替模块化程序设计中还尚未实现块化程序设计中还尚未实现(shxin)(shxin)的以及暂不的以及暂不加入的部分。程序中有时需要加上一个空语加入的部分。程序中有时需要加上一个空语句来表示存在一条语句,但是随意加上分号句来表示存在一条语句,但是随意加上分号有时会造成逻辑上的错误,因此,用户应该有时会造成逻辑上的错误,因此,用户应该慎用或去掉程序中不必要的空语句。慎用或去掉程序中不必要的空语句。10第十页,共一百三十三页。l用一对花括号用一对花括号“”括起来的若干条语句括起来的若干条语句 l花括号中可以是说明语句、表达式语句、控制语花括号中可以是说明语句、表达式语句、控制语句,也可以是复合句,也可以是复合(fh)(fh)语句语句l例如:例如: if (ab) max=a; min=b; for(n=1; n= 100 ) printf(“dn”, p); break; 11第十一页,共一百三十三页。复合语句中如果有说明性语句,应该复合语句中如果有说明性语句,应该(ynggi)(ynggi)写写在可执行语句的前面。在可执行语句的前面。12例如例如(lr)(lr): main( ) int a,b; a=b=100; float c=10.23; printf(%fn,c); printf(%d %dn,a,b); 要特别注意:要特别注意:花括号的配对花括号的配对花括号的位置花括号的位置C C语言学习语言学习的难点之的难点之一一第十二页,共一百三十三页。1 1选择分支控制语句选择分支控制语句 if ( ) else switch ( ) 2 2循环循环(xnhun)(xnhun)控制语句控制语句 for ( ) while ( ) do while ( )3 3其他控制语句其他控制语句 break、continue、gotoreturn13第十三页,共一百三十三页。(1 1)分析问题)分析问题。分析清楚输入、输出和处理要求。即确。分析清楚输入、输出和处理要求。即确定定(qudng)(qudng)要产生的数据(称为输出);确定要产生的数据(称为输出);确定(qudng)(qudng)要进行要进行输入的数据(称为输入);要解决的问题等。输入的数据(称为输入);要解决的问题等。(2 2)确定算法。)确定算法。研究确定一种算法,从有限步的输入中获研究确定一种算法,从有限步的输入中获取输出。也就是拟定处理的方法和步骤,包括用什么公式或取输出。也就是拟定处理的方法和步骤,包括用什么公式或进行怎样的运算。进行怎样的运算。(3 3)编写源程序。)编写源程序。把解题的算法表示成把解题的算法表示成C C程序。程序。(4 4)调试运行。)调试运行。把把C C程序输入计算机,编辑成程序输入计算机,编辑成C C源程序文源程序文件;然后进行编译、链接和运行,修改错误,直到输出件;然后进行编译、链接和运行,修改错误,直到输出正确结果。正确结果。14第十四页,共一百三十三页。 数据的输入输出是程序设计中使用最普遍的基本数据的输入输出是程序设计中使用最普遍的基本操作。程序运行所需的数据通常要从外部设备(如操作。程序运行所需的数据通常要从外部设备(如键盘、文件、扫描仪等)输入,程序的运行结果通键盘、文件、扫描仪等)输入,程序的运行结果通常也要输出到外部设备(如打印机、显示器、绘图常也要输出到外部设备(如打印机、显示器、绘图仪、文件等)。仪、文件等)。 因此,输入、输出是用户因此,输入、输出是用户(yngh)(yngh)与程序之间交与程序之间交互的主要手段。互的主要手段。15第十五页,共一百三十三页。 C C语言本身虽然没有直接提供语言本身虽然没有直接提供(tgng)(tgng)用于输入和用于输入和输出的语句,但提供输出的语句,但提供(tgng)(tgng)了输入和输出标准库函了输入和输出标准库函数(简称标准函数或库函数)。数(简称标准函数或库函数)。 由于标准输入输出函数的原型放在头文件由于标准输入输出函数的原型放在头文件stdio.hstdio.h中,因此在编写程序时,要用编译预中,因此在编写程序时,要用编译预处理命令处理命令“#include#include”将头文件将头文件stdio.hstdio.h包括到包括到用户源文件中。用户源文件中。 #include 或或 #includestdio.h16第十六页,共一百三十三页。函数调用的一般形式:函数调用的一般形式: printf(printf(格式控制格式控制(kngzh)(kngzh)字符串字符串, ,输出项表输出项表) ); 功能:功能:将各输出项的值按指定的格式显示在标准将各输出项的值按指定的格式显示在标准输出设备(如屏幕)上。输出设备(如屏幕)上。例如有程序段例如有程序段 :int a=123,b=100; printf(%d %d %dn,a,b,a+b); printf (c = %d + %d = %dn,a,b,a+b ); 17第十七页,共一百三十三页。l用双引号括起的字符串,用于指定输出数用双引号括起的字符串,用于指定输出数据的类型、格式据的类型、格式(g shi)(g shi)、个数、个数l包括:包括:普通字符普通字符和和格式说明符格式说明符18照原样照原样(yun yn)(yun yn)输出输出 printf (c=%d+%d=%dn, a, b, a+b );格式说明符:指定输出格式说明符:指定输出3 3个十进制整型数,分别个十进制整型数,分别为变量为变量 a a、b b、a ab b的值的值第十八页,共一百三十三页。l在和格式在和格式(g shi)(g shi)符之间可以使用符之间可以使用格式修饰符格式修饰符19整型整型数据数据 % %d d以有符号十进制形式输出整型数以有符号十进制形式输出整型数% %o o以无符号八进制形式输出整型数以无符号八进制形式输出整型数% %x x以无符号十六进制形式输出整型数以无符号十六进制形式输出整型数%u%u以无符号十进制形式输出整型数以无符号十进制形式输出整型数实型实型数据数据 % %f f以小数形式输出实型数以小数形式输出实型数% %e e以指数形式输出实型数以指数形式输出实型数% %g g按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数字符型字符型数据数据 % %c c输出一个字符输出一个字符% %s s输出字符串输出字符串其他其他 %输出字符输出字符 % % 本身本身第十九页,共一百三十三页。例如:例如:% %ld ld 输出十进制长整型数输出十进制长整型数 % %m.nf m.nf 右对齐右对齐(du q)(du q),m m位域宽,位域宽,n n位小数或位小数或n n个字符个字符%-%-m.nf m.nf 左对齐左对齐 20l l输出长整型数(只可与输出长整型数(只可与d d、o o、x x、u u结合用)结合用)m m指定数据输出的宽度(即域宽)指定数据输出的宽度(即域宽). .n n对实型数据,指定输出对实型数据,指定输出 n n 位小数;位小数;对字符串,指定左端截取对字符串,指定左端截取n n 个字符输出个字符输出+ +使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出- -使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出整数位数整数位数+ +小数位数小数位数+ +小数点小数点 第二十页,共一百三十三页。#include void main() int a=-2; float b=123.456; char c=a; printf(a=%d,%3d,%-3dn,a,a,a); printf(a=%o, %x, %u, %3o, %3x, %3u n,a,a,a,a,a,a); printf(b=%f,%10.2f, %.2f, %5.2f, %-10.2fn,b,b,b,b,b); printf(b=%e, %10.2e, %.2e, %5.2e, %- 10.2en,b,b,b,b,b); printf(“c=%3c,%-3c,%dn”,c,c,c); printf(%3s,%7.2s,%.3s,%-5.3sn,CHINA,CHINA,CHINA,CHINA);21程序程序(chngx)(chngx)输出:输出:a=-2,-2,-2a=37777777776,fffffffe,4294967294,37777777776,fffffffe,4294967294b=123.456001,123.46,123.46, 123.46, 123.46b=1.234560e+002, 1.23e+002, 1.23e+002, 1.23e+002, 1.23e+002c=a, c= a, 97CHINA, CI,CHI,CHI第二十一页,共一百三十三页。lprintfprintf函数格式控制中的格式说明符与输函数格式控制中的格式说明符与输出参数的个数和类型出参数的个数和类型(lixng)(lixng)必须一一对应。必须一一对应。 l格式说明必须以格式说明必须以“%”“%”开头,开头,“ %” “ %” 和后和后面的描述符之间不能有空格。除面的描述符之间不能有空格。除 %X %X、%E%E、%G%G外类型描述符必须是小写字母。外类型描述符必须是小写字母。 l格式控制字符串中,可包含转义字符。格式控制字符串中,可包含转义字符。l不同的系统在实现格式输出时,输出结果不同的系统在实现格式输出时,输出结果可能会有一些小的差别。可能会有一些小的差别。22第二十二页,共一百三十三页。l函数调用的一般函数调用的一般(ybn)(ybn)形式:形式: scanf( scanf(格式控制字符串,输入项表格式控制字符串,输入项表); ); 功能:功能:按格式控制指定的格式,从标准输入按格式控制指定的格式,从标准输入设备设备( (即键盘即键盘) )交互输入数据,并依次存放到交互输入数据,并依次存放到对应地址参数指定的变量中对应地址参数指定的变量中( (即将输入值赋给即将输入值赋给变量变量) )。 例如:例如:scanf (%d%f,&a, &f); scanf (%o, %f , &b,&x); scanf (a=%d, b=%d,&a,&b); 23第二十三页,共一百三十三页。l用双引号括起的字符串,用于指定输入用双引号括起的字符串,用于指定输入(shr)(shr)数据的类型、格式、个数以及输入数据的类型、格式、个数以及输入(shr)(shr)的形的形式式 l包括:包括:普通字符普通字符和和格式说明符格式说明符24照原样照原样(yun yn)(yun yn)输入输入 scanf (a=%d, b=%d, &a, &b);格式说明符:指定输入格式说明符:指定输入2 2个十进制整型数赋个十进制整型数赋给变量给变量 a a 和和 b b第二十四页,共一百三十三页。l在和格式符之间可以在和格式符之间可以(ky)(ky)使用使用附加说明符附加说明符25整型整型数据数据 % %d d输入十进制整型数输入十进制整型数% %u u输入无符号的十进制整型数输入无符号的十进制整型数% %o o输入八进制整型数输入八进制整型数% %x x输入十六进制整型数输入十六进制整型数实型实型数据数据 % %f f输入小数形式的单精度实型数输入小数形式的单精度实型数% %e e输入指数形式的单精度实型数输入指数形式的单精度实型数字符型字符型数据数据 % %c c输入单个字符输入单个字符% %s s输入一个字符串输入一个字符串第二十五页,共一百三十三页。例如例如(lr)(lr):% %ldld、% %lolo输入十进制、八进制长整型数输入十进制、八进制长整型数% %lflf、%le%le输入双精度实型数输入双精度实型数% %mfmf输入输入m m位数(域宽)位数(域宽)% %* *dd忽略输入的一个整型数忽略输入的一个整型数26l l与与d d、o o、x x、u u结合输入长整型数结合输入长整型数与与 f f 结合输入结合输入doubledouble型数型数m m指定数据输入的宽度(即域宽)指定数据输入的宽度(即域宽)* *忽略读入的数据忽略读入的数据(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)对对floatfloat和和doubledouble型指型指整数整数(zhngsh)(zhngsh)位数位数+ +小数点小数点 + +小数位数小数位数第二十六页,共一百三十三页。lscanf (%d%d%d, &a, &b, &c); 输入输入3 3个整型十进制数,以空白符个整型十进制数,以空白符(空格、(空格、tabtab键或回车键)分隔键或回车键)分隔 lscanf (%d, %o, %f , &a, &b, &x); 输入输入3 3个数,以个数,以“, ,”分隔分隔lscanf (a=%d, b=%d, &a, &b); 输入的形式是:输入的形式是:a=a=3232, b=, b=28 28 (普通字符普通字符(z f)(z f)要照原样输入)要照原样输入)27第二十七页,共一百三十三页。main( ) int a,b,c; long m; float x; double y; char ch, string20; printf(input a,b,c,m: ); scanf(%d %o %x %ld,&a,&b,&c,&m); printf(a=%d,b=%d,c=%d,m=%ldn,a,b,c,m); printf(input x,y: ); scanf(%f %lf,&x,&y); getchar(); printf(x=%f, y=%fn,x,y); printf(input ch,string: ); scanf(%c %s,&ch, string); printf(ch=%c, string=%snn,ch,string);28第二十八页,共一百三十三页。l要求在程序运行中输入数据,输入的数据个数和类型必要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。须与格式说明符一一对应。l地址参数形式:地址参数形式:& &变量名变量名(除数组或指针变量)(除数组或指针变量) l格式控制中格式控制中有普通字符时,必须照原样输入有普通字符时,必须照原样输入。l格式控制中格式控制中无普通字符时,输入的数值型数据和字无普通字符时,输入的数值型数据和字符串用空白符分隔符串用空白符分隔,字符型数据不必分隔。,字符型数据不必分隔。 ldoubledouble型数据输入时,必须用型数据输入时,必须用% %lflf或或% %lele格式格式l实型数输入时域宽不能用实型数输入时域宽不能用m.nm.n形式的附加说明形式的附加说明 l为了减少不必要的输入量,除了逗号、分号、空格为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现符以外,格式控制中尽量不要出现(chxin)(chxin)普通字符,普通字符,也不要使用也不要使用 n n 、t t 等转义字符等转义字符29第二十九页,共一百三十三页。输入的数值型数据用空白符分隔输入的数值型数据用空白符分隔输入的输入的 charchar型数据不必分隔型数据不必分隔 2022-8-930scanf (%c%c%c, &ch1, &ch2, &ch3);要输入:要输入:abcabc 不能输入:不能输入:a a b b c c 注意注意(zh y)数值型数据与数值型数据与char型数据的混合输入型数据的混合输入例如:例如:scanf (%d%d, &m, &n);scanf (%c, &ch); 错误输入:错误输入:32 28 a 正确输入:正确输入:32 28a 第三十页,共一百三十三页。 putchar(ch) putchar(ch) 在标准在标准(biozhn)(biozhn)输出设备(即显示器屏幕)上输输出设备(即显示器屏幕)上输出一个字符。出一个字符。putchar(b); putchar(n); putchar(101);putchar(st); 31第三十一页,共一百三十三页。#include “stdio.h” 或或#include 32#include stdio.h main( ) char c1,c2; c1=a ; c2=b ; putchar(c1);putchar(c2); putchar(n); putchar(c1-32);putchar(c2-32); putchar(n);输出输出(shch)结果:结果:ab AB第三十二页,共一百三十三页。函数调用的一般形式函数调用的一般形式 : : getchar( ) getchar( ) 功能功能(gngnng)(gngnng):从标准输入设备(即键盘)上交互输入一从标准输入设备(即键盘)上交互输入一个字符。个字符。例如:例如:getchar( ) ; c = getchar( ); printf(%c n,getchar( );33第三十三页,共一百三十三页。【例】【例】getchargetchar函数函数(hnsh)(hnsh)的应用。的应用。 #include stdio.hmain( ) char ch; ch=getchar( ); printf(%c %dn,ch,ch); printf(%c %dnn,ch-32,ch-32); 34m m m 109M 77第三十四页,共一百三十三页。lgetchargetchar是是C C语言的标准库函数,使用时必须语言的标准库函数,使用时必须加编译预处理命令:加编译预处理命令:#include stdio.h 或或 #include lgetchargetchar函数需要函数需要(xyo)(xyo)交互输入,接收到输交互输入,接收到输入字符之后才继续执行程序。入字符之后才继续执行程序。 l连续使用连续使用getchargetchar函数时,要注意字符的输入函数时,要注意字符的输入形式形式 ,例如执行如下程序段:,例如执行如下程序段:35char ch1,ch2;ch1=getchar( );ch2=getchar( );必须必须(bx)(bx)连续输入两个连续输入两个字符,中间不能有其字符,中间不能有其他字符他字符第三十五页,共一百三十三页。36顺序结构是程序设计语言最基本、最简单的结构,顺序结构是程序设计语言最基本、最简单的结构,也称线性结构。程序中包含的语句按照书写的顺也称线性结构。程序中包含的语句按照书写的顺序被连续序被连续(linx)(linx)执行。执行。 开始开始 A A B B 结束结束语句按书写顺序执语句按书写顺序执行行( z h x n g )( z h x n g ),先执行,先执行(zhxng)(zhxng)A A,再执行,再执行B B。其中其中A A、B B可由一条可由一条或多条语句实现。或多条语句实现。第三十六页,共一百三十三页。37变量定义变量定义变量赋值变量赋值运算处理运算处理输出结果输出结果可用:可用:变量初始化变量初始化赋值语句赋值语句(yj)(yj)输入函数调用语句输入函数调用语句注意各个语句注意各个语句(yj)(yj)的顺序的顺序第三十七页,共一百三十三页。【例】数据交换。从键盘输入【例】数据交换。从键盘输入a a、b b的值,输出交的值,输出交换以后的值。换以后的值。 思路:在计算机中交换变量思路:在计算机中交换变量a a和和b b的值,不能只的值,不能只写下面两个写下面两个(lin )(lin )赋值语句赋值语句 a=b ; b=a ; 38正确正确(zhngqu)(zhngqu)的交换方法:的交换方法:c=a ; a=b ; b=c;第三十八页,共一百三十三页。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);39程序运行情况程序运行情况(qngkung)(qngkung)如下:如下:input a, b: input a, b: 32, 5732, 57 before exchange: a=32 b=57 before exchange: a=32 b=57 after exchange: a=57 b=32 after exchange: a=57 b=32 第三十九页,共一百三十三页。40) cs)(bs)(as ( sarea) cba (21s其中:其中:第四十页,共一百三十三页。#include math.hmain( ) int a,b,c; float s,area ; scanf(%d, %d, %d,&a,&b,&c); s =1.0/2*(a+b+c) ; area = sqrt(s*(s-a)*(s-b)*(s-c) ; printf(area = %8.3f n,area) ;41程序运行情况程序运行情况(qngkung)(qngkung)如下:如下:3,4,53,4,5 area = 6.000 area = 6.000 第四十一页,共一百三十三页。#include stdio.hvoid main() char *p,c; /*p为指向字符的指针变量,为指向字符的指针变量,c为字符变量为字符变量*/ p=&c; /*指针变量指针变量p指向字符变量指向字符变量c*/ printf(请输入一个小写字母:请输入一个小写字母:); *p= getchar(); *p=*p-32; /*将小写字母转换成对应的大写字母将小写字母转换成对应的大写字母*/ printf(%c n,*p);42第四十二页,共一百三十三页。#includevoid main() int x; /*保存输入的三位整数保存输入的三位整数(zhngsh)*/ int x1,x10,x100; /*分别保存分别保存x的个、十和百位数的个、十和百位数*/ printf(请输入一个三位整数请输入一个三位整数); scanf(“%3d”,&x); /*输入一个三位整数输入一个三位整数*/ x100=x/100; /*分离百位分离百位 */ x10=(x-x100*100)/10; /*分离十位分离十位 */ x1=x%10; /*分离个位分离个位 */ printf(%d的逆序数是的逆序数是%d%d %d n,x,x1,x10,x100);43第四十三页,共一百三十三页。ifif语句语句switchswitch语句语句选择结构程序设计举例选择结构程序设计举例44第四十四页,共一百三十三页。45l功能:功能:首先计算圆括号中表达式的值,如果首先计算圆括号中表达式的值,如果(rgu)(rgu)表达式表达式的值为真(非零值)时,则执行圆括号其后的语的值为真(非零值)时,则执行圆括号其后的语句,然后执行该语句后面的下一个语句。如果句,然后执行该语句后面的下一个语句。如果(rgu)(rgu)表达式的值为假(表达式的值为假(“0 0”),则跳过圆括号后),则跳过圆括号后面的语句,直接执行面的语句,直接执行ifif语句后面的下一个语句。语句后面的下一个语句。第四十五页,共一百三十三页。 if (x0) m+; if ( ab ) c=a; a=b; b=c; 46 表达式非表达式非0 T F 语句语句N-S结构图结构图语句语句流程图流程图NY表达式非表达式非0?第四十六页,共一百三十三页。#include stdio.hvoid main() int a,b,max; printf(请输入两个整数请输入两个整数: ); scanf(%d%d,&a,&b); max=a; if (maxb) printf(max=%d,a); if (a0) m+; else m-; if ( ch= a & chb) printf(max=%d,a); else printf(max=%d,b); 51第五十一页,共一百三十三页。l语句一般格式语句一般格式: :if if (表达式表达式1 1) 语句语句1 1 else if else if (表达式表达式2 2) 语句语句2 2 else if else if (表达式表达式m m) 语句语句m m else else 语句语句 n nl功能:功能:依次计算依次计算(j sun)(j sun)并判断表达式并判断表达式i i,为非为非0 0时执行后时执行后面的语句,都为面的语句,都为0 0时,执行语句时,执行语句n n无论执行完那个语句分支,都转到后续语句无论执行完那个语句分支,都转到后续语句52第五十二页,共一百三十三页。53表达式表达式2?表达式表达式1?语句语句n 语句语句1 语句语句2 语句语句mYNYNNY第五十三页,共一百三十三页。lN-SN-S结构图结构图54 表达式表达式1? T F 表达式表达式2? 语句语句1 T F 语句语句2 表达式表达式m? T F 语句语句m 语句语句n例如例如(lr)(lr):if (a0) x= -1 ; else if (a=0 ) x= 0 ; else x=1 ; 第五十四页,共一百三十三页。【例【例3.103.10】根据录入】根据录入(l r)(l r)的百分制成绩,显示相应的成绩等级。的百分制成绩,显示相应的成绩等级。#include stdio.hvoid main ( ) int score; printf (请输入成绩请输入成绩 : ); scanf (%d, &score ); if (score100 ) printf (输入错误输入错误! n ); else if (score=90 ) printf (n%d-优优n, score ); else if (score=80 ) printf (n%d-良良n, score ); else if (score=70 ) printf (n%d-中中n, score ); else if (score=60 ) printf (n%d-及格及格n, score ); else printf (n%d-不及格不及格n, score );55第五十五页,共一百三十三页。(1) (1) 以上以上3 3种种ifif语句中语句中ifif后面的条件表达式,一后面的条件表达式,一般是逻辑表达式或关系般是逻辑表达式或关系(gun x)(gun x)表达式,也可以是表达式,也可以是其它表达式,如赋值表达式等,甚至也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量、常量。例如:一个变量、常量。例如: if(b) if(b) 语句语句; ; if(5) if(5) 语句语句; ;都是允许的。都是允许的。 在执行在执行ifif语句时,系统先对表达式进行求语句时,系统先对表达式进行求解,若表达式的值为解,若表达式的值为“0 0”,按,按“假假”处理,若处理,若表达式的值为非表达式的值为非“0 0”,则按,则按“真真”处理,执行处理,执行指定的语句。指定的语句。56第五十六页,共一百三十三页。(2) (2) 在在ifif语句中,条件判断表达式必须语句中,条件判断表达式必须(bx)(bx)用圆括用圆括号括起来,在语句之后必须号括起来,在语句之后必须(bx)(bx)加分号。加分号。elseelse子子句不能作为语句单独使用,它必须是句不能作为语句单独使用,它必须是ifif语句的语句的一部分,与一部分,与ifif配对使用。配对使用。(3) (3) 在在ifif语句的三种形式中,所有的语句应为单个语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行多个语句,则语句,如果要想在满足条件时执行多个语句,则必须把这多个语句用必须把这多个语句用“”括起来组成一个复合括起来组成一个复合语句。但要注意的是在语句。但要注意的是在“ ”之后不能再加分号之后不能再加分号。57第五十七页,共一百三十三页。lswitchswitch语句语句(yj)(yj)的一般形式的一般形式 : :switch switch (表达式)表达式) case case 常量表达式常量表达式1: 1: 语句序列语句序列1 1 case case 常量表达式常量表达式2: 2: 语句序列语句序列2 2 case case 常量表达式常量表达式n: n: 语句序列语句序列n n default : default : 语句序列语句序列n+1 n+1 l功能:功能:计算表达式的值,与常量表达式的值比较,等于第计算表达式的值,与常量表达式的值比较,等于第i i个值个值时,顺序执行语句序列时,顺序执行语句序列i i、i+1i+1、 、 n+1 n+1若与所有常量表达式值都不相等,执行语句序列若与所有常量表达式值都不相等,执行语句序列n+1n+1。 58第五十八页,共一百三十三页。59计算计算表达式表达式常量表达式常量表达式1语句序列语句序列1常量表达式常量表达式2语句序列语句序列2 常量表达式常量表达式n语句序列语句序列ndefault语句序列语句序列n+1第五十九页,共一百三十三页。60#include stdio.h void main() int a; printf(input integer number: ); scanf(“%d”,&a); 第六十页,共一百三十三页。61switch (a) case 1: printf(Monday.); case 2: printf(Tuesday.); case 3: printf(Wednesday.); case 4: printf(Thursday.); case 5: printf(Friday.); case 6: printf(Saturday.); case 7: printf(Sunday.); default:printf(error.); 第六十一页,共一百三十三页。“case case 常量表达式常量表达式i i:”等价于语句标号,等价于语句标号,计计算算(j sun)(j sun)出的表达式值等于哪个语句标号,就从出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。哪个位置开始顺序向下执行语句序列。 语句位置影响运行结果语句位置影响运行结果62第六十二页,共一百三十三页。63switch (a) case 1: printf(Monday.); break; case 2: printf(Tuesday.); break; case 3: printf(Wednesday.); break; case 4: printf(Thursday.); break; case 5: printf(Friday.); break; case 6: printf(Saturday.); break; case 7: printf(Sunday.); break; default:printf(error.); 第六十三页,共一百三十三页。(1 1)一定要用圆括号把)一定要用圆括号把 switch switch 后面的表达式后面的表达式括起来,否则会给出出错信息。括起来,否则会给出出错信息。(2 2)常量表达式与)常量表达式与casecase之间通常应有至少一之间通常应有至少一个空格,否则可能被编译系统认为是语句标个空格,否则可能被编译系统认为是语句标号号(bioho)(bioho),如,如case5case5,并出现语法错误,这类错,并出现语法错误,这类错误较难查找。误较难查找。(3 3)所有)所有casecase子句后所列的常量表达式值必须子句后所列的常量表达式值必须互不相同,否则就会互相矛盾。互不相同,否则就会互相矛盾。 64第六十四页,共一百三十三页。(