版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计创建第一个C语言程序项目1“学生成绩管理系统”中相关数据设计及简单处理项目2项目中学生成绩的等级判定项目3项目中的设计数据处理及封面与菜单的初步项目4学生成绩的分组汇总程序项目5利用数组完善项目中数据的处理项目6利用函数进行项目的整体框架设计项目7利用结构体实现项目项目8利用指针优化项目项目9利用文件完善项目项目10项目2“学生成绩管理系统”中相关数据设计及简单处理目标TARGET知识目标了解C语言的基本字符掌握C语言的标识符、关键字理解和掌握数据类型、常量和变量掌握运算符与表达式目标TARGET技能目标学会正确的定义变量、使用变量和常量能够正确的运用各种运算符和表达式“学生成绩管理系统”中的相关数据设计任务2.1学生成绩总分及平均分的计算任务2.2任务2.1“学生成绩管理系统”中的相关数据设计
任务描述完成“学生成绩管理系统”,需要不同数据类型的数据。假设该系统需要完成学生三门课程的总分及平均分,确定该系统中所需数据。任务分析假设三门课程分别为数学、英语、语文,可以将定义为整型数据,三门课程的总分也为整型数据,而三门课程的平均分应该为实型。任务2.1“学生成绩管理系统”中的相关数据设计
算法设计(1)定义iMath、iEnglish、iChinese为int型,分别存储数学、英语、语文成绩。(2)定义iSum为int型,存储三门课程的总分。(3)定义fAverage为float型,存储三门课程的平均分。任务2.1“学生成绩管理系统”中的相关数据设计
实现在线测试系统主页面的布局和美化某班级需要一个学生成绩管理系统,该系统应具有学生成绩的添加、删除、查询、修改、插入和排序等处理功能,提供数字按键菜单操作方式,如图0-1所示。程序代码#include"stdio.h"/*编译预处理命令*/voidmain(){intiMath,iEnglish,iChinise;/*定义整型变量iMath、iEnglish、iChinese*/intiSum;/*定义整型变量iSum*/floatfAverage;/*定义单精度实型变量fAverage*/……}/*main()主函数结束*/1基本数据及其运算Part◎C语言的数据类型◎常量和变量◎基本字符、标识符和关键字基本字符、标识符和关键字
1.基本字符C程序可以看作是由C语言的基本字符按一定的规则组成的一个序列。C程序中使用的基本字符包括:(1)大小写英文字母ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz(2)十进制阿拉伯数字0123456789(3)下面29个符号!"#%&'()*+,-./:;<=>?[\]^_{|}~(4)5种空白符空格、水平制表符、垂直制表符、换行、换页基本字符、标识符和关键字
1.基本字符(5)基本运行字符集还包括四个不可打印的字符:null字符(用做字符串终止符)、警报(alert)、退格(backspace)、回车(carriagereturn)为了在字母和字符串中表示这些字符,输入反斜杠\加对应的转义序列(escapesequence)即可,例如,\0表示null字符(空字符),\a表示警报,\b表示退格,而\r表示回车。不同的C实现版本中,字符实际对应的数值(字符码)可能不同。C语言本身仅规定了以下规则:基本字符集中的每个字符必须用一个字节(byte)表示。空字符是一个字节,其所有的位(bit)都是0。0之后的每个十进制数字,编码都要依次比前者大1。基本字符、标识符和关键字
2.标识符和其他高级语言一样,我们把用来标识变量名、函数名、符号常量名、数组名、结构体名等的有效字符序列称为“标识符”(Identifier),简单的讲,标识符就是一个名字。比如,我们在程序中使用了诸如a、abc、mn123这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这就是标识符。不过,名字也不能随便起,要遵守规范。C语言规定,标识符的命名规则为:(1)只能由字母(A~Z,a~z)、数字(0~9)和下划线(_)组成;(2)只能以字母或下划线开头;(3)不能使用C语言中的关键字;(4)标识符的有效长度随系统而异,但至少前8个字符有效;如果超长,则超长部分被舍弃。基本字符、标识符和关键字
根据C语言中标识符的命名规则可以做出如下判断:(1)合法的标识符有:a,x,x3,BOOK_1,sum5,_f23,file_name(2)非法的标识符有:3s,s*T,-3x,bowy-1,int例2-1判断下面标识符哪些是合法的,哪些是非法的。a,3s,x,x3,BOOK_1,s*T,-3x,sum5,_f23,bowy-1,int,file_name。说明:题目中3s以数字开头,-3x出现非法字符*,-3x不能以减号(-)开头,bowy-1出现非法字符减号(-),int是关键字。注意:(1)C语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到操作系统的限制。例如在某个编译器中规定标识符前128位有效,当两个标识符前128位相同时,则被认为是同一个标识符。(2)在标识符中,大小写是有区别的,例如BOOK和book是两个不同的标识符。(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便于阅读和理解,作到“见名知义”。(4)函数名、变量名一般用小写,而符号常量一般为大写。(5)不要使用函数中的库函数名、预处理名等作为自定义的标识符。基本字符、标识符和关键字
3.关键字关键字(Keywords)是由C语言规定的具有特定意义的字符串,通常也称为保留字,例如int、char、long、float、unsigned等。我们定义的标识符不能与关键字相同,否则会出现错误。你也可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。基本字符、标识符和关键字
C语言关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile说明:根据关键字的作用可以将关键字分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。(1)数据类型关键字(11.5个)基本类型:char,int,float,double修饰类型:short,long,signed,unsigned构造类型:enum,union,struct其他类型:void(2)控制语句关键字(12个):循环语句:for,do,while,break,continue条件语句:if,else,goto开关语句:switch,case,default返回语句:return说明:(3)存储类型关键字(6个):auto,extern,register,static,const,volatile(4)其它关键字(2.5个):void,sizeof,typedef减号(-),int是关键字。C语言的数据类型
数据类型决定数据的存储空间的大小及表现形式、数据的取值范围和运算方式。C语言提供的数据类型非常丰富,包括基本数据类型、构造数据类型、指针类型和空类型四大类,具体如图2-1所示。1.
C语言的数据类型分类C语言的数据类型
基本数据类型是C语言系统本身提供的,结构比较简单。构造类型是由基本数据类型构造而成的。指针类型是一种重要的数据类型,可以表示复杂的数据类型,使用起来非常灵活。本节只介绍基本数据类型,其余的数据类型在后面的章节中介绍。short、int、long、char、float、double这六个关键字代表C语言里的六种基本数据类型。在不同的系统上,这些类型占据的字节长度是不同的。在32位的系统上,这六种基本数据类型的所占字节长度和取值范围如表2-2所示,具体可以用sizeof测试一下。1.
C语言的数据类型分类C语言的数据类型
C语言的数据类型的取值范围名称标识符占用内存取值范围字符型char1字节-128~127短整型short2字节-32768~32767整型int4字节-2-31~231-1长整型long4字节-2-31~231-1单精度型float4字节3.4*10-38~3.4*1038或者-3.4*1038~-3.4*10-38双精度型double8字节1.7*10-308~1.7*10308或者-1.7*10308~-1.7*10-308C语言的数据类型
整型数据分为整型、短整型和长整型3大类,其中每一类又分为无符号(unsigned)和有符号(signed)两种情况。整型数据是以二进制补码的形式存储的。对有符号数据,则存储单元的最高位为符号位,1表示负数,0表示正数。对无符号数,则没有符号位,所有的存储单元均为数据位。2.整型数据说明:整数有原码、反码和补码3种表示方法。一个正数的原码、反码和补码与原码相同。负数的原码就是把符号位数值化。负数的补码就是在反码的末位(最右端)加1。C语言的数据类型
实型数据也称浮点数,指带有小数部分的非整数数值,在C语言中,实型数据分为单精度和双精度。实型数据都是有符号数据,没有无符号实型数据。实型数据在计算机中是以指数形式存储的,把它分为小数和指数两个部分,其中小数部分的位数越多,数的有效位就越多,数的精度就越高,指数部分的位数越多,数的表示范围就越大。实型数据通常在程序中用小数形式书写,只是在数值很大或者很小时,才会使用指数形式。在用指数形式表示时,E前必须要有数字,E后是整数。3.实型数据C语言的数据类型
在内存中,一个字符型数据占用一个字节(8bite),以ASCII码的二进制形式存放。比如字符'a'的ASCII码值是97,则'a'在内存中的存放形式如图2-2所示。4.字符型数据注意:常用字符数据的ASCII码值可以参考附录A“ASCII码表”,表中列出了标准ASCII字符集128个字符,其编码为0到127之间。'A'的ASCII码值是65,'B'的ASCII码值是66;'a'的ASCII码值是97,'b'的ASCII码值是98;其大小写的ASCII码相差32。'0'的ASCII码值是48,'1'的ASCII码值是49,只要记住'A'、'a'、'0'的ASCII码值,就可以推算出其他字母和数字的ASCII码值。字符型数据有时可以和整型数据通用,具体表现在:一个字符型变量可以赋以一个字符常量,也可以赋以一个整数。字符型数据在输出时可以以字符格式输出,也可以以整数格式输出。以整数格式输出时,ASCII码值在1-127之间的字符输出正数,128-255之间的字符输出负数。字符型数据可以进行算术运算,运算时以它们的ASCII码值进行运算。基本字符、标识符和关键字
#include"stdio.h"voidmain(){
intc1,c2;
//定义整型变量c1,c2
c1='a';//将字符常量附给变量c1
c2=97;//将97("a"的ASCII码值)附给变量c2
printf("c1=%c,c2=%c\n",c1,c2);//用字符格式输出变量c1,c2
printf("c1=%d,c2=%d\n",c1,c2);//用整数格式输出变量c1,c2}例2-2字符型数据和整型数据通用举例。基本字符、标识符和关键字
运行结果注意:变量c1、c2在内存中的值都是97,输出什么取决于格式说明符是%d还是%c。常量和变量
1.常量在程序的执行过程中,其值不能被改变的量称为常量。常量一般从其字面形式即可判别,不需要类型说明就可以直接使用,这种常量称为普通常量或字面常量,其类型是由常量本身隐含决定的;常量也可以用标识符来代表,这种常量称为符号常量。在C语言中,常量和变量都是可以用来存储和表示数据的,常量值在程序执行的过程中是不可变的,而变量是可变的。常量和变量
普通常量在程序的执行过程中,其值不能被改变的量称为常量。常量一般从其字面形式即可判别,不需要类型普通常量有4类:整型数值常量、实型数值常量、字符常量和字符串常量。(1)整型数值常量整型数值常量有三种表示方法:十进制(0-9十个数字构成,逢10进1),如:1,200,3500十六进制(0-9十个数字,A-F六个字符构成,逢16进1),以0x或0X开头的数字序列,如:0x12,0X706A,0xF2B八进制(0-7八个数字构成,逢8进1),以0开头的数字序列,如:025,0706常量和变量
普通常量(2)实型数值常量实型数据也称浮点数,指带有小数部分的非整数数值,实型数值常量有2种表示方法:小数形式:726.8,97.3,0.529指数形式:3.23E-5,1.5E2常量和变量
普通常量(3)字符型常量字符型常量有2种表示方法:用单引号引起来的单个字符,如'a','A','$'转义字符表示法,如"\n","\105","\'\n','\105','\X7B'"这里的转义字符是一种特殊的字符常量,通常用来表示一些比较特殊的字符,比如不可视,或者不能通过键盘输入的都可以用转义字符表示。转义字符是以"\"开头的字符序列,常用的转义字符如表2-3所示。常量和变量
常用转义字符转义字符意义ASCII码值(十进制)\a响铃(BEL)007\b退格(BS),将当前位置移到前一列008\f换页(FF),将当前位置移到下页开头012\n换行(LF),将当前位置移到下一行开头010\r回车(CR),将当前位置移到本行开头013\t水平制表(HT)(跳到下一个TAB位置)009\v垂直制表(VT)011\\代表一个反斜线字符''\'092\'代表一个单引号(撇号)字符039\"代表一个双引号字符034\?代表一个问号063\0空字符(NUL)000\ooo1到3位八进制数所代表的任意字符\xhh十六进制所代表的任意字符说明:(1)表2-3中最后2行是用ASCII码(八进制或是十六进制)表示一个字符。如:\101代表ASCII码为65(十进制)的字符'A',\012代表ASCII码为10(十进制)的字符\n,即换行符,字符\000或者\0代表ASCII码为0(十进制)的控制符,即空字符。(2)转义字符从书写上看是一个字符序列,实际上是作为1个字符对待的,存储时只占1个字节。常量和变量
普通常量(4)字符串常量字符串常量简称字符串,是用一对双引号括起来的字符序列。例如"china","1","A","123"等。这里的双引号只起定界的作用,它不属于字符串中的字符。而且C语言会自动在字符串尾部加上一个转义字符"\0"(空字符,其ASCII码值为0)作为字符串的结束标记。因此,字符串在内存中占用的存储字节数要比字符串长度多1,即双引号之间的字符个数加1,才是字符串存储时的字节数。同时我们可以通过"\0"来判断字符串是否结束。以字符串"china"为例,字符串的存储形式如图2-3所示。'c''h''i''n''a''\0'常量和变量
符号常量符号常量就是用标识符来表示常量。C语言中,可以用以下两种方法定义符号常量。(1)使用编译预处理命令define符号常量可以在文件的开始定义,其定义格式如下:#define常量名常量值如:
#definePI3.1415926#defineN100常量和变量
符号常量2)使用常量说明符constconst是C语言中32个关键字之一,可以用来定义符号常量,具体格式如下:const数据类型常量名=常量值如:constfloatpi=3.1415926定义了符号常量后,就可以在程序中用符号代替常量出现,这不仅提高了程序的可读性,也同时给程序的修改带来了极大的方便。常量和变量
#definePI3.1415926/*定义符号常量PI代替圆周率*/#include"stdio.h"voidmain(){floatfR,fArea;fR=10;fArea=PI*fR*fR;printf("theareaofthiscircleis%0.2f\n",fArea);}例2-3符号常量的使用。说明:符号常量一般用大写字母表示,方便与其他标识符区分。常量和变量
2.变量—变量的概念在程序执行过程中,其值可以改变的量称为变量。在C语言中,变量相当于存储数据的容器,在内存中占据一定的存储单元,用于存放数据,即变量值。我们可以使用变量来保存程序执行过程中的输入数据、中间结果和最终结果。每个变量都要用一个名字表示,即变量名。这个名字是由程序设计者命名,且一定要遵守标识符的命名规则。常量和变量
变量的定义变量在程序中负责存储数据,而数据具有整型、实型、字符型等不同的类型。因此,变量在定义时一定要有相应的类型。变量必须先定义后使用,变量定义时必须提供两个方面的信息:变量名和变量的类型。变量定义语句的一般形式是:类型标识符变量名列表;例如:inta,b;//定义了2个整型变量a、blongc;//定义了1个长整型变量cfloatr,s;//定义了2个单精度实型变量r、sdoublex;//定义了1个双精度实型变量xcharch;//定义了1个字符型变量ch常量和变量
变量的初始化在定义变量的同时给变量赋一个初值,称为变量的初始化。例如:intsum=0;floatf=123.45;charch='A';说明:(1)变量必须先定义再使用,否则程序无法为其分配存储空间。(2)变量具有三个要素:变量名、类型和当前值。变量的值除了可以通过赋初值的方式获取,还可以通过赋值的方法获得和改变。首次使用变量时,变量必须要有确定的值,否则会导致运算错误。常量和变量
intiAge=20,iNum=201; charcSex='m';/*f:female(女),m:male(男)*/ floatfScore; fScore=580.5;例2-4按照问题定义适当的变量。新生入学需要保存学生数据,如年龄、学号、性别、入学分数。现在定义整型变量存放年龄、学号,定义字符变量存放性别,定义浮点型变量存放入学分数。问题分析可以定义整型变量iAge、iNum分别存放年龄、学号,定义字符变量cSex存放性别,定义浮点型变量fScore存放入学分数。程序段任务2.2学生成绩总分及平均分的计算
任务描述计算一名学生数学、英语、语文三门课程的总分及平均分。这名学生三门课程的成绩分别为89、96、82。。任务分析熟悉VisualC++6.0环境,能够正确编辑、链接、运行C程序已知这名学生的三门课程的成绩,成绩相加即可获取该学生的总分,总分除以科目数即为平均分。任务2.2学生成绩总分及平均分的计算
算法设计(1)定义iMath、iEnglish、iChinese和iSum为int型,分别存储数学、英语、语文成绩和总分,其中将iMath、iEnglish、iChinese分别赋值为89、96、82;定义fAverage为float型,存储三门课程的平均分。(2)计算总分。(3)计算平均分。(4)输出学生的总分和平均分。任务2.2学生成绩总分及平均分的计算
程序代码#include"stdio.h"/*编译预处理命令*/voidmain(){intiMath=89,iEnglish=96,iChinese=82;/*定义整型变量iMath、iEnglish、iChinese,并分别赋值*/intiSum;/*定义整型变量iSum*/floatfAverage;/*定义单精度实型变量fAverage*/iSum=iMath+iEnglish+iChinese;fAverage=iSum/3.0;printf("该学生的总分为:%d,平均分为:%.2f\n",iSum,fAverage);}。任务2.2学生成绩总分及平均分的计算
执行结果2运算符和表达式Part◎赋值运算符和赋值表达式◎算术运算符和算术表达式◎逗号运算符和逗号表达式◎数据间的混合运算与类型转换运算符和表达式
C语言运算符是说明不同运算的符号,运算符的操作对象称为操作数或者运算数。运算符根据操作对象的个数可以分为单目运算符、双目运算符和三目运算符。由运算符把操作数连接起来的一个有意义的式子叫做表达式。每种表达式都按照运算符所规定的运算规则进行运算,最终会得到一个结果,该结果被称为表达式的值。C语言的运算符异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理。运算符和表达式
优先级运算符的运算优先级共分为15级。15级最高,1级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。本书中附录B“C语言运算符的优先级和结合性”中的运算符表可以看到运算符的优先级从1到15,15级优先级最高,1级优先级最低,(表中从上到下)依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
结合性各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。算术运算符和算术表达式
1.基本算术运算符运算符名称例子运算功能+加法运算x+y求x与y的和-减法运算x-y求x与y的差*乘法运算x*y求x与y的积/除法运算x/y求x除以y的商%模运算x%y求x除以y的余数说明:(1)对于除法运算符(/),如果两个操作数全是整数,结果为整数;如果其中一个操作数为浮点数,结果为浮点数。如3/5的值为0,5/3的值为1,3/5.0的值为0.6。(2)对于模运算符(%),两个操作数必须为整数。如8%5的值是3,10%2的值是0,-14%5的值是-4。算术运算符和算术表达式
以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。2.算术表达式以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。算术运算符和算术表达式
例2-5从键盘输入一个3位数,求该数个位、十位、百位上的数的和。问题分析首先需要有一个变量存储3位数,在通过算术运算分别计算出这个3位数的个位、十位、百位,最后计算它们的和。算术运算符和算术表达式
算法设计(1)定义1个整型变量iNum存储从键盘输入的3位数;(2)定义整型变量i1、i2、i3、iSum分别存储个位、十位、百位上的数字及其和;(3)从键盘输入一个3位整数存入变量iNum中;(4)用iNum%10求得个位上的数存入i1中;(5)用iNum/10%10求得十位上的数存入i2中;(6)用iNum/100求得百位上的数存入i3中;(7)求i1、i2、i3的和存入iSum中;(8)输出iSum的值。算术运算符和算术表达式
#include"stdio.h" voidmain() { intiNum; inti1,i2,i3,iSum; printf("pleaseinputainteger(100-999):"); scanf("%d",&iNum); i1=iNum%10;/*求个位数*/ i2=iNum/10%10;/*求十位数*/ i3=iNum/100;/*求百位数*/ iSum=i1+i2+i3; printf("thesumis:%d\n",iSum); }程序段算术运算符和算术表达式
执行结果说明:(1)两个整数相除的结果为整数,即7/2的结果为3,而不是3.5。(2)C语言中所有的实数在运算过程中都是按double型数据处理的,如果参加+、-、*、/运算的两个操作数据中有一个是实型数据,则运算结果一定为double型数据。如7/2.0或者7.0/2的值为3.5,8+2.0的值是10.0。(3)%运算的两个操作数必须是整数。算术运算符和算术表达式
3.自增、自减运算符自增、自减运算符是C语言中很有特色的两个运算符。它们是单目运算符,而且操作数必须是变量。使用时,运算符可以放在变量的前面,也可以放在变量的后面,如表2-5所示。运算符名称例子等价于++加1x++或++xx=x+1--减1x--或--xx=x-1自增、自减运算的作用是使变量的值自行加1或者减1。从上表可见,这两个运算符有两种用法,一种是前置式,运算符放在变量之前;一种是后置式,运算符放在变量之后。算术运算符和算术表达式
3.自增、自减运算符(1)前置式自增、自减运算先使变量的值加1(或者减1),然后再以变化的后的值参加运算,即先自增1,再运算。例如:intx=1,y;y=++x;等价于x=x+1;y=x;所以,x=2,y=2。前置式自减运算与之类似。(2)后置式自增、自减运算变量先参与表达式的运算,然后再使变量的值加1(或者减1)。例如:intx=1,y;y=x++;等价于y=x;x=x+1;所以,x=2,y=1。后置式自减运算与之类似。自增、自减运算符的优先级比较高,是14级,高于基本算术运算符,其结合性是右结合。算术运算符和算术表达式
例2-6自增自减运算符和其表达式的用法演示的。程序代码#include"stdio.h"voidmain(){inta=5,b;b=a++*2;/*变量a与2相乘后自加1*/printf("a=%d,b=%d\n",a,b);a=5;b=++a*2;/*变量a自加1后与2相乘*/printf("a=%d,b=%d\n",a,b);}算术运算符和算术表达式
执行结果说明:(1)自增(++)、自减(--)运算符只能用于简单变量,常量和表达式是不能做这两种运算的,如8++,(a+b)++都是错误的。(2)++a和a++是不同的,其中++a是先自身加1在使用变量,而a++是先使用变量,再自身加1。(3)同样,--a和a--是不同的,其中--a是先自身减1在使用变量,而a--是先使用变量,再自身减1。(4)自加自减运算多用于循环结构中。赋值运算符和赋值表达式
依次进行计算。所谓赋值,指的是将一个数据存储到某个变量对应的内存存储单元的过程。赋值运算符可分为基本赋值运算符和复合赋值运算符两种类型。以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。1.基本赋值运算符“=”是赋值运算符,其一般形式为:<变量名>=<表达式>该表达式的处理过程是:先计算“=”右侧表达式的值,然后将该值赋给左侧的变量,整个赋值表达式的值就是被赋值变量的值。例如:a=5;/*将右边的5赋值给左边的变量a,整个表达式的值也为2*/b=a+8;/*将右边表达式a+8的13赋值给左边的变量b,整个表达式的值也为13*/赋值运算符和赋值表达式
以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。2.复合赋值运算符在是赋值运算符前面加上其他运算符号构成复合赋值运算符。其一般形式为:<变量名><双目运算符><表达式>它等价于:<变量名>=<变量名><双目运算符><表达式>在程序中,使用这种复合运算符,既可以简化程序,又可以提高编译效率,产生质量较高的目标代码。在C语言中,大部分的双目运算符都可以和赋值运算符结合成复合赋值运算符,常见的几种复合运算符如表2-6所示。以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。
常见复合赋值运算符运算符例子等价于运算符例子等价于+=x+=5x=x+5-=x-=5x=x-5*=x*=5x=x*5/=x/=5x=x/5%=x%=5x=x%5
赋值运算符和赋值表达式
以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。3.赋值表达式由赋值运算符把一个变量和一个表达式连接起来的式子称为赋值表达式,其一般形式为:<变量名><赋值运算符><表达式>赋值运算符的优先级比较低,是2级,仅高于逗号运算符,低于算术运算符,其结合性是右结合。赋值运算符和赋值表达式
例2-7赋值运算符和赋值表达式用法演示。程序代码#include"stdio.h"voidmain(){inta,b,c;a=5;c=b=a*2+8;/*将表达式a*2+8同时赋值给变量b和c*/printf("b=a*2+8is%d\n",b=a*2+8);/*输出赋值表达式b=a*2+8的值*/ printf("b=%d\n",b);/*输出变量b的值*/ printf("c=%d\n",c);/*输出变量c的值*/}赋值运算符和赋值表达式
执行结果说明:(1)赋值表达式的结合方向是从右至左。(2)可以把一个赋值表达式赋值给一个变量,例如语句中的c=b=a*2+8,可以看成是将赋值表达式b=a*2+8赋给变量c,因此变量c的值就是赋值表达式b=a*2+8的值。(3)赋值表达式b=a*2+8的值就是表达式a*2+8的值。(4)可以用赋值表达式对多个变量赋同样的值,如上面例题中的c=b=a*2+8,即同时给变量b和变量c赋同样的值a*2+8。逗号运算符和逗号表达式
依次进行计算。逗号运算符“,”也被称为顺序求值运算符,是C语言中一种比较特殊的运算符。其作用是将多个表达式用逗号分开。用逗号运算符将多个表达式连接起来构成的式子称为逗号表达式。它的一般形式为:<表达式1>,<表达式2>,…,<表达式n>其求解过程是:按照从左到右的顺序依次计算各表达式的值,整个表达式的值就是最后一个表达式的值。逗号运算符的优先级最低,其结合性是左结合,即按照从左到右的顺序进行计算。赋值运算符和赋值表达式
例2-8逗号运算符和逗号表达式用法演示。程序代码#include"stdio.h"voidmain(){inta=3,b=4,x,y;x=(a*5+1,y=b+3,3.5*b,a*y);/*逗号表达式赋值给变量x*/printf("x=%d,y=%d\n",x,y);/*x的值就是x*y的值,y的值就是b+3的值*/}赋值运算符和赋值表达式
执行结果说明:(1)例题中语句x=(a*5+1,y=b+3,3.5*b,x*y);的作用是将逗号表达式a*5+1,y=b+3,3.5*b,x*y的值赋值给变量x。应依次计算各个表达式的值,最后一个表达式x*y的值即为变量x的值。(2)逗号表达式中各个表达式的数据类型可以不同。比如在例2-6中,表达式3.5*b,的值是实型,而其他表达式的类型均为整型。数据间的混合运算与类型转换
依次进行计算。在C语言中,在程序中经常会遇到不同类型的数据进行运算,需要进行类型转换。C语言的类型转换方式有两种:自动类型转换和强制转换。以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。1.自动类型转换在C语言中,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,自动类型转换需遵循以下规则,如图2-3所示。数据间的混合运算与类型转换
以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。1.自动类型转换(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。若两种类型的字节数不同,转换成字节数高的类型。若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型。(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。(4)char型和short型参与运算时,必须先转换成int型。(5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。数据间的混合运算与类型转换
以上6种基本算术运算符都是双目运算符,也就是需要2个操作数。其优先级为13级和12级,由高到低为:“*、/、%”高于“+、-”。其结合性为左结合,即从左向右进行计算。用算术运算符将操作数连接起来,构成算术表达式。在算术表达式中应该先计算乘除模运算,再计算加减,若遇到同一级别的,则从左向右依次进行计算。2.强制类型转换在C语言中,有一种运算符可以把表达式的数据类型转换成指定的类型,即强制类型转换运算符,其一般格式如下:
(类型名)(表达式)如:inta=3,b=4;(float)(a+b);这里(float)(a+b)将表达式a+b强制转换成float型,整个表达式的结果是实数7.0,而不是7。说明:(1)要进行类型转换的表达式一定要用括号括起来。如(float)(a+b)和(float)a+b是不一样的,前者是将a+b转换成float型,而后者是将a的值转换成float型再和b做加法运算。(2)强制类型转换操作并不改变操作数本身的类型。如变量f=2.34为float型,则在执行语句(int)f+5;时,是用f的整数部分2进行运算,而变量f的值仍为float型数据2.34。(3)在将实型数据强制转换成整型数据时,可能会造成数据丢失。拓展案例案例2-1输出表达式a+=a-=a*=a/5的值。问题描述运用复合赋值运算符,计算表达式a+=a-=a*=a/5的值,假设a的值为12。表达式的值应该为14。拓展案例
算法设计复合赋值运算符的结合方向是自右向左,因为“/”运算符的优先级高于复合赋值运算符的优先级,所以先计算除法,然后从右向左依次计算,即:表达式a+=a-=a*=a/5等价于表达式a+=(a-=(a*=a/5)),计算结果为14,a的值为14。拓展案例
程序代码#include"stdio.h"voidmain(){inta=12;a+=a-=a*=a/5;/*复合赋值表达式语句*/printf("表达式a+=a-=a*=a/5的值为:%d,a=%d\n",a+=a-=a*=a/5,a);/*输出表达式a+=a-=a*=a/5的值和变量a的值*/}拓展案例执行结果拓展案例案例2-2将十进制25转换成二进制数。问题描述十进制数转换为二进制数使用“除2取余法”。拓展案例
算法设计将十进制数25转换为二进制数的步骤为:(1)用25除以2余数是1,商是12,(2)对商12再除以2得余数是0,商是6,(3)对商6再除以2得余数是0,商是3,(4)对商3再除以2得余数1,商1,(5)对商1再除以2得余数1,商0,(6)当商为0时停止。此时十进制数25的二进制数为:11001,即把以上每步所得的余数按从右到左的顺序写出来就可以了。如果是用8位表示这个二进制数,则高位部分补0.即可。比如25的8位二进制数为00011001。说明:(1)二进制转十进制二进制数转换为十进制数比较简单,比如100110对应的十进制数为:
1*25+0*24+0*23+1*22+1*21+0*20=32+4+2=38(2)二进制转八进制二进制数转换为八进制数时,将二进制数从低位按3位一组进行划分,高位不足三位的补0,将每三位二进制数转换为一个十进制数,即为该二进制数的八进制数。比如1100110,将其分组如下:
001100110则对应的八进制数为146(3)二进制转十六进制二进制数转换为十六进制数时,将二进制数从低位按4位一组进行划分,高位不足4位的补0,将每4位二进制数转换为一个十进制数,即为该二进制数的十六进制数。比如111100100,将其分组如下:
000111100100则对应的十六进制数为1E4拓展案例案例2-3交换两个整型变量的值。问题描述有2个整型变量a和b,将两个变量中的值互相交换。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 夸父追日英语课件
- 欢乐亲子活动课件
- 大学体育与健康 教案 羽毛球-9
- 大学体育与健康 教案 舞龙舞狮14
- 社区管理与社区服务概述
- 长沙景点英文介绍
- 湖北汽车工业学院科技学院《工业设计工程基础》2022-2023学年第一学期期末试卷
- 资金计划表模板
- 脑栓塞取栓的护理
- 《技术价格与税收》课件
- 玩转计算机网络-计算机网络原理智慧树知到课后章节答案2023年下青岛大学
- 安全隐患排查台账(附排查表)
- 核安全工程师-核安全综合知识-辐射防护基础-辐射防护剂量限值
- 音乐治疗学基础理论
- 小学二年级期中家长会课件
- 第六届大学生化学实验技能竞赛初赛笔试试题
- 质量通病防治施工措施及质量通病防治措施
- 英语作业纸打印版
- 静脉留置针操作常见并发症预防及处理课件
- LTE与5G移动通信技术PPT完整全套教学课件
- 军事理论(中北大学版)学习通超星课后章节答案期末考试题库2023年
评论
0/150
提交评论