C语言程序设计(同名49)课件_第1页
C语言程序设计(同名49)课件_第2页
C语言程序设计(同名49)课件_第3页
C语言程序设计(同名49)课件_第4页
C语言程序设计(同名49)课件_第5页
已阅读5页,还剩401页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计C语言程序设计C语言程序设计目录项目1C语言概述1项目2数据类型、运算符与表达式2项目3顺序结构程序设计3项目4选择结构程序设计4项目5循环结构程序设计5项目6数组5C语言程序设计C语言程序设计C语言程序设计目录项目11项目7

函数1项目8

指针2项目9

结构与联合3项目10

位运算4项目11

文件5目录项目1

C语言概述1项目2

数据类型、运算符与表达式2项目3

顺序结构程序设计3项目4

选择结构程序设计4项目5

循环结构程序设计5项目6

数组5附件5项目7函数1项目8指针2项目9结构与联合3项目10位2项目1C语言概论1项目导读项目目标项目任务项目1C语言概论1项目导读3本项目主要对C语言的一些基础知识及其字符集和词汇进行介绍,使读者在学习C语言之前对其有个全面的认识。项目导读●安装、配置TC2.0和VC++6.0,成功启动TC2.0和VC++6.0。●能编写一个简单的C程序的源文件,并编译该源文件,链接目标文件得到可执行文件。项目目标本项目主要对C语言的一些基础知识及其字符集和词汇4任务1.1C语言的发展与特点

C语言是1972年由美国的DennisRitchie设计发明的,并首次在配备了UNIX操作系统的DECPDP-11计算机上实现。它由早期的编程语言BCPL(BasicCombinedProgrammingLanguage)发展演变而来。C语言的特点1、C语言是中级语言2、C语言是结构化语言3、C语言功能齐全4、C语言适用范围广

任务1.1C语言的发展与特点C语言是1975任务1.2认识C语言本任务通过几个简单的C程序,介绍C语言的基本组成和格式。案例1.1main(){printf(“Thisisacprogram.\n”);}本程序的功能是输入下列一行信息:Thisisacprogram.任务1.2认识C语言本任务通过几个简单的C程序6任务1.2认识C语言程序说明:main函数是“主函数”,每一个C程序必须有一个main函数。函数体由大括弧{}括起来。本例中,主函数内只有一个输出语句,printf(“Thisisacprogram.\n”);是C语言的输出函数(具体详见项目3)。双引号内的字符串将照原样输出。“\n”是换行符,即在输出“Thisisacprogram.”后换行。分号是C语句的基本构成,每一个C语句后都应再加上分号,分号是语句的结束标志。任务1.2认识C语言程序说明:7任务1.2认识C语言本任务通过几个简单的C程序,介绍C语言的基本组成和格式。案例1.2main()/*求两数之和*/{inta,b,sum;/*本行开始的以下4条为C语句*/a=123;b=456;sum=a+b;printf(“sumis%d\n”,sum);}本程序的功能是求两数之和。任务1.2认识C语言本任务通过几个简单的C程序8任务1.2认识C语言程序说明:/*……*/是注释语句,此信息对编译和运行不起作用。(2)程序第二行的含义是定义a、b和sum为整体变量。(3)“sum=a+b;”的含义是把变量a和b的和赋给变量sum。(4)该程序的输出结果是:sumis579。任务1.2认识C语言程序说明:9任务1.2认识C语言案例1.3

main()/*求一个数的绝对值*/{intx,y;scanf(“%d”,&x);y=abs(x);printf(“abs=%d”,y);}intabs(intz){intw;if(z>=0)w=z;elsew=-z;return(w);}本程序的功能是求z的绝对值。任务1.2认识C语言案例1.310任务1.2认识C语言程序说明:(1)本程序包括两个函数:主函数main和被调用函数abs。(2)函数abs的作用是将z的绝对值返回给主调函数main(返回值是通过函数名abs带回到main函数的调用处的)。(3)程序中的scanf函数的作用是从键盘上输入x的值。&x中的“&”的含义是“取地址”,此scanf函数的作用是将数值输入到变量x的地址所标志的单元中去,也就是输入给变量x。关于scanf函数详见项目3。(4)main函数中的第四行为调用abs函数,在调用时将实际参数x传给abs函数中的形式参数z,然后输入y的值。(5)printf函数中双引号内的abs=%d,在输出时,其中的%d将由y值取代,“abs=”原样输出。该程序的运行结果是:假定从键盘上输入x的值为:-6↙

则y=6(6)本例用到了函数调用、实际参数和形式参数等概念,只是做了简单的解释,读者若对此不大理解,可先不予深究,在学到函数项目后的相关知识后,问题自会迎刃而解。这里介绍此案例的目的,是想让读者对C语言的组成和形式有一个初步了解。任务1.2认识C语言程序说明:11任务1.2认识C语言通过以上三个例子,我们可以得到以下几点:

1、C程序是由函数构成的。一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。因此,函数是C语言的基本单位。被调用函数可以是系统提供的库函数(例如printf函数和scanf函数),也可以是用户根据需要自编译的用户函数(例如案例1.3中的abs函数)。2、函数及其结构。一个函数由两部分组成:即函数首部和函数体。函数首部包括函数类型、函数名、函数参数(形参)、形参类型;函数体一般包括说明部分和执行部分。函数结构如下:

函数类型函数名(形参表)

{↓

说明部分:函数体执行部分;↑

﹜函数体以左花括号“{”开始,以右花括号“}”结束,其间可以有说明部分和执行部分。在某些情况下,甚至可以既无说明部分,也无执行部分。如:dump(){}它是一个空函数,表示什么也不做,但它是合法的任务1.2认识C语言通过以上三个例子,我们可12任务1.2认识C语言3、一个C程序中,不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后头,或在一些函数之前,或在另一些函数之后),但程序执行时,总是从main函数开始执行。4、C程序书写格式自由,一行中可以书写多个语句,一个语句也可以书写在连续的多行上。当一行写不下时,用连字符“-”连接,并且每条语句的后面以分号“;”作为结束标记。5、C语言本身没有输入输出语句。C语言的函数库提供了标准输入输出函数。6、可以用/*······*\对C程序中的任何一部分做注释,以增加程序的可读性。任务1.2认识C语言3、一个C程序中,不论13任务1.3C程序的执行过程C语言程序是一种编译型的中级语言。用C语言编写的源程序必须先进行编译和连接,生成可执行的程序之后才能执行。执行一个C语言程序一般经过如下几个步骤。1、编辑2、编译3、连接4、运行C语言程序的开发是一个由编辑开始,经过编译、连接和运行,程序如果有错误,又回到编辑的反复循环过程,如图所示。任务1.3C程序的执行过程C语言程序是一种14项目2数据类型、运算符与表达式1项目导读项目目标项目任务项目2数据类型、运算符与表达式1项目导读15

C语言中,为解决具体问题,需要采用多种类型的数据;本项目将主要介绍C语言的数据类型、常用运算符和表达式。项目导读●学会声明整型变量,为声明的变量赋值,交换变量的值,输出变量的值。●学会声明浮点型变量,为声明的浮点型变量赋值,对浮点型变量值进行加法运算,并将运算结果存放到浮点型变量中,输出浮点型变量的值。●学会声明字符型变量,为声明的字符型变量赋值,按%d或%c格式输出变量的值。项目目标C语言中,为解决具体问题,需要采用多种类型的数据16任务2.1常量、变量和标示符2.1.1标识符在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。简单地说,标识符就是一个对象的名字。

C语言规定标识符只能由字母、数字和下划线组成,且第1个字符必须为字母或下划线。下面列出的是合法的标识符,可以作为变量名:

Sum,average,_total,Class,day,month,Student_name,lotus_1_2_3,BASIC,li_ling.

下面是不合法的标识符和变量名:M.D.John,¥123,#33,3D64,a>b注意:编译系统将大写字母和小写字母认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。同样,Class和class也是两个不同的变量名。通常,变量名用小写字母表示,习惯用对应的英文字母缩写形式,做到见名知意,与人们日常习惯一致,以增加可读性。任务2.1常量、变量和标示符2.1.1标识符17任务2.1常量、变量和标示符2.1.2常量和变量1、常量

在程序运行过程中,其值不能被改变的量称为常量。如案例2.1程序中的5,9,32和案例2.2程序中的1000,0.0036,0.0225,0.0198都是常量。数值常量就是数学中的常数。常用的常量有以下几类:⑴整型常量。如1000,12345,0,-345等都是整型常量。⑵实型常量。有两种表现形式:①十进制小数形式,由数字和小数点组成。如122.456,0.345,-55.79,0.0,12.0等。②指数形式,如12.34e3(代表12.34×103),-345.87e-25(代表-345.87×10-25),0.145E25(代表0.145×10-25)等。由于在计算机输入或输出时,无法表示上标或下标,故规定以字母e或E代表以10为底的指数。但应注意:e或E之前必须有数字,且e或E后面必须为整数。如不能写成e4,12e2.5。任务2.1常量、变量和标示符2.1.2常量和变量18任务2.1常量、变量和标示符⑶字符常量。有两种形式的字符常量:①普通字符,用单撇号括起来的一个字符,如‘a’,‘Z’,‘3’,‘?’,‘#’。

注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。‘a’和‘A’是不同的字符常量。字符常量存储在计算机存储单元中时,并不是存储字符(如a,z,#等)本身,而是以其代码(一般采用ASCII代码)存储的,例如字符‘A’的ASCII话代码是97,因此,在存储单元中存放的是97(以二进制形式存放)。ASCII字符与代码对照表见附录Ⅰ。

②转义字符,除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以字符﹨开头的字符序列。例如,前面已经遇到过的,在printf函数中的‘﹨n’它代表一个“换行”符。常用的以“﹨”开头的特殊字符见表2.1任务2.1常量、变量和标示符⑶字符常量。19任务2.1常量、变量和标示符表2.1任务2.1常量、变量和标示符表2.120任务2.1常量、变量和标示符⑷字符串常量。如“boy”,“123”等,用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符(但不包括双撇号本身)。注意不能错写成‘CHINA’,‘boy’,‘123’。单撇号内只能包含一个字符,双撇号内可以包含一个字符串。⑸符号常量。用#define指令,指定用一个符号名称代表一个常量。如:#definePI3.1416∥注意行末没有分号经过以上的指定后,本文件中从此行开始所有的PI都代表3.1416。在对程序进行编译前,预处理器先对PI进行处理,把所有的PI全部置换为3.1416。这种用一个符号名代表一个常量的,称为符号常量。在预编译后,符号常量全部变成字面常量(3.14159)。使用符号常量有以下好处。

①含义清楚。

②在需要改变程序中多处用到的同一个常量时,能做到“一改全改”。

任务2.1常量、变量和标示符⑷字符串常量21任务2.1常量、变量和标示符

2、变量变量代表一个有名字的、具有特定属性的存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值这两个不同的概念,图2.1中a是变量名,3是变量a的值,即存放在变量a的内存单元中的数据。变量名的实质是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该储存单元中读取数据。图2.1任务2.1常量、变量和标示符2、变量图2.22任务2.1常量、变量和标示符

3、常变量如constinta=3表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。常变量与常量的异同是:常变量具有变量的基本属性,有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量,有名字就便于在程序中被引用。任务2.1常量、变量和标示符3、常变量23任务2.2数据类型在定义变量时需要指定变量的类型。C语言要求在定义所有的变量时都要指定变量的类型。常量也是区分类型的。所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。C语言允许使用的类型见图2.2。图2.2任务2.2数据类型在定义变量时需要指定变量的24任务2.2数据类型

2.2.1整型数据

1、整型数据的分类

⑴基本整型(int型)编译系统为int型数据分配2个字节或4个字节(有具体的C编译系统自行决定)。如Turbo C2.0为每一个整型数据分配2个字节(16个二进位),而VisualC++为每一个整型数据分配4个字节(32位)。在存储单元中的存储方式是:用整数的补码(complement)形式存放。5的补码-5的补码任务2.2数据类型2.2.1整型数据5的补码-5的补25任务2.2数据类型⑵短整型(shortint)

类型名为shortint或short。如用VisualC++5.0,编译系统分配给int数据4个字节,短整型2个字节。存储方式与int型相同。一个短整型变量的值的范围是-32768~32767。⑶长整型(longint)

类型名为longint或long。一个longint型变量的值的范围是-231~(231-1),即-2147483648~2147483647(VisualC++5.0),编译系统分配给long数据4个字节。⑷双长整型(longlongint)或longlong,一般分配8个字节。说明:C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的。C标准只要求long型数据长度不短于int型,short型不长于int型。即

Sizeof(short)≦sizeof(int)≦sizeof(longlong)Sizeof是测量类型或变量长度的运算符。任务2.2数据类型⑵短整型(short26任务2.2数据类型

2、整型变量的符号属性

以上介绍的几种类型,变量值在存储单元中都是以补码形式存储的,存储单元中的第1个二进位制代表符号。整型变量的值的范围包括负数到正数(见表2.2)。表2.2整型数据常见的存储空间和值的范围任务2.2数据类型2、整型变量的符号属性27任务2.2数据类型

在实际应用中,有的数据的范围常常只有正值(如学号、年龄、库存量、存款额等)。为了充分利用变量的值的范围,可以将变量定义为“无符号”类型。可以在类型符号前面加上修饰符unsigned,表示指定该变量是“无符号整数”类型。如果加上修饰符signed,则是“有符号”类型。因此,在以上4种整型数据的基础上可以扩展为以下8种整型数据。即有符号基本整型[signed]int;

无符号基本整型unsignedint;

有符号短整型[signed]short[int];

无符号短整型unsignedshort[int];

有符号长整型[signed]long[int];

无符号长整型unsignedlong[int];

有符号双长整型[signed]longlong[int];

无符号双长整型unsignedlonglong[int];以上方括号表示其中的内容是可选的,既可以有,也可以没有。如果既未指定为signed也未指定为unsigned的,默认为“有符号类型”。如signedinta和inta等价。任务2.2数据类型在实际应用中,有的数据28任务2.2数据类型2.2.2字符型数据1.字符与字符代码字符与字符代码并不是任意写一个字符,程序都能识别的。例如圆周率π在程序中是不能识别的,只能使用系统的字符集中的字符,目前大多数系统采用ASCII字符集。各种字符集(包括ASCII字符集)的基本集都包括了127个字符。其中包括:●字母:大写英文字母A~Z,小写英文字母a~z。●数字:0~9。●专门符号:29个:!”#&‘()*+,-·∕:;﹤=﹥?[﹨]^-{|}~●空格符:空格、水平制表符(tab)、换行、换页(formfeed)。●不能显示的字符:空(null)字符(以‘﹨0’表示)、警告(以‘﹨a’表示)、退格(以‘﹨b’表示)、回车(以‘﹨r’表示)等。任务2.2数据类型2.2.2字符型数据29任务2.2数据类型

2、字符变量字符变量使用类型符char定义字符变量。Char是英文character(字符)的缩写,见名即可知意。如:charc=;‘?’

定义c为字符型变量并使初值为字符‘?’。‘?’的ASCII代码是63,系统把整数63赋给变量c。c是字符变量,实质上是一个字节的整形变量,由于它常用来存放字符。所以称为字符变量。可以把0~127之间的整数赋给一个字符变量。在输出字符变量的值时,可以选择以十进制整数形式输出,或以字符形式输出。如:

printf(“%d%c﹨n”,c,c);输出结果是:63?用“%d”格式输出十进制整数63,用%c格式用字符形式输出字符‘?’。任务2.2数据类型2、字符变量30任务2.2数据类型2.2.3浮点型数据

浮点型数据是用来表示具有小数点的实数的。浮点数类型包括float(单精度浮点型)、double(双精度浮点型)、longdouble(长双精度浮点型)。(1)float型(单精度浮点型)。编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数值形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0.如3.14159在内存中的存放形式可以用图2.9表示。图2.9任务2.2数据类型2.2.3浮点型数据图2.931任务2.2数据类型

⑵double型(双精度浮点型)。为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字,数值范围为-1.7×10-308~1.7×10308。在C语言中进行浮点数的算术运算时,将float型数据都自动转换为double型,然后进行运算。⑶longdouble型(长双精度)型,不同的编译系统对longdouble型的处理方法不同,TurboC对longdouble型分配16个字节。而VisualC++6.0则对longdouble型和double型一样处理,分配8个字节。请读者在使用不同的编译系统时注意其差别。表2.4列出实型数据的有关情况表2.4任务2.2数据类型⑵double型(双精32任务2.3运算符和表达式2.3.1基本的算术运算符表2.5最常用的算术运算符

任务2.3运算符和表达式2.3.1基本的算术运算符表233任务2.3运算符和表达式2.3.2自增、自减运算符

作用是使变量的值加1或减1,例如:

++i,--i(在使用i之前,先使i的值加(减)1)i++,

i--(在使用i之后,使i的值加(减)1)粗略地看,++i和i++的作用相当于i=i+1。但++i和i++的不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。如果i的原值等于3,请分析下面的赋值语句:j=++i;(i的值先变成4,再赋给j,j的值为4)j=i++;(先将i的值3赋给j,j的值为3,然后i变为4)又例如:i=3;printf(“%d”,i++);输出4。若改为Printf(“%d﹨n”,i++);则输出3。任务2.3运算符和表达式2.3.2自增、自减运算符34任务2.3运算符和表达式2.3.3算术表达式和运算符的优先级与结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。例如,下面是一个合法的C算术表达式:a*b∕c-1.5+‘a’C语言除了规定了运算符的优先级外,还规定了运算符的结合性。在表达式求值时,先按运算符的优先级别顺序执行,例如先乘除后加减。如表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先级高于减号,因此,相当于a-(b*c)。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向都是“自左至右”,及先左后右,因此b先与减号结合,执行a-b的运算,然后再执行加c的运算。“自左至右的结合方向”又称“左结合性”,即运算对象先于左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”,即右结合性(例如,赋值运算符,若有a=b=c,按从右到左顺序,先把变量c的值赋给变量b,然后把变量b的值赋给变量a)。

任务2.3运算符和表达式2.3.3算术表达式和运算符的35任务2.3运算符和表达式2.3.4不同类型数据间的混合运算在程序中经常会遇到不同类型的数据进行运算,如5*3.5。如果一个运算符的两侧的数据类型不同,则先自动进行类型转换,使二者具有同一种类型,然后进行运算。因此整型、实型、字符型数据间可以进行混合运算。规律为:(1)+、-、*、∕运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转换为double型,然后进行运算。(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后再进行运算,结果是double型。(3)字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。如:12+‘A’,由于字符A的ASCII代码是65,相当于12+65,等于77。字符数据可以直接与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算。任务2.3运算符和表达式2.3.4不同类型数据间的混36任务2.3运算符和表达式示例2.1编程:给定一个大写字母,要求用小写字母输出。

编写程序:#include﹤stdio.h>intmain(){charc1,c2;c1=‘A’∥将字符‘A’的ASCII代码放到c1变量中c2=c1+32;∥得到字符‘a’的ASCII代码,放在c2变量中printf(“%c﹨n”,c2);∥输出c2的值,是一个字符printf(“%d﹨n”,c2);∥输出c2的值,是字符‘a’的ASCII代码reurn0}运行结果:

a97任务2.3运算符和表达式示例2.1编程:给37任务2.3运算符和表达式2.3.6C运算符

除了算术运算符外,C还提供其他运算符,共有以下几类:⑴关系运算符(﹥﹤==﹥=﹤=!=)⑵逻辑运算符(!&&||)

⑶位运算符(﹤﹤﹥﹥~|^&)⑷赋值运算符(=及其扩展赋值运算符)⑸条件运算符(?:)⑹逗号运算符(,)⑺指针运算符(*和&)⑻求字节数运算符(sizeof)⑼强制类型转换运算符((类型))⑽成员运算符(-﹥)

⑾下标运算符([])

⑿其他(如函数调用运算符())任务2.3运算符和表达式2.3.6C运算符38任务2.3运算符和表达式2.3.5强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。例如:(double)a(将a转换成double类型)(int)(x+y)(将x+y的值转换成int型)(float)(5%3)(将5%3的值转换成float型)其一般形式为

(类型名)(表达式)

注意,表达式应该用括号括起来。如果写成(int)x+y则只将x转换成整型,然后与y相加。需要说明的是,在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。例如:a=(int)x如果已定义x为float型变量,a为整型变量,进行强制类型运算(int)x后得到一个int类型的临时值,它的值等于x的整数部分,把它赋给a,注意x的值和类型都未变化,仍为float型。该临时值在赋值后就不存在了。任务2.3运算符和表达式2.3.5强制类型转换运算符39任务2.4赋值语句在C程序中,最常用的语句是:赋值语句和输入输出语句。其中最基本的是赋值语句。程序中的计算功能大部分是由赋值语句实现的,几乎每一个有实用价值的程序都包括赋值语句。有的程序中的大部分语句都是赋值语句。先分析一个例子。给出三角形的三边长,求三角形面积。解题思路:假设给定的三个边符合构成三角形的条件:任意两边之和大于第三边。解此题的关键是要找到求三角形面积的公式。从数学知识已知求三角形面积的公式为:其中s=(a+b+c)∕2。任务2.4赋值语句在C程序中,最常用的语句40任务2.4赋值语句

编写程序:根据上面的公式编写程序如下:#include﹤stdio.h﹥#include﹤math.h﹥intmain(){doublea,b,c,s,area;∥定义各变量,均为double型a=2.67;∥对边长a赋值b=4.43;∥对边长b赋值c=5.21;∥对边长c赋值s=(a+b+c)/2;∥计算sarea=sqrt(s*(s-a)*(s-b)*(s-c));∥计算areaprintf(“a=%f﹨tb=%f﹨t%f﹨n”,a,b,c);∥输出三边a,b,c的值printf(“area=%f﹨n”,area);∥输出面积area的值return0;}运行结果:a=2.670000b=4.4300005.210000area=8.903431任务2.4赋值语句编写程序:根据上面的公41任务2.4赋值语句

2.4.1赋值运算符赋值符号=就是赋值运算符,它的作用是将一个数据赋给一个变量。如a=3的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。2.4.2复合的赋值运算符在赋值符=之前加上其它运算符,可以构成复合的运算符。如果在“=”前加一个“+”运算符就成了复合运算符“+=”。例如可以有以下的复合赋值运算:

a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3

以“a+=3”为例来说明,它相当于使a进行一次自加3的操作。即:先使a加3,再赋给a。同样,“x*=y+8”的作用是使x乘以(y+8),再赋给x。任务2.4赋值语句2.4.1赋值运算符42任务2.4赋值语句

2.4.3赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的一般形式为变量赋值运算符表达式赋值表达式的作用是将一个表达式的值赋给一个变量,因此赋值表达式具有计算和赋值的双重功能。如a=3*5是一个赋值表达式。对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。既然是一个表达式,就应该有一个值。赋值表达式a=3*5的值为15,对表达式求解后,变量a的值和表达式的值都是15。2.4.4赋值过程中的类型转换如果赋值运算符两侧的类型一致,则直接进行赋值。如:

i=234;∥设已定义i为整型变量此时直接将整数234存入变量i的存储单元中。如果赋值运算符两侧的类型不一致,但都是算术类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的。任务2.4赋值语句2.4.3赋值表达式43任务2.4赋值语句

2.4.5赋值表达式和赋值语句

在C程序中,赋值语句是用的最多的语句。在任务1的C语句分类中,并没有看到赋值语句,实际上,C语言的赋值语句属于表达式语句,由一个赋值表达式加一个分号组成。

注意:要区分赋值表达式和赋值语句。赋值表达式的末尾没有分号,而赋值语句的末尾必须有分号。在一个表达式中可以包含一个或多个赋值表达式,但绝不能包含赋值语句。

2.4.6变量赋初值可以用赋值语句对变量赋值,也可以在定义变量时对变量赋以初值。这样可以使程序简练。如:

inta=3;∥定义a为整型变量,初值为3floatf=2.56;∥定义f为浮点型变量初值为2.56charc=‘a’∥定义c为字符变量,初值为‘a’任务2.4赋值语句2.4.5赋值表达式和赋值语句44项目3顺序结构程序设计1项目导读项目目标项目任务项目3顺序结构程序设计1项目导读45在项目2中介绍了C程序中用到的一些基本要素,如常量、变量、运算符、表达式等。本项目将介绍编写简单的C程序所必需的一些内容。项目导读●使用scanf函数从键盘为变量输入值。●使用printf函数输出数据。●能编写简单的C程序的源文件,并运行程序。思考项目目标在项目2中介绍了C程序中用到的一些基本要素,如46任务3.1顺序程序设计举例示例3.1用温度计测量出用华氏法表示的温度(如69°F),今要求把它转换为以摄氏法表示的温度(如20℃)。解题思路:这个问题的算法很简单,关键在于找到二者之间的转换公式。根据物理学知识,知道以下转换公式:

c=5/9(f-32)其中f代表华氏温度,c代表摄氏温度。据此可以用N-S图表示算法,见图3.1。图3.1算法由3个步骤组成,这是一个简单的顺序结构。编写程序:有了N-S图,很容易用C语言表示,写出求此问题的C程序。任务3.1顺序程序设计举例示例3.147任务3.1顺序程序设计举例

#include〈stdio.h〉intmain(){floatf,c;∥定义f和c为单精度浮点型变量

f=63.0;∥定义f的值

c=(5/9)*(f-32);∥利用公式计算c的值

printf(“f=%﹨nc=%﹨n”,f,c);∥输出c的值

return0;

}

运行结果:

f=63.000000c=16.777778任务3.1顺序程序设计举例#incl48任务3.1顺序程序设计举例示例3.2

计算存款利息。有1000元,想存一年。有三种方法可选:⑴活期,年利率为r1;⑵一年期定期,年利率为r2;⑶存两次半年定期,年利率为r3。请分别计算出一年后按三种方法所得到的本息和。解题思路:关键是确定计算本息和的公式。从数学知识可知,若存款额为p0,则:活期存款一年后本息和为p1=p0(1+r1)。一年期定期存款,一年后本息和为p2=p0(1+r2)。两次半年定期存款,一年后本息和为p3=p0(1+r3/2)(1+r3/2)。画出N-S流程图,见图3.2。图3.2任务3.1顺序程序设计举例示例3.2计49任务3.1顺序程序设计举例

#include〈stdio.h〉intmain(){floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;∥定义变量p1=p0*(1+r1);∥计算活期本息和p2=p0*(1+r2);∥计算一年定期本息和p3=p0*(1+r3/2)*(1+r3/2);∥计算存两次半年定期的本息和

printf(“p1=%f﹨np2=%fnp3=%f﹨n”,p1,p2,p3);∥输出结果

return0;}运行结果:P1=1002.599976P2=1022.500000P3=1018.898010任务3.1顺序程序设计举例#inclu50任务3.2C语句概述

C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的,C程序主要包含表达式语句、函数调用语句、控制语句、复合语句和空语句,其中控制语句包含多种情况,本任务将分别进行介绍。C程序结构可以用图3.3表示。即一个C程序可以由若干个源程序文件(编译时以文件模块为单位)组成,一个源文件可以由若干个函数和预处理指令以及全局变量声明部分组成(关于“全局变量”见项目7)。一个函数由数据声明部分和执行语句组成。图3.3任务3.2C语句概述C程序的执行部分是由语51任务3.2C语句概述

C语句分为以下5类:(1)控制语句。控制语句用于完成一定的控制功能。C语句只有9种控制语句,它们的形式是:①if()…else…(条件语句)②for()…(循环语句)③while()…(循环语句)④do…while()(循环语句)⑤continue(结束本次循环语句)⑥break(中断执行switch或循环语句)⑦switch(多分支选择语句)⑧return(从函数返回语句)⑨goto(转向语句,在结构化程序中基本不用goto语句)

上面9种语句表示形式中的()表示括号中是一个“判别条件”,“…”表示内嵌的语句。例如上面的“if()…else…”的具体语句可以写成:

if(x﹥y)z=x;elsez=y;任务3.2C语句概述C语句分为以下5类:52任务3.2C语句概述

(2)函数调用语句。函数调用语句由一个函数调用加一个分号构成,例如:printf(“Thisisacstatement.”);其中printf(“Thisisacstatement.”)是一个函数调用,加一个分号成为一个语句。⑶表达式语句。表达式语句由一个表达式加一个分号构成,最典型的是,有赋值表达式构成一个赋值语句。例如:

a=3是一个赋值表达式,而

a=3;是一个赋值语句。⑷空语句。下面是一个空语句:;此语句只有一个分号,它什么也不做。那么它有什么用呢?可以用来作为流程的转向点(流程从程序其他地方转到此语句处),也可以用来作为循环语句中的循环体(循环体是空语句,表示循环体什么也不做)。任务3.2C语句概述(2)函数调用语句53任务3.2C语句概述

⑸复合语句。可以用{}把一些语句和声明括起来成为复合语句(又称语句块)。例如下面是一个复合语句:{floatpi=2.14159,r=2.5,area;∥定义变量area=pi*r*r;printf(“area=%f”,area);}

可以在复合语句中包含声明部分(如上面的第2行),C99允许将声明部分放在复合语句中的任何位置,但习惯上把它放在语句块开头位置。复合语句常用在if语句或循环中,此时程序需要连续执行一组数据。

注意:复合语句中最后一个语句中最后的分号不能忽略不写。C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求任务3.2C语句概述⑸复合语句。可以用54任务3.3数据的输入/输出3.3.1输入输出举例

案例3.3求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac≧0。解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果b2-4ac≧0,则一元二次方程有两个实根:

,可以将上面的分式分为两项:

,则x1=p+q,x2=p-q有了这些式子,只要知道a,b,c的值,就能顺利的求出方程的两个根。任务3.3数据的输入/输出3.3.1输入输出举例55任务3.3数据的输入/输出

#include<stdio.h>#include<math.h>∥程序重要调用求平方根函数sqrtintmain(

)

{doublea,b,c,disc,x1,x2,p,q;∥disc用来存放判别式(b*b-4ac)的值scanf(“%1f%1f%1f”,&a,&b,&c);∥输入双精度变量型的值要用格式声明“%1f”disc=b*b-4*a*c;p=-b∕(2.0*a);q=sqrt(disc)∕(2.0*a);x1=p+q;x2=p-q;∥求出方程的两个根printf(“x1=%6.2f﹨nx2=%6.2f﹨n”,x1,x2);∥输出方程的两个根return0;}运行结果:132X1=-1.00X2=-2.00任务3.3数据的输入/输出#includ56任务3.3数据的输入/输出3.3.2有关数据输入输出的概念从前面的程序可以看到:几乎每一个C程序都包含输入输出。因为要进行运算,就必须给出数据,而运算的结果当然需要输出,以便人们应用。没有输出的程序是没有意义的。输入输出是程序中最基本的操作之一。在讨论程序的输入输出时首先要注意以下几点。⑴所谓输入输出是以计算机主机为主体而言的。⑵C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。⑶在使用系统库函数时,要在程序文件的开头用预处理指令#include把有关头文件放在本程序中如:#include<stdio.h>

注意:应养成这样的习惯:只要在本程序文件中使用标准输入输出库函数时,一律加上#include<stdio.h>指令。任务3.3数据的输入/输出3.3.2有关数据输入输出的概57任务3.3数据的输入/输出3.3.3用printf函数输出数据在C程序中用来实现输出和输入的,主要是printf函数和scanf函数。这两个函数是格式输入输出函数。用到两个函数时,程序设计人员必须制定输入输出数据的格式,即根据数据的不同类型指定不同的格式。1、printf函数的一般格式printf函数的一般格式为printf(格式控制,输出表列)例如:printf(“%d,%c﹨n”,i,c)2、格式字符

(1)d格式字符。用来输出一个有符号的十进制整数。可以在格式声明中指定输出数据的域宽(所占的列数),如用“%5d”,指定输出数据占5列,输出的数据显示在此5列区域的右侧。如:printf(“%5d﹨n%5d﹨n”,12,-345);输出结果为12(12前面有3个空格)-345(-345前面有1个空格)

任务3.3数据的输入/输出3.3.3用printf函数输58任务3.3数据的输入/输出

(2)c格式符。用来输出一个字符。例如;charch=‘a’;printf(“%c”,ch);运行时输出a

一个整数,如果在0~127范围中,也可以用“%c”使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;如:shorta=121;printf(“%c”,a);输出字符y。(3)s格式符。用来输出一个字符串。如:printf(“%s”,“CHINA”);

执行此函数时在显示屏上输出字符串“CHINA”(不包括双引号)。任务3.3数据的输入/输出(2)c格式符59任务3.3数据的输入/输出

(4)f格式符。用来输出实数(包括单、双精度、长双精度)。以小数形式输出,有几种用法:① 基本型,用%f。不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位。示例3.4

用%f输出实数,只能得到6位小数。#include<stdio.h>intmain(){doublea=1.0;printf(“%f﹨n”,a∕3);return0;}运行结果:0.333333虽然a是双精度型,a∕3的结果也是双精度型,但是用%f格式声明只能输出6位小数。任务3.3数据的输入/输出(4)f格式60任务3.3数据的输入/输出

②指定数据宽度和小数位数,用%m.nf。如果想在示例3.4输出双精度变量a的15位小数,可以采用案例3.3所用的方法,用“%20.15f﹨n”,a/3)运行结果:0.333333333333333

注意:在用%f输出时要注意数据本身能提供的有效数字,如float型数据的存储单元只能保证6位有效数字。double型数据能保证15位有效数字。不要以为计算机输出的所有数字都是绝对精确有效的。③输出的数据向左对齐,用%-m.nf。在m.n的前面加一个负号,其作用与%m.nf形式作用基本相同,但当数据长度不超过m时,数据向左靠,右端补空格。如:printf(“%-24.15f,%24.15f﹨n”,a,a);运行结果:3332.3333333333335003332.333333333333500第1次输出a时输出结果向左端靠,右端空5列。第2次输出a使输出结果向右端靠,左端空5列。任务3.3数据的输入/输出②指定数据宽61任务3.3数据的输入/输出

(5)e格式符。用格式声明%e指定以指数形式输出实数。例如:printf(“%e”,122.456);输出如下:1.234560e+002所输出的实数共占13列宽度(注:不同系统的规定略有不同)。也可以用“%m.ne”形式的格式声明,如:printf(“%12.2e”,122.456);输出为1.23e+002(数的前面有4个空格)格式符e也可以写成大写E形式,因此输出的数据中的指数不是以小写字母e表示而以大写字母E表示,如1.23460E+002。任务3.3数据的输入/输出(5)e格式62任务3.3数据的输入/输出表3.1printf函数中用到的格式字符

任务3.3数据的输入/输出表3.1printf函数中用到63任务3.3数据的输入/输出3.3.4scanf函数输入数据1.scanf函数的一般形式

scanf(格式控制,地址表列)“格式控制”的含义同printf函数。“地址表列”是由若干个地址组成的的表列,可以是变量的地址,或字符串的首地址。2.scanf函数中的格式声明与printf函数中的格式声明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。表3-4scanf函数中用到的格式附加字符

任务3.3数据的输入/输出3.3.4scanf函数输入数64任务3.3数据的输入/输出表3-3scanf函数中所用到的格式字符

任务3.3数据的输入/输出表3-3scanf函数中所用到65任务3.3数据的输入/输出3.3.5字符数据的输入输出除了可以用printf函数和scanf函数输出和输入字符外,C函数库还提供了一些专门用于输入和输出字符的函数。⒈用putchar函数输出一个字符

putchar函数的一般形式为

putchar(c)示例3.6

先后输出BOY三个字符。解题思路:定义3个变量,分别赋以初值‘B’,‘O’,‘Y’,然后用putchar函数输出这3个字符变量的值。任务3.3数据的输入/输出3.3.5字符数据的输入输出66任务3.3数据的输入/输出

#include<stdio.h>intmain(){chara=‘B’,b=‘O’,c=‘Y’;∥定义3个字符变量并初始化putchar(a);∥向显示器输出字符Bputchar(b);∥向显示器输出字符Oputchar(c);∥向显示器输出字符Yputchar(‘﹨n’);∥向显示器输出一个换行符return0;}运行结果:BOY连续输出B,O,Y3个字符,然后换行。任务3.3数据的输入/输出#includ67任务3.3数据的输入/输出

⒉用getchar函数输入一个字符

为了向计算机输入一个字符,可以调用系统函数库中的getchar函数(字符输入函数)。getchar函数的一般形式为

getchar()示例3.7

从键盘输入BOY3个字符,然后把它们输出到屏幕。解题思路:用3个getchar函数先后从键盘向计算机输入BOY3个字符,然后用putchar函数输出。任务3.3数据的输入/输出⒉用getc68任务3.3数据的输入/输出

#include<stdio.h>intmain(){chara,b,c;∥定义字符变量a,b,ca=getchar();∥从键盘输入一个字符,送给字符变量ab=getchar();∥从键盘输入一个字符,送给字符变量bc=getchar();∥从键盘输入一个字符,送给字符变量cputchar(a);∥将变量a的值输出putchar(b);∥将变量b的值输出putchar(c);∥将变量c的值输出putchar(‘﹨n’);∥换行return0;}运行结果:BOYBOY任务3.3数据的输入/输出#includ69任务3.4顺序结构的程序设计示例3.9输入三角形的三边长,求三角形面积。为简单起见,设输入的三边长a,b,c能构成三角形。从数学知识已知三角形的面积的公式为

其中s=(a+b+c)∕2据此编写程序如下;

#include<math.h>main(){floata,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0∕2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%6.2f,b=%6.2f,c=%6.2f,s=%6.2f\n”,a,b,c);printf(“area=%6.2f\n”,area);}任务3.4顺序结构的程序设计示例3.970任务3.4顺序结构的程序设计示例3.10从键盘输入一个大写字母,要求改用小写字母输出。

#include<stdio.h>main(){charc1,c2;

c1=getchar();printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}

运行情况如下;

A↙A,65a,97任务3.4顺序结构的程序设计示例3.1071项目4选择结构程序设计1项目导读项目目标项目任务项目4选择结构程序设计1项目导读72选择结构是三种基本结构之一,在大多数程序中都会包含选择结构。本项目将介绍如何用C语言编写含选择结构的程序。项目导读●了解if和if-else语句的用法以及了解多重条件下if语句的嵌套使用。●掌握switch开关语句的用法。●熟悉条件运算符的使用。思考项目目标选择结构是三种基本结构之一,在大多数程序中都73任务4.1if语句4.1.1

选择结构简介

选择结构体现了程序的判断能力。在程序执行过程中能依据运行时某些变量的值确定某些操作是否执行,或者确定若干个操作中选择哪个操作执行,这种程序结构称为选择结构,又称为分支结构。C语言提供了两种分支语句:if条件语句和switch多分支选择语句用于实现选择程序的设计,其中,if语句又分三种结构。在程序设计过程中,根据各语句的结构特点,灵活应用。任务4.1if语句4.1.1选择结构简介74任务4.1if语句4.1.2

简单的if语句

if结构是一种常用的分支结构,用它可以构成复杂的判断选择。if语句是最简单的一种单分支结构,其一般形式为:

if(<表达式>)<语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论