1. 首页
  2. 文档大全

第3章 程序设计基础

上传者:7****0 2022-06-03 21:20:16上传 PPT文件 2.30MB
第3章 程序设计基础_第1页 第3章 程序设计基础_第2页 第3章 程序设计基础_第3页

《第3章 程序设计基础》由会员分享,可在线阅读,更多相关《第3章 程序设计基础(132页珍藏版)》请在文档大全上搜索。

1、13.1 3.1 程序结构和语句程序结构和语句3.2 3.2 数据的输数据的输入和输出入和输出3.3 3.3 顺序结构的顺序结构的程序设计程序设计3.4 3.4 选择结构的程序选择结构的程序设计设计3.5 3.5 循环结构的程序设循环结构的程序设计计3.6 3.6 程序设计的风格程序设计的风格3.7 3.7 小结小结3N-S结结构构图图流流程程图图ABABYNABP成立成立? P T F A B4NYP成立成立?A当当P成立时成立时 A A直到P成立时NYAP成立成立?N-S结结构构图图流流程程图图5程序包括数据描述和数据操作。程序包括数据描述和数据操作。数据描述主要定义数据结构(用数据类型数

2、据描述主要定义数据结构(用数据类型表示)和数据初值。表示)和数据初值。数据操作的任务是对已提供的数据进行加数据操作的任务是对已提供的数据进行加工。工。C程序对数据的处理和加工是通过语句的程序对数据的处理和加工是通过语句的执行来实现的。执行来实现的。6C C语言语言数 据 操数 据 操作语句作语句简单语句简单语句特殊语句特殊语句流 程 控 制 语流 程 控 制 语句句表达式语句表达式语句( (表达式表达式;);)函数调用语句函数调用语句( (函数名函数名( (参数表参数表););)空语句空语句(;)(;)复合语句复合语句(一条或多条语句一条或多条语句)注释语句注释语句(/(/* *注释文本注释文

3、本* */)/)结构化语句结构化语句非 结 构 化 语非 结 构 化 语句句条件语句条件语句(if(if语句,语句,switchswitch语句语句) )循环语句循环语句(while(while语句,语句,do-whiledo-while语句,语句,forfor语语句句) )限定转向语句限定转向语句(break(break语句,语句,continuecontinue语句,语句,returnreturn语语句句) )非限定转向语句非限定转向语句(goto(goto语句语句) ) 例如:例如:int a,b; float function( int, int);7C程序由函数组成。程序由函数组成。

4、函数的格式:函数的格式:函数名(参数表)函数名(参数表) 说明部分;说明部分; 执行部分;执行部分;可执行语句可执行语句l表达式后面加一个分号,构成表达式语句表达式后面加一个分号,构成表达式语句x=3; y=y+5; x=a-b & c | d ; printf(x=%d, y=%dn,x,y); sort(a,10); 8分号是语句必不可少的一部分分号是语句必不可少的一部分l简单语句简单语句是程序中使用最频繁的语句,来是程序中使用最频繁的语句,来自于一个表达式或者函数调用,结尾用分自于一个表达式或者函数调用,结尾用分号就构成一个语句。号就构成一个语句。9表达式语句中最常用的是赋值语句,有以下

5、表达式语句中最常用的是赋值语句,有以下三种常用形式:三种常用形式: 简单赋值:简单赋值:变量变量= =表达式;表达式;例如:例如: 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)如果语句只有一个分号,就是空语句。)如果语句只有一个分号,就是空语句。 程序执行空语句时不

6、产生任何动作。它程序执行空语句时不产生任何动作。它可以作为循环语句中的空循环体;或代替模可以作为循环语句中的空循环体;或代替模块化程序设计中还尚未实现的以及暂不加入块化程序设计中还尚未实现的以及暂不加入的部分。程序中有时需要加上一个空语句来的部分。程序中有时需要加上一个空语句来表示存在一条语句,但是随意加上分号有时表示存在一条语句,但是随意加上分号有时会造成逻辑上的错误,因此,用户应该慎用会造成逻辑上的错误,因此,用户应该慎用或去掉程序中不必要的空语句。或去掉程序中不必要的空语句。10l用一对花括号用一对花括号“”括起来的若干条语句括起来的若干条语句 l花括号中可以是说明语句、表达式语句、控花

7、括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句制语句,也可以是复合语句l例如:例如: if (ab) max=a; min=b; for(n=1; n= 100 ) printf(“dn”, p); break; 11复合语句中如果有说明性语句,应该写在可复合语句中如果有说明性语句,应该写在可执行语句的前面。执行语句的前面。12例如:例如: main( ) int a,b; a=b=100; float c=10.23; printf(%fn,c); printf(%d %dn,a,b); 要特别注意:要特别注意:花括号的配对花括号的配对花括号的位置花括号的位置C C语言学语言学

8、习的难点习的难点之一之一1 1选择分支控制语句选择分支控制语句 if ( ) else switch ( ) 2 2循环控制语句循环控制语句 for ( ) while ( ) do while ( )3 3其他控制语句其他控制语句 break、continue、gotoreturn13(1 1)分析问题)分析问题。分析清楚输入、输出和处理要求。即。分析清楚输入、输出和处理要求。即确定要产生的数据(称为输出);确定要进行输入的确定要产生的数据(称为输出);确定要进行输入的数据(称为输入);要解决的问题等。数据(称为输入);要解决的问题等。(2 2)确定算法。)确定算法。研究确定一种算法,从有限

9、步的输入研究确定一种算法,从有限步的输入中获取输出。也就是拟定处理的方法和步骤,包括用中获取输出。也就是拟定处理的方法和步骤,包括用什么公式或进行怎样的运算。什么公式或进行怎样的运算。(3 3)编写源程序。)编写源程序。把解题的算法表示成把解题的算法表示成C C程序。程序。(4 4)调试运行。)调试运行。把把C C程序输入计算机,编辑成程序输入计算机,编辑成C C源程序源程序文件;然后进行编译、链接和运行,修改错误,直到文件;然后进行编译、链接和运行,修改错误,直到输出正确结果。输出正确结果。14 数据的输入输出是程序设计中使用最普遍数据的输入输出是程序设计中使用最普遍的基本操作。程序运行所需

10、的数据通常要从外的基本操作。程序运行所需的数据通常要从外部设备(如键盘、文件、扫描仪等)输入,程部设备(如键盘、文件、扫描仪等)输入,程序的运行结果通常也要输出到外部设备(如打序的运行结果通常也要输出到外部设备(如打印机、显示器、绘图仪、文件等)。印机、显示器、绘图仪、文件等)。 因此,输入、输出是用户与程序之间交互因此,输入、输出是用户与程序之间交互的主要手段。的主要手段。15 C C语言本身虽然没有直接提供用于输入和语言本身虽然没有直接提供用于输入和输出的语句,但提供了输入和输出标准库函输出的语句,但提供了输入和输出标准库函数(简称标准函数或库函数)。数(简称标准函数或库函数)。 由于标准

11、输入输出函数的原型放在头文由于标准输入输出函数的原型放在头文件件stdio.hstdio.h中,因此在编写程序时,要用编中,因此在编写程序时,要用编译预处理命令译预处理命令“#include#include”将头文件将头文件stdio.hstdio.h包括到用户源文件中。包括到用户源文件中。 #include 或或 #includestdio.h16函数调用的一般形式:函数调用的一般形式: printfprintf( (格式控制字符串格式控制字符串, ,输出项表输出项表) ); 功能:功能:将各输出项的值按指定的格式显示在将各输出项的值按指定的格式显示在标准输出设备(如屏幕)上。标准输出设备(

12、如屏幕)上。例如有程序段例如有程序段 :int a=123,b=100; printf(%d %d %dn,a,b,a+b); printf (c = %d + %d = %dn,a,b,a+b ); 17l用双引号括起的字符串,用于指定输出数用双引号括起的字符串,用于指定输出数据的类型、格式、个数据的类型、格式、个数l包括:包括:普通字符普通字符和和格式说明符格式说明符18照原样输出照原样输出 printf (c=%d+%d=%dn, a, b, a+b );格式说明符:指定输出格式说明符:指定输出3 3个十进制整型数,个十进制整型数,分别为变量分别为变量 a a、b b、a ab b的值的

13、值l在和格式符之间可以使用在和格式符之间可以使用格式修饰符格式修饰符19整型整型数据数据 % %d d以有符号十进制形式输出整型数以有符号十进制形式输出整型数% %o o以无符号八进制形式输出整型数以无符号八进制形式输出整型数% %x x以无符号十六进制形式输出整型数以无符号十六进制形式输出整型数%u%u以无符号十进制形式输出整型数以无符号十进制形式输出整型数实型实型数据数据 % %f f以小数形式输出实型数以小数形式输出实型数% %e e以指数形式输出实型数以指数形式输出实型数% %g g按数值宽度最小的形式输出实型数按数值宽度最小的形式输出实型数字符型字符型数据数据 % %c c输出一个字

14、符输出一个字符% %s s输出字符串输出字符串其他其他 %输出字符输出字符 % % 本身本身例如:例如:% %ld ld 输出十进制长整型数输出十进制长整型数 % %m.nf m.nf 右对齐,右对齐,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 个字符

15、输出个字符输出+ +使输出的数值数据无论正负都带符号输出使输出的数值数据无论正负都带符号输出- -使数据在输出域内按左对齐方式输出使数据在输出域内按左对齐方式输出整数位数整数位数+ +小数位数小数位数+ +小数点小数点 #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

16、); 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程序输出:程序输出: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+00

17、2, 1.23e+002, 1.23e+002, 1.23e+002c=a, c= a, 97CHINA, CI,CHI,CHIlprintfprintf函数格式控制中的格式说明符与输函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应。出参数的个数和类型必须一一对应。 l格式说明必须以格式说明必须以“% %”开头,开头,“ %” “ %” 和后和后面的描述符之间不能有空格。除面的描述符之间不能有空格。除 % %X X、%E%E、%G%G外类型描述符必须是小写字母。外类型描述符必须是小写字母。 l格式控制字符串中,可包含转义字符。格式控制字符串中,可包含转义字符。l不同的系统在实现格式

18、输出时,输出结果不同的系统在实现格式输出时,输出结果可能会有一些小的差别。可能会有一些小的差别。22l函数调用的一般形式:函数调用的一般形式: scanfscanf( (格式控制字符串,输入项表格式控制字符串,输入项表); ); 功能:功能:按格式控制指定的格式,从标准输入按格式控制指定的格式,从标准输入设备设备( (即键盘即键盘) )交互输入数据,并依次存放到交互输入数据,并依次存放到对应地址参数指定的变量中对应地址参数指定的变量中( (即将输入值赋即将输入值赋给变量给变量) )。 例如:例如:scanf (%d%f,&a, &f); scanf (%o, %f , &b,&x); scan

19、f (a=%d, b=%d,&a,&b); 23l用双引号括起的字符串,用于指定输入数用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式据的类型、格式、个数以及输入的形式 l包括:包括:普通字符普通字符和和格式说明符格式说明符24照原样输入照原样输入 scanf (a=%d, b=%d, &a, &b);格式说明符:指定输入格式说明符:指定输入2 2个十进制整型数赋个十进制整型数赋给变量给变量 a a 和和 b bl在和格式符之间可以使用在和格式符之间可以使用附加说明符附加说明符25整型整型数据数据 % %d d输入十进制整型数输入十进制整型数% %u u输入无符号的十进制

20、整型数输入无符号的十进制整型数% %o o输入八进制整型数输入八进制整型数% %x x输入十六进制整型数输入十六进制整型数实型实型数据数据 % %f f输入小数形式的单精度实型数输入小数形式的单精度实型数% %e e输入指数形式的单精度实型数输入指数形式的单精度实型数字符型字符型数据数据 % %c c输入单个字符输入单个字符% %s s输入一个字符串输入一个字符串例如:例如:% %ldld、% %lolo输入十进制、八进制长整型数输入十进制、八进制长整型数% %lflf、%le%le输入双精度实型数输入双精度实型数% %mfmf输入输入m m位数(域宽)位数(域宽)% %* *dd忽略输入的一

21、个整型数忽略输入的一个整型数26l l与与d d、o o、x x、u u结合输入长整型数结合输入长整型数与与 f f 结合输入结合输入doubledouble型数型数m m指定数据输入的宽度(即域宽)指定数据输入的宽度(即域宽)* *忽略读入的数据忽略读入的数据(即不将读入数据赋给相应变量)(即不将读入数据赋给相应变量)对对floatfloat和和doubledouble型指型指整数位数整数位数+ +小数点小数点 + +小数位数小数位数lscanf (%d%d%d, &a, &b, &c); 输入输入3 3个整型十进制数,以空白符个整型十进制数,以空白符(空格、(空格、tabtab键或回车键)

22、分隔键或回车键)分隔 lscanf (%d, %o, %f , &a, &b, &x); 输入输入3 3个数,以个数,以“, ,”分隔分隔lscanf (a=%d, b=%d, &a, &b); 输入的形式是:输入的形式是:a=a=3232, b=, b=28 28 (普通字符要照原样输入)普通字符要照原样输入)27main( ) 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

23、=%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);28l要求在程序运行中输入数据,输入的数据个数要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。和类型必须与格式说明符一一对应。l地址参数形式:地址参数形式:& &变量名变量名(除数组或指针变量)(除

24、数组或指针变量) l格式控制中格式控制中有普通字符时,必须照原样输入有普通字符时,必须照原样输入。l格式控制中格式控制中无普通字符时,输入的数值型数据无普通字符时,输入的数值型数据和字符串用空白符分隔和字符串用空白符分隔,字符型数据不必分隔。,字符型数据不必分隔。 ldoubledouble型数据输入时,必须用型数据输入时,必须用% %lflf或或% %lele格式格式l实型数输入时域宽不能用实型数输入时域宽不能用m.nm.n形式的附加说明形式的附加说明 l为了减少不必要的输入量,除了逗号、分号、为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现普通字空格符以外,格式控

25、制中尽量不要出现普通字符,也不要使用符,也不要使用 n n 、t t 等转义字符等转义字符29输入的数值型数据用空白符分隔输入的数值型数据用空白符分隔输入的输入的 charchar型数据不必分隔型数据不必分隔 2022-5-2730scanf (%c%c%c, &ch1, &ch2, &ch3);要输入:要输入:abcabc 不能输入:不能输入:a a b b c c 注意数值型数据与注意数值型数据与char型数据的混合输入型数据的混合输入例如:例如:scanf (%d%d, &m, &n);scanf (%c, &ch); 错误输入:错误输入:32 28 a 正确输入:正确输入:32 28a

26、 putcharputchar( (chch) ) 在标准输出设备(即显示器屏幕)上输在标准输出设备(即显示器屏幕)上输出一个字符。出一个字符。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);输出结果:输出结果:ab

27、AB函数调用的一般形式函数调用的一般形式 : : getchargetchar( ) ( ) 功能:功能:从标准输入设备(即键盘)上交互输入从标准输入设备(即键盘)上交互输入一个字符。一个字符。例如:例如:getchar( ) ; c = getchar( ); printf(%c n,getchar( );33【例】【例】getchargetchar函数的应用。函数的应用。 #include stdio.hmain( ) char ch; ch=getchar( ); printf(%c %dn,ch,ch); printf(%c %dnn,ch-32,ch-32); 34m m m 109

28、M 77lgetchargetchar是是C C语言的标准库函数,使用时必语言的标准库函数,使用时必须加编译预处理命令:须加编译预处理命令:#include stdio.h 或或 #include lgetchargetchar函数需要交互输入,接收到输入函数需要交互输入,接收到输入字符之后才继续执行程序。字符之后才继续执行程序。 l连续使用连续使用getchargetchar函数时,要注意字符的函数时,要注意字符的输入形式输入形式 ,例如执行如下程序段:,例如执行如下程序段:35char ch1,ch2;ch1=getchar( );ch2=getchar( );必须连续输入两个字必须连续输

29、入两个字符,中间不能有其他符,中间不能有其他字符字符36顺序结构是程序设计语言最基本、最简单的顺序结构是程序设计语言最基本、最简单的结构,也称线性结构。程序中包含的语句按结构,也称线性结构。程序中包含的语句按照书写的顺序被连续执行。照书写的顺序被连续执行。 开始开始 A A B B 结束结束语句按书写顺序语句按书写顺序执行,先执行执行,先执行A A,再执行再执行B B。其中。其中A A、B B可由一条或多条可由一条或多条语句实现。语句实现。37变量定义变量定义变量赋值变量赋值运算处理运算处理输出结果输出结果可用:可用:变量初始化变量初始化赋值语句赋值语句输入函数调用语句输入函数调用语句注意各个

30、语句的顺序注意各个语句的顺序【例】数据交换。从键盘输入【例】数据交换。从键盘输入a a、b b的值,输的值,输出交换以后的值。出交换以后的值。 思路:在计算机中交换变量思路:在计算机中交换变量a a和和b b的值,不能的值,不能只写下面两个赋值语句只写下面两个赋值语句 a=b ; b=a ; 38正确的交换方法:正确的交换方法: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; p

31、rintf(after exchange: a=%d b=%dn,a,b);39程序运行情况如下:程序运行情况如下: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

32、, %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程序运行情况如下:程序运行情况如下: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=

33、getchar(); *p=*p-32; /*将小写字母转换成对应的大写字母将小写字母转换成对应的大写字母*/ printf(%c n,*p);42#includevoid main() int x; /*保存输入的三位整数保存输入的三位整数*/ int x1,x10,x100; /*分别保存分别保存x的个、十和百位数的个、十和百位数*/ printf(请输入一个三位整数请输入一个三位整数); scanf(“%3d”,&x); /*输入一个三位整数输入一个三位整数*/ x100=x/100; /*分离百位分离百位 */ x10=(x-x100*100)/10; /*分离十位分离十位 */ x1

34、=x%10; /*分离个位分离个位 */ printf(%d的逆序数是的逆序数是%d%d %d n,x,x1,x10,x100);43ifif语句语句switchswitch语句语句选择结构程序设计举例选择结构程序设计举例4445l功能:功能:首先计算圆括号中表达式的值,如果表达式的首先计算圆括号中表达式的值,如果表达式的值为真(非零值)时,则执行圆括号其后的语值为真(非零值)时,则执行圆括号其后的语句,然后执行该语句后面的下一个语句。如果句,然后执行该语句后面的下一个语句。如果表达式的值为假(表达式的值为假(“0 0”),则跳过圆括号后),则跳过圆括号后面的语句,直接执行面的语句,直接执行i

35、fif语句后面的下一个语句。语句后面的下一个语句。 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 pr

36、intf(max=%d,b); 51l语句一般格式语句一般格式: :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功能:功能:依次计算并判断表达式依次计算并判断表达式i i,为非为非0 0时执行后时执行后面的语句,都为面的语句,都为0 0时,执行语句时,执行语句n n无论执行完那个语句分支,都转到后续语无论执行完那个语句分支,都转到后续语句句5253表达式表达式2?表达式表达式1?语句语句n 语句语句1 语句

37、语句2 语句语句mYNYNNYlN-SN-S结构图结构图54 表达式表达式1? T F 表达式表达式2? 语句语句1 T F 语句语句2 表达式表达式m? T F 语句语句m 语句语句n例如:例如:if (a0) x= -1 ; else if (a=0 ) x= 0 ; else x=1 ; 【例【例3.103.10】根据录入的百分制成绩,显示相应的成绩等级。】根据录入的百分制成绩,显示相应的成绩等级。#include stdio.hvoid main ( ) int score; printf (请输入成绩请输入成绩 : ); scanf (%d, &score ); if (score1

38、00 ) 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后面的条件表达式,一后面的条件表达式,

39、一般是逻辑表达式或关系表达式,也可以是其它般是逻辑表达式或关系表达式,也可以是其它表达式,如赋值表达式等,甚至也可以是一个表达式,如赋值表达式等,甚至也可以是一个变量、常量。例如:变量、常量。例如: if(b) if(b) 语句语句; ; if(5) if(5) 语句语句; ;都是允许的。都是允许的。 在执行在执行ifif语句时,系统先对表达式进行求语句时,系统先对表达式进行求解,若表达式的值为解,若表达式的值为“0 0”,按,按“假假”处理,若处理,若表达式的值为非表达式的值为非“0 0”,则按,则按“真真”处理,执行处理,执行指定的语句。指定的语句。56(2) (2) 在在ifif语句中,

40、条件判断表达式必须用圆括语句中,条件判断表达式必须用圆括号括起来,在语句之后必须加分号。号括起来,在语句之后必须加分号。elseelse子子句不能作为语句单独使用,它必须是句不能作为语句单独使用,它必须是ifif语句语句的一部分,与的一部分,与ifif配对使用。配对使用。(3) (3) 在在ifif语句的三种形式中,所有的语句应为语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行多个单个语句,如果要想在满足条件时执行多个语句,则必须把这多个语句用语句,则必须把这多个语句用“”括起来括起来组成一个复合语句。但要注意的是在组成一个复合语句。但要注意的是在“ ”之之后不能再加分号。后

41、不能再加分号。57lswitchswitch语句的一般形式语句的一般形式 : :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

42、+1、 、 n+1 n+1若与所有常量表达式值都不相等,执行语句序列若与所有常量表达式值都不相等,执行语句序列n+1n+1。 5859计算计算表达式表达式常量表达式常量表达式1语句序列语句序列1常量表达式常量表达式2语句序列语句序列2 常量表达式常量表达式n语句序列语句序列ndefault语句序列语句序列n+160#include stdio.h void main() int a; printf(input integer number: ); scanf(“%d”,&a); 61switch (a) case 1: printf(Monday.); case 2: printf(Tuesd

43、ay.); 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:”等价于语句标号,等价于语句标号,计算出的表达式值等于哪个语句标号,就计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。从哪个位置开始顺序向下执行语句序列。 语句位置影响运行结果语句位置影响运行结果626

44、3switch (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 sw

45、itch 后面的表后面的表达式括起来,否则会给出出错信息。达式括起来,否则会给出出错信息。(2 2)常量表达式与)常量表达式与casecase之间通常应有至少之间通常应有至少一个空格,否则可能被编译系统认为是语句一个空格,否则可能被编译系统认为是语句标号,如标号,如case5case5,并出现语法错误,这类错,并出现语法错误,这类错误较难查找。误较难查找。(3 3)所有)所有casecase子句后所列的常量表达式值子句后所列的常量表达式值必须互不相同,否则就会互相矛盾。必须互不相同,否则就会互相矛盾。 64(4 4)每个)每个 case case后面的常量表达式的类型,必须与后面的常量表达式的

46、类型,必须与 switch switch 关关键字后面的表达式类型一致。每个键字后面的表达式类型一致。每个 case case只能列举一个整型常只能列举一个整型常量或字符型常量,否则会出现语法错误。量或字符型常量,否则会出现语法错误。(5 5)一定要用花括号将)一定要用花括号将 switch switch 里的里的casecase、defaultdefault等括起来等括起来。在。在casecase后面可以包含多条执行语句,但可以不必用花括号括后面可以包含多条执行语句,但可以不必用花括号括起来,系统会自动顺序执行本起来,系统会自动顺序执行本casecase后面所有的执行语句。当然后面所有的执行

47、语句。当然加上花括号也可以。加上花括号也可以。(6 6)switchswitch语句结构清晰,易理解,任一语句结构清晰,易理解,任一switchswitch语句均可用语句均可用条件语句来实现,但反之不然。原因是条件语句来实现,但反之不然。原因是switchswitch语句中的表达式语句中的表达式只能取整型或字符型,而条件语句中的表达式可取任意类型的只能取整型或字符型,而条件语句中的表达式可取任意类型的值。值。(7 7)多个)多个casecase还可以共用一组执行语句。还可以共用一组执行语句。65【例】已知【例】已知x=100 x=100,y=15y=15,要求输入一个算术要求输入一个算术运算符

48、(运算符(+ +、- -、* * 或或 / / ),并对),并对x x和和y y进行指进行指定的算术运算。定的算术运算。 66思路:思路:设设x x和和y y为为floatfloat型变量并赋初值;型变量并赋初值;输入的运算符输入的运算符opop为为charchar型变量;型变量;根据根据opop的值(为的值(为+、 - - 、 * * 、 / / )进)进行行x x和和y y的相加、相减、相乘、相除运算(的相加、相减、相乘、相除运算(选择分支);选择分支);还要考虑到输入字符不是还要考虑到输入字符不是+ +、- -、* * 或或 / / 时的情况时的情况#include stdio.hmai

49、n( ) float x=100,y=15,z; char op; 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);67实型数通常不使用实型数通常不使用z=0z=0或或z!=0z!=0的比较的比较可用可用if(if(intin

50、t)z) )z) 代替代替如果如果ifif的内嵌语句中又使用了一个的内嵌语句中又使用了一个ifif语句,语句,则构成则构成ifif语句的语句的嵌套嵌套。 68一般形式可表示如下:一般形式可表示如下: if(if(表达式表达式1) 1) if( if(表达式表达式1_1) 1_1) 语句语句1_11_1 else else 语句语句1_21_2else else if( if(表达式表达式2_1) 2_1) 语句语句2_12_1 else else 语句语句2_22_269【例【例3.133.13】比较两个整数的关系。比较两个整数的关系。#include main( ) int x, y; pr

51、intf (Enter integer X and Y:); scanf (%d%d, &x, &y); if ( x != y ) if ( x y ) printf (XYn); else printf (XYn); else printf (X=Yn);应该正确判断:应该正确判断:ifif的内嵌语句的内嵌语句ifif和和elseelse的配对的配对提倡缩格书写有利于阅读程序提倡缩格书写有利于阅读程序if (表达式表达式) if 语句语句if (表达式表达式) if 语句语句 else if 语句语句 70可以是各种形式可以是各种形式的的ifif语句语句可以是各种形式可以是各种形式的的if

52、if语句语句如果是简单如果是简单ifif语句,语句,必须用必须用“ ”括起括起if (c=50) printf(50=c=100n); if (c=50) printf(50=c=100n); else printf(c50n); else if (c=150) printf(100c150n);if (c=50) printf(50=c=100n); else printf(cb) if(ac)if(ad) m=1; else m=2; else m=3;72问题:哪一个问题:哪一个 else 和哪一个和哪一个 if 相匹配相匹配?在在嵌套的嵌套的ifelse语句语句中,中,else总是与总

53、是与上面的离它最近的尚未配对的上面的离它最近的尚未配对的if 配对。配对。【例例3.14 3.14 】比较两个整数的关系,有以下比较两个整数的关系,有以下几种写法,请读者判断哪些是正确的?几种写法,请读者判断哪些是正确的? 程序程序1 1:if(x=y)if (xy) c=;else c=;else c=;printf (%d%c%dn,x,c,y);73程序程序2 2:将上面程序的:将上面程序的ifif语句改为语句改为if ( xy ) c=y ) c=; else c=;程序程序3 3:将上面程序的:将上面程序的ifif语句改为:语句改为:c=y ) c=;else c=;74程序程序4

54、4:c=;if ( x=y ) if ( xy ) c=;else c=;程序程序1 1和和2 2是正确的。一般把内嵌的是正确的。一般把内嵌的ifif语语句放在外层的句放在外层的elseelse子句中(如程序子句中(如程序1 1那样那样),这样由于有外层的),这样由于有外层的elseelse相隔,内嵌的相隔,内嵌的elseelse不会和外层的不会和外层的ifif配对,而只能与内嵌配对,而只能与内嵌的的ifif配对,从而不致搞混,如像程序配对,从而不致搞混,如像程序3 3、4 4那样就容易混淆。那样就容易混淆。75lif if else else 语句的配对语句的配对l正确用表达式描述条件正确用

55、表达式描述条件例如:当例如:当x x大于大于5 5小于小于1010时令时令x x自增自增76l正确判断内嵌语句正确判断内嵌语句if(xy) x=x+3; y=y-2; else x=x-3; y=y+2;if ( 5x5 & x 0d 0时,方程有时,方程有两个不相等的实根两个不相等的实根:x1=(-b+sqrt(d)/(2x1=(-b+sqrt(d)/(2* *a) a) x2=(-b-sqrt(d)/(2x2=(-b-sqrt(d)/(2* *a) a) 当当d 0d 0 计算重根计算重根 T F 输出重根输出重根 计算实根计算实根 计算虚根计算虚根 输出实根输出实根 输出虚根输出虚根#i

56、nclude math.hmain( ) float a,b,c,d,x1,x2,lp,ip; scanf(%f%f%f,&a,&b,&c); printf(the equation ); if (fabs(a)1e-6) printf(is not quadratic); else d=b*b-4*a*c; if (fabs(d)1e-6) /* 不相等的实根不相等的实根 */ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has two real roots:n) ; printf(x1=%8.4f, x2=%8.4fn,x1,x2)

57、; else /* 虚根虚根 */ lp=-b/(2*a);ip=sqrt(-d)/(2*a); printf(has two complex roots: n); printf(x1=%8.4f+%8.4fin,lp,ip); printf(x2=%8.4f-%8.4fin,lp,ip); 81【例【例】输入年份,判别该年是否为闰年。输入年份,判别该年是否为闰年。 82思路:年份思路:年份yearyear为闰年的条件为为闰年的条件为 能够被能够被4 4整除,但不能被整除,但不能被100100整除的年份;整除的年份; 能够被能够被400400整除的年份。整除的年份。只要满足任意一个就可以确定它

58、是闰年。只要满足任意一个就可以确定它是闰年。例如:例如:19961996年、年、20002000年是闰年年是闰年19981998年、年、19001900年不是闰年年不是闰年设定标志变量设定标志变量leapleap,只要符合其中一个条件的就只要符合其中一个条件的就是闰年,令是闰年,令 leap =1leap =1;否则令否则令 leap=0leap=0 year%4=0 & year%100 !=083定义变量定义变量year、leap 输入年份输入年份year 能被能被4整除且整除且 不能被不能被100整除?整除? T F 能被能被400整除?整除? leap=1 T F leap = 1 l

59、eap = 0 leap=1? T F 是闰年是闰年 不是闰年不是闰年year%400=0main( ) int year, leap ; scanf(%d, &year); if (year%4=0 & year%100!=0) leap=1; else if (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); 8485l语句一般格式语句一般格式: : while while (表达式表达式)

60、 ) 语句语句 86l一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也表达式,也可以是可以是C C语言其他类语言其他类型的合法表达式型的合法表达式 l用来控制循环体是用来控制循环体是否执行否执行l称为称为内嵌语句内嵌语句,可以是基本语句、可以是基本语句、控制语句,也可控制语句,也可以是复合语句以是复合语句l是循环重复执行是循环重复执行的部分的部分 l首先首先计算表达式的值计算表达式的值,当值为真(非,当值为真(非“0 0”)时,执行循环体语句。之后继续)时,执行循环体语句。之后继续判断表达式的值是否为真(非判断表达式的值是否为真(非“0 0”),),如果为真(非如果为真(非“0 0”),

61、继续执行循环体),继续执行循环体语句,再进行判断,如此重复,直到表达语句,再进行判断,如此重复,直到表达式的值为假(式的值为假(“0 0”),则离开循环结构,),则离开循环结构,转去执行转去执行whilewhile语句后面的下一条语句。语句后面的下一条语句。 8788当表达式为真当表达式为真 语句语句表 达 式 非表 达 式 非0?语句语句循环控制条件循环控制条件 循环体循环体【例【例3.203.20】编写程序,求】编写程序,求100100个自然数的和个自然数的和即:即: s=1+2+3+ +100 s=1+2+3+ +100 89思路:寻找思路:寻找加数加数与与求和求和的规律的规律 加数加数

62、i i从从1 1变到变到100100,每循环一次,使,每循环一次,使i i增增1 1,直到直到i i的值超过的值超过100100。i i的的初值初值设为设为1 1。求和求和设变量设变量 sum sum 存放和,循环求存放和,循环求sum=sum+isum=sum+i,直至直至i i超过超过100100。 main( ) int i,sum; i=1; sum=0; while () sum=sum+i; i+; printf(sum=%dn,sum);90i i: : 循环控制变量循环控制变量sumsum: : 累加器累加器 i=1,sum=0 当当i = 100 sum=sum+i i+输出

63、输出sum程序输出结果:程序输出结果:sum=5050sum=5050(1 1)whilewhile语句:先判断表达式,后执行语句。语句:先判断表达式,后执行语句。循环体可能执行多次,也可能一次也不执行循环体可能执行多次,也可能一次也不执行( (例例如当如当i i的初值的初值=101=101) ) 。(2 2)whilewhile语句中的表达式一般是关系表达或逻语句中的表达式一般是关系表达或逻辑表达式或任意合法的表达式,其两端的圆括号辑表达式或任意合法的表达式,其两端的圆括号不能少,只要表达式的值为真(非不能少,只要表达式的值为真(非“0 0”)即可)即可继续循环。例如:继续循环。例如:x=1

64、0; while(x!=0) x-; / /* *退出循环时退出循环时x x为为0 0* */ /等价于:等价于:x=10; while(x) x-; / /* *退出循环时退出循环时x x为为0 0* */ /也可写成:也可写成:x=10; while(x-); / /* *退出循环时退出循环时x x为为-1-1* */ /91(3 3)循环之前循环变量应有值,以能够在进)循环之前循环变量应有值,以能够在进入循环时计算条件(表达式)。入循环时计算条件(表达式)。(4 4)循环体语句如果包括一个以上的语句,)循环体语句如果包括一个以上的语句,则必须用一对大括号括起来,组成复合语句。则必须用一对

65、大括号括起来,组成复合语句。如果不加大括号,则如果不加大括号,则whilewhile语句的范围只到语句的范围只到whilewhile后面第一个分号结束。后面第一个分号结束。(5 5)循环体中,语句的先后位置必须符合逻)循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。辑,否则会影响运算结果。 92while (i=100) i+; sum=sum+i; 运行后,输出:运行后,输出:sum=5150原因是什么?原因是什么? (6 6)不要把)不要把ifif语句构成的选择结构与语句构成的选择结构与whilewhile语句构成的循环语句等同起来。在语句构成的循环语句等同起来。在ifif语句中

66、语句中,若条件表达式成立,若条件表达式成立,ifif语句块只执行一次语句块只执行一次;而在;而在whilewhile语句中,只要条件表达式成立语句中,只要条件表达式成立,就执行循环体直至条件为不成立为止。可,就执行循环体直至条件为不成立为止。可见,循环体被执行的次数受条件控制,如果见,循环体被执行的次数受条件控制,如果条件表达式永远成立,循环体就要一直执行条件表达式永远成立,循环体就要一直执行下去。为了避免这种现象,在设计循环时,下去。为了避免这种现象,在设计循环时,循环体内应该有改变条件表达式值的语句,循环体内应该有改变条件表达式值的语句,使条件表达式的值最终变成使条件表达式的值最终变成0 0而结束循环。而结束循环。93 do do 语句语句 while while (表达式);表达式); 先执行循环体语句一次先执行循环体语句一次,再判别表达式,再判别表达式的值,若为真(非的值,若为真(非“0 0”)则继续执行)则继续执行循环体语句循环体语句, ,然后再判断表达式的值然后再判断表达式的值, ,如如此重复,直到表达式的值为假(此重复,直到表达式的值为假(“0 0”)时结束循环时结束循环


文档来源:https://www.renrendoc.com/paper/212528825.html

文档标签:

下载地址