




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章概要:掌握C程序中各种数据的具体表示和运算。了解C程序中的语句类型。掌握程序中数据的基本输入/输出方式。掌握简单顺序结构程序设计。重点、难点 v变量的数据类型及定义和使用v复合语句v输入/ /输出语句及格式v简单顺序结构程序设计 第1页/共154页1、理解C语言的数据类型2、进一步理解数据在内存的存放3、应用C语言的常量和变量表示并处理数据4、理解程序交互,掌握输入输出语句的格式控制及使用5、体会程序设计思想,应用6步法解决简单实际问题6、掌握本章常用基本算法本章教学目标 第2页/共154页本章项目任务“学生信息管理系统” 软件界面的设计优化第3页/共154页本章内容2.1 程序入门:引导
2、设计一个简单应用案例2.2 C语言的数据及其类型2.3 程序中的常量和变量2.4 程序中的常用运算符和表达式2.5 程序中的人机交互设计2.6 C语言的基本语句2.7 C语言中的输入输出语句2.8 工程计算问题求解与数学函数的应用2.9 项目任务:“学生信息管理系统”软件界面的优化设计第4页/共154页2.1 程序入门:引导设计一个简单应用案例分析: 陈述问题:求任意圆的面积和体积。 需求分析:输入圆半径,输出圆面积和体积。 数学建模:对于数值计算类问题,首先要确定问题的数学模型。设,半径为r,值为3,面积为S,体积为V。则,圆的面积和体积的数学公式为:S=rr=28.27,V=43rrr=1
3、13.10 【例例2-12-1】简单数值计算。编程实现求任意圆的面积和体积。简单数值计算。编程实现求任意圆的面积和体积。第5页/共154页 确定算法(自然语言描述 )(1)设计表示半径、面积和体积的变量:r(整型或实型)、S(实型)和V(实型)。(2)利用scanf输入函数输入圆的半径r的值。(3)利用数学公式S=rr和V=43rr求出圆的面积和体积。(4)输出圆的面积和体积值。第6页/共154页u编码编码 /* program ch2-1.c */#include /*文件包含,编译预处理命令*/#define PI 3.1415926 /*符号常量宏定义*/void main(void)
4、/*主函数首部*/ int r; /*定义半径变量为整型数据*/ float S,V; /*定义面积和体积为实型变量*/ printf(请输入圆的半径(整数):); /*提示信息*/ scanf(%d,&r); /*人机交互,从键盘输入半径值*/ S= PI*r*r;/*计算圆的面积*/ V=4.0/3* PI*r*r*r;/*计算圆的体积*/ printf(area=%6.2fn,S); /*按要求格式在屏幕上输出面积值*/ printf(volume=%6.2fn,V); /*按要求格式在屏幕上输出体积值*/第7页/共154页程序中所使用的数据分析:(1)C语言符号常量。 #def
5、ine PI 3.1415926 /*符号常量宏定义*/ 符号常量定义格式如下: #define 符号常量 常量数据 定义符号常量用宏定义命令 宏定义是编译预处理命令。 符号常量一般用大写字母。第8页/共154页(2)立即数常量。 程序中有系数“4.0/3”等,显然4.0和3是立即数常量。(3)C语言中的变量。 int r;和float S,V;语句定义了所使用的变量。C语言中的变量也有类型。第9页/共154页2.2 C语言的数据(Data)及其类型(Type)2.2.2 2.2.2 语言的数据类型语言的数据类型2.2.1 2.2.1 数据类型有关概念数据类型有关概念第10页/共154页2.2
6、.1 2.2.1 数据类型(数据类型(Data TypeData Type)有关概念)有关概念1、数据存储的本质 在计算机运行过程中,运行所需的程序和数据必须保存在内存中。 程序中所使用的数据,划分成不同的类型。不同类型的数据在内存中的存储形式不同。 现实问题中的各种各样的“数据”在计算机中的存在形式主要有两种:常量和变量。 第11页/共154页2、数据是运算和操作的对象。 例2-1中, (1)圆半径r是待输入的变量数据; (2)处理过程中用到的3.1415926、4.0和3是常量数据; (3)结果S和V是变量数据。这些常量和变量均是数值数据。 (4)提示信息“请输入圆的半径(整数):”是字符
7、串常量数据。第12页/共154页3. 数据的表示和运算 在计算机程序中使用数据需要解决下列问题。(1)数据如何表示:即在编写程序时如何表示(书写、描述)数据;(2)数据如何存储:即在计算机中存储一个数据需要多大内存以及按怎样的形式存储;(3)数据可以参与哪些操作运算。第13页/共154页4、数据类型概念 “数据类型”代表了数据所表示的信息类型,刻画描述了数据的值域、存储特性和运算集合。相同性质的数据划分为一类。 如何使用数据类型? 按被说明信息的性质、表示形式、占据存储空按被说明信息的性质、表示形式、占据存储空间的多少、构造特点和运算集来划分类型的。间的多少、构造特点和运算集来划分类型的。 5
8、、数据类型的种类 第14页/共154页2.2.2 2.2.2 语言的数据类型语言的数据类型C语语言言数数据据类类型型基本类型基本类型(原子类型)(原子类型)数值数值类型类型整型整型有符号短整型(有符号短整型(short)无符号短整型(无符号短整型(unsigned short) 有符号整型(有符号整型(int)无符号整型(无符号整型( unsigned int)有符号长整型(有符号长整型(long)无符号长整型(无符号长整型( unsigned long)实型实型(浮点型)(浮点型)单精度型(单精度型(float)双精度型(双精度型(double)非数值非数值类型类型字符类型(字符类型(cha
9、r)空类型(空类型(void)构造类型构造类型数组(数组(array)结构体结构体 (struct)共用体(共用体(union)枚举类型枚举类型(enum)指针类型指针类型 基本数据类型最主要的特点是其值不可以再分解为其它类型。也叫简单类型或原子类型。第15页/共154页1.基本数据类型(1)数值型数据:数值型数据主要用于科学计算领域,分为“整型”和“实型”;整型(Integer)数据类型数据类型(括号中关键字可省括号中关键字可省)字节个数字节个数取值范围取值范围shortshort (int)2-32768+32767(-215215-1)unsigned short (int)206553
10、5 (0216-1)intint4-21474836482147483647(-231231-1)unsigned (int)404294967295(0232-1)longlong (int)4-21474836482147483647(-231231-1)unsigned long (int)404294967295 (0232-1)第16页/共154页整型数据根据在机器中的存储长度短整型(short) 基本整型(int) 长整型(long) 所占字节数增大无符号短整型(unsigned short))有符号短整型(short))无符号基本整型(unsigned)有符号基本整型(int)无
11、符号长整型(unsigned long)有符号长整型(long)2字节4字节4字节-32768+32767(-215215-1)065535 (0216-1)04294967295(0232-1)-21474836482147483647(-231231-1)04294967295(0232-1)-21474836482147483647(-231231-1)整数以补码存储第17页/共154页十进制整数形式:1286八进制整数形式:017 十六进制整数形式:0 x1a 第18页/共154页u实型(Real)数据类型数据类型(关键字)(关键字)字节个字节个数数取值范围取值范围精度(位)精度(位)
12、float4约约-3.410383.41038(6位有效数字)位有效数字)7double 8约约-1.7103081.710308(12位有效数字)位有效数字)15第19页/共154页十进制小数形式:1.2354、326.89指数形式,又称科学记数法: 123.456=0.123456103=12.3456101=12345.610-2=1.234e+002 在实型数据的表示中,注意:、小数点不可单独出现;、字母E或(e)的前后必须有数字,且其后的数据必须为整数。第20页/共154页 字符类型(Character) 字符数据类型是构建其它文本数据的“原子”。用来定义和规范字符类型数据和小数值整
13、型数据。 每个字符型数据在内存中占一个字节。 字符类型说明符:char 值域:ASCII码表的所有符号,包括字母、数字、标点、空格、回车等。 (2)非数值型数据第21页/共154页 ASCII ASCII表的结构特征。表的结构特征。 ASCIIASCII码表中的每个字符都码表中的每个字符都有一个有一个ASCIIASCII编码值,称为编码值,称为字符代码值(字符代码值(character character codecode)。例如字母)。例如字母A A的的ASCIIASCII码值是码值是6565,B B是是6666。 由于字符的代码及存由于字符的代码及存储特性,字符能像整数一储特性,字符能像整
14、数一样计算。例如,字符样计算。例如,字符A A在参加整数运算时,当作在参加整数运算时,当作整数整数6565处理。处理。 第22页/共154页 空类型(void) void的字面意思是“无类型”,是一个无类型关键字,强调函数的返回值类型为空或函数无参数。 C语言中,凡不加返回值类型限定的函数,会被编译器作为整型返回值处理。第23页/共154页2.指针(Pointer)数据类型根据内存单元地址可以找到所需内存单元值,通常把内存地址称为指针(Pointer)。指针类型是一种特殊数据类型,指针型数据的值是内存地址。第24页/共154页3.构造类数据类型 在C语言中,构造类型有数组类型、结构类型和共用体
15、类型三种。(1)数组(Aarry)数组定义形式:数据类型 数组名常量表达式其中,常量表达式是数组的长度。 例:a0、a1、a2, (2)结构体(Struct)在实际问题中,我们使用的一组数据往往具有不同的数据类型。在C语言中,存放该复杂数据需要使用一种特殊的构造数据类型结构体。第25页/共154页2.3 程序中的常量(Constant)和变量(Variables) 常量:在程序运行过程中值不会发生变化的数据,如3.1415926、3等。 变量:在程序运行过程中,其值可以变化的数据。使用不同的标识符来表示不同的变量,如r、S、V等,代表不同的内存单元。第26页/共154页2.3.1 程序中的直接
16、常量和符号常量1.整型常量(整常数)(1)三种形式十进制整数(一般表示方法):可以是09的一个或多个十进制数位,首位不能为0。例如:100、-200、32767等。 八进制整数:必须以0(注意,不是字母o)作为起始位,由07的一个或多个八进制数位。例如:011、023等。分别代表十进制的9和19。十六进制整数:以0X(或0 x)作为起始位,由09、af(AF)的一个或多个十六制数。例如0 x12、0 xaf、0X1e等,分别代表十进制数的18、175和30。第27页/共154页2.实型常量(实数):带有小数点的常量。(1)十进制小数形式由数字和小数点组成(必须要有小数点)。 例如3.14、0.
17、5、.5、5.、7.0、0.0等都是合法的实型常量。注意:小数点不可单独出现。(2)指数形式由“十进制小数”+“e(或E)”+“十进制整数”三部分组成。 例如:1234.567可表示为:1.234567E3或注意:C语言的语法规定,字母e(或E)之前必须有数字且其后的数据必须为整数。第28页/共154页3.字符(Character)型常量(1)字符常量的表示用一对半角单引号括起来的一个字符 如A、a、 2等注意: 单引号中的大、小写字母表示不同的符号常量,如A和a表示不同的字符。单引号引起的空格()也是一个字符常量。字符常量只包含一个字符,AB是非法的。第29页/共154页(2)字符常量在内存
18、中的存储方式 ASCII码表中的每个字符都有一个ASCII编码值,称为字符代码值(Character Code)。 字符常量在内存中存储的是字符的ASCII码值的二进制形式,如字母“A”在内存中存储的是01000001 第30页/共154页(3)字符常量可以进行的运算有三种:给某字符加上一个整数。例,如整数n在09之间,则0+n得到的是字符0后第n个字符的代码;某大写字母加上整数32,则转换为相应的小写字母等。 对某字符减去一个整数。如:表达式z-2代表字母z倒数前两个的字符“x”比较两个字符。如AB,结果为真。因为字符“A”的ASCII值小于字符“B”的ASCII第31页/共154页(4)转
19、义字符(Escape Character)常量字符字符功能功能字符字符功能功能n换行换行t横向跳格横向跳格v竖向跳格竖向跳格b退格退格r回车回车f换页换页反斜杠字符反斜杠字符单引号字符单引号字符”双引号字符双引号字符ddd1到到3位位8进制表示的字符进制表示的字符xhh1到到2位位16进制表示的字符进制表示的字符0空值空值第32页/共154页4 4、字符串(string)(string)常量u字符串常量或串常量字符串常量或串常量(String)(String)是由半角双引号是由半角双引号(”)括起来的零个或多个字符()括起来的零个或多个字符(charactercharacter)组成的有限序列
20、。组成的有限序列。u字符串的长度:字符串的长度:u字符串结束标志:字符串结束标志:“00” 。该结束标志在内。该结束标志在内存中占一个字节,但不记入字符长度存中占一个字节,但不记入字符长度 例:字符串常量“ABC”“ ” /*一个空格字符串*/“” /*双引号中什么也没有,称为空串*/ 第33页/共154页5.简单宏定义符号常量(Symbolic Constant)符号常量必须先定义,后使用。 定义的一般形式是: #define 符号常量 常量 “符号常量”是一个遵循变量命名规则的名字,也称为宏名;习惯上用大写字母表示。 “常量”是C语言中的一个常量,简称“宏体”,由ASCII字符集中的字符组
21、成。#define开头的行也叫宏定义行。通常,程序中的宏定义行放在程序文件的开头部分。 例如:#define LIMIT 100 #define PRICE 500第34页/共154页2.3.2 C程序中的变量【例2-3】简单事务问题处理。交换两个变量的值是许多程序设计中经常用到的技巧,编程实现交换两个变量的值(必记算法)。分析:分析:(1 1)问题陈述:交换任意两个变量的值。)问题陈述:交换任意两个变量的值。(2 2)需求分析:对于任意两个变量)需求分析:对于任意两个变量a a和和b b,如变量,如变量a a的值为的值为2 2,变量,变量b b的值为的值为3 3,则经过交换后,输出变量,则经
22、过交换后,输出变量a a的值为的值为3 3,变量,变量b b的值为的值为2 2。第35页/共154页 设,有黑黑和蓝两个墨水瓶,但却错把黑黑墨水装在了蓝蓝墨水瓶子里,而蓝蓝墨水错装在了黑黑墨水瓶子里,要求将其互换。 设第三个墨水瓶为红色,其交换步骤如下: (3 3)处理流程)处理流程 数据数据“两两交换两两交换”,即交换两个变量内存中的值。,即交换两个变量内存中的值。 此类问题需要借用第三个变量实现数据交换。此类问题需要借用第三个变量实现数据交换。 第36页/共154页第37页/共154页(4)确定算法输出a a和b b的值t=a,a=b,b=tt=a,a=b,b=t 例2-22-2的算法流程
23、图算法开始a=3,b=2a=3,b=2算法结束a=2,b=3,t;/*t为第三变量*/t=a; /*c值为2*/a=b;/*a值为3*/b=t;/*b值为2*/则a=3,b=2;第38页/共154页(5)程序代码 :/*program ch2-3-1.c */ #include void main(void) float a,b,t; /* 定义3个实型变量 */ a=2,b=3; /* 给a和b变量赋值*/ printf(交换前:a=%f,b=%fn,a,b); t=a,a=b,b=t; /*交换两个变量的值*/ printf(交换后:a=%f,b=%fn,a,b); /*输出*/ 第39页
24、/共154页为了使程序具有通用性,程序改进如下:/*program ch2-3-2.c */ #include void main(void) float a,b,t; /*定义3个实型变量 */ scanf(%f%f,&a,&b); /*从键盘给a和b变量赋值*/ printf(交换前:a=%f,b=%fn,a,b); t=a,a=b,b=t; /*交换两个变量的值*/ printf(交换后:a=%f,b=%fn,a,b); /*输出*/第40页/共154页1.变量的概念 数学中的变量与“=”。C语言中的变量:程序的运行过程中随时可以发生变化的量。变量在任何编程语言中都居于核
25、心地位,理解变量是编程的关键所在。变量可表示问题领域中所需的任何信息,可以是数字(如建筑物的高度)、字符或字符串(如单词、人的名字),或者复杂得多的排列组合(如数学中的矩阵)变量有三个重要属性:名称、值和类型 。变量是命名的内存空间,具有存储数据的能力。 例1:x=x+5 例2:int a=10; a=a+1; 同样不难理解product= product*n。第41页/共154页v 不同类型的变量需要不同大小的存储不同类型的变量需要不同大小的存储空间和具有不同的存储形式。空间和具有不同的存储形式。v 变量名应使读者易于明白其中存储的变量名应使读者易于明白其中存储的值是什么。值是什么。 第42
26、页/共154页2.简单变量的说明(或称声明,Declaring)及使用C语言中,变量须“先定义,后使用”使用变量的三个步骤:声明:在程序中为了能使用变量,必须先用类型说明符和标识符对变量进行声明定义 赋值:为了能正确使用变量,变量使用时必须有确定的值。 使用:变量的使用指的是在程序中获得变量中所存储的值。 第43页/共154页(1)声明变量(Declare Variable) 一般格式为: 类型标识符 变量名,变量名,;例如:例如:int a,b,c; /int a,b,c; /* *定义三个基本整型变量定义三个基本整型变量a,b,ca,b,c* */ /char d;char d;/ /*
27、*定义字符型变量定义字符型变量d d* */ /说明:说明:u 类型标识符是类型标识符是C C语言合法的数据类型。语言合法的数据类型。u 变量名必须满足变量名必须满足C C语言中标识符的命名规则。语言中标识符的命名规则。u 声明语句是一种非执行语句。声明语句是一种非执行语句。u 在同一程序段中,变量不允许被重复定义。在同一程序段中,变量不允许被重复定义。第44页/共154页(2)变量赋值(Variable Evaluate) 变量初始化:在声明语句中指定变量的值,称为变量的初始化(Initialization); 例,int sum=0; /*对和值变量,一般置初值为0*/ short a=2
28、91,b=-1; unsigned short u=65535; unsigned long ul=65551; 注意: 定义而未初始化的变量具有未知的初值。 初始化语句中,int a=b=100;是不允许的。第45页/共154页变量a、b、u、ul实际存储情况如下图所示:第46页/共154页 变量赋值:在程序执行过程中,执行语句中指定了变量的值,值送入到相应的存储空间,称为变量赋值,占用的是运行时间。例,int a,b; a=10,b=2; /*执行过程中为变量赋值*/ a=a+b; /*执行过程中为变量赋值*/第47页/共154页(3)变量的使用(Using Variable)。例:int
29、 a,b; a=10; /*执行过程中为变量赋值*/ b=2*a; /*执行过程中使用变量a并为b赋值*/例:int a=10;a=a+1;上面的代码执行后,结果a的值是11。第48页/共154页3.指针变量(Pointer Variable)的概念变量地址:变量所占存储空间的首地址。指针变量:语言中,允许用一个变量来存放指针,这种变量称为指针变量。某内存单元的指针(即内存地址)和内存单元的值是两个不同的概念。指针变量基类型:当一个指针变量存放另一简单变量的地址时,我们称该指针指向该简单变量,该简单变量的类型是这个指针变量的基本类型,也叫基类型。第49页/共154页v通过变量名访问数据的方式称
30、为“直接访问”, 如,printf(“%d”,i);printf(“%d”,i);。v通过变量地址访问数据的方式称为“间接访问” 如,scanf(“%d”, &i);scanf(“%d”, &i);。第50页/共154页2.3.3学习如何确定问题领域的数据及其类型 分 析: 设三角形三边分别用a,b,c表示,三角形半周长的变量数据用t表示,t= 用变量s表示三角形的面积,s=2cba)()(ctbtatt定义变量和类型如下:定义变量和类型如下:float a,b,c,t;float a,b,c,t;double s;double s;【例例2-42-4】编程计算一个三角形的面积
31、时,我们需要定义编程计算一个三角形的面积时,我们需要定义哪些数据(常量和变量),它们的类型如何确定?哪些数据(常量和变量),它们的类型如何确定?第51页/共154页2.4 程序中的常用运算符(Operator)和表达式(Expression)1.运算符(部分自学)(1)运算符的分类 运算符是告诉编译程序执行特定操作的符号。按结合操作数的个数:单目运算符(Unary Operator),双目运算符(Binary Operator),三目运算符(Ternary Operator) 按运算功能分为:算术运算符、赋值运算符、关系运算符、逻辑运算符、逗号运算符等。C还有一些特殊的运算符,用于完成一些特殊
32、的任务。(2)运算符的优先级(Priority)和结合性(Combine)优先级分为15级。 左结合(自左至右) 右结合(自右至左)通过对常用运算符和表达式的学习,掌握C语言程序如何计算、处理数据。第52页/共154页2.表达式(Expression)(自学)由运算符和操作对象组成的式子叫表达式。操作数可以是常量、变量、函数或表达式。每个表达式均有结果值:表达式中的操作数按照一定的运算规则和顺序,在各种运算符的作用下,得到的运算结果。表达式运算中,不仅要考虑运算符的优先级,还要考虑结合方向。第53页/共154页C C语言运算符有如下:第54页/共154页2.4.1 算术运算符(Arithmet
33、ic Operators)及其表达式 算术运算符分为:基本算术运算符、正负号运算符和自增/自减运算符三大类。单目单目双目双目运算符运算符+-+-+-*/%名称名称自加自加自减自减正正负负加加减减乘乘除除求余求余结合方向结合方向右结合右结合左结合左结合第55页/共154页1.基本算术运算符(+、-、*、/、%) 双目运算符;*、/、%为同一优先级,高于+、;在优先级相同的情况下是左结合。(1)除法运算(“/”)“整除”和“实除”:如果除运算的两个操作数都是整型数据则运算结果也为整型,叫“整除”运算;若除数或被除数至少有一个是实数,则被看成是“实除”。 第56页/共154页整除例:float a
34、; a=5/2; /*结果为2.000 000,精度为什么丢失?*/实除例: float a=5.0/2.0; 或者:a=5/2.0; 或者:a=5.0/2.0; 结果均为2.500000例:求1/2(a+b)的结果。 因为1/2的结果为整型0,所以表达式的结果为0。例:char ch=101; int a=ch/3; /*a的值为33*/第57页/共154页(2)%(取模)运算 取模运算操作对象只能是整数类型。 例:int a=5%2; /*则a值是1*/。 取余操作结果的符号与机器有关,一般是与第一个操作数符号相同。 例: 5%2 结果为:1 5%-2 结果为:1 -5%2 结果为:-1
35、求余用途 应用例1:判断奇/偶数等。 如,x%2的结果为0,则说明x为偶数;x%2的结果不为0,则说明x为奇数。第58页/共154页应用例2:判断a是否能被3整除。a%3的结果为0,则说明a能被3整除;如a%3的结果不为0,则说明a不能被3整除。应用例3:利用整除和求余运算拆分一个整数的各位数字。设a是一个三位数,则: a%10的结果是a的个位数字;a/100的结果是a的百位数字;a%100/10的结果是a的十位数字;例:123%10=3123/100=1123%100/10=2第59页/共154页2.自增(Increment)/自减(Decrement)运算符符号:+、-操作数只能是变量,不
36、能是常量和表达式。功能:使该变量加1(自增)或减1(自减)。单目运算符,优先级与正、负号优先级相同,但高于基本算术运算符,结合性为自右向左。可以生成最优化的汇编代码+、-有前置(Prefix)和后置(Postfix)两种运算方式。前置运算:运算符在变量的前面,如+n,-n等;后置运算:运算符在变量的后面,如n+,n等。第60页/共154页 如仅仅是对单个变量进行自运算(Self-operation),前置运算或后置运算的结果相同。 例,有语句如下: int n=10; n+; /*或+n;n的值都是11*/ n-; /*或-n;n的值都是9*/例,例,int a=10; int a=10; 则
37、实现变量则实现变量a a加加1 1的方法有:的方法有:方法方法1 1:a=a+1;a=a+1;方法方法2 2:a+=1;a+=1;方法方法3 3:+a;+a;或者或者a+;a+;第61页/共154页4.算术表达式(自学)算术表达式是指用算术运算符将各操作数连接起来的、符合一定语法规则的式子。算术表达式中可以包含算术运算符、常量、变量、函数和表达式等元素。 如,前面所见的5%2、a/2、a+b+c、3+6、a*(b/c-d)、+n等都是算术表达式。第62页/共154页2.4.2 赋值(Assigment)运算符和赋值表达式1、赋值运算符(Assignment Operator):也称为赋值操作符
38、,用“=”表示。赋值表达式形式为:变量=表达式说明:(1)赋值号的左边是任何合法的变量名,右边是任何合法的C语言表达式,它确定了特定的值。(2)赋值操作:先计算右边表达式的值,再转换成左边变量对象的类型,存入左边变量代表的内存空间。(3)结合方向是自右向左。(4)优先级别很低(14级),仅高于将学到的逗号(,)运算符。第63页/共154页注意:(1)赋值表达式加上分号(;),就构成赋值语句。如,“r=2;”是一个赋值语句。(2)“=”的左边必须是变量名,不能是表达式。如: a+b=3; /*错误!不能给表达式赋值*/(3)C语言中,可以使用连续赋值操作。如: int a ,b; a=b=100
39、; /*等价于a=(b=100),结果a和b的值都为100*/ 但是,初始化语句中,int a=b=100;是不允许的。第64页/共154页2.复合赋值运算符例:product=product*n;n=n+1;a=a/b;m=m+3;i=i-1;v C C语言中有许多类似这样对变量自身进行某种运算再赋值给变量自身的运算。它们等价于复合赋值运算符:* *= =、+=+=、-= -= 、/= /= 、%= %= 等。 作用:优化代码:生成更短小的汇编代码作用:优化代码:生成更短小的汇编代码第65页/共154页C语言中复合赋值运算符有“*=”、“+=”、“-=”、“/=”、“%=”等。例:假设在分别
40、进行以下复合运算操作之前,a a原值都为1010。 a-=2;a-=2; 该语句执行后,该语句执行后,a a值为值为8 8; a a* *=2;=2; 该语句执行后,该语句执行后,a a值为值为2020; a/=2;a/=2; 该语句执行后,该语句执行后,a a值为值为5 5; a%=2;a%=2; 该语句执行后,该语句执行后,a a值为值为0 0; 例:求5 5!p=p*i i=5 定义变量i、p输入初始数据p=1,i=1 开始Y(p*=i) 输出p i=i+1N结束第66页/共154页2.4.3* 自增(减)运算的进一步理解 在有其它运算的复杂表达式中,自增(减)的前置和后置运算是有区别的
41、。 1前置运算:先加(或减1),然后用已加(或减1)的变量参加其它运算。 2后置运算:先用未加的变量参加其它运算,然后再将该变量加(或减1)。第67页/共154页【例2-6】学习阅读C语句,判断语句执行结果和对变量值的修改结果。语句段如下: int a=8,b=2,c,d; c=+a; d=b+; 分析:分析: 阅读阅读C C语句,判断语句执行结果,可以通过模语句,判断语句执行结果,可以通过模拟计算机执行或完善程序在编译环境中执行程序拟计算机执行或完善程序在编译环境中执行程序来实现。来实现。第68页/共154页【例例2-72-7* *】学习阅读学习阅读C C语句程序段,判断语句执行结果和语句程
42、序段,判断语句执行结果和对变量值的修改结果。对变量值的修改结果。 intint a=3,b=3,c,d; a=3,b=3,c,d; c=a+b+; c=a+b+; d=a+-a; d=a+-a; d=a+-a+-a; d=a+-a+-a; 分析:分析: 可以先完善程序段在编译环境中看执行结果。以可以先完善程序段在编译环境中看执行结果。以上语句段完善后的程序如下上语句段完善后的程序如下: 第69页/共154页/*programch2-7.c*/#includevoidmain()inta=3,b=3,c,d;c=a+b+;printf(%d%d%dn,a,b,c);/*添加该输出语句观察结果*/
43、d=a+-a;printf(%d%dn,a,d);/*输出语句观察结果*/d=(a+)+(-a)+(-a);printf(%d%dn,a,d); /*输出语句观察结果*/第70页/共154页注意:对于这种复杂的有多个自增自注意:对于这种复杂的有多个自增自减运算的表达式,我们尽量避免使用,减运算的表达式,我们尽量避免使用,应该先把精力放在程序设计的整体环节应该先把精力放在程序设计的整体环节上。上。第71页/共154页2.4.4 逗号(Comma)运算符 用逗号运算符(,)将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:表达式1,表达式2,表达式n 例,交换两变量的值:t=x,x=y
44、,y=t v 说明:u逗号运算符的优先级别最低(逗号运算符的优先级别最低(1515级),结合性是自左至级),结合性是自左至右。右。u功能:依次求解每个表达式,即先计算表达式功能:依次求解每个表达式,即先计算表达式1 1,最后计,最后计算表达式算表达式n n。整个逗号表达式的值是逗号表达式序列中最。整个逗号表达式的值是逗号表达式序列中最后一个表达式的值。后一个表达式的值。v 注意: 并非所有的逗号都是作为逗号运算符的,有的地方仅是并非所有的逗号都是作为逗号运算符的,有的地方仅是作为分隔符使用。作为分隔符使用。 例,例,printf(printf(“%d,%dn%d,%dn”,x,y),x,y);
45、 语句中,两个参数间的逗号是分隔符。语句中,两个参数间的逗号是分隔符。第72页/共154页2.4.5 *位(Bit)运算符(自学)1.按位与运算符(&) 运算规则:把参与运算的两个操作数的对应二进制位分别进行“与”运算。 例如,int a=12,b=13;,则表达式a&b的运算如下: (12)0 0 0 0 1 1 0 0 & (13)0 0 0 0 1 1 0 1 结果:0 0 0 0 1 1 0 0 第73页/共154页2.按位或运算符(|) 运算规则:把参与运算的两个操作数的对应二进制位分别进行“或”运算。例如,表达式“12|13”的运算下: (12)0 0 0
46、0 1 1 0 0 | (13)0 0 0 0 1 1 0 1 结果: 0 0 0 0 1 1 0 1 即运算结果为13。第74页/共154页3.按位异或运算符() 运算规则:参与运算的两个操作数的对应二进制位异或。例如,表达式1213的运算如下: (12)0 0 0 0 1 1 0 0(13)0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 即运算结果为1。第75页/共154页4.按位取反运算符() 运算对象应置于运算符的右边,例a。 运算规则:把运算对象的内容按位取反。5.左移运算符() 由左移运算符构成的表达式中,左移运算符的左边是移位对象,右边是整型表达式,代表移位的位数
47、。左移时,右端补0,左端移出的部分舍弃。例如,123的运算如下: (12)0 0 0 0 1 1 0 0 12) 由右移运算符构成的表达式中,右移运算符的左边是移位对象,右边是整型表达式,代表移位的位数。右移时右端移出的部分舍弃,若操作数为无符号数或正数,高位补0,否则补1。例如,123的运算如下: (12)0 0 0 0 1 1 0 0 123的结果:0 0 0 0 0 0 0 1所以经过移位运算的结果为1。第77页/共154页2.4.6 指针运算符 与地址操作有关的运算符叫指针运算符。 “&”和“*”均是单目运算符,优先级别相同,结合性都是自右向左。 “&”:求变量地址运算
48、符,通常放在变量名的前面,得到其后变量的地址。 “*”: 指针运算符。 在指针定义语句中,“*”说明其后的变量是指针变量; 在执行语句中,“*指针变量名”表示取其后指针变量所指向变量的值。第78页/共154页分析:(1)定义指针变量的一般语法形式为:类型说明符 *指针变量1,*指针变量2,*指针变量n; 为解决本问题,定义两个指针变量: float *p1,*p2; /*指向float类型的指针变量*/【例例2-82-8】利用指针变量交换两个简单变量的值。利用指针变量交换两个简单变量的值。(2 2)指针变量指向简单变量u指针变量存放地址。通过将指针变量赋以简单变量地址指针变量存放地址。通过将指
49、针变量赋以简单变量地址值使指针指向简单变量。值使指针指向简单变量。 例,接上一语句:例,接上一语句: float a,b; float a,b; / /* *简单变量简单变量* */ / p1=&a,p2=&b; /p1=&a,p2=&b; /* *指针变量指向简单变量指针变量指向简单变量* */ /第79页/共154页(3)间接访问简单变量 指针指向简单变量后,可以通过间接访问运算符“*”来间接访问简单变量。 如:*p1=3; /*表示简单变量a=3*/第80页/共154页程序代码:/*program ch2-8.c*/ #include void main(
50、void) float a,b,t; /*定义3个整型变量*/ float *p1,*p2; /*定义基类型为float型的指针变量*/ p1=&a; /*指针变量 p1指向变量a*/ p2=&b; /*指针变量 p2指向变量b*/ scanf(%f%f,&a,p2); /* 给a和b输入数据*/ printf(交换前:a=%f,b=%fn,a,b); /*交换两个变量的值*/ t=*p1,*p2=*p1,*p1=t; printf(交换后:a=%f,b=%fn,a,b); 第81页/共154页2.4.7 数据类型转换(Type Conversion)(自学) C C语
51、言允许整型、实型和字符型数据进行混合运算。语言允许整型、实型和字符型数据进行混合运算。不同类型的数据进行混合运算时,要考虑的问题有:不同类型的数据进行混合运算时,要考虑的问题有: 运算符的优先级别;运算符的优先级别; 运算符的结合方向;运算符的结合方向; 数据类型的转换。数据类型的转换。 类型转换在类型转换在C C语言中也属于一种运算。语言中也属于一种运算。第82页/共154页1.数据类型自动转换(隐式转换)数据类型转换有时是根据需要由编译系统自动进行完成的,称为自动转换。(1)算术运算中的数据类型转换 自动转换遵循“类型提升”的原则 低 int char,short unsigned lon
52、g高 double float图2-7 2-7 算术运算过程的转换规则第83页/共154页转换的两条方向线:uchar/unsigned char-short/unsigned short- char/unsigned char-short/unsigned short- int/unsigned int- doubleint/unsigned int- doubleufloat-doublefloat-double例:float a=5/2 ; /*隐式类型转换*/例:int r; float girth; girth=2*PI*r 右侧的算术表达式,涉及到常量和变量、右侧的算术表达式,涉及
53、到常量和变量、整型和实型,在运算时自动进行数据类型的整型和实型,在运算时自动进行数据类型的转换:转换:常量常量2 2转换为转换为doubledouble类型,和符号常量类型,和符号常量PIPI(对应的实数(对应的实数值转换为值转换为doubledouble类型)相乘,变量类型)相乘,变量r r转换为转换为doubledouble类型,然后再类型,然后再进行运算,算术表达式的结果为进行运算,算术表达式的结果为doubledouble类型类型 第84页/共154页例 :V=43rrr 表达式中,常量表达式中,常量4 4和和3 3均是整数,均是整数,4 43 3结果是整数结果是整数(为(为1 1),
54、这并不是我们想要的结果。为了保证结果),这并不是我们想要的结果。为了保证结果的有效性,写为的有效性,写为4.04.0或或3.03.0,自动变换为实数运算。,自动变换为实数运算。 例:S=12rr 常量常量1 1和和2 2均是整数,均是整数,1 12 2结果也是整数(为结果也是整数(为0 0),),这并不是我们想要的结果。为了保证结果的有效性,这并不是我们想要的结果。为了保证结果的有效性,写为写为1.01.0或或2.02.0,自动变换为实数运算。,自动变换为实数运算。 第85页/共154页(2)赋值运算中的自动类型转换 如果赋值运算符两侧的数据类型不同,赋值号右侧表达式类型的数据将转换为赋值号左
55、侧变量的类型,再进行赋值。例如,有以下定义:例如,有以下定义:float a;a=10; float a;a=10; / /* *a a的结果值为的结果值为10.010.0(数据填充)(数据填充)* */ /又有定义:又有定义:int a; a=15.5; int a; a=15.5; / /* *a a的结果值为的结果值为1515(数据截取)(数据截取)* */ /u注意:注意: 赋值类型转换时要注意数值的范围不能溢出,即要在赋值类型转换时要注意数值的范围不能溢出,即要在该数据类型允许的范围内。该数据类型允许的范围内。 如果右侧表达式结果数据类型长度比左侧变量的数据类如果右侧表达式结果数据类
56、型长度比左侧变量的数据类型长时,将丢失一部分数据,从而造成数据精度的降低或型长时,将丢失一部分数据,从而造成数据精度的降低或出错。出错。第86页/共154页(3)数据输出时的类型转换 用输出语句输出数据时,数据将转换为格式控制符所要求的类型,详细内容在格式输出函数部分讲解。第87页/共154页2.强制类型转换(也称为显式类型转换)强制类型转换运算符将一个表达式的值强制转换成所需的数据类型。语法格式为: (类型说明符)表达式功能:强行将表达式的类型转换为括号内要求的类型。如:(如:(intint)4.24.2的结果是的结果是4 4;如:如:int xint x; 表达式表达式(float)x(f
57、loat)x表示表示x x的值被强制转换为实型,但的值被强制转换为实型,但x x的的类型仍是整型,而表达式的类型是类型仍是整型,而表达式的类型是floatfloat类型。类型。如:如:表达式表达式(int)x+4.2(int)x+4.2 和和 (int)(x+4.2)(int)(x+4.2), 前者将变量前者将变量x x强制转换为整型后再和强制转换为整型后再和4.24.2进行加法运进行加法运算。后者是算。后者是x x和和4.24.2先进行加法运算,然后再将运算先进行加法运算,然后再将运算结果强制转换为整型。结果强制转换为整型。第88页/共154页例:例:int b=5, c=2;int b=5
58、, c=2; float a=(float)b/c; float a=(float)b/c; / /* *把把b b强制转换强制转换为为floatfloat型,型,c c自动转换自动转换为为floatfloat型,结果为型,结果为2.5000002.500000* */ /第89页/共154页2.5 程序中的人机交互设计(Interaction Design)(自学) C语言程序设计过程中,是依靠输入/输出函数来实现人机交互的。C语言没有提供专门的输入/输出语句,所有的输入输出操作都是通过调用C语言标准库函数中的输入/输出函数来实现的。第90页/共154页2.6 C语言的基本语句(Statem
59、ent) 一条语句完成某种操作(或功能),若干条语句组合在一起就完成了程序设计的任务,实现用户的意图。 根据语句的功能和结构形式可以将C语言语句分为:简单语句、内嵌式语句、协助式语句、复合语句和空语句等几种类型。 第91页/共154页 简单语句是能独立完成简单功能的语句。 如表达式语句、函数调用语句、return语句等。 表达式语句主要有赋值语句、运算符表达式语句等。 (1)赋值语句(自学) 注意:变量定义声明中,不允许连续给多个变量赋初值。如下说明是错误的: int a=b=c=5; /*错*/ 必须写为: int a=5,b=5,c=5;。 但赋值语句允许连续赋值,如:a=b=3;1.1.
60、简单语句第92页/共154页(2)运算符表达式语句 x+y是算术表达式,而x+y;是语句。(3)函数调用(Calling)语句 如:printf();和scanf();函数调用语句。 sin()等数学函数调用语句:y=x+sin(a); 调用各种库函数时,在程序文件首部一定要用“#include”预处理命令包含库文件。第93页/共154页2.内嵌式语句从语句形式上看,内嵌式语句需要其它表达式或语句嵌入构成一个功能语句。如,if、while、for语句等。该类语句在使用时,其中需要一条或多条语句嵌入其中,实现一定的功能。3.协助式语句这类语句不能单独使用,需要放在某些嵌入式语句中,在程序中起到改变程序执行流向的作用。如,break、continue、goto语句等。第94页/共154页4.复合语句用一对花括号“ ”将多条实现同一任
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业用地利用现状分析
- 室内墙面防水施工方案
- 2024年三季度报湖南地区A股长期负债比率排名前十大上市公司
- 2024年三季度报湖南地区A股利息支付倍数排名前十大上市公司
- 堆土施工方案
- 钢桥梁施工方案
- 2025年餐厅经理考试试题及答案
- 2025年专业培训 测试题及答案
- 6年级上册数学第5单元
- 2025年消防入门考试题及答案
- GB/T 4154-1993氧化镧
- 水泥混凝土路面试验检测的要点
- 运输供应商年度评价表
- 室内消防及给排水管道安装施工方案方案
- 无创呼吸机参数调节课件
- 《过零丁洋》公开课件
- 文件传阅单范本
- 电工培养计划表
- 部编版五年级道德与法治下册课程纲要
- Q∕SY 02006-2016 PVT取样技术规程
- 初中物理公式MicrosoftWord文档
评论
0/150
提交评论