版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学计算机学院授课教师:王红霞C语言程序设计2/4/20231选用教材与参考书主教科书
顾治华、陈天煌等
《C语言程序设计》
机械工业出版社
2007.2参考教材顾治华、陈天煌等《C语言程序设计实验指导》
机械工业出版社2007.2参考书谭浩强《C语言程序设计》清华大学出版社2/4/20232课程内容第一章C语言程序设计概述
第二章算法及算法设计简介
第三章数据描述与基本操作第四章选择结构程序设计
第五章循环结构程序设计
第六章数组与指针第七章函数与模块化程序设计方法2/4/20233第一章C语言程序设计基础1.1程序与程序设计1.2C语言简介1.3简单的C语言程序1.4C语言程序的上机步骤1.5C语言的基本词法1.6C语言程序的基本结构2/4/20234程序与计算机语言程序是存放在计算机中的操作指令的集合。用程序设计语言安排好的处理问题的步骤称为计算机程序用程序设计语言编制一个能完成某项任务的计算机程序的过程叫做计算机程序设计。程序设计=数据结构+算法+程序设计方法+编程语言程序设计的关键:必须掌握一种程序设计语言。掌握程序设计的逻辑思维。2/4/20235
程序设计过程(1)问题的提出,要达到的要求;(2)确定数据结构和所采用的算法;(3)编制程序;(4)调试程序;(5)整理并写出文档;2/4/20236C语言的特点(1)语言简洁、紧凑,使用方便、灵活。C语言一共只有
32个关键字,主要用小写字母表示。
(2)
比其他高级语言更接近硬件,比低级语言更接近算法。程序易编、易读、易查错、易修改,兼有高级语言和低级语言的优点。(3)
数据类型和运算符十分丰富,程序设计和算法描述更为简单和方便。(4)语法结构十分简单,语句数目少,简单易学。2/4/20237
(6)它是一种模块化的程序设计语言,适合大型软件的研制和调试。
(5)它是一种结构化程序设计语言,提供了完整的程序控制语句(选择语句和循环语句),很适合结构化的程序设计方法。
(7)生成目标代码质量高,程序执行效率高。
(8)用c语言写的程序可移植性好。
(9)它提供了大量的库函数以供调用,简化了程序设计工作。2/4/20238
C语言程序的结构
C语言是结构化的程序设计语言。C语言是模块化的程序设计语言,程序是由函数构成的。一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数。因此,函数是C程序的基本单位。一个函数由两部分组成:
①函数的首部,函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。
②函数体,即函数首部下面的大括弧{…..}内的部分。如果一个函数内有多个括弧,则最外层的一对{}为函数的范围。函数体一般包括:声明部分:在这部分中定义所用到的变量。执行部分:由若干个语句组成。2/4/20239(4)一个C程序总是从main函数开始的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前,在另一些函数之后)。(5)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。(6)每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。分号不可少。(7)C语言本身没有输入输出语句。输入输出的操作是由库函数scanf和printf等函数来完成的。(8)可以用/*……*/对C程序中的任何部分作注释。2/4/202310简单的C语言程序示例例一
main(){printf(“ThisisaCprogram.\n”);}
本程序的作用是输出以下一行信息:
ThisisaCprogram.2/4/202311例二main(){inta,b,sum;/*这是定义变量*/a=123;b=456;/*以下3行为C语句*/sum=a+b;printf(“sumis%d\n”,sum);}程序的运行结果:Sumis5792/4/202312例三/*example1.3输入两个数,求其中较大的数*/#include<stdio.h>int
max(int
x,inty)/*被调用函数*/{
int
z;if(x>y)z=x;
elsez=y;
return(z);
/*将z的值返回,通过max带回调用处*/}main()/*主函数*/{
int
a,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);}运行结果:4,6↙max=62/4/202313C程序的上机步骤
开始编辑编译有错?执行连接结果正确结束可执行目标程序f.exe源程序f.c目标程序f.obj库函数和其他目标程序YesNoYesNo2/4/202314C语言的基本词法-标识符定义:在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余的都由用户自己定义。命名规则:标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。例如:以下标识符是合法的:
a,x,x3,BOOK_1,sum5,_x7。以下标识符是非法的:
3s,s*T,-3x,bowy-1,M.D.John,a>b。2/4/202315(1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。TurboC规定标识符的长度为32。一般情况下,标识符的长度不要超过8个字符。(2)在标识符中,大小写是有区别的。例如SUM和sum是两个不同的标识符。变量名应尽量使用小写字母,以增加程序的可读性。(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,做到“顾名思义”。在C语言中,所有的变量都是先定义后应用,使用没有定义的变量名被认为是“非法”的。
在使用标识符时还必须注意以下几点:2/4/202316C语言的基本词法-关键字定义:关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应该与关键字相同。分类:C语言的关键字分为以下3类:(1)类型说明符用于定义和说明变量、函数或其它数据结构的类型。如int,double,float,long,short,auto,signed,static,struct,unsigned,char,enum,extern,register和union等。2/4/202317(2)语句定义符用于表示一个语句的功能。如条件语句的语句定义符ifelse,循环语句的语句定义符do,while,for等。(3)预处理命令字用于表示一个预处理命令,使用时前面要加“#”。如include,define,ifdef,endif等。关键字后必须有空格、圆括号、尖括号、双引号等分隔符,否则与其它字符一起组成新的标识符。2/4/202318C语言的基本词法-其它运算符
C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。分隔符
在C语言中采用的分隔符有逗号和空格两种。逗号主要是用在类型说明和函数参数表中分隔各个变量。空格多用于语句各单词之间作间隔符。常量
C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。2/4/202319C语言的字符集
(1)字母小写字母a~z共26个,大写字母A~Z共26个。(2)数字0~9共10个。(3)空格符、制表符、换行符等统称为空白符。(4)标点和特殊字符2/4/202320C语言程序设计的基本结构
(1)顺序结构
ABab2/4/202321(2)选择结构,或称分支结构
此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框abBAp不成立成立2/4/202322
(3)
循环结构,它又称为重复结构,即反复执行某一部分的操作。又两类循环结构:
(a)
当型(while型)循环结构它的功能是判断当前给定的条件p1成立时,执行A框操作,执行完A后,再判断条件p1是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离循环结构。ap1TFAb2/4/202323(b)直到型(Until型)循环结构
它的功能是先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则再执行A,然后再对p2条件作判断,如果p2条件仍然不成立,又执行A‥‥‥如此反复执行A,直到给定的p2条件成立为止,此时不再执行A,从b点脱离本循环结构。aAFTbp22/4/202324本章课堂练习
(1)以下说法中正确的是().A)C语言程序总是从第一个函数开始执行
B)在C语言程序中,要调用的函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分2/4/202325解答:C解释:C语言程序总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须的。2/4/202326(2).以下叙述不正确的是A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面2/4/202327解答:D解释:
凡是用“/*”和“*/”括起来的文字,都是注释。其出现的位置可以任意。2/4/202328(3).下列标识符中,合法的变量名有:A)a.bB)$888C)A1D)
3x562/4/202329解答:C解释:变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。2/4/202330第二章算法及算法设计简介2.1算法的概念2.2算法的设计与表达2.3简单的算法实例2.4结构化程序设计方法简介2/4/202331算法的概念任何一个程序应包含的如下两方面的内容:
(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure).
(2)对操作的描述。即操作步骤,也就是算法(algorithm)。著名计算机科学家沃思(NikiklausWirth)提出公式
数据结构+算法=程序算法:是对解决某个问题的方法步骤的描述。程序:从计算机角度来说,程序是用某种计算机能理解并执行的计算机语言描述解决问题的方法和步骤。2/4/202332实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,可以这样表示:
程序=算法+数据结构+程序设计方法+语言工具和环境
在这4个方面中,算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的算法。算法是解决“做什么”和“怎么做”的问题。2/4/202333算法的表示
1、用自然语言表示算法
采用汉语、英语或其它语言来描述解决问题的方法和步骤。由于自然语言容易出现“歧义性”,且描述问题的文字冗长,因此一般很少使用自然语言来描述算法。
2/4/202334例1:有50个学生,要求将他们之中成绩在80分以上者打印出来。用n表示学号,n1代表第一个学生学号,ni代表第i个学生学号。用g代表学生成绩,gi
代表第i个学生成绩,算法可表示如下:S1:1iS2:读入学号ni和成绩gi
S3:
如果gi
80,则打印ni
和gi
,否则不打印S4:
i+1iS5:如果i50,返回S2,继续执行;否则,算法结束。2/4/202335起止框输入/输出框判断框处理框流程线2、用流程图表示算法(1)常用的流程图符号2/4/202336上例用流程图表示:
(1)
流程图表示算法的优点:①表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系。②简单,易于掌握。
流程图2/4/2023373、用N-S图表示算法
1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框。这种流程图又称N—S结构化流程图。N—S流程图用以下的流程图符号:(1)顺序结构:AB2/4/202338(2)选择结构:P成立不成立AB(3)循环结构:当p1成立A当型循环结构直到p1成立A直到型循环结构用以上3种N—S流程图中的基本框,可以组成复杂的N—S流程图,以表示算法2/4/202339上例用N-S图表示:用N—S表示算法如图1=>i输入ni,gigi≥80是否输出ni,gii+1=>i直到i>502/4/2023404、用伪码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。
例有50个学生,要求将他们之中成绩在80分以上者打印出来。用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生学号。用g表示学生成绩,gi表示第i个学生成绩。2/4/202341BEGIN(算法开始)1=>iWhilei<=50{inputniandgiifgi≥80printniandgii+1=>i}END(算法结束)
用伪代码表示算法如下:2/4/2023425、用计算机语言表示算法
设计算法的目的是为了实现算法。因此,不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。我们的任务是用计算机解题,也就是要用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行(当然还要经过编译成目标程序才能被计算机识别和执行)。因此,在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。2/4/202343例:有50个学生,要求将他们之中成绩在80分以上者打印出来。用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生学号。用g表示学生成绩,gi表示第i个学生成绩。C语言程序如下:main(){intg[50],n[50],i;for(i=0;i<50;i++)scanf(“%d,%d”,&n[i],&g[i]);for(i=0;i<50;i++)if(g[i]>=80)printf(“%6d,%3d\n”,n[i],g[i]);}2/4/202344例2:对一个大于或等于3的正整数,判断它是不是一个素数。方法:将n(其中n3)作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。简单的算法实例2/4/202345算法表示如下:S1:输入n的值S2:2i(i作为除数)
S3:n被i除,得余数rS4:如果r等于0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5S5:i+1iS6:如果in-1,返回S3;否则,打印n“是素数”,算法结束。2/4/202346S1:
1signS2:1sumS3:2denoS4:(-1)*signsignS5:sign*(1/deno)termS6:sum+termsumS7:deno+1denoS8:若deno100返回S4;否则算法结束。例3:求1-1/2+1/3–1/4+…+1/99–1/100。2/4/202347结构化程序设计方法简介
1、三种基本结构回顾
(1)顺序结构
ABab2/4/202348(2)选择结构,或称分支结构
abBAp不成立成立2/4/202349(3)
循环结构,它又称为重复结构,即反复执行某一部分的操作。又两类循环结构:
(a)
当型(while型)循环结构ap1TFAb2/4/202350(b)直到型(Until型)循环结构
aAFTbp22/4/2023512、结构化程序
所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。
3、结构化程序设计方法
结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行。每个阶段的问题都控制在人们容易理解和处理的范围内。
2/4/2023521=>ii+1=>igi≥80i>50结束开始打印ni,giYNNY读入ni和gi2/4/202353
解答:
(ⅰ)用自然语言表示
(ⅱ)用传统的流程图表示
(ⅲ)N—S流程图
(ⅳ)用伪代码表示等。
1、算法的表示形式主要有哪些?课堂练习2/4/2023542、设计算法:A、B两人各有一桶油,现两人要将各自桶
内的油互换。
解答:必须借助另外一个空桶,并按如下算法进行:(用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M)开始:
S0:将A桶中的油倒入M桶中;
S1:将B桶中的油倒入A桶中;
S2:将M桶中的油倒入B桶中;
2/4/2023553、设计算法写出求n!的算法
解答:S0:给出n的值;S1:1=>p;S2:2=>i;S3:p*i=>p;S4:i+1=>i;S5:若i<=n,返回S3;否则,结束
2/4/202356第三章数据描述与基本操作3.1
基本数据类型
3.2常用的运算符和表达式3.3表达式及赋值语句3.4基本输入输出操作的实现3.5顺序结构程序设计实例2/4/202357概述
使用高级语言编写程序,必须在程序中做好两件事:一是描述数据,二是描述数据的加工方法。前者是通过数据定义语句实现的,后者是通过若干执行语句,包括用各种运算符构成的表达式来实现的。本单元主要介绍C语言的基本数据类型,为后续单元的学习奠定一个基础。关于复杂的数据类型(如数组、指针、结构型、共用型等)将在以后单元中介绍。2/4/2023583.1C语言的数据类型
C语言具有十分丰富的数据类型。所谓数据类型是指数据的内在表现形式。具体的数据类型有以下若干种:
1.基本数据类型:整型、实型和字符型。
2.构造类型:由若干个相关的基本数据类型数据组合在一起形成的一种复杂的数据类型,如数组型、结构型和共用型。
3.指针型:一种简单的数据类型,它是用来表示内存地址的。指针类型的数据可以表示基本类型数据的地址,它可以表示结构类型数据的首地址和其中某个具体数据的地址。2/4/202359
4.枚举型:某数据在程序运行中,只取固定的几个值。我们可以把这几个值列出来,以后这个数据只能取这几个值中的某一个。
5.
空类型:没有任何具体值的数据类型。2/4/202360C语言中的数据类型如下图所示:
数据类型基本类型整型字符型实型(浮点型)单精度型双精度型枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型2/4/202361常量和变量2.常量的分类
(1)整型常量(2)实型常量(3)字符常量(4)字符串常量(5)符号常量常量的类型,可通过书写形式来判别。常量
1.常量的概念
在程序运行过程中,其值不能被改变的量称为常量。2/4/202362变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。2.变量的两个要素(1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。2/4/202363变量有以下几个特征:变量名、变量值、变量的数据类型、变量的地址、变量的存储类别、变量的作用域及变量的生存期等。变量必须先定义后使用。定义变量格式如下:数据类型关键字<变量名表>;如intx,y,z;变量的初始化:变量赋初值的过程就是变量初始化过程。
2/4/202364整型数据整型常量:整型常量就是整常数,包括正整数和负整数及0。其书写形式如下:(1)
十进制整数。如123,-456,0。(2)
八进制整数。以0开头的是八进制数。如0123表示八进制数123,即(123)8
。(3)
十六进制整数。以0x开头的数是十六进制数。如0x123,代表十六进制数,
(123)16=1×16²+2×16¹+3×16º=256+32+3=291。2/4/202365①整型常量在一般微型机中占用2个字节,不管是十进制、八进制或十六进制整数,它们的数值范围都是十进制的-32768~+32767。注意:②C语言还提供一种“长整型常量”。它们的数值范围是十进制的-2147483648~+2147483647,在计算机中占用四个字节,它们的书写方法是在数据的末尾加一个大写字母“L”或小写字母“l”,如0L,038L,0x15L。2/4/202366整型变量1.分类
根据占用内存字节数的不同,整型变量又分为4类:(1)基本整型(类型关键字为int)。(2)短整型(类型关键字为short[int])。(3)长整型(类型关键字为long[int])。(4)无符号整型。无符号型又分为无符号基本整型(unsigned[int])、无符号短整型(unsignedshort)和无符号长整型(unsignedlong)三种,只能用来存储无符号整数。2/4/2023672.占用内存字节数与值域
上述各类型整型变量占用的内存字节数,随系统而异。在16位操作系统中,一般用2字节表示一个int型变量,且long型(4字节)≥int型(2字节)≥short型(2字节)。2/4/202368
实型数据
实型常量
1.表示形式
实型常量即实数,在C语言中又称浮点数,其值有两种表达形式:
(1)一般形式的实数,它是由整数、小数点、小数三部分组成。其中整数部分或小数部分可以省略。数的正负用前面的“+”(可以省略)号或“-”号来区分。例如,12.345,
-1.2345,47.0,-.234,47.等都是实型常量。2/4/202369(2)指数形式的实数,它是由尾数、小写字母e或大写字母E、指数三部分组成,尾数部分可以是十进制整型常量或一般形式的实数,指数部分是十进制的短整型常量(可以带E负号)例如,12.3e2,-1.2e-3,47.0e2,-.234e-3等都是实型常量。
C语言规定,字母e(或者E)之前必须要有数字,且e(或者E)后面的指数必须为整数。如:e3,5e3.5,.e3都是不合法的指数形式。2/4/202370注意:实型常量在一般的微机中是占用4个字节的,不管是一般形式还是指数形式,它们的数值范围都是-10~10有效数字7位。例如,1.23456789和1.234567是相同的,因为实型常量的有效数字是7位,所以1.23456789中的后两位是无效的。38382/4/202371实型变量C语言的实型变量,分为两种:
(1)单精度型。类型关键字为float,一般占4字节(32位)、提供7位有效数字。
(2)双精度型。类型关键字为double,一般占8个字节、提供15~16位有效数字。2/4/202372字符型数据A、把单个字符用一对单引号括起来表示字符常量。如‘a’,‘d’,‘w’,‘?’等都是字符常量。B、用该字符的ASCII码值表示字符常量。如65表示‘A’C、转义字符:反斜杠开头后跟规定的单个字符或数字,并用一对单引号括起来表示字符常量。如下:一字符常量1.字符常量是ASCII码字符集里的一个字符,包括字母(大、小写有区别)、数字和标点符号以及特殊字符等,均为半角字符。2.字符常量表示形式:2/4/202373
字符形式含义ASCⅡ
\n换行,将当前位置移到下一行开头
10
\t水平制表(跳到下一个tab位置)
9
\b退格,将当前位置移到前一列
8
\r回车,将当前位置移到本行开头
13
\f换页,将当前位置移到下页开头
12
\\反斜杠字符“\”
92
\‘单引号(撇号)字符
39
\“双引号字符
34
\ddd1到3位8进制数所代表的字符
\xhh1到2位16进制数所代表的字符
2/4/202374例1:字符与整数的转化#include"stdio.h"voidmain(){
inti;charn;n=97;i='b';printf("n=%c\n",n);printf("i=%d\n",i);printf("i=%c\n",i);}程序的输出为:
n=ai=98i=b2/4/202375例2
字符参与整数运算
#include"stdio.h"voidmain(){charn;n='a';n=n-65;printf("n=%d\n",n);}程序的输出结果为:
n=322/4/202376例3字母的大小写转换#include"stdio.h"voidmain(){charn,i;n='a';i='B';n=n-32;i=i+32;printf("n=%c\n",n);printf("i=%c\n",i);}
程序的输出为n=Ai=b
2/4/202377二字符串常量
●
字符串就是用两个双引号(“)号后括住的若干个字符,例如,“abc”,“123456”,“aBbB”都是字符串。
●
转义符可以出现在字符串中,例如,“\\ABC\\”,“\101\102\x43\x44”等都是字符串,分别表示“\ABCD\”、“ABCD”两个字符串。2/4/202378●
一个字符串中所有的字符的个数称为该字符串的长度,其中每个转义字符只当做一个字符。例如,“\\ABC\\”的长
度为5。注意!‘a’与“a”的区别。●
C语言规定:每个字符串在内存中占用的字符数等于字符串的长度+1。其中最后一个字符存放的字符称为“空字符”其值为0,书写时常用转义字符“\0”来表示。在C语言中称为字符串结束标志。2/4/202379关于变量的补充内容
1.变量:变量是指在程序运行过程中其值可以发生变化的量。2.变量的取名规则为:以字母、下划线“_”开头,后跟若干个字母、下划线、数字。一般约定,用户使用的变量名采用以字母开头,C语言内部使用的变量名以下划线开头。例如,
abc,a_1,age_1等都是合法的变量名,而3a,+age则是非法的变量名。当程序运行时,每个变量都要占用若干个连续的字节,所占用的字节数由变量的数据类型确定。其中第1个字节的地址称为变量的地址。C语言规定,程序中变量的地址是用“&变量名”来表示的。2/4/2023803.变量的数据类型及其定义
(1)
变量可以是任何一种数据类型,具有某种数据类型的变量就叫做该类型变量。(2)
每个变量在使用前必须定义,说明其数据类型。(3)
定义变量数据类型的语句格式如下:
数据类型符变量1,变量2…….;2/4/202381数据类型数据类型符占用字节数数据范围整型int
2(或4)同短整型(或长整型)短整型short2-32768-+32767
长整型long4-2147483648-+2147483647无符号整型unsignedint
2(或4)同无符号短整型(或长整型)无符号短整型unsignedshort2
0-65535无符号长整型unsignedlong4
0-4294967295单精度实型float4-10-10双精度实型double8-10-10字符型char1-128-+127基本数据类型符及含义如下表所示:38383083082/4/2023825.变量的初始化
(1)在定义变量的同时给变量赋予初始值就称为变量的初始化。(2)变量赋初值的语句格式如下:
存储类型符数据类型符变量名1=初值1,变量名2=初值2,…2/4/202383
3.2运算符
1概述2算术运算符3
赋值运算符4
逗号运算符5条件运算符6长度运算符7位运算符8
关系运算符-下章介绍9逻辑运算符-下章介绍2/4/2023一.概述用来表示各种运算的符号称为运算符。
运算符必须有运算对象,运算对象是一个的,则称为
单目运算;运算对象是两个的,则称为双目运算;运算对象是三个的,则称为三目运算。例如,数值运算中经常用到的+、-、*、/等。2/4/2023
每个运算符都代表对运算对象的某种运算,都有自己特定的运算规则。每个运算符运算的对象都规定了数据类型,同时运算结果也有确定的数据类型。当表达式中出现多个运算符,计算表达式值时,就有谁先算,谁后算的问题,我们把这个问题称为运算符的优先级。计算表达式值时,优先级高的运算要先进行运算。同级别的运算符有左结合和右结合之分。2/4/2023C的运算符十分丰富,有13类,30多种,其分类如下:C语言运算符基本运算符算术运算符基本算术运算符(+、-、*、/、%)增1减1运算符(++、--)关系运算符(>、<、==、<=、>=、!=)逻辑运算符(!、&&、||)赋值运算符基本赋值运算符(=)算术自反赋值运算符(+=、-=、*=、/=、%=)逗号运算符(,)条件运算符(?:)数据长度运算符(sizeof)位运算符位逻辑运算符(-、&、|、^)位移运算符(>>、<<)位自反赋值运算符(&=,|=,^=,>>=,<<=)专用运算符强制运算符(())下标运算符([])成员运算符(->,.)指针运算符(&,*)2/4/2023注意!少数运算符号有双重意义,主要有以下几种:(1)“+”号,在算术运算中即表示单目的取正运算,又可表示双目的加法运算。(2)“-”号,在算术运算中即表示单目的取负运算,又可表示双目的减法运算(3)“*”号,在算术运算中即表示双目的乘法运算,在指针运算中表示指针变量指向的变量。(4)“&”号,在位逻辑运算中表示双目“与”运算,在指针运算中表示取地址的运算。2/4/2023二.算术运算符
1.基本算术运算符基本算术运算符的运算对象、运算规则与结果、结合性如表所示:对象数运算符名称运算对象运算结果结合性单目双目+-正负整型或实型整型或实型自右向左自左向右+-*
/加减乘除%整除取余整型整数2/4/2023算术运算符的优先级规定如下:
●单目基本算术运算符优先于双目基本算术运算符
●*、/、%优先于+、—
●同级单目基本算术运算符的结合性是自右向左
●
同级双目基本算术运算符的结合性是自左向右
2/4/2023例1.基本算术运算符的使用设变量定义如下:
intn=10,m=3;floatf=5.0,g=10.0;doubled=5.0,e=10.0;则①-n的结果是-10②n+m,n-m,n*m,n/m,n%m的结果分别为13、7、30、3、1③d+e,d-e,d*e,d/e的结果分别为15.0,-5.0,50.0,0.5④n+m-f*g/d的运算顺序相当于(n+m-(f*g)/d),结果是3.0⑤n%m*f*d的运算顺序相当于((n%m)*f)*d,结果是25.0如果参加运算的两个数中有一个为浮点型,则结果是double型2/4/20232.增1减1运算符(1)增1减1运算符的运算对象、运算规则与结果、结合性如下表所示:对象数单目名称运算符运算规则运算对象运算结果结合性增1(前缀)++先加1后使用增1(后缀)减1(前缀)减1(后缀)++----先使用后加1先减1后使用先使用后减1整型、字符型、指针型变量或数组元素同运算对象的类型自右向左2/4/2023(2)增1减1运算符的优先级:
●增1减1运算符
优先于
双目基本算术运算符
●增1减1运算符和单目运算符+、-同级别,结合性是自右向左
注意:
若出现难以区分的若干个+或-组成运算符串时,
C语言规定,自左向右取尽可能多的符号组成运算符。例1:a+++b应理解为(a++)+ba―――b应理解为
(a――)-b2/4/2023例2:增1减1运算符的使用
设变量定义如下:charc1=‘b’,c2=‘B’;
(c1,c2可看成整型,其值分别为98,66)则:①++c1的值是99,运算后c1的值是‘c’
②c1――的值是98,运算后c1的值是‘a’
③c1+++c2的值是164,运算后c1的值是‘c’,c2的值是‘B’
④c1―――c2的值是32,运算后c1的值是‘a’,c2的值是‘B’
2/4/2023三.赋值运算符
1.赋值运算符
赋值运算符是双目运算符,赋值运算符的左边必须是变量,右边是表达式。
(1)赋值运算符的运算对象及有关规则如下表:
对象数名称运算符运算规则运算结果结合性双目赋值=将表达式的值赋予变量表达式的类型自右向左2/4/2023(2)赋值运算符的优先级
●
算术运算符优先于关系运算符优先于双目逻辑运算符优先于赋值运算符●赋值运算符的结合性是自右向左
2/4/2023(3)赋值运算符的使用设变量定义如下:charc1=‘a’,c2;
intn1=65,n2,n3,n4,n5,n6;
floatf1=3.0,f2;
则:①c2=n1运算后,c2的值是65,n1的值不变。②n2=!c1运算后,n2的值是0,c1的值不变。③f2=f1+0.001运算后,f2的值是3.001,f1的值不变。④
n3=c1==n1||c1!=n1运算后,n3的值是1,c1和n1
的值不变。注:运算顺序相当于
n3=((c1==n1)||(c1!=n1))
⑤n4=n5=n6=-(――n1)运算后,n4,n5,n6的值均是-64,n1的值是64。
注意:上述表达式的值就等于赋值表达式中的最左边的变量值。
2/4/2023972.算术自反赋值运算符
(1)运算规则
对象数名称运算符运算规则运算对象运算结果结合性双目加赋值减赋值乘赋值除赋值模赋值+=-=*=/=%=a+=b相当于a=a+(b)a-=b相当于a=a-(b)a*=b相当于a=a*(b)a/=b相当于a=a/(b)a%=b相当于a=a%(b)数值型数值型自右向左整型整型2/4/202398(2)算术自反赋值运算符的优先级
●
算术运算符优先于关系运算符优先于双目逻辑运算符优先于算术自反赋值运算符●算术自反赋值运算符和赋值运算符是同级别的,结合性是自右向左
2/4/202399(3)算术自反赋值运算符的使用
设变量定义如下
intn1=10,n2=10,m1=10,m2=10,m3=10,m4=10;则:①n1+=n2,n1的值为20,n2的值不变
②n1-=n2,n1的值为0,n2的值不变③n1*=n2,n1的值为100,n2的值不变④n1/=n2,n1的值为1,n2的值不变
⑤m1+=m2-=m3*=m4/=2运算后,
m1,m2,m3,m4的值依次是-30,-40,50,5。
运算顺序相当于m1+=(m2-=(m3*=(m4/=2)))
2/4/2023100四.逗号运算符
逗号运算符是双目运算符,其运算对象是表达式。
1.逗号运算符
对象数名称运算符运算规则运算对象结合性双目逗号
,依次计算前、后表达式表达式自左向右注意:由逗号运算符组成的式子也是表达式,其值等于最右边的表达式的值
2.逗号运算符的优先级
●任何运算符
优先于
逗号运算符
●逗号运算符的结合性是自左向右2/4/20231013.例题。设整型变量a,b为2,
则:①b=a+3,c=b+4
运算结果:a不变,b为5,c为9,表达式的值为9
②d=a――,e=d――,f=――e运算结果:a为1,d为1,e为1,f为1,表达式的值为12/4/2023102五.条件运算符
1.条件运算符
对象数名称运算符运算规则运算对象运算结果结合性三目条件?:对e1?e2:e3e1为真,获得e2e1为假,获得e3表达式e2(e3)的类型自右向左2.条件运算符的优先级●其它运算符
优先于
条件运算符
优先于
赋值、算术自反赋值运算符
●条件运算符的结合性是自右向左
2/4/20231033.例子
(1)
设整型变量a,b,c,d均为2
则a==b?(c=1):(d=0);
结果a,b,d不变,c为1,表达式的值为1(2)
a+1==3?(b=a+2):(c=a+3);结果a,c不变,b为4,表达式值为4(3)
a==b?(c=0):(a>b?(c=1):(c=-1));
结果a,b不变,c为0,表达式的值为02/4/20231041.长度运算符
六.长度运算符
对象数名称运算符运算规则运算对象运算结果结合性
单目长度sizeof测试数据类型所占用的字节数类型说明符或变量
整型
无2.长度运算符优先级
●和单目算术运算符、单目逻辑运算符、增1减1运算符同级别3.例子
设变量定义如下:intn;shorts;unsignedlongu3;floatf;
charc;
则sizeof(n)的值是2sizeof(s)的值是2sizeof(long)的值是4sizeof(unsignedint)的值是2sizeof(u3)的值是4sizeof(f)的值是4sizeof(double)的值是8sizeof(c)的值是1注意:上述结果是TurboC2.0在微机上运行的结果。
七位运算C语言中提供的位运算符:~、<<、>>、&、^、︱1.按位取反运算符~形式:~A功能:把A的各位都取反,(即0变1,1变0)例如:intA=179A0000000010110011~A11111111010011002/4/20231072.按位与运算符&形式:A&B功能:对A的各位与B的对应位进行比较,如果两者都为1,
A&B对应位上的值为1,否则为0。例如:intA=179(二进制0000000010110011)
intB=169(二进制0000000010101001)A0000000010110011B0000000010101001A&B00000000101000012/4/20231083.按位或运算符|形式:A|B功能:对A的各位与B的对应位进行比较,如果两者中有一个为1,A|B对应位上的值为1,否则为0。例如:intA=179(二进制0000000010110011)
intB=169(二进制0000000010101001)A0000000010110011B0000000010101001A|B00000000101110112/4/20231094.按位异或运算符^形式:A^B功能:对A的各位与B的对应位进行比较,如果两者不同,
A^B对应位上的值为1,否则为0。例如:intA=179(二进制0000000010110011)
intB=169(二进制0000000010101001)A0000000010110011B0000000010101001A^B00000000000110102/4/20231105.左移运算符<<形式:A<<n(其中n为一个大于0的整型表达式)功能:把A的值向左移动n位,右边空出的n位用0填补。当左移时移走的高位中全都是0时,相当于对A作n次乘以2的运算。例如:intA=27(二进制0000000000011011)A0000000000011011A<<300000000110110002/4/20231116.右移运算符>>形式:A>>n(其中n为一个大于0的整型表达式)功能:把A的值向右移动n位,左边空出的n位用0填补。相当于对A作n次除以2的运算。例如:intA=179(二进制0000000010110011)A0000000010110011A>>300000000000101102/4/20231123.3表达式用运算符将运算对象连接形成的式子就是表达式。1.表达式的定义2.C语言的表达式非常丰富,也有人称C语言为表达式语言。2/4/2023113C语言使用的基本表达式有:⑴赋值表达式,如:a=3⑵算术表达式,如:3+4*2⑶关系表达式,如:3>2⑷逻辑表达式,如:3>5&&a>=b⑸条件表达式,如:a>b?a:b⑹逗号表达式,如:a=3,b=4,c=52/4/20231143.4赋值语句
1.构成规则:
(1)变量=表达式;(2)变量赋值运算符表达式分号2/4/20231152.注意区分赋值语句和赋值表达式的区别:
例如a=b+2
(这是赋值表达式)
a=b+2;
(这是赋值语句)
a++
(这是表达式)
a++;
(这是赋值语句,等价与a=a+1;)2/4/20231163.5输入输出在C语言中的实现
1.输入输出的概念从计算机向外部输出设备(如显示屏、打印机、磁盘等)输出数据称为“输出”,从外部向输入设备(如键盘、磁盘、光盘、扫描仪等)输入数据称为“输入”。2.C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。2/4/20231173.在使用C语言库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令:
#include<stdio.h>
或#include“stdio.h”
4.允许在使用printf和scanf两个函数时可不加#include命令。2/4/2023118一、字符数据的输入输出1.putchar函数(字符输出函数)
·函数格式:putchar(C);C可以是字符型变量或整型变量或常量
·函数的功能:向终端输出一个字符2/4/20231192.程序实例
#include<stdio.h>main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);}
注意:该程序可以输出控制字符,如putchar(‘\n’)
输出一个换行符,也可以输出其他转义字符如putchar(‘\101’)(输出字符A)
putchar(‘\’’)(输出单引号字符’)运行结果:
BOY2/4/20231203.getchar
函数(字符输入函数)
函数格式,getchar()
函数的功能:从终端输入一个字符,函数的值就是从输入设备得到的字符。4.程序实例
#include<stdio.h>main(){charc;c=getchar();
putchar(c);}在运行时,如果从键盘输入字符‘a’并按回车键,就会在屏幕上看到输出的字符‘a’。a↙(输入‘a’后,按“回车”键,字符才送到内存)a(输出变量c
的值‘a’)2/4/2023121注意:(1)getchar()只能接收一个字符,getchar函数收到的字符可以赋给一个字符变量或整型变量。(2)若在程序中调用getchar、putchar函数,则必须在程序的开头部分加上“包含命令”
#include<stdio.h>
或#include“stdio.h”2/4/2023122二、格式输入与输出(一)、printf
函数(格式输出函数)1.printf函数的一般格式为
printf(“格式控制字符串”,输出表列)括弧内包括两部分:(1)“格式控制字符串”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息:①格式说明,由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。②普通字符,即需要原样输出的字符。(2)“输出表列”是需要输出的一些数据,可以是表达式。2/4/2023123下面是一个例子:
printf(“%d%d”,a,b);格式说明输出表列printf(“a=%db=%d”,a,b);格式说明输出表列2/4/20231242.格式字符常用的有以下几种格式字符:(1)d
格式字符。用来输出十进制整数。有以下几种格式字符:①%d,按整型数据的实际长度输出。②%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。如
printf(“%4d,%4d”,a,b);
若a=123,b=12345,则输出结果为
|__|123,12345③%ld,输出长整型数据。如
longa=135790;printf(“%ld”,a);2/4/2023125对long型数据应当用%ld格式输出。对长整型数据也可以指定字段宽度,如将上面printf函数中的“%ld”改为“%8ld”则输出为:
|__|
|__|135790(8列)一个int型数据可以用%d或%ld格式输出。(2)O格式符,以八进制数形式输出整数。由于是将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出。例如:
inta=-1;printf(“%d,%o”,a,a);2/4/2023126
1111111111111111输出为-1,177777对长整型数(long型)可以用“%lo”格式输出。同样可以指定字段宽度,如printf(“%8o”,a)输出为|__|
|__|
177777-1在内存单元中的存放形式(以补码形式存放)如下:2/4/2023127(3)x格式符,以十六进制数形式输出整数。同样不会出现负的十六进制数。例如inta=-1;Printf(“%x,%o,%d”,a,a,a);输出结果为:
ffff,177777,-12/4/2023128(4)u格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。(5)C格式符,用来输出一个字符。如:
charc=‘a’;printf(“%c”,c);
输出字符‘a’,请注意:“%c”中的c是格式符,引号右边的c是变量名,不要搞混。一个整数,只要它的值在0~255范围内,也可以用字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,一个字符数据也可以用整数形式输出。2/4/2023129(6)S格式符,用来输出一个字符串。有几种用法:①%s,例如:printf(“%s”,“CHINA”);输出“CHINA”字符串(不包括双引号)。②%ms,输出的字符率占m列,如字符串本身长度大于m,则突破m的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国孕妇装市场竞争状况及投资趋势分析报告
- 2024-2030年中国多腔高速半自动吹瓶机资金申请报告
- 2024-2030年中国啤酒行业发展规模及前景趋势分析报告
- 2024-2030年中国厢式货车行业市场发展格局及未来投资潜力分析报告
- 2024-2030年中国卸妆产品市场营销模式及发展竞争力分析报告版
- 2024年版摩托车销售合同3篇
- 2024年度环保型砂石生产设备采购合同协议2篇
- 2021-2022学年河南省渑池高级中学高一月考数学试卷
- 2025年哈尔滨货运从业资格证模拟考试0题b2b
- 2025年鹤壁道路货运从业资格证考试
- 海洋平台深水管道高效保温技术
- 《新疆大学版学术期刊目录》(人文社科)
- 充电桩维保投标方案
- 《如何写文献综述》课件
- 肛瘘LIFT术式介绍
- 通过《古文观止》选读了解古代文学的社会功能与价值
- 语言本能:人类语言进化的奥秘
- 职业生涯规划(图文)课件
- 2024版国开电大专科《EXCEL在财务中的应用》在线形考(形考作业一至四)试题及答案
- 能源管理系统平台软件数据库设计说明书
- 中外园林史第七章-中国近现代园林发展
评论
0/150
提交评论