1、第2章 顺序结构流程及应用顺序结构流程及应用 本章内容中我们将学习本章内容中我们将学习1 C语言中的数据类型语言中的数据类型 2 标识符、常量与变量标识符、常量与变量3 数据输入数据输入/输出处理输出处理4 运算符与表达式运算符与表达式5 顺序结构程序设计顺序结构程序设计2.1 基本字符、标识符和关键字学一学学一学l基本字符l标识符l关键字 基本字符 一个一个C程序也可以看成是由程序也可以看成是由C语言的基本字符按语言的基本字符按一定的规则组成的一个序列。一定的规则组成的一个序列。C语言中使用的语言中使用的基本字符包括:基本字符包括:数字字符:数字字符:09;大小写英文字母:大小写英文字母:a
2、z,AZ;其他可打印(可显示)字符:其他可打印(可显示)字符:!#%&*_(下划线下划线)-+=/|.,:;?“()空白字符:空格符、换行符、制表符等。空白字符:空格符、换行符、制表符等。和其它高级语言一样,用来标识函数名、变量名、符号常量、数和其它高级语言一样,用来标识函数名、变量名、符号常量、数组名、类型名、文件名的有效字符序列称为组名、类型名、文件名的有效字符序列称为“标识符标识符”(identifier),通俗地讲,标识符就是一个名字。),通俗地讲,标识符就是一个名字。在在C语言中,标识符的命名规则为:语言中,标识符的命名规则为:(1)有效字符:只能由字母、数字和下划线组成,且以字母或
3、下)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头;划线开头;(2)有效长度:随系统而异,但至少前)有效长度:随系统而异,但至少前8个字符有效。如果超长,个字符有效。如果超长,则超长部分被舍弃;则超长部分被舍弃;(3)C语言的关键字(或称保留字)不能用作标识符。语言的关键字(或称保留字)不能用作标识符。例如:例如:sum,Total,day,_f2048,file_name,a3b06都是合法的标识符,而都是合法的标识符,而99new,a-b,W.S.Piter,$88,cd#ab,vbase,int都是不合法标识符。都是不合法标识符。标识符标识符关键字由系统预先定义的标识符称“
4、关键字”,它们都有特殊的含意,不能用于其它目的。C语言关键字32个,如表2-1所示。2.2 数据类型及常量、变量数据类型及常量、变量 学一学l数据类型数据类型l常量常量l变量变量数据类型 常量常量l常量是在程序的执行过程中其值不变的量。常量是在程序的执行过程中其值不变的量。l在在C语言中,常量不需要类型说明就可以直接语言中,常量不需要类型说明就可以直接使用,常量的类型是由常量本身隐含决定的。使用,常量的类型是由常量本身隐含决定的。l在在C语言中,从其表现形式常量分为普通常量语言中,从其表现形式常量分为普通常量和符号常量。普通常量就是用数字直接表示的和符号常量。普通常量就是用数字直接表示的常量,
5、符号常量是用一个标识符来代表的常量。常量,符号常量是用一个标识符来代表的常量。无论是普通常量,还是符号常量,它们都有自无论是普通常量,还是符号常量,它们都有自己的类型。己的类型。普通常量与符号 常量1 普通常量普通常量普通常量有普通常量有3类:数值常量、字符型常量和字符串常量。类:数值常量、字符型常量和字符串常量。例如,例如,1,200,3500,0 x12 整型数值常量整型数值常量835.6,77.2,0.618 实型数值常量实型数值常量a,A,$字符型常量字符型常量“Hello”,“Welcome”字符串常量字符串常量2 符号常量符号常量在在C语言程序中,可对常量进行命名,即用符号代替常语
6、言程序中,可对常量进行命名,即用符号代替常量,叫做符号常量,一般用大写字母表示,一经定义就量,叫做符号常量,一般用大写字母表示,一经定义就可以代替常量使用。可以代替常量使用。变量变量变量是指在程序执行过程中,其值可以改变的量。l一个变量用一个名字表示,在内存中占据一定的存储单元,用于存放变量的值。l变量必须先定义后使用,变量的值可以通过赋值的方法获得和改变。变量定义和初始化存储类型存储类型 数据类型数据类型 变量名变量名1=初始数初始数据据,变量名变量名2=初始数据初始数据2,,变量,变量n=初初始数据始数据n;试一试试一试问题问题2.1新生入学需要保存学生数据,现在定义整型变量存放年龄、学号
7、,定义字符变量存放性别,定义浮点型变量存放入学分数和班费。int iAge=20,iNum=201;char cSex=m;/*f:female(女),m:male(男)*/float fScore,fSum;fScore=580.5;fMoney=78.5 想一想想一想 l生活、学习、工作中有哪些量是其值不变的常量?哪些信息是经常变化的?定义成什么类型的变量比较合适?2.3 数据的输出和输入l 数据的格式化输出l数据的格式化输入l单个字符的输出和输入单个字符的输出和输入数据的格式化输出 学一学学一学l格式化输出函数printf的功能是按指定的格式向终端(或系统默认的输出设备)输出若干个任意类
8、型的数据。printf函数的一般形式为:printf(格式控制,格式控制,输出表列输出表列);l其中,“格式控制格式控制”是用双引号括起来的字符串,也称“转换控制字符串”。它是由字符“%”、格式字符(如d、f、c等)和普通字符(原样输出的)组成。“输出表列输出表列”是一些与“格式控制”中的格式字符一一对应的需要输出的数据,可以是变量或表达式。试一试 问题问题2.2 新生入学需要将自己的姓名、年龄、学号、性别、入学成绩打印出来,请编程实现。l【解题步骤】l1定义整型变量iAge,iNum存放年龄、学号;l2定义字符变量chSex存放性别;l3定义实型变量fScore用来存放入学成绩;l4用pri
9、ntf函数上面的信息打印出来;程序代码l#include“stdio.h”lvoid main()l int iAge=20,iNum=201;lchar chSex=m;/*f:female(女),m:male(男)*/lfloat fScore=580.5;lprintf(“Tonys personal information n”);lprintf(“Name:Tonyn”);lprintf(“ID:%dn”,iNum);lprintf(“Age:%dnSex:%cn Score:%dn”,iAge,chSex,fScore);l 问题问题2.3 转义字符输出演示 请观察下面程序运行结果
10、。l#include“stdio.h”lvoid main()l char ch1,ch2,ch3;lch1=n;lch2=e;lch3=167;/*8进制数167代表的字符w*/lprintf(“%c%c%cn”,ch1,ch2,ch3);/*以字符格式输出*/lprintf(“%ct%ct%cn”,ch1,ch2,ch3);/*每输出一个字符后跳到下一个输出区*/lprintf(“%cn%cn%cn”,ch1,ch2,ch3);/*每输出一个字符后换行*/l 数据的格式化输入 格式化输入函数scanf的功能是用来从外部设备(通常是键盘),向程序中的变量输入一个或若干个任意类型的数据。sca
11、nf函数的一般形式为:scanf(格式控制,地址表列格式控制,地址表列);其中“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。试一试试一试l问题问题2.4 Tony因学习努力,成绩突出,上半学年获奖学金2500元,下半学年获奖学金3000元。用scanf函数输入数据,计算Tony本学年所获得的奖学金并输出结果。l【解题步骤】1定义变量iPrize1、iPrize2和iSum用来存放上半年、下半年和本年度的奖学金值;2输出提示信息;3从键盘输入上半年和下半年的奖学金;4计算本年度奖学金存入iSum;5输出本年度奖学金iSum中的值。
12、程序代码程序代码 l#include“stdio.h”lvoid main()l int iPrize1,iPrize2,iSum;/*定义变量定义变量*/lprintf(please input two prizes:);/*输出提示信息输出提示信息*/lscanf(%d%d,&iPrize1,&iPrize2);/*从键盘输入数据从键盘输入数据*/lisum=iPriz1+iPrize2;/*求和计算求和计算*/lprintf(Toms prize is%d,iSum);/*输出计算结果输出计算结果*/l?单个字符的输出和输入单个字符的输出和输入 函数putchar()和getchar()
13、专门用来输入和输出字符型数据,使用时要包含头文件stdio.h。lputchar函数的功能是用于将一个字符输出到显示器上显示,其一般调用形式为:putchar(ch);其中,ch为一个字符型数据(普通字符或转义字符)或整型数据(0255)。lgetchar函数的功能是从标准输入设备(键盘)读入一个字符。它的一般调用形式为:ch=getchar();其中ch为一个字符型变量,把从键盘接收到字符放到变量ch中。试一试试一试l问题问题2.5 从键盘输入一个小写字母,将其转化为大写字母输出。l【解题步骤】1.定义字符变量ch用来存放从键盘输入的数据。;2.输出提示信息;3.从键盘接收一个小写字母存入c
14、h;4.将字符ch转换为大写字母,即ch-32后仍存入到ch;5.输出字符变量ch中的字符;程序代码l#include“stdio.h”lvoid main()l char ch;l printf(“从键盘输入一个小写字母”);l ch=getchar();/*从键盘接收一个小写字母*/l ch=ch-32;/*小写字母转化为大写字母*/l putchar(ch);/*输出大写字母*/l小结l格式化输出函数printf中双引号括起来的内容除了d等格式说明符外,其它字符原样输出。同样格式化输入函数scanf中双引号括起来的内容除了d等格式说明符外,其它字符照原样输入。lprintf函数中的格式说
15、明符非常丰富,如表2-4所示。l使用scanf函数时要输入的变量名前要加取地址符号“&”,scanf函数的格式说明符如表2-5所示 2.4 运算符与表达式运算符与表达式l算术运算符与算术表达式算术运算符与算术表达式l赋值运算符和赋值表达式赋值运算符和赋值表达式 l逗号运算符和逗号表达式 运算符分类运算符分类C的运算符大致有如下的几类。1.基本算术运算符:*2.关系运算符:=!=3.逻辑运算符:!&|4.强制类型转换运算符:()5.自增、自减运算符:6.赋值运算符:=7.条件运算符:?:8.逗号运算符:,9.指针运算符:*&10.求字节数运算符:sizeof11.位运算符:|&12.分量运算符:
16、13.下标运算符:算术运算符和算术表达式 试一试试一试l问题问题2.6 从键盘输入一个3位数,求该数个位、十位、百位上的数的和。l【解题步骤】l定义整型变量iNum接收从键盘输入的三位数;l定义整型变量i1,i2,i3,iSum用来存放个位、十位、百位上的数据及其和;l从键盘输入一个3位数存入变量iNum中;l用iNum%10求得个位上的数存入i1中,l用iNum/10%10求得十位上的数存入i2中;l用iNum/100求得百位上的数存入i3中;l求和l输出和。程序代码#include“stdio.h”void main()int iNum;int i1,i2,i3,iSum;printf(“
17、please input a integer(100-999):”);scanf(“d%”,&iNum);i1=iNum%10;/*求个位数*/i2=iNum/10%10;/*求十位数*/i3=iNum/100;/*求百位数*/iSum=i1+i2+i3;printf(“d%the sum is:”,iSum);想一想想一想l对于一个四位整数,其千位、百位、十位、个位上的数如何求得?强制类型转换运算符强制类型转换运算符学一学学一学l 在实际应用中,常常要把一些表达式的类型转换成所需的类型。C语言提供了强制类型转换运算符。其格式为:l(类型名)(表达式)(类型名)(表达式)试一试试一试l问题问题
18、2.7 从键盘输入一个球的半径值,计算并输出这个球的体积。球体积计算公式为:v=4/3*r3。其中r是球的半径,是圆周率,v是球的体积。l【解题步骤】1.定义符号常量PAI=3.1415926作为圆周率;2.定义float型变量fRadius、fVolum用来存放球半径和球体积;3.从键盘输入球半径放变量fRadius;4.计算球的体积;5.输出球体积。程序代码#include“stdio.h”#define PAI 3.1415926void main()float fRadius,fVolume;printf(“please the balls radius:”);scanf(“%f”,&
19、fRadius);fVolume=(float)4/3*PAI*fRadius*fRadius*fRadius;printf(“the balls volume:%f”,fVolume);自增、自减运算符 学一学学一学l自增、自减运算符是单目运算符,即对一个运算对象施加运算,运算结果仍赋予该对象。参加运算的对象必须是变量。如表2-7所示。试一试试一试l问题问题2.8 运行下面的程序,观察并分析自增、自减运算符的用法。l#include“stdio.h”lvoid main()l int iX,iY;l iX=2;l iY=iX+*4;l printf(“iX=%d,iY=%dn”,iX,iY)
20、;liX=2;liY=iX-*4;lprintf(“iX=%d,iY=%dn”,iX,iY);liX=2;liY=+iX*4;l printf(“iX=%d,iY=%dn”,iX,iY);liX=2;l iY=-iX*4;l printf(“iX=%d,iY=%dn”,iX,iY);l算术表达式学一学学一学l用算术运算符和括号将运算对象(也称操作数)连接起来的符合C语法规则的式子,称为C算术表达式。运算对象可以是常量、变量、函数等。l5.算术运算符的优先级和结合方向算术运算符的优先级和结合方向lC语言规定了运算符的优先级和结合方向,在表达式求值时,先按运算符的优先级别高低次序执行,再按运算符的
21、结合方向结合(相同优先级时)。例如先乘除后加减,如表2-8所 算术运算符的优先级和结合方向算术运算符的优先级和结合方向 C语言规定了运算符的优先级和结合方向,在表达式求值时,先按运算符的优先级别高低次序执行,再按运算符的结合方向结合(相同优先级时)。例如先乘除后加减,如表2-8所示。试一试试一试问题问题2.9 函数f(x)=3x3+2x2+x+1,编一程序计算并输出f(3)值。【解题步骤】1.定义整型变量iX、iY;2.从键盘输入一个自变量的值;3.计算函数值;4.输出函数值;程序代码#include“stdio.h”void main()int iX,iY;printf(“请输入自变量值:”
22、);scanf(“%d”,&iX);iY=3*iX*iX*iX+2*iX*iX+iX+1;printf(“函数值是:%d”,iY);赋值运算符和赋值表达式 l学一学学一学1.赋值运算符赋值运算符在C语言中,等号“=”被作为是一种运算符来处理,称为赋值运算符。其一般形式为:=;它的作用就是将右边表达式的值赋给左边的变量2.复合赋值运算符复合赋值运算符在赋值运算符的前面加上一个其它运算符后就构成复合的赋值运算符。其一般形式为:=;等价于:等价于:=;3.赋值表达式赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式,它由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达
23、式,它的一般形式为:的一般形式为:试一试试一试l问题问题2.10 赋值运算符和赋值表达式用法演示,运行程序并观察运行结果。l#include“stdio.h”lvoid main()l int iA,iB,iC,iX,iY;l iA=2;l iY=iX=2*iA+6;l printf(n iA=%d,iA);/*输出赋值表达式 iA 的值*/l printf(n iX=2*iA+6 is%d,iX=2*iA+6);/*输出赋值表达式iX=2*iA+6的值*/l printf(niY=%d,iY);/*输出变量iY的值*/l iC=iB=iA=4;/*表达式iB=iA=4赋给iC*/l prin
24、tf(niB=iA=4 is%d,iB=iA=4);/*输出表达式iB=iA=4的值*/l printf(niA=%d,iB=%d,iC=%d,iA,iB,iC);/*输出变量iA,iB,iC的值*/l逗号运算符和逗号表达式逗号运算符和逗号表达式 学一学学一学l逗号运算符“,”作为C语言的一种特殊的运算符,也称为顺序求值运算符,它的作用是把多个表达式连接起来,用逗号运算符连接起来的式子称为逗号表达式,其一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式nl表达式的求解过程按照从左到右的顺序逐个求解表达式1,表达式2,表达式n,而整个逗号表达式的值是最后一个表达式(表达式n)的值。试一
25、试试一试l问题问题2.11 逗号运算符和逗号表达式用法演示,运行程序并观察运行结果。l【程序代码】l#include“stdio.h”lvoid main()l int iA=2,iB=3;l int iX,iY;l float fC;l iX=(iA*2+1,iY=iB+2,iA*iY);l fC=(iA+5,2.0*iX);l printf(iX=%d,iY=%dn,iX,iY);l printf(fC=%fn,fC);l小结小结l不同数据类型的数据进行混合运算时,往往需要进行类型转换。在C语言中这种转换通常是自动进行的,当然也可以通过强制类型转换运算符进强制进行。l 各种运算符具有优先级
26、和结合方向,通常情况下,可用圆括号限制优先级 2.5 顺序结构程序设计顺序结构程序设计 C是结构化程序设计语言,结构化程序设计的基本思想是,用顺序结构、选择结构和循环结构三种基本结构来构造程序。C语言提供了丰富的语句用来支持结构化的程序设计。C语句的分类C语句可以分为以下五大类:1函数调用语句。由一次函数调用加一个分号构成的语句。2表达式语句。表达式的后面加一个分号就构成了一个表达式语句。3空语句,光有一个分号“;”,作为语句结束符,它表示什么也不做。4复合语句。由“”和“”把一些变量说明和语句组合在一起,称之为复合语句(Block),又称语句块。5控制语句,共九种。C的控制语句l if语句
27、(条件语句)l switch语句 (多分支选择语句)l while语句 (循环语句)l do-while语句 (循环语句)l for语句 (循环语句)l break语句 (终止执行循环语句或switch 语句)l continue语句 (结束本次循环语句)l goto语句 (转向语句)l return语句 (从函数返回语句)程序的三种基本结构 1.顺序结构顺序结构 顺序执行每个操作,即先执行A操作,再执行B操作,两者之间是顺序执行的关系。图2-3是顺序结构的流程图。2.选择结构选择结构 设P代表一个判断条件,当P成立(或称“为真”)时,执行A操作,否则执行B操作。即A和B中只能选择其中之一。图
28、2-4是选择结构的流程图。3.循环结构循环结构C语言提供了两种循环结构。(1)当型循环结构当型循环结构:如图2-5所示,当条件P成立时,反复执行A操作,直到条件P不再成立时才跳出循环。(2)直到型循环结构:直到型循环结构:如图2-6所示,先执行A操作,再判断条件P是否成立,若P成立,则再执行A操作,如此反复,直到条件P不成立时跳出循环。三种基本结构流程图试一试试一试问题问题2.12 编一程序将华氏温度转换为摄氏温度。公式为:摄氏温度=5/9(华氏温度-32),要求从键盘输入华氏温度的值。【解题步骤】1.定义fF变量存放华氏温度值;2.定义变量fC存放摄氏温度值;3.从键盘输入华氏温度值存入变量
29、fF;4.计算摄氏温度;5.输出摄氏温度。程序代码l#include“stdio.h”lvoid main()l float fF,fC;l printf(Please input the degrees Fahrenheit:);l scanf(%d,&fF);l fC=5.0/9*(fF-32);l printf(the degrees Celsius is%fn,fC);ll问题问题2.13 交换两个变量的值。l解题步骤:1定义整型变量iX,iY;2定义临时变量iTemp;3iX=1,iY=2;4输出iX,iY;5将变量iX的值存入iTemp;6将变量iY的值存入iX;7将变量iTemp的值存入iX;8输出iX,iY;程序代码#include stdio.hvoid main()int iX,iY;int iTemp;iX=1;iY=2;printf(iX=%d,iY=%dn,iX,iY);iTemp=iX;iX=iY;iY=iTemp;printf(iX=%d,iY=%dn,iX,iY);getch();想一想想一想l交换两个变量中的值类似于日常生活中的哪些问题?小结小结1顺序结构、选择结构和循环结构是结构化程序设计的三种基本结构,其中顺序结构是最基本的程序结构。2C语言提供了五大类语句可以实现结构化的程序设计。