1、讲师:尹成QQ:77025077博客:http:/ 传智播客传智播客http:/高薪就业高薪就业传智播客传智播客 2.结构化程序设计的三种结构结构化程序设计的三种结构 3.顺序结构顺序结构 4.选择结构选择结构 5.循环结构循环结构传智播客C语言入门教程(4)大纲 1.程序的最小单元程序的最小单元-语句语句6.初学者答疑初学者答疑传智播客传智播客为解决某一问题而设计的一系列有序指令的集合。语语 句句 如何处理数据的描述传智播客传智播客传智播客传智播客表达式语句。表达式语句。C语言中,操作或者动作被称为表达式。以语言中,操作或者动作被称为表达式。以分号结尾的表达式称为表达式语句。例如以下示例都是
2、分号结尾的表达式称为表达式语句。例如以下示例都是表达式语句:表达式语句:int x;printf(nHello World);只有一个只有一个“;”的空语句的空语句。.表达式表达式语句语句如如if-else,for循环语句,循环语句,while循环语句,循环语句,do-while循环循环语句,语句,continue结束本次循环语句,结束本次循环语句,break跳出循环语句跳出循环语句,switch多路分支选择语句,多路分支选择语句,goto转向语句,转向语句,return返回返回语句。语句。.流程控流程控制语句制语句函数调用构成函数调用语句函数调用构成函数调用语句.函数调函数调用语句用语句用用
3、“”包括起来的语句包括起来的语句。.复合语复合语句句传智播客传智播客传智播客传智播客传智播客传智播客抛开那些厚厚的算法教科书,不去谈那些深奥无比的属性,本节讨论与算法使用最为相关的问题:算法如何表示,原则上,自然语言也可用于算法表示,但由于自然语言的多义性,不同的人对同一个版本的描述可能有不同的理解,因此,一般不采用自然语言来描述算法,要求采用一种精确的,无歧义的机制。有两种广泛使用的算法表示方法,一是伪代码法,二是流程图法。传智播客传智播客传智播客传智播客传智播客传智播客传智播客传智播客传智播客传智播客ABAB传智播客传智播客从1加到5,分步顺序执行int i=0;i+=1;i+=2;i+=
4、3;i+=4;i+=5;传智播客传智播客传智播客传智播客123实现单分支选择的形式实现双分支选择的形式实现多分支选择的形式传智播客传智播客 17v一般形式:v说明:当表达式的结果为非0时,执行后面的语句,否则不执行。表达 式语句 0=0传智播客传智播客将输入的三个数按照从小到大的顺序输出。例传智播客传智播客传智播客传智播客v一般形式:v说明:当表达式的值为非0时,执行语句1,否则执行语句2。表 达 式语 句1语 句20=0传智播客传智播客显示从终端输入的两个整数中绝对值较大的一个。例#include void main()int x1,y1,x2,y2;scanf(%d,%d,&x1,&y1)
5、;if(x10)x2=-x1;else x2=x1;if(y1y2?x1:y1);运行情况:23,3434条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为表达式语句时才能代替if语句。x2=x10?-x1:x1;传智播客传智播客v一般形式:v说明:各个表达式按顺序求值,如果某个表达式的值为非0,则执行与其相关的那条语句,并由此结束整个if语句。传智播客传智播客表达 式 1语句 1表达 式 n表达 式 3表达 式 2语句 2语句 3语句 n 语句 n+10000=0=0=0=0传智播客传智播客判断输入的字符是数字、大写字母、小写字母或其他字符。例#include void main
6、()char c;printf(Enter a character:);c=getchar();if(c=0&c=A&c=a&c=z)printf(Lowercase!n);else printf(Other charater!n);传智播客传智播客格式1格式2if()if()语句1else 语句2else if()语句3else 语句4if()if()语句1 elseif()语句2 else 语句3注意if与else 的配对关系。传智播客传智播客 switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n+1
7、v一般形式:传智播客传智播客v说明:switch语句中的“表达式”和case后面的“常量表达式”的结果值的类型应该一致。其类型可以是除实型以外的任何类型(如整型、字符型、枚举类型)。每一个case后的常量表达式的值必须互不相同。执行完一个case后面的语句后,流程控制到下一个case继续执行。因此,多个case可共用一组语句。如:switch(c)case A:case B:语句;;传智播客传智播客v一般形式:v功能:终止switch语句的执行。为了执行完某个分支后跳出switch结构,应在其后加上break语句。例如,前例中的逻辑错误可修改如下:switch(e0)case 1:printf
8、(“e=0”);break;传智播客传智播客运输公司对用户计算运费。路程()越远,每公里运费越低。标准如下:没有折扣 折扣 折扣 折扣 折扣 折扣设每公里每吨货物的基本运费为,货物重为,距离为,折扣为,则总运费的计算公式为:*()传智播客传智播客传智播客传智播客31解一元二次方程ax2+bx+c=0。例分析一元二次方程的解的情况有下列几种可能:a=0,不是二次方程;b2-4ac=0,有两个相等实根:b2-4ac0,有两个不等实根:b2-4ac0?复根的实部p和虚部q:输出两个虚根:p+qi,p-qi输出两个实根:x1,x2aacbbx2422aacbbx2412+abp2aacbq2)4(2真
9、真真假假假传智播客传智播客传智播客传智播客传智播客传智播客传智播客传智播客v 说明:switch语句中的“表达式”和case后面的“常量表达式”的结果值的类型应该一致。其类型可以是除实型以外的任何类型(如整型、字符型、枚举类型)。每一个case后的常量表达式的值必须互不相同。执行完一个case后面的语句后,流程控制到下一个case继续执行。因此,多个case可共用一组语句。如:switch(c)case A:case B:语句;;switch语句中可以不含default分支;default分支并不限定在最后,几个case分支也没有顺序区别,但必须做适当处理,否则会影响执行结果。传智播客传智播客
10、传智播客传智播客传智播客传智播客传智播客传智播客A条件不成立成立A条件成立不成立A条件A条件当型循环直到型循环传智播客传智播客传智播客传智播客 42v一般形式:v说明:“表达式”为循环条件;“语句”为循环体。v特点:先判断表达式,后执行语句。表达式语句(循环体)00传智播客传智播客传智播客传智播客传智播客传智播客求2n。例#include void main()int i=1,n;long int p=1;scanf(%d,&n);while(i=n)p*=2;i+;printf(%ldn,p);i=1,p=1 输出 p输入 n当i=npp*2ii+1=传智播客传智播客语句表达 式00v一般形
11、式:v特点:先执行一次指定的循环内嵌语句,然后判断条件表达式,非0时,循环;为0时,退出循环。传智播客传智播客47将键盘输入字符中所有大写字母转换为小写字母,其他字符不变。例#include void main()char c;do c=getchar();if(c=A&c=Z)c+=32;putchar(c);while(c!=n);传智播客传智播客v一般形式:v说明:表达式1:循环变量赋初始值表达式2:循环条件 表达式3:循环变量增值 语句:循环体表达式1表达式20语句表达式30传智播客传智播客表达式1、表达式2、表达式3、语句都可以为空,但不能省略“;”。若省去表达式2,则为无限循环;若
12、省去表达式1、表达式3,即仅有条件判断,则完全等同于while语句。表达式1、表达式3可以是逗号表达式。#include void main()int s=0,n;for(n=1;n=100;n+=2)s+=n*(n+1);printf(“s=%d”,s);求100以内所有相邻奇偶数之积的和。传智播客传智播客传智播客传智播客for循环结构中的初始化表达式,判断表达式和修正表达式都是可选项,也就是说,可以省略,但每个表达式后的分号不能省略,最极端的情况是:3个表达式都省略,形式如下:for(;)/*两个分号不能省略*/*循环体*/这相当于;while(1)/*循环体*/传智播客传智播客v定义:一
13、个循环体中又包含一个完整的循环结构,称为循环的嵌套。v说明:while循环、do-while循环和for循环都可以进行嵌套,而且可以相互嵌套。传智播客传智播客53while()while()do do while();while();for(;)for(;)while()do while();for(;)while()do for(;)while();传智播客传智播客要保证嵌套的每一层循环在逻辑上都是完整的,避免嵌套交叉使用。要保证循环到最后有一个跳出循环的条件,否则会产生死(无限)循环(嵌套循环中检查死循环错误,相对来说比较困难)。在编程时,注意循环嵌套的书写最好用的形式,可使程序层次分明。
14、传智播客传智播客输出九九表。例#include void main()int i,j;printf(n);for(i=1;i=9;i+)printf(“%4d,i);printf(n-);for(i=1;i=9;i+)printf(n%4d,i);for(j=1;j=i;j+)printf(%4d,i*j);1 2 3 4 5 6 7 8 9 -1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 4
15、5 54 63 72 81传智播客传智播客v一般形式:v功能:用在switch语句中使流程跳出switch结构,继续执行switch语句后面的语句。用在循环体内,迫使所在循环立即终止(跳出当前循环体),继续执行循环体后面的第一条语句。v说明:break语句不能用于循环语句和switch语句之外的任何其他语句。56传智播客传智播客57把数316分为两个数之和,其中一个为13的倍数,一个为11的倍数。例#include void main()int i=0,j;for(;i+)j=316-i*13)%11;if(!j)break;printf(13*%d+11*%d=316n“,i,j);传智播客
16、传智播客continue;v一般形式:v功能:结束本次循环(跳过循环体中尚未执行的语句),接着进行是否执行下一次循环的判定。传智播客传智播客continue只结束本次循环,而非终止整个循环。break则是结束所在循环,不再进行条件判断。continue增加循环入口,break增加循环或switch语句的出口。do do if(e1)continue;if(e1)break;while(e2);while(e2);59传智播客传智播客输出100200之间所有不能被3整除的数。例:i从100200,如果不能被3整除则i自加,继续循环,直到i200为止。#include void main()int
17、 n,count=0;for(n=100;n=200;n+)if(n%3=0)continue;printf(%6d,n);count+;if(count%10=0)printf(n);传智播客传智播客v一般形式:v说明:“语句标号”必须是合法的标识符。不能用整数作标号。v用途:与if语句一起构成循环结构;从多层循环体的内层循环跳到外层循环。v注意:结构化程序设计方法主张限制使用goto语句,滥用该语句将使程序流程无规律、可读性差。61传智播客传智播客用if和goto语句构成循环,求 。例#include void main()int i=1,sum=0;loop:if(i=100)sum=s
18、um+i;i+;goto loop;printf(Sum=%d,sum);1001nn传智播客传智播客63穷举法 通过循环对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。求100150之间的全部素数。例#include#include main()int n,i,k;for(n=101;n150;n=n+2)k=sqrt(n);for(i=3;ik)printf(%d ,n);传智播客传智播客 死循环死循环 可以无限嵌套吗可以无限嵌套吗 C语言如此灵活,是不是每种都要掌握呢语言如此灵活,是不是每种都要掌握呢死循环例如等待的时候,用得着死循环例如等待的时候,用得着为了高薪,就必须面对世界五百强的面试,笔试,你应该每种都掌握为了高薪,就必须面对世界五百强的面试,笔试,你应该每种都掌握C语言理论上可以无限嵌套语言理论上可以无限嵌套传智播客传智播客传智播客传智播客