版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编程语言基础C语言主讲教师子目录项目1
绪论任务1
C语言的发展任务2
C语言的特点与程序结构任务3
C语言的上机操作学习重点本项目主要介绍:C语言的发展、C语言的特点与程序结构;讲解C语言的上机操作,使读者对C语言有一个初步的了解。*20世纪70年代,C语言问世,并逐渐发展成为国际上广泛流行的、具有发展前途的计算机高级语言。在学习C语言之前,本任务先来介绍C语言的发展历史的相关知识。C语言是计算机系统开发的工具,也可用它来编写系统软件和应用软件。所以,C语言在程序设计中占有绝对“统治”地位。*编程语言是编制计算机程序的工具,计算机问世以来,编程语言的发展经历了三次重大的突破,即从机器语言到汇编语言、从低级语言到高级语言、从面向过程到面向对象。各种编程语言分类,见右表。*C语言是一种结构化语言,它具有层次清晰,便于按模块化方式组织程序,易于调试和维护等优点。C语言的表现能力和处理能力极强。本任务就带大家了解C语言的特点与程序结构。*C语言是一门功能丰富的程序设计语言,具有表达能力强、使用灵活、应用范围广、目标程序效率高、可移植性好等优点,比汇编语言容易理解并且使用灵活。归纳起来,C语言具有以下特点:C语言程序简单,容易理解,使用方便、灵活。C语言共有9种控制语句和32个关键字(见附录Ⅰ),程序书写形式自由,语言简练。C语言程序具有丰富的运算符。C语言共有34种运算符(见附录Ⅱ)。C把赋值、括号、强制类型转换等作为运算处理。C语言设置了一些特殊的运算符,例如自增自减运算(++,--)符、复合运算符(%=,*=,/=等)、逗号运算符和条件运算符等。活动1
C语言的特点*用C语言编写的程序称为C语言程序,也可以称为C源程序或C程序。C语言程
序具有“模块化”程序结构,它的一般结构如图1-1所示。一个完整的C源程序是由以下几部分组成:1.C语言程序的构成一个C语言程序可以包含一个main函数和若干个(包括0个)其他函数。每个函数的结构如图所示,因此,函数是C语言程序的基本单位。活动2
C语言程序的一般结构*Turbo
C
2.0的安装非常简单,只要将1张软盘放入A驱动器中,在DOS的“A:\>”下键入INSTALL
即可,此时屏幕上将显示三种选择:只要在安装过程中按对盘号的提示,顺序插入各个软盘,就可以顺利地进行安装,安装完毕将在C盘根目录下建立一个TC
子目录,TC下还建立了两个子目录LIB和INCLUDE,LIB子目录中存放库文件,
INCLUDE子目录中存放所有头文件。运行Turbo
C2.0时,只要在TC
子目录下键入TC并回车即可进入Turbo
C
2.0
集成开发环境对Turbo
C
2.0更新版本。这样的安装将保留原来对选择项、颜色和编辑功能键的设置。为只有两个软盘而无硬盘的系统安装Turbo
C
2.0。活动3
Turbo
C
的安装*启动Turbo
C有以下两种操作方法。由DOS平台进入Turbo
C使用DOS命令:C:\>CD
TC↙C:\TC>TC↙
(执行TC.exe)由Windows平台进入
Turbo
C如右图:活动2Turbo
C
的启动*从上图可以看到,最顶上一行为Turbo
C
2.0主菜单行,中间窗口为编辑窗口,接下来是信息窗口,最底下一行为功能键提示行。这四个窗口构成了Turbo
C
2.0的主屏幕,以后的编程、编译、调试以及运行都将在这个主屏幕中进行。下面详细介绍主菜单的内容。主菜单行主菜单在Turbo
C
2.0主屏幕顶上一行,它包括8个主菜单:File(文件)、Edit(编辑)、Run(运行)、Compile(编译)、Project(项目)、Options(选项)、Debug(调试)、Break/watch(断点/监视),每一个主菜单及其子菜单分别用来实现各项操作。活动3
Turbo
C2.0的工作环境*在Turbo
C2.0集成开发环境下编辑、编译、连接和运行C程序的步骤如下:1.启动集成开发环境方法一:在操作系统的命令行工作方式提示符下输入TC↙,启动TC集成开发环境。例如:C:\TC>TC↙方法二:在Windows的“资源管理器”中,找到可执行文件TC.exe后,双击该文件名,启动TC集成开发环境。如果启动成功,将显示TurboC的主屏幕。活动4
C程序的上机步骤*退出集成开发环境方法:选择File/Quit命令或者按【ALT+X】组合键,退出Turbo
C集成开发环境。菜单(命令)操作方法按【F10】键可以激活主菜单,当前的活动菜单项将“反显”。编辑、保存源程序创建(编辑)一个源程序选择主菜单项File中的New子菜单之后,即可录入源程序。打开(编辑)一个已经存在的文件保存源程序活动4
C程序的上机步骤*编译源程序选择Compile/Compiler命令或按热键【F9】,系统开始编译当前编辑的源文件。连接形成可执行文件连接通常是对当前的目标文件进行的,连接的方法有:方法一:选择Compile/Link
EXE
file命令。方法二:按【Ctrl+F9】组合键。执行可执行文件方法一:选择Run/Run命令。方法二:按【Ctrl+F9】组合键。活动4
C程序的上机步骤*程序的编译和连接没有错误,不等于运行结果一定正确。编译系统能检查出语法错误,但无法检查出逻辑错误。下面介绍两种动调试方法。按步执行方法这种方法的特点是:程序一次执行一行。每执行完一行后,就停下来,用户可以检查此时各有关变量和表达式的值,以便发现问题所在。设置断点方法对于一个较长的程序,常用的方法是在程序中设置若干个断点,程序执行到断点时暂停,用户可以检查此时有关变量或表达式的值。如果未发现错误,就使程序继续执行到下一个断点,如此一段一段地检查,直到程序无错误时为止。活动5
C程序的调试方法*请依照任务3所述步骤,建立一个新工程,在编辑区内输入本项目[例1.2]的内容,调试运行,在出现的控制台窗口中输入3和5,然后按下回车键,查看程序运行结果,如图所示。请参照本项目的例题,编写一个程序,输入X,Y,Z三个值,输出其中最小者。编写一个程序求两个整数之和。上机实战*小贴士输入的两个整数之间要有一个或一个以上的空格。项目小结本项目首先介绍了C语言的发展、C语言的特点与程序结构,然后讲解了C语言的上机操作,使读者对C语言有一个初步的了解。通过本项目的学习,可以对C语言及其编程环境有个感性的认识,特别要熟练掌握Turbo
C
2.0的上机步骤,为今后进一步学习和实践打下良好的基础。*熟悉Turbo
C2.0
编程环境熟悉C语言程序的上机操作步骤难点回顾*谢谢观赏!编程语言基础C语言主讲教师子目录项目2
数据类型和运算任务1
C语言的数据类型任务2
常量与变量任务3
整型数据
任务4
实型数据
任务5
字符型数据任务6基本输入输出函数任务7
运算符和表达式C语言程序的基本操作对象是数据。数据以某种特定类型而存在,如整型、实型、字符型等。数据类型规定了数据的表示形式、取值范围、存储格式和相关的运算方式。数据往往以常量或变量的形式存在,它们又分别属于各种数据类型。学习重点*在C程序中,各种变量都应预先说明,然后使用。对变量的说明可以包括三个方面:数据类型、存储类型和作用域。所谓数据类型,是按被说明量的性质、表示形式、占据存储空间的多少以及构造特点来划分的。本任务主要介绍常用的4类数据类型。1.基本数据类型基本数据类型又分为整型类型、实型类型(也称浮点数类型)、字符类型和枚举类型四大类。其最主要的特点是,其值不可以再分解为其他类型,也就是说,基本数据类型是自我说明的。*活动1
数据类型2.构造数据类型构造数据类型是由基本类型导出的类型,是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造数据类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:数组类型结构体类型共用体类型*活动1
数据类型指针类型指针类型是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。空类型函数在被调用时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。*活动1
数据类型在C语言中,对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。本任务就来通过实例介绍常量和变量的基本内容。*常量一般从其字面形式即可判别。这种常量称为直接常量或字面常量。例如,1,0,-5为整型常量;4.5,-1.48为实型常量;a,A为字符常量。这都是直接常量。一般情况下,用一个标识符代表一个常量,称为符号常量。为了增强程序的易读性和通用性,往往使用符号常量(Symbolic
Constant)。符号常量都作为整体量,即在函数前用一条宏定义语句来定义符号常量,其定义的一般形式为:*活动1
常量和符号常量一般情况下,用一个标识符代表一个常量,称为符号常量。为了增强程序的易读性和通用性,往往使用符号常量(SymbolicConstant)。符号常量都作为整体量,即在函数前用一条宏定义语句来定义符号常量,其定义的一般形式为:#define
标识符字符串活动1
常量和符号常量*n",l,s,v);*【例2.1】求一个数的周长、面积和体积。#define
PI
3.1415926main(
){float
l,s,r,v;printf("input
radius:
");scanf("%f",&r);l=2.0*PI*r;s=PI*r*r;v=3.0/4*PI*r*r*r;printf(“l=%10.4f\ns=%10.4f\nv=%10.4f\}活动1
常量和符号常量程序运行结果:input
radius:4↙l=25.1328s=50.26
5v=150.79
6程序中,#define命令行用来定义PI代表常量3.1415926(π)。此后凡在本书中出现的PI都代表3.1415926,可以和常量一样进行运算。*活动1常量和符号常量在程序执行过程中,其值发生改变的量称为变量(Variable)。变量
也有一定的数据类型。变量名、变量类型和存储单元是变量的三要素,即每个变量都必须有一个名字,并有指定的类型和对应的存储单元。最简单也是最常用的变量类型是整型(int类型)、实型(float或double型)和字符型(char型)。C语言和其他高级语言一样,用来标识变量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符(identifier)。所以,标识符就是一个名字。*活动2变量C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:Class,sum,good,liming,12,sun下面是不合法的标识符和变量名:M.D.John,$123,£
5,4a45*活动2变量1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。以下各数是合法的八进制数:015(十进制为13),0101(十进制为65),01
7(十进制为6535)。以下各数不是合法的八进制数:256(无前缀0),03A2(包含了非八进制数码)。*活动1整型常量活动1
整型常量*2.十六进制整常数十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。以下各数是合法的十六进制整常数:0X2A(十进制为42),0XA0(十进制为160),0XFFFF(十进制为6
535)。以下各数不是合法的十六进制整常数:5A(无前缀0X),0X3H(含有非十六进制数码)3.十进制整常数十进制整常数没有前缀。其数码为0~9。以下各数是合法的十进制整常数:237
,-568
,6
535
,1627以下各数不是合法的十进制整常数:023(不能有前导0),23D(含有非十进制数码)。*活动1
整型常量活动1
整型常量*4.整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~6
535,有
符号数为-32768~+32767。八进制无符号数的表示范围为0~01
7。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。0L(十进制为-*长整型数是用后缀“L”或“l”来表示的。例如:十进制长整常数:158L(十进制为158),358358
0);八进制长整常数:012L
(十进制为10),0
7L
(十进制为63),02
0L(十进制为6
536);十六进制长整常数:0X15L(十进制为21),0XA5L(十进制为165),0X1
0L(十进制为6
536)。整型变量的基本类型为int。可以根据数值的范围定义变量为基本整型、短整型和长整型。在int
之前可以根据需要分别加上修饰符(modifier):short(短型)或long(长型)。因此有以下几种。活动1
整型常量基本整型类型说明符为int,在内存中占2个字节,其取值为基本整常数。短整型类型说明符为shortint或short,所占字节和取值范围均与基本型相同。长整型类型说明符为longint或long,在内存中占4个字节,其取值为长整常数。无符号型类型说明符为unsigned。无符号型又可与上述三种类型匹配而构成。*活动2
整型变量活动2
整型变量下表列出了Turbo
C中各类整型量所分配的内存字节数及数的表示范围。*实型常量也称为实数或浮点数。在C语言中,实数只采用十进制1.十进制数形式由数码0~9和小数点组成。例如:0.0,.25,5.787,0.17,5.0,402.,-368.9230等均为合法的实数。2.指数形式由十进制数、加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为aEn
(a为十进制数,n为十进制整数),其值为a×10n。例如,0.0256(=2.56×10-3)用指数法可以表示为2.56E-3;18
0.0(=1.8×105)用指数法可以表示为1.8e5。*活动1
实型常量一个实型数据一般在内存中占4个字节(32位)。实型变量分为两类:单精度型和双精度型。见表下表。活动2实型变量*字符常量是用单撇号括起来的一个字符。例如"a","A","x","+","?"等都是合法字符常量。在C语言中,字符常量有以下特点:字符常量只能用单撇号括起来,不能用双撇号或其他括号。字符常量只能是单个字符,不能是字符串。字符可以是字符集中任意字符,但数字被定义为字符型之后不能参与数值运算。如′5′和5是不同的。′5′是字符常量,不能参与运算。字母的大小写是两个不同的字符常量。例如′a′和′A′是不相同的字符常量。*活动1
字符常量转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟
一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称为“转义”字符。例如,在前面各例中printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的以“\”开头的特殊字符,见下表。*活动2
转义字符活动2
转义字符*活动3
字符变量字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。其定义方式为:char
c1,c2;
∥定义c1,c2为字符变量定义了c1,c2两个字符变量后,可以用下面语句对c1、c2赋值。例如:c1=′a′;c2=′b′;每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。*活动4
字符串常量字符串常量是由一对双撇号括起来的字符序列。例如:"CHINA","How
do
you
do","$
2.15"等都是合法的字符串常量。字符串常量和字符常量是不同的量。小贴士′a′与a的含义不同,′a′是字符常量,在内存中占1个字节,可表示为:a;"a"是字符串常量,在内存中占2个字节,可表示为:a\0,实际上在内存中表示为:a\0*格式输出函数printf()用来将一个或更多类型相同或不相同的数据,依次以指定的格式输出,printf函数的一般格式为:printf(格式控制串,输出列表)其中,“输出列表”列出本语句所要输出的0到多个数据项,各数据项用逗号隔开,每项是一个表达式,表示要将该表达式的值写出去。输出时,每一项占一个输出域。“格式控制串”是用串括号“′′”括起来的一个特殊字符串,串中含有各输出项所要求的格式说明,指出每个数据项以什么形式输出,要占多少字符宽度(即域宽)。*活动1
格式输出函数printf()格式输入函数scanf()用来将一个或多个类型相同或不同的数据,依次按照指定的格式从键盘读入。调用该函数的语句一般格式为:scanf(格式控制串,地址列表);其中,“格式控制串”的含义同printf函数;“地址列表”是由若干个地址组成的列表,可以是变量的地址,或字符串的首地址。运行时按以下方式输入a,b的值:4
5↙(输入a,b的值)4,5
(输出a,b的值)*活动2
格式输入函数scanf()【例2.1】先输入两个整型数,再以十进制整数的格式输出这两个数。main(
){inta,b;scanf("%d%d",&a,&b);∥读入两个整数,分别赋给变量a和bprintf("%d,%d\n",a,b);}活动2
格式输入函数scanf()*程序中,“&”是“地址运算符”,&a指在内存中的地址。而scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去。“%d%d”表示按十进制整数形式输入数据。输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键和空格键。*活动2
格式输入函数scanf()putchar()函数功能是将一个字符输出到标准输出设备上,一般使用形式为:putchar(c);其中,参数c是一个字符型表达式*活动3
putchar函数(字符输出函数)活动4
getchar函数(字符输出函数)getchar函数的功能是从终端输入一个字符。getchar函数没有参数,其返回值类型为char,其一般使用形式为:ch=getchar();
∥ch
是已经定义的类型为char的变量名该语句将getchar()当作一个函数调用表达式,执行该表达式,从键盘读入一个字符,并将该字符作为函数返回值,赋给“=”左边的变量
ch。*C语言的运算符可分为以下几类:1.算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称为模运算,%)、自增(++)和自减(--)等7种。2.关系运算符用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)等6种。*活动1
运算符的种类逻辑运算符用于逻辑运算。包括与(&&)、或(ǁ)和非(!)等3种。位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)和右移(>>)等6种。活动1
运算符的种类*5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=<<=)三类共十一种。6.条件运算符这是一个三目运算符,用于条件求值。7.逗号运算符用于把若干表达式组合成一个表达式(,)。*活动1
运算符的种类指针运算符用于取内容(*)和取地址(&)两种运算。求字节数运算符用于计算数据类型所占的字节数。特殊运算符有括号(),下标[],成员(→,.)等几种。下面先来介绍最常用的算术运算、关系运算和圆括号运算等初等运算符。活动1
运算符的种类*活动2
算术运算符和算术表达式*基本的算术运算符加法运算符“+”为双目运算符,即应有两个量参与加法运算,如a+b,1+2等,具有左结合性。减法运算符“-”为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-1等,具有左结合性。乘法运算符“*”为双目运算符,具有左结合性,如3*4等。除法运算符“/”为双目运算符,具有左结合性。当参与的运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。活动2
算术运算符和算术表达式算术表达式和运算符的优先级及结合性C语言中,用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。强制类型转换运算符强制类型转换是将一个表达式转换成所需的类型。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float)a把a转换为实型,(int)(x+y)把x+y的结果转换为整型。*活动2
算术运算符和算术表达式自增1、自减1运算符自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1、自减1运算符均为单目运算,都具有右结合性。赋值运算符和赋值表达式用赋值运算符“=”将一个变量和一个表达式连接起来的式子称为赋值表达式。其一般形式为:变量=表达式复合赋值运算符及表达式在赋值运算符“=”之前加上其他二目运算符可构成复合赋值运算符。C语言规定可以使用10种复合赋值运算符。*7.逗号运算符C语言中逗号“,”也是一种运算符,称为逗号运算符,又称为“顺序求值运算符”。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。活动2
算术运算符和算术表达式*活动3
关系运算符和关系表达式比较运算是程序中最常用的运算之一。用于比较两个运算对象大小关系的运算符,称为关系运算符。C语言提供了6种关系运算符:<
小于<=
小于或等于>
大于>=大于或等于○==
等于!=
不等于*活动3
关系运算符和关系表达式以上6种关系运算符的优先次序:前面四种关系运算符的优先级相同,后面两种关系运算的优先级相同。前者优先级高于后者。关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。例如:a>b=ca=
=b<ca=b>c等于(a>b)=c等于a==(b<c)等于a=(b>c)*活动4
算逻辑运算符和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子,称为逻辑表达式。下表为逻辑运算的“真值表”。用它表示当a和b的值为不同组合时,各种逻辑运算所得到的值。*位运算符为C语言提供了六种位运算符:&按位与;|
按位或;^
按位异或;~
取反;<<左移;>>右移。*活动5
位运算分析下列程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。main(){int
i,
j,
m,
n;i=8;
j=10;m=++i;
n=j++;printf(“%d,%d,%d,%d”,i,j,m,n);}*上机实战分别作以下改动之后,先分析再运行:将第五行改为:m=i++;n=++j;程序改为:main(){int
i
,
j
;i=8;
j=10;printf(“%d,%d”,
i++,
j++);}上机实战*在(2)的基础上,将printf语句改为:printf(“%d,%d”,
++
i,
++
j
);再将printf语句改为:printf(“%d,%d,%d,%d”,i,j,i++,j++);*上机实战上机实战(5)程序改为:main(){int
i
,
j
,
m=0
,
n=0
;i=8;
j=10;m+=
i
++;
n
-=
--j;printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);}*难点回顾掌握C语言的基本输入输出函数掌握运算符和表达式*谢谢观赏!编程语言基础C语言主讲教师子目录项目3
流程控制任务1
C语言的发展任务2
选择结构任务3
循环结构通过项目1和项目2的学习,读者可能已经认识到,尽管计算机可以完成许多极其复杂的工作,但实质上这些工作都是按照事先编好的程序进行的。程序就是对计算机要执行的一组操作序列的指令描述。学习重点*下面是一个简单的顺序结构程序的实例,该程序在执行时按程序书写顺序,自上而下执行。程序中的每一条语句都被执行一次,且仅能被执行一次。【例3.1】由终端输入两个整数给变量x和y,然后输出x和y;交换x和y的值后,再输出x和y。*活动1
顺序结构程序实例#include<stdio.h>main(){intx,y,t;printf
("Enter
x&y
:\n");scanf("%d%d
",&x,&y);printf
("x=%d
y=%d\n",x,y);t=x;
x=y;y=t;printf
("x=%d
y=%d\n",x,y);}*活动1
顺序结构程序实例下面是一个简单的顺序结构程序的实例,该程序在执行时按程序书写顺序,自上而下执行。程序中的每一条语句都被执行一次,且仅能被执行一次。【例3.1】由终端输入两个整数给变量x和y,然后输出x和y;交换x和y的值后,再输出x和y。#include<stdio.h>main(){intx,y,t;*活动1
顺序结构程序实例printf
("Enter
x&y
:\n");scanf("%d%d
",&x,&y);printf
("x=%d
y=%d\n",x,y);t=x;
x=y;y=t;printf
("x=%d
y=%d\n",x,y);}活动1
顺序结构程序实例*C语言的顺序结构语句可以分为四大类。1.表达式语句在表达式的后面加一个分号就构成了一个表达式语句,如:“c=a+b;”“i++;”“j=2,i=1;”。事实上,C语言中有使用价值的表达式语。句主要有3种:赋值语句。自加减运算符构成的表达式语句。逗号表达式语句。*活动2
顺序结构语句if语句被称为选择语句,也称为分支语句或条件语句,它提供了两条路径,而不再局限于顺序结构中的单一流程,此时程序必须从两条路径中选择其一执行。1.if语句的一般格式if(表达式)语句例如:if(x>0)printf("%d\n",x);其中,if是C语言的关键字,表达式两侧的圆括号不可少,最后是一条语句或用花括号括起来的复合语句。*活动1
if语句2.if语句的执行流程if语句的执行流程如图所示。3.if语句的功能描述如果“表达式”的值为“真”(非0值),那么就执行“语句”;否则,若表达式的值为假(0值),则跳过“语句”。活动1
if语句*在程序设计时,仅使用简单分支可能使程序的执行效率变低。例如,要描述“如果x>0,则
y=x;如果x<=0,则y=-x”。使用最基本的if语句应描述为:if(x>0)
y=x;if(x<=0)
y=-x;else不是一条独立的语句,它只是if语句的一部分,在程序中else必须与if配对使用。if
else语句的执行流程if
else语句的执行流程如图所示。活动2
if
else语句*活动3
if
else
if语句*实际应用中常常面临更多种的选择,把if
else结构扩展一下,增加else
if就能满足这一需要。1.if
else
if语句的一般格式
if(表达式1)语句1else
if(表达式2)语句2else
if(表达式3)语句3else语句42.if
else
if语句的功能描述如果表达式1为真,则执行语句1,否则判断表达式2,表达式2为真则执行语句2,依次类推。若所有条件均不成立,则执行else分支中的else子句。活动3
if
else
if语句*活动4
else与if匹配问题*当有许多if和else时,如何决定哪个if与哪个else配对呢?例如,下面的这段程序:if(n>6)if(n<12)printf("UP!UP!\n");elseprintf("DOWN!DOWN!");何时打印DOWM!DOWN!呢?是n<=6时,还是n>=12?换句话说,else应该与第一个if配对,还是第二个?答案是:else与第二个if配对。因此当满足n>=12
时打印DOWN!DOWN!。请同学们思考,什么情况下打印UP!UP!。1.else与if配对的规则else总是与它上面最近的if配对,除非用花括号表示出其他选择。2.说明在上面的例子中,如果希望else与第一个if匹配,那就得加花括号。*活动4
else与if匹配问题例如:if(n>6){if(n<12)printf("UP!UP!");}elseprintf("DOWN!DOWN!\n");现在,得到下面的结果:n3815输出:DOWN!DOWN!UP!UP!无输出!活动4
else与if匹配问题*在if语句中又包含一个或多个if语句的情况称为if语句的嵌套。当流程进入某个选择分支后又引出新的选择时,就要用嵌套的if语句。嵌套的if语句一般形式为:if
(
)if()语句1else
语句2内嵌ifelseif()语句3else
语句4内嵌if请注意分清楚if与else
之间的匹配关系。*活动5
if语句嵌套【例3.5】输入一个人的年龄,根据其年龄判断他是否已经退休?分析:男士60岁退休,女士5岁退休。因此要判断一个人是否已退休,首先得判断性别,然后判断年龄,才能得出正确的结论。*活动5
if语句嵌套#include<stdio.h>#define
MAN
′M′main(){char
sex;intage;printf("请输入性别(男士用M,女士用F)\n");sex=getchar();printf("请输入年龄\n");scanf("%d",&age);if(sex==MAN)活动5
if语句嵌套*活动5
if语句嵌套*if(age>=60)/*是男士*/printf("已退休\n");elseprintf("在工作\n");elseif(age>=
5)printf("已退休\n");elseprintf("在工作\n");}若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。例如:若有以下if语句:if(a>b)max=a;else
max=b;则可以用下面的条件运算符来处理:(a>b)?a:b*活动6
条件运算符其中,“(a>b)?a:b”是一个“条件表达式”。它是这样执行的:如果(a>b)条件是真,则条件表达式取值a,否则取值b。条件运算符要求有三个操作对象,称为三目(元)运算符。它是C语言中唯一的一个三目运算符。活动6
条件运算符*条件表达式不能取代一般的if语句。只有在if语句中内嵌的语句为赋值语句(且两个分支都给同一个变量赋值)时才能代替if语句。例如:如下的if语句就无法用一个条件表达式代替。if(a>b)
printf("%d",a);else
printf("%d",b);但可以用下面语句代替:printf("%d",a>b?a:b);*活动6
条件运算符switch语句称为开关语句,也称为多重选择语句。当程序面临多重选择时,可用if
语句的嵌套来实现,但一般情况下,用switch语句代替多层if嵌套来实现这种多重选择,可以使程序的可读性得到很大提高,也容易避免if
else的多层嵌套造成的书写错误。*活动7
switch与break语句实现分支1.switch语句的一般格式
switch(开关表达式){case
常量表达式1:语句表1case
常量表达式2:语句表2……活动7
switch与break语句实现分支*case
常量表达式n:语句表ndefault:语句表n+1}2.switch语句的工作过程下面通过一个实例来看一下switch语句的工作过程。【例3.6】考试成绩用等级A、B、C、D来表示,要求根据A、B、C、D的不同,打印出“优”、“良好”、“及格”、“不及格”等不同的评语。*活动7
switch与break语句实现分支#include<stdio.h>main(){char
ch1;printf("请输入成绩等级(A,B,C,D),用大写字母\n");ch1=getchar();switch(ch1){case′A′:printf("优秀\n");活动7
switch与break语句实现分支*break;case′B′:printf("良好\n");break;case′C′:printf("及格\n");break;case′D′:printf("不及格\n");break;default:printf("输入错误\n");}printf("End!\n");}*活动7
switch与break语句实现分支在执行该程序时,首先计算表达式的值(本例中变量ch1的值);并根据所得的值在各个case常量表达式中寻找匹配(本例中case′A′、case′
B′…等),找到匹配后′B′(本例中匹配的是case′B′)执行后面相应的语句表,顺序往下执行;如果无相匹配的常量表达式,但存在default标号,则执行该语句标号后面的语句;当不存在default标号时,不执行switch中的任何一个语句。*活动7
switch与break语句实现分支几乎所有实用的程序都包含循环。循环结构是结构化程序的三种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本单元。循环结构一般由循环条件、循环体和循环控制变量组成。为了更好地理解循环结构,下面介绍几个专业术语。循环条件循环结构中的测试表达式,称为循环条件。当循环条件为真时,执行循环体,然后再次对循环条件进行判断,进行下一次循环;当循环条件为假时,结束循环。循环体在每个循环周期均要执行一次的语句序列,称为循环体。循环体可以是单条语句,也可以是复合语句,甚至可以是空语句。*活动1
有关循环的术语3.循环控制变量在循环条件中控制条件是真是假的变量,称为循环控制变量。由于循环控制变量决定着循环体是否执行以及执行的次数,所以它的作用在循环结构中非常重要。要写出一个正确的循环结构,对循环控制变量要做三方面工作:一是控制变量赋初值;二是把控制变量写入正确的循环条件;三是控制变量的更新和调整。只有程序在测试循环条件时才能判断循环是终止还是继续,而不是在其他任何地方只要条件不满足就立刻退出。*活动1
有关循环的术语【例3.7】判断下列循环什么时候终止。#include<stdio.h>main(){inti=1;while(i<3)/*6行*/{printf("i=%d\n",i);i++;/*9行*/printf("现在i=%d\n",i);/*10行*/}}*活动1
有关循环的术语while语句定义了一个循环结构,用来实现“当型”循环结构。1.while语句的一般格式while(测试表达式){循环体语句}2.while语句的执行流程
while语句执行流程如图所示。活动2while语句*3.while语句的工作过程while循环执行时,先判断表达式的值,当表达式的值为“真”时,循环体语句被执行,然后再去判断表达式的值,如果表达式的值仍为“真”,则再次执行循环体语句;如果表达式值为“假”,则退出循环。【例3.8】输入10个整数,计算这10个数的和。*活动2while语句#include<stdio.h>main(){inti,sum,num;sum=0;/*部分和变量清0*/i=1;/*循环控制变量置初值*/while(i<=10){printf("请输入第%d个数:",i);/*第11行*/*活动2while语句scanf(“%d”,&num);sum=sum+num;++i;/*第14行*/}printf("这10个数的和是%6dn",sum);}活动2while语句*do
while语句能建立另一种形式的循环,用来实现“直到型”循环结构。1.do
while语句的一般格式
do{循环体语句}*活动3
do
while
结构while(测试表达式);例如:do{i++;s+=i;}while(i<10);活动3
do
while
结构*小贴士do是C语言的关键字,必须和while配对使用。do○while循环由do开始,while结束;特别要注意的是:while后面的“;”不可省略。while后的表达式用于控制循环是否继续。循环体内如果有多条语句,应该用花括号({})括起来写成复合语句。2.do
while语句的执行流程do
while语句执行流程如图所示。*活动3
do
while
结构*3.do
while语句的工作过程先执行循环体语句,再求表达式的值,若表达式的值为非0,则再次执行循环体语句,如此反复,直到表达式的值为0时结束循环,并转到下一条语句执行【例3.9】计算1+2+…+1
0的值。main(){int
k,sum;k=1;sum
=0;do{sum
+=
k;k++;}while(k<=1
0);printf("\nsum=%d",sum);}活动3
do
while
结构*活动4
for循环结构*在while语句和do
while语句中,循环变量的初始化、循环条件的设置和循环变量的改变三个方面的工作是分散的。控制变量初始化在循环开始之前,循环条件在括号中,控制变量更新、调整在循环体中。分散的语句容易分散注意力,并且加重程序修改、维护的负担。实际上这三方面工作在逻辑上是密不可分、缺一不可的。能不能建立一种结构把这种紧密的关系体现出来?for
语句正好符合这一要求。活动4
for循环结构*1.for语句的一般形式for(表达式1;表达式2;表达式3){循环体语句}例如:For(k=0;k<10;k++)
printf("*");该程序用于在一行上打印10个“*”。其中,
for是C语言的关键字,其后的一对圆括号中通常有三个表达式,各表达式之间用分号隔开。这三个表达式可以是任意形式的表达式。紧跟在for后面的是循环体,即这里的printf语句。如果循环体是多条语句,需要将其写成复合语句形式。活动4
for循环结构*活动4
for循环结构2.for语句的执行流程for语句执行流程如图所示。*活动4
for循环结构*3.for语句的工作过程计算表达式1。计算表达式2,如果结果为真,转(3),开始一个循环周期;如果结果为假,转(5)。执行for下面的语句(循环体),执行完后转(4)。计算表达式3,结束一个循环周期,重新返回(2),开始下一次循环。结束循环,流程转到for循环后面的一条语句。活动4
for循环结构*【例3.10】计算1+2+…+10的值。#include<stdio.h>main(){
inti,sum;sum=0;for(i=1;i<=10;i++)sum=sum+i;printf("结果等于%4d\n",sum);printf("退出循环时i等于%d\n",i);}活动4
for循环结构*程序中,for后面的括号包含了由两个分号隔开的三个表达式:第一个表达式是控制变量赋初值(本例中是i=1),仅在循环开始的时候执行一次;第二个是测试表达式(循环条件,本例中是i<=10),在开始一个循环周期之前进行计算,若结果为真则执行循环体,若结果为假则退出循环;第三个控制变量更新、调整(本例中是i++),它是在循环体执行完之后才执行的。记清这点很重要。在本例中因i++发生在sum=sum+i;之后,故相加的序列是1+2+3+…+10,而非2+3+4+…+1。第三个表达式执行后即结束一个循环周期,流程重新返回第二个表达式的计算,开始下一个周期。活动4
for循环结构*4.for语句说明如果for语句的循环体由多个语句组成,则必须用花括号“{}”括起来,使其形成复合语句。例如,把变量增值表达式移到循环体中,从而在for中省略变量增值表达式。即上式可改写成:for(k=1,sum=0;k<=1
0;){sum=sum+k;k++;}for语句中的初始表达式和变量增值表达式既可以是一个简单表达式,也可以是由逗号运算符将多个表达式连接起来。for语句中的循环条件表达式是关系表达式或逻辑表达式,其值取逻辑值,即“真”或“假”。用来控制循环次数。for语句中的任何一个表达式都可以缺省,但分号“;”一定要保留。缺省表达式部分的功能,可以用其他语句去完成。活动5
循环嵌套*一个循环的循环体内包含另外一个循环语句,这样的编程方式称为“循环的嵌套”。循环嵌套时,外层循环执行一个循环周期,内层循环
从头到尾执行一遍。三种循环(while循环、do○While循环和for循环)
不仅可以自身嵌套,而且还可以互相嵌套。【例3.1】打印如图所示的九九乘法表。活动5
循环嵌套*活动5
循环嵌套*为了简化问题,仅考虑打印表中的积,乘数和被乘数两项留给读者完成。算法设计要点:(1)从上往下看,问题简化为打印第1行乘积、第2行乘积、…、第k行乘积、…、第9行乘积,可用for循环语句for(k=1;k<=9;k++){打印第k行;}实现。问题转化为如何用C语言实现“打印第k行”?(2)再来观察第k行(k=1,2,3,…,9):k*1k*2k*3k*4…k*i…k*9(i=1,2,3,…,9)从左往右看,是一个通项公式为:ai=k
*
i
的数列{ai
|i=1,2,…,9},所以,可用循环语句for(i=1;i<=9;i++)printf("%5d",k*i);实现。另外,由于第k行是另起一行,所以,必须添加换行操作printf("\n")。完整的源程序请读者思考完善。活动5
循环嵌套*活动6
break,continue和goto语句*1.break与continue
语句一般格式
break;continue;功能break:强行结束循环,转向执行循环语句的下一条语句。continue:结束本次循环。对于while和do-while循环,跳过循环体其余语句,转向循环终止条件的判断;而对for循环,跳过循环体其余语句,转向循环变量增值量表达式的计算。3)说明活动6
break,continue和goto语句*(1)break语句只能用于循环语句和switch语句中,continue只能用于循环语句中。而且往往是在一个特殊的条件成立时,执行break或continue语句。例如,输出1
0以内的自然数,可用如下含有break的循环语句实现:for(i=1;i<1
0;i++){printf("%4d",i);if(i>=
9)break;}而输出1
0以内的偶数,可用如下含有continue的循环语句实现:for(i=1;i<1
0;i++){if(i%2)
continue;printf("%4d",i);}活动6
break,continue和goto语句*活动6
break,continue和goto语句*循环嵌套时,break和continue只影响包含它们的最内层循环,而与外层循环无关。continue语句有点像break语句。但continue语句不造成强制性的中断循环,而是强行执行下一个循环周期,而break语句则终止本次循环。【例3.12】编写程序,计算满足:12+
2+32+…+n2<1
0的最大n值。【分析】这是一个不确定项的数列{k2
|
k=1,2,3,…}求和问题。我们可以用和数的上界来控制循环的终止。活动6
break,continue和goto语句*#include<stdio.h>main
(
){int
sum,k;for(k=1,sum=0;
;k++){sum
+=
k*k;if
(sum>=1000)
break;}printf("\n
n=%d",k-1);}活动6
break,continue和goto语句*2.goto
语句和语句标号(1)goto语句是无条件转移语句,其句型是:
goto语句标号;(2)语句标号是一个标识符,应按标识符的命名规则来命名。标号语句则是由语句标号和其后的冒号指示goto语句的转移目标,语句标号:语句;例如:loop:sum+=i;
/*其中“loop:”指示goto语句的转移目标,“loop”叫做语句标号*/i++;if(i
<=
36)goto
loop;/*其中“goto
loop;”称为goto语句*/活动6
break,continue和goto语句*小贴士*goto语句被执行时,无条件地转移到标号所指语句处。标号语句必须与goto语句同处于一个函数中,goto语句一般用于同层跳转,或由里层向外层跳转,而不能用于由外层向里层跳转。结构化程序设计不提倡使用“goto”语句,除非它能使程序更简捷清晰。1.输入三个整数x,y,z,请把这三个数由小到大输出。【分析】要将x,y,z三个数按从小到大的顺序输出,可考虑先找出其中最小的一个放在x中,再找出较小的一个放在y中,z中剩下的自然是最大的一个。因此,可先将x与y比较,若x大于y则交换x,y;同理,再比较x和z,最后比较y和z。程序源代码:*上机实战main(){intx,y,z,t;scanf("%d%d%d",&x,&y,&z);if
(x>y){t=x;x=y;y=t;}/*交换x,y的值*/if(x>z)上机实战*{
t=z;z=x;x=t;}/*交换x,z的值*/if(y>z){
t=y;y=z;z=t;}/*交换z,y的值*/printf("sma
l
to
big:
%d
%d
%d\n",x,y,z);}上机实战*2.判断101~2
0之间有多少个素数,并输出所有素数。【分析】判断素数的方法:用一个数分别去除2到sqrt(这个数),只要能被整除一次,则表明此数不是素数,反之是素数。程序源代码:*上机实战#include
<stdio.h>#include
<math.h>void
main(){inti,j=2,k=0,sum=0;printf("素数有\n");for(i=101;i<201;i++)*上机实战上机实战{for(j=2;j<=(int)sqrt(i);i++)
{if(i%j==0){
k=1;continue;}}if(k==0)
{printf("素数:%d\n",i);sum++;}
k=0;}
printf("共有%d个素数\n",sum);}*难点回顾掌握分支语句的格式、执行流程,学会选择结构程序的设计方法掌握循环语句的格式、功能,能读懂并设计简单的循环结构程序理解掌握C语言程序设计中的几种简单算法*谢谢观赏!编程语言基础C语言主讲教师子目录项目4
数组任务1
一维数组任务2
二维数组任务3
字符数组数组是C语言中一种非常重要的数据类型,属于构造类型。它是由若干个具有相同数据类型的变量按一定的存储顺序组成的,每一个变量称为一个数组元素。数组元素用数组名及下标来唯一确定。这就为我们处理大量相同类型的数据提供了方便。本项目通过C程序实例分析着手,使读者能够掌握数组的定义及引用方法,并能够应用数组解决实际问题。学习重点*一维数组定义的一般形式为:类型说明符数组名[常量表达式];例如:floata[10];其中a是数组名,它按标识符命名。此数组有10个元素:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9],每个元素都为实型的。*活动1
一维数组的定义数组名命名与变量命名相同,遵循标识符规则。数组名后面是用方括号“[
]”括起来的常量表达式,不能用圆括号。*常量表达式表示数组中所含元素的个数,即数组的长度,应为整型的或与整型兼容。常量表达式可以是常量或符号常量,不能是变量。C不允许对数组的大小作动态定义。如下面的写法是错误的:intn;inta[n];数组元素的下标从0开始,到(常量表达式-1)为止。因此在如上定义的数组a中无a[10]元素。小贴士数组和其他变量一样必须先定义,然后使用。C语言规定除字符数组外,只能逐个引用数组元素,而不能一次引用整个数组。数组元素的引用方式为:数组名[下标];其中,下标可以是整型常量、整型变量或整型表达式,其取值范围满足:0≤下标值<常量表达式的值。*活动2
一维数组元素的引用【例4.1】编一个程序,计算当x=0,1,2时,y=2*(x+4)的值。main(
){inta[12],i;for(i=0;
i<12;
i++)a[i]
=
2
*(i
+
4);for
(i
=
0
;
i<12
;
i
+
+)printf("The
a
ati
=
%2d
is
%3d\n",i,a[i]);}*活动2
一维数组元素的引用运行结果:The
a
ati=0
is8The
a
ati=1
is10The
a
ati=2
is12活动2
一维数组元素的引用*【例4.2】编一个计算学生平均成绩的程序,要求先提示输入学生数,再依次输入学生成绩,最后显示平均成绩。main(
){inti,n;float
g[1
0],r;printf("Input
student
number:\n");scanf("%d",&n);printf("Input
score
for
each
student:\n");*活动2
一维数组元素的引用for(i=0;i<n;i
++)scanf("%f",&g[i]);r=0.0;for(i=0;i<n;i++)r+=g[i];r/=n;printf("The
average
score
of
student
is
%f\n",r);}活动2
一维数组元素的引用*【例4.3】从键盘输入10个数据,然后按倒序输出。main(){int
i,a[10];/*定义a为整型数组,含10个元素*/for(i=0;i<=9;i++)scanf("%d",&a[i]);/*对数组的每个元素赋值*/for(i=9;i>=0;i--)printf("%6d",a[i]);printf("\n");}*活动2
一维数组元素的引用【例4.4】用冒泡排序法对输入的数按由大到小的顺序排序。【分析】若10个数为:0,1,2,3,4,5,6,7,8,9第1号数0和后面的交换10-1次,第2号数1和后面的交换10-2次……*活动2
一维数组元素的引用1*/第9号数8和后面的交换10-9次。号数用j表示,交换的次数用i表示。程序如下:main(){int
a[
1];
/*a[0]不用,从a[1]开始数组长度为inti,j,t;printf("Please
input
10
integers:\n");/*输入10个数*/活动2
一维数组元素的引用*活动2
一维数组元素的引用*for(i=1;i<
1;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<10;j++)for(i=1;i<=10-j;i++)if(a[i]<a[i+1])/*前9个数进行交换*//*第j个数共交换10-j次*//*前面小于后面的进行交换*/{t=a[i];a[i]=a[i+1];a[i+1]=t;}/*进行交换*/printf("The
sorted
numbers:\n");for(i=1;i<11;i++)printf("%6d",a[i]);
/*输出排列结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 配送箱共享使用协议
- 配送范围执行协议
- 小时工快递协议
- 2026年食品安全知识竞赛试题含答案
- 安全趋势培训能力试卷练习
- 2026年党章和党的基础知识竞赛试题库含答案
- 客户联系尝试委托保密协议
- 慢病终末期照护中护士人文关怀培养策略
- 慢病管理中的需求沟通
- 慢病管理中慢性病管理技术应用前景
- 新年活动策划团建方案(3篇)
- 人教版(PEP)四年级上学期英语期末卷(含答案)
- 员工代收工资协议书
- 协会捐赠协议书范本
- 人员转签实施方案
- 高中数学建模竞赛试题及答案
- 奥诺康多烯酸软胶囊课件
- (正式版)DB61∕T 5053-2023 《湿陷性黄土地区建筑边坡治理技术规程》
- 江苏省淮安市2024-2025学年七年级上学期期末语文试题(含答案解析)
- 《环境法(第七版)》课件全套 周珂
- 10万头肉牛屠宰及精深加工生产线建设项目可行性研究报告
评论
0/150
提交评论