1、理解C语言中的标识符2、理解语言的数据类型,c语言数据类型有哪些

数据类型 0
周次 第2周 课次
1 教学时数
2 课题 教学目的与要求 教学重点 C语言基础知识
1、理解C语言中的标识符
2、理解C语言的数据类型
3、熟练掌握整型、实型常量的表示方法
4、掌握符号常量的定义和使用
5、熟练掌握变量的定义、初始化和赋值
1、常量及其表示方法
2、变量的定义、初始化和赋值 教学难点符号常量的表示 课程类型 教学方法设计 理论课(√) 实验课() 教学方法 讲授、演示、讨论 教学手段参考资料 多媒体课件、软件演示、板书 《C语言程序设计教程》,杨路明主编,北京邮电大学出版社 《C程序设计教程》,谭浩强主编,高等教育出版社 教学后记 主要内容、步骤及时间分配 上讲内容回顾新课引入 (4分钟)(1分钟) 本节内容简介 (1分钟) 本讲新授课内容 (80分钟) 2.2数据类型 2.3标识符与关键字 2.4常量 2.5变量 教 课堂小结 下一讲概要 学 作业 (2分钟)(1分钟)(1分钟) 过 程 设 计 备注 引入: 在C语言中涉及到数据,运算和输入输出,有的数据值在程序运行过程可变,还有不可变的,本节课介绍标识符、数据类型、常量和变量。
本节新授课内容:
一、标识符与关键字
1、标识符C语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。
标识符(Identifier)标识符是在程序中使用的变量名、常量名、用户自定义函数名和数组名、文件名等的统称。
在C语言中标识符是区分大小写的。
C语言的标识符可以分为以下三类。

(1)关键字(keyword)又叫保留字,由C语言规定的、具有特定意义、专门用作语言特定成分、不能作其它用途的一类标识符,通常也称为保留字。
在C语言中所有的关键字都必须小写。

(2)系统预定义标识符库函数名、预编译命令,这类标识符称预定义标识符。
如,系统库函数sin,printf,scanf,预编译命令define,include,undef等。
一般不把这些标识符再定义为用户自定义标 识符。

(3)用户自定义标识符(User-definedIdentifier)用户根据编程需要定义的标识符,用于标识变量、符号常量、用户自定义函数、类型 名等。
用户自定义标识符一般应做到“见名知义”,以增加程序的可读性。
判断用户标识符的合法性:smart2、_decision、5smart、bomb?
、float2、常量常量是有数据类型的,如123、3.14159263、运算符代表对各种数据类型实际数据对象的运算。
如,+(加)、-(减)、*(乘)、/(除)、% (求余)、>(大于)
4、其它符号
二、数据类型
一、数据类型(DataType)的概念C语言提供的数据结构是以数据类型形式表示的。
“数据类型”是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则。
同一数据类型有相同的性质。
C语言数据类型分为基本类型、构造类型和指针三大类。

C 语 基本类型 数值 言 (原子类型) 类型 数 据 整型 有符号短整型(short)
无符号短整型(unsignedshort)有符号整型(int)无符号整型(unsignedint)有符号长整型(long) 类型 构造类型指针类型 非数值类型 无符号长整型(unsignedlong) 实型 单精度型(float) (浮点型)双精度型(double) 字符类型(char) 空类型(void) 数组(array) 结构体(struct) 共用体(union) 枚举类型(enum) (一)基本数据类型
(1)整型(Integer) 整型数据的值域由其在内存中的存储长度决定,分为:①短整型(short),②基本整型 (int),③长整型(long)。
同样存储长度的数据又分为:①无符号整数(unsigned),②有符 号整数(signed)。
无符号整数没有符号位,所以最高位为数据位。
有符号整数最高位为符 号位。
数据类型(括号中关键字可省)
字节个数 取值范围 shortint short(int)unsignedshort(int)intunsigned(int)
2 -32768~+32767((-215~215-1)
2 0~65535(0~213-1)
4 -2147483648~2147483647(-231~231-1)
4 0~4294967295(0~232-1) long(int)long unsignedlong(int)
4 -2147483648~2147483647(-231~231-1)
4 0~4294967295(0~232-1)
(2)实型(Real) C中实型数据分为单精度实数(float)和双精度实数(double)两种。
数据类型(关键字) 字节个数 取值范围 精度(位) float
4 约-3.4×1038~3.4×1038 6~
7 double
8 约-1.7×10308~1.7×10308 15~16
(3)字符类型(Character) 非数值型数据,如文字信息等,称为字符型数据,char
是字符类型说明符,
(4)空类型(void) “空类型”关键字是void,强调函数的返回值类型为空或函数无参数或指针无所指等。
提问:你能列举出一些需要用整型、实型、字符型数据表示的例子吗? (二)构造(Construct)数据类型
(1)数组(Aarry) C
语言中,数组是一种能够存储若干个相同类型数据的数据结构,是一种简单的构造 类型数据。
一般地,数组定义形式如下:数据类型数组名[常量表达式] 其中,常量表达式表示数组中数据元素的个数。
如,charstr[100];/*字符数组,可以存放一个字符串或多个字符*/ 提问:你能定义一个能存放10个学生成绩的数组吗?
(2)结构体(Struct) 结构体是一种较为复杂但却非常灵活的构造数据类型,一个结构体类型可以由若干个称为成员(或域)的成分组成。
如存放学生数据的姓名、学号、年龄、性别、成绩等都是该数据的成员。
(三)指针(Pointer)数据类型

指针类型是一种特殊数据类型,指针型数据的值是内存空间的地址。

三、常量 常量是指在程序运行过程中保持固定类型和固定数值的数据。
常量也分不同的数据类 型。
常量的表现形式主要是立即数常量,还有用宏定义确定的符号常量。

1.

整型常量 整型常量就是整常数。
用来表示正整数、负整数和
0。
C语言中,整数有三种表示形式。

(1)十进制整数(一般表示方法):可以是0~9的一个或多个十进制数位,首位不能 为
0。
例如:100、-200、32767等。

(2)八进制整数:必须以0(注意,不是字母o)作为起始位,有0~7的一个或多个 八进制数位。
例如:011、023等,分别代表十进制的9和19。

(3)十六进制整数:以0X(或0x)作为起始位,有0~9、a~f(A~F)的一个或多 个十六进制数位。
例如0x12、0xaf、0X1e等,分别代表十进制数的18、175和30。
整数类型分short、int和long以及它们的无符号unsigned形式。
各整数类型所表示 数据范围的大小有下列关系: unsignedlong>long>unsignedint(short)>int(short)>unsignedshort>short 请写出整型常量100在C语言中的三种表示方法。

2.实型常量 实型常量是带有小数点的常量。
可以用十进制小数和指数两种形式表示一个实型常量。

(1)十进制小数形式 和数学中表示实数的形式相同,由数字和小数点组成(必须要有小数点)。
例如
3.14、 0.5、.5、
5.、7.0、0.0,
0.和.0等都是合法的实型常量。
注意:小数点不可单独出现。

(2)指数形式 在C语言中,由“十进制小数”+e(或E)+“十进制整数”三部分组成。
例如:1234.567 可表示为:1.234567E3或12.34567E2等形式。
在C语言中,e(E)后跟一个整数来表示以 10为底的幂数。
注意:C语言的语法规定,字母e(E)之前必须有数字且其后的数据必须为整数。
请写出实型常量123.456在C语言中的两种表示方法。

3.字符(Character)型常量
(1)字符常量的表示 C语言中,字符型常量是用一对半角单引号括起来的一个字符。
如’A’、’a’、’2’等都是 字符型常量。
注意: ①单引号中的大写字母和小写字母表示不同的符号常量,如’A’和’a’表示不同的字符。

②单引号引起的空格(’’)也是一个字符常量。
③字符常量只包含一个字符,’AB’是非法的。
字符 说明 十进制八进制十六进制 八进制 十六进制 常量‘a’小写字母a‘+’加号字符‘’’单引号字符‘\n’新行字符 97 0141 43 053 39 047 10 012 0x610x2b0x270xa 字符模式‘\141’‘\053’‘\047’‘\012’ 字符模式‘\0x61’‘\0x2b’‘\0x27’‘\0xa’ 记住ASCII表的结构特性,在编程中很有用。
①字符0的ASCII码是48;数字字符0~9的ASCII码是连续的。
②字母分为两段:大写字母(A~Z)和小写字母(a~z),每段的ASCII码值是连续的; 大写字符A的ASCII值是65,小写字母a的ASCII值是97,相应的小写字母比大写字母的 ASCII码值大32。

(2)字符常量在内存中的存储方式 字符常量在内存中存储的正是字符的ASCII码值的二进制形式。

(3)字符常量的操作运算 当对字符进行运算时,仅有很少的运算是有用的。
这些有意义的运算通常有三种。
①给某字符加上一个整数。
②对某字符减去一个整数。
③比较两个字符。
如’A’<’B’,结果为真。
A
的ASCII码值小于B的ASCII码值。

(4)转义字符(EscapeCharacter)常量 C语言选用反斜杠(\)作为意义转换(转义)的引导符,后面紧跟一个有特殊含义的字 符。
这种以反斜杠开头的字符或一个数字序列,称为转义字符。
例如:\n表示回车换行, \t表示一个制表符等,\x41表示字母
A。
字符 功能 字符 功能 \n换行 \t 横向跳格 \v竖向跳格 \b 退格 \r 回车 \f 换页 \\ 反斜杠字符 \’ 单引号字符 \” 双引号字符 \ddd1到3位8进制表示的字符 \xhh1到2位16进制表示的字符 \
0 空值 引入转义字符后,一个字符就有了更多的表示方法。
例如字符’A’的表示方法除了65(
进制整数)、0x41(十六进制整数)、0101(八进制整数)和’A’外,还有’\101’(转义字符) 和’\x41’(转义字符)两种形式。

4.字符串(String)常量 字符串常量或串常量是由半角双引号括起来的零个或多个字符(Character)组成的有 限序列。
字符串常量的书写形式是:"字符序列" 注意: ①字符和字符串是不同类型的数据。
例如,"WangLing"是字符串常量。
串末尾的转义字符’\0’标志字符串结束。
可通过字符
串首地址读取字符串或字符串中的字符。
例,语句char*pb="WangLing";中,指针变量 pb指向字符串"WangLing"的首地址。
字符串长度是指该字符串中的字符个数,但不包括双引号和字符串结束标志。
例, "wangling"字符串的长度是
8,但在内存中占9个字节;而""(空格字符串)长度为
1, 在内存中占2个字节;空串""(双引号中什么也没有)仅有一个结束符的字符串,在内存 中占1个字节,字符串长度是
0。
②’a’和"a"是不同的,前者是字符,后者是字符串,在内存中,字符没有结束标志。

5.简单宏定义——宏符号(Macrosymbol) 宏符号必须先定义后使用。
它定义的一般形式是:#define宏符号名字符串 其中,宏符号名遵循变量命名规则,也称为宏名;字符串是一串字符,简称“宏体”。
习惯上,宏名用大写字母表示。
以#define定义的行也叫宏命令行。
通常,程序中所有的宏行都放在程序文件开头部 分。
例如:#defineLIMIT100 #definePRICE500 编译预处理器把程序中该行之后,除了出现在双引号和注释字符串中的其它所有宏名 原样替换为其后的字符串。
例如,对于printf("PI=%f\n",PI);语句,预处理器只转换第二个PI。
使用宏定义应当注意的是: ①宏名与其后的字符串用一个或多个空格或通过制表符分隔。
②宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查。
③宏命令行中的字符串中不能出现空格或制表符。
⑤使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。
提问:字符串常量和变量相同,可以被赋值,对吗? 【例2-1】阅读程序,理解常量数据。
#include #defineR5.4 /*符号常量R代表实型常量5.4*/ #definePI3.1415926/*符号常量PI代表实型常量3.1415926*/ voidmain() {printf("theradiiis:=%f\n",R); /*字符串常量*/ printf(“thevalueofthecircum:%f\n”,PI*R*R);/*字符串常量*/ }
四、变量
1.变量的基本知识 变量的三个重要属性:变量的名称、值和类型。
变量名代表内存中的一个存储单元,该存储单元的大小由变量的数据类型决定。
变量名尽量做到“见名知意”。
如变量num1表示操作数、sum表示数据和。
例:intx;/*变量类型、名*/ x=5; /*变量值*/
2.变量的定义说明(Declaring)及使用 C语言中使用的任何变量必须先定义后使用。
变量使用有三个步骤:定义声明、赋值 和使用。

(1)变量的定义(DeclareVariable) 变量声明语句的一般格式为:类型标识符变量名[,变量名,……]; 说明: 1类型标识符是C语言合法的数据类型。
2变量名必须满足C语言中标识符的命名规则。
3声明语句是一种非执行语句。
4变量声明定义的位置可以在函数之外,也可以在函数体中或复合语句中。
如果是 在函数体或复合语句中,则必须集中放在最前面。
5在同一程序段中,变量不允许被重复定义。
一般,变量声明语句总是位于某复合语句或函数的起始位置。
所谓复合语句,是用
对花括号({})括起来的一段程序。
变量定义声明语句确定了变量的名称、数据类型等属 性,以决定变量的存储方式和允许对其所做的操作。
例如: inta,b,c; /*定义三个基本整型变量a,b,c,各占4个字节的存储空间*/ chard; /*定义字符型变量d,占1个字节的存储空间*/ unsignedu; /*定义无符号整型变量u,占4个字节的存储空间*/ unsignedlongul;/*定义无符号长整型变量ul,占4字节的存储空间*/ floatm,n; /*定义单精度实型变量m,n,各占4个字节的存储空间*/ doublek; /*定义双精度实型变量k,占8个字节的存储空间*/ int*p; /*定义整型指针,其值将存储某内存空间地址*/ 例如: {inta,b,c; floata; /*错误,变量名被重复定义*/ …… }
(2)变量赋值(VariableEvaluate) 有两种方法为变量赋值,一是在声明语句中指定变量的值,称为变量的初始化 (Initialization);二是在执行语句中指定变量的值,称为变量赋值。
注意:定义而未初 始化的变量初值是未知的。
变量的初始化是在编译时将值送入相应的存储空间,可缩短运行时间。
例如: int
sum=0; /*对和值变量,一般置初值为
0。
*/ inte=4,f=4; /*定义了变量e、f并分别赋初值
4。
*/ shorta=291,b=-1; /*变量a的初值是291,b的初值是-1*/ unsignedshortu=65535; /*变量u的初值是65535*/ unsignedlongul=65551; /*变量ul的初值是65551*/ 也可以在程序执行过程中为变量赋值,但占用了程序的运行时间。
例: inta,b; a=10,b=2; /*执行过程中为变量赋值*/
(3)变量的使用(UsingVariable)。
变量的使用指的是在程序中获得变量中所存储的值进行运算。
例:inta,b;/*定义变量未赋初值,则变量的值为随机值*/ a=10; /*执行过程中为变量a赋值*/ b=2*a; /*执行过程中使用变量a并为b赋值*/ 例:inta=10; a=a+1; /*代码执行后,结果a的值是11*/ 在C语言里,“=”表示赋值操作符,表示左右两值“相等”的符号是“==”。
提问:变量的初始化和变量赋值完全相同吗? 【例2-2】阅读并分析程序中的数据及其类型 #include /*文件包含,编译预处理命令*/ #definePI3.1415926 /*宏名定义,定义宏符号PI*/ voidmain(void) /*主函数首部*/ {intr; /*定义半径变量为整型数据*/ doublec,s; /*定义周长和面积为实型变量*/ printf("请输入圆的半径(整数):");/*提示信息*/ scanf("%d",&r); /*人机交互,从键盘输入半径值*/ c=2*PI*r; /*计算圆的周长*/ s=PI*r*r; /*计算圆的面积*/ printf("circum=%6.2f\n",c); /*按要求格式在屏幕上输出周长值*/ printf("area=%6.2f\n",s); /*按要求格式在屏幕上输出面积值*/ } 提问:从该程序中,你得到了哪些数据? 程序中的数据剖析: C
语言中,数据分为常量和变量。
①常量。
常量是其值不能改变的量。
常量也有类型。
语句c=2*PI*r;中,系数2是直接常量,为整数类型。
语句printf("请输入圆的半径 (整数):");中,"请输入圆的半径(整数):"是字符串常量,原样输出到屏幕。
宏符号。
宏定义命令中,#definePI3.1415926把一个直接常量定义为符号PI,它 代替了3.1415926或数学符号π。
π在C语言中是非法的符号,不能直接使用。
宏符号PI 的使用可以减少程序的修改难度。
程序中,可用宏定义命令将程序中常用的一些常量或字符串定义为宏符号,宏符号
般用大写字母。
宏定义是编译预处理命令。
宏定义命令格式如下: #define
宏符号字符串其中格式中的“字符串”可以是一个常量数据。
②变量。
C语言中的变量也有不同的数据类型。
语句intr;和doublec,s;定义了不同的变量名和数据类型,r是整型,c、s是实型。

(5)测试:程序运行时从键盘输入一个整数,将输出结果与数学运算的结果进行比较,如果结果一致说明程序正确。
提问:数据和数值含义相同吗? 小结: 本次课主要介绍了C语言中标识符、常量的表示方法、变量的定义和使用要求会应用所学知识处理简单问题。
下一讲概要: 下一次讲解C语言的运算符、表达式及各种数据之间的类型转换。
作业: 复习课堂上讲过的内容(读教材、课件)课后习题预习实验
周次 第1周 课次
2 教学时数
2 实验名称 熟悉VisualC++集成开发环境 实验类型 验证性/设计性 实验环境(实验设备) 硬件:微型计算机软件:MicrosoftVisualC++6.0 实验目的与要求 实验过程
1.学习并了解VisualC++6.0的开发环境。

2.掌握在VisualC++6.0开发环境中编辑、编译、连接和运行一个C语言程序的方法。

3.理解C语言程序的基本结构。

4.通过执行几个简单的C语言程序,掌握C语言程序的执行步骤。

5.练习编写简单C语言程序。
(一)教师引导学生回顾本次实验所涉及的知识点,简述实验目的、要求和内容。
(二)学生动手实验过程(三)教师总结本次实验学生遇到的问题,并重申实验作业完成及上交时间。
实验后记 实验内容 实验题目1:在VisualC++6.0开发环境中输入下列程序,练习程序的编辑、编译、连接和运 行的方法。
实验题目2: 在VC++6.0中复制粘贴如下程序,编辑并运行,观察输入时的程序风格和输出结 果。
#include voidmain() { intnum1=3,num2=4;/*定义整数变量num1,num2,值分别是3和4*/ printf("两个变量值为:\n"); /*输出,提示信息*/ printf("%d,%d\n",num1,num2);/*按要求格式输出变量的数据*/ printf("其中:\n"); /*输出,提示信息*/ printf("num1=%d,num2=%d\n",num1,num2);/*按要求格式输出数据*/ } 问题1:删除所有的“\n”,再编译并运行程序,观察程序的执行结果,并思考原 因。
问题2:删除任何一个“;”,编译程序,观察编译结果;修改程序,再观察程序 执行结果,并写出现象和原因。
问题3:修改“main”为“stu”,编译程序,观察编译结果;运行程序,观察程 序执行结果,并写出现象和原因。
问题4:删除“}”,编译程序,观察编译结果;修改程序,再观察程序执行结果, 并写出现象和原因。
实验题目3: 下列程序中存在错误,输入程序并调试,观察Output窗口中所显示的出错或警告信息,根据出错信息的提示修改程序,使程序能够正常运行。
/**********************found***********************/#include"stdio.h";voidmain()/**********************found***********************/ {printf(姓名:\t)printf("王丽"); /**********************found***********************/printf(学号:\t);printf("2011400206"); } 实验题目4: 编写程序,运行后输出下面内容(自己编写5个同学信息): 学号 姓名 性别 年龄 籍贯
1 刘敏 男 20 山西运城
2 孙乾 拓展题目1: 编写程序,输出一个由“*”组成的矩形。
拓展题目2: 使用printf语句输出一个由各种符号组成的图案。
周次 第3周 课次
1 教学时数
2 课题 教学目的与要求 教学重点 C语言基础知识
1、熟练掌握算术运算符与算术表达式的使用
2、熟练掌握赋值运算符和赋值表达式的使用
3、熟练掌握逗号运算符和逗号表达式的使用
4、熟练掌握其它运算符的使用
5、掌握数据类型转换与各种类型数据之间的混合运算
1、自增、自减运算符及其构成的算术表达式
2、赋值运算符和赋值表达式 教学难点自增、自减及其构成的算术表达式 课程类型 教学方法设计 理论课(√) 实验课() 教学方法 讲授、演示、讨论 教学手段参考资料 多媒体课件、软件演示、板书 《C语言程序设计教程》,杨路明主编,北京邮电大学出版社 《C程序设计教程》,谭浩强主编,高等教育出版社 教学后记 主要内容、步骤及时间分配 上讲内容回顾新课引入 本节内容简介 本讲新授课内容 2.6运算符与表达式 数据类型转换 课堂小结 下一讲概要 教 作业 学 过 程 设 计 备注 引入: 要在程序中实现一定的功能除了要用变量常量等数据外,还要对数据进行一定的处理,需要用到运算符。
本节新授课内容:
一、运算符与表达式 (一)运算符概述
1.运算符C语言中,除了控制程序的流程和对数据的输入/输出,其它操作都作为运算处理,所以C语言有丰富的运算符。

(1)运算符分类按运算符可结合的操作数个数,分为:单目运算符(UnaryOperator)、双目运算符(BinaryOperator)和三目运算符(TernaryOperator)。

(2)运算符的优先级(Priority)和结合性(Combine)若一个表达式中有多个运算符,则各种运算符的优先级决定运算的先后顺序。
若一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
按运算符决定的操作数运算结合方向,结合性分为:左结合(自左向右)和右结合(自右向左)。

2.表达式(Expression)由运算符和圆括号把操作数连接组成的式子叫表达式。
操作数可以是常量、变量、函数或表达式。
所有表达式均有结果,表达式的值是指表达式中的操作数按照一定的运算规则和顺序进行各种运算得到的结果。
注意,任何表达式加上分号“;”,即可构成了C语句。
(二)算术运算符(ArithmeticOperators)和算术表达式 C语言提供的算术运算符分为基本算术运算符、正负号运算符和自增自减运算符三大类。
算术运算符用于对整型、实型等数值型数据进行运算,因为字符型数据有唯一对应的ASCII 码值,也可以参与算术运算,算术运算的运算结果是数值型数据。
单目 双目 运算符 ++ -- + - + - * / % 名称 自加 自减 正 负
加减乘除求余 结合方向 右结合 左结合
1.基本算术运算符 基本算术运算符有+、-、*(乘)、/(除)和%(求余)5个,它们都是双目运算符,其 中*、/和%为同一级别的运算符,高于+、-运算符。
它们具有自左向右的结合性。

(1)除法运算 除运算符号是“/”,分为:整除和实除。
如果除运算的两个操作数都是整型数据,则运 算结果也为整型,叫“整除”;若除数或被除数有一个是实数,则是实除,结果是实型。
如: int
a=5/2; /*整除,结果a值等于
2,而不是2.5*/ “整除”和“实除”不同。
5/2的整除结果是
2,该结果赋值给整型变量a。
不是因为a 是int型导致结果为
2。
再如,floata;a=5/2; 提问:因为a是实型,所以a的值为2.5,正确吗? a为实型,经运算后a的值是2.000000,非2.5。
事实上,精度丢失是在计算5/2时就 发生了。
所以要使a的结果为2.5,应将语句写为: floata=5.0/2;或者:a=5/2.0;或者:a=5.0/2.0; 又如,charch=101;intb=ch/3; /*整除,b的值为33*/ 典型的,求表达式1/2*(a+b)的结果。
因为1/2的结果为整型
0,所以整个表达式的结 果为
0。

(2)%(求余)运算 求余运算的操作数只能是整数类型。
设有定义: inta=5%2; /*a的值是
1,即5除以2的余数为1*/ 注意:求余操作结果的符号与机器有关,一般是与第一个操作数符号相同。
利用求余运算可以对数据进行一些特殊的判断。
求余运算应用1:判断奇偶数据。
练习:如何表示整数x为5的倍数? 求余运算应用2:拆分整数的各位数字。
利用整除和求余运算,可以拆分出一个多位整数的各位数字。
若有变量定义intm;,且m为一个3位的整数,则表达式m/100可以得到m的百位数, 表达式m/10%10可以得到m的十位数,表达式m%10可以得到m的个位数。
练习:请将1234的各位拆分出来。
求余运算用于求整除的余数,所以求余“%”不能用于实数运算(float和double)。

2.+(正)、-(负)运算符及表达式 它们是单目运算符,具有右结合性。
注意,所有单目运算符优先级高于双目运算符。

3.自增(Increment)/自减(Decrement)运算符 自增运算符++使运算量增加
1,而自减运算符--使运算量减
1。
自增和自减运算符的操作数只能是变量,不能是常量和表达式。
自增(减)运算符是单 目运算符,优先级与正、负号优先级相同,但高于基本的算术运算符,结合性为自右向左。
++、--作用于变量的形式有前置方式(Prefix)和后置方式(Postfix)两种。
如表达式中仅对单个变量进行前置或后置的自运算(Self-operation),变量结果相同。
若有语句如下: int
n=10; n++;/*或者++n;,无论是经过++n还是n++的自运算后,n的值都是11*/ n--;/*或者--n;,无论是经过--n还是n--的自运算后,n的值都是

10*/ 注意:
(1)自增和自减运算符只能用于变量,象(a+b)++这样的表达式是错误的。

(2)自增和自减运算符的结合方向是“自右向左”。
如表达式-i++等价于-(i++)。
含有自增(减)的复杂表达式中,自增(减)的前置和后置运算是有区别的,下面通过 一个例题来说明它们之间的区别。

4.

算术表达式 算术表达式是指用算术运算符将各操作数连接起来的、符合一定语法规则的式子。
算术 表达式中可以包含算术运算符、常量、变量、函数和表达式等元素。
如前面所见的5%2、a/2、a+b+c、3+6、a*(b/c-d)、++n等都是算术表达式。
可以通过“()”来改变运算符的优先级。
任何一个表达式经过计算之后都应有一个确定的值和类型,而表达式的值和类型是由运算符的种类和运算符对象的类型决定的。
(三)赋值(Assigment)运算符和赋值表达式
1.赋值运算符(AssignmentOperator)、赋值表达式和赋值语句 赋值运算符用“=”表示,赋值表达式形式如下:变量=表达式 提问:“=”和数学中的等号等价吗? 赋值运算符的结合方向是自右向左。
赋值运算符优先级别很低,仅高于将学到的逗号(,) 运算符。
说明:
(1)赋值号左边只能是任何合法的变量名,右边可是任何合法的
C语言表达式。
如:a+b=3; /*错误!不能给表达式赋值*/
(2)先计算“=”右边表达式的值,转换为左边变量的类型,存入该变量的内存空间。

(3)C语言中,可以使用连续赋值运算操作,但变量初始化时不能连续赋值。
如: inta,b; a=b=100;/*等价于a=(b=100),结果a和b的值都为100*/ a=(b=100)是赋值表达式;而b=100也是赋值表达式,该表达式结果是100,相当于a=100, 其结果也是100,所以最后整个表达式的结果是100。
赋值表达式加上分号,构成赋值语句。
【例3】简单事务处理问题。
交换两个变量值是程序设计中常用算法,编程实现交换两 个变量的值(必记算法)。
分析:
(1)问题背景和陈述:计算机可以进行计算,也可以处理许多与计算无关的事务。
交 换任意两个变量的值即是事务处理。

(2)需求分析:对于任意两个变量
a和b,如变量a的值为
2,变量b的值为
3,则经 过交换后,变量a的值为
3,变量b的值为
2。

(3)处理流程:数据“两两交换”,实际上是交换两个变量内存中的值。
可以借用第
个变量实现数据交换。

(4)根据算法,编写程序如下: #include void
main(void) {floata,b,t; /*定义3个实型变量*/ a=2;b=3; /*给a和b变量赋值*/ printf("交换前:a=%f,b=%f\n",a,b); t=a;a=b;b=t; /*交换两个变量的值*/ printf("交换后:a=%f,b=%f\n",a,b);
/*输出*/ } 提问:为什么程序每次的运行结果都相同? 反复运行上述程序,发现每次运行时输出结果完全相同,程序不具有通用性。
用scanf 函数改进程序,使程序具有通用性。
程序改进: #include voidmain(void) {floata,b,t; /*定义3个实型变量*/ printf("请输入两个变量的值:\n"); /*信息提示语句*/ scanf("%f%f",&a,&b); /*键盘输入a和b

变量的值*/ printf("交换前:a=%f,b=%f\n",a,b); t=a;a=b;b=t; /*交换两个变量的值*/ printf("交换后:a=%f,b=%f\n",a,b); /*输出*/ }
2.

复合赋值运算符 C语言中,复合赋值运算符有:*=、+=、-=、/=、%=等。
如,“+”和“=”连着,中间 不能有空格。
复合赋值表达式:变量+=表达式 复合赋值运算符对变量自身进行某种运算。
其功能也和赋值运算符类似,如
a/=b等价 于a=a/b,m+=3等价于m=m+3、i-=1等价于i=i-
1。
复合赋值运算的优先级和结合方向与赋值运算符相同。
如:inta=1,b=3;a+=b+6;/*a结果为10,等价于a=a+(b+6)*/ 练习:执行表达式:a=a+=a+b后,变量a的值是多少? (四)逗号(Comma)运算符它的功能是将两个表达式连接起来。
逗号表达式的一般形式为: 表达式
1,表达式
2,…,表达式n说明:
(1)逗号运算符的优先级别最低(15级),结合性是自左至右。

(2)逗号表达式求解过程:依次求解每个表达式,即先计算表达式
1,最后计算表达式n。
整个逗号表达式的值是逗号表达式序列中最后一个表达式的值。
交换两个变量值可用逗号表达式序列:t=x,x=y,y=t表示,实现变量值的交换。
注意:并非所有的逗号都是作为逗号运算符的,有的地方仅是作为分隔符使用。
例如printf("%d,%d\n",x,y);语句中,两个参数间的逗号是分隔符。

四、数据类型转换(TypeConversion) C语言允许整型、实型和字符型数据进行混合运算。
混合运算时,要考虑运算符的优先级别、结合方向及数据类型的转换问题。
计算合法的C

语言表达式时,先将表达式中不同 类型的数据转换为同一类型,然后再进行运算。
数据类型转换有时是根据需要由系统自动进 行的(称为自动转换),有时是由编程者强制进行的(称为强制转换)。

1.

数据类型自动转换
(1)算术运算中的数据类型转换C语言计算双目运算符连接的两个操作数,如果操作数类型不同,系统会自动转换为同一种数据类型 进行运算。
转换时,将较低的类型转换为较高的类型, 低intunsigned char,short 使两操作数类型一致(但数值不变),然后再进行表long 达式计算,表达式结果是较高类型的数据。
自动转换遵循“类型提升”的原则,即转换是按 高double float 数据类型提升(由低向高)的方向进行以保证不降低 精度。
数据类型的高低根据类型所占空间的大小来判定,占用空间越大,类型越高。
反之越 低。

(2)赋值运算中的类型转换 在执行赋值运算时,如果赋值运算符两侧的数据类型不同,赋值号右侧表达式类型的数 据将转换为赋值号左侧变量的类型,再进行赋值。
例如,有以下定义: float
a; 执行a=10; /*a的结果值为10.0(数据填充)*/ 又:inta; 执行a=15.5;/*a的结果值为15(数据截取)*/
2.强制类型转换 强制类型转换也称为显式类型转换。
强制类型转换运算符将一个表达式的值强制转换成 所需的数据类型。
语法格式如下: (类型说明符)表达式功能:强行地将表达式的类型转换为括号内要求的类型。
例如:(int)4.2的结果是4;又有定义语句:intx;表达式(float)x表示x的值被强制转换为实型,但是x本身的类型仍是整型,而表达式的类型是float类型。
表达式(int)x+4.2和(int)(x+4.2)不同,前者是将变量x强制转换为整型后再和4.2进行加法运算,而后者是x和4.2先进行加法运算,然后再将运算结果强制转换为整型。
【例4】输入某学生三门课程的成绩,计算平均值。
#includevoidmain(void){intsc1,sc2,sc3,sum=0; floatave;printf("请输入三门课程的成绩(整数):");scanf("%d%d%d",&sc1,&sc2,&sc3);sum=sc1+sc2+sc3;ave=(float)sum/3;printf("平均分为:%.2f\n",ave);}【例5】输入一个三位整数,将其转换为其逆置数输出。
如,输入123,输出321(一个数)。
#includevoidmain(void){intnum,g,s,b;printf("请输入一个三位整数:");scanf("%d",&num);g=num%10;s=num/10%10;b=num/100;num=g*100+s*10+b; printf("逆置数为:%d\n",num);} 小结: 本次课主要对常用的运算符及其构成的表达式和各种类型数据混合运算时,数据类型转换问题进行了介绍,在使用时注意自加、自减运算符表达式和变量值的区别。
下一讲概要: 下一次讲解C语言的输入输出函数和语句。
作业: 复习课堂上讲过的内容习题

标签: #框架 #有哪些 #框架 #反编译 #好玩 #有哪些 #好玩 #开发工具