第二讲 数据类型,运算符和表达式
Post on 03-Jan-2016
99 Views
Preview:
DESCRIPTION
TRANSCRIPT
1
第二讲 数据类型,运算符和表达式
本讲要点熟悉关键字、标识符、常量、变量等术
语;掌握 C 语言的三种基本数据类型;掌握几种常见的运算符(算术运算符、
赋值运算符,逗号运算符)掌握几种常见的表达式(算术表达式、
赋值表达式,逗号表达式)
2
1. 常量与变量 常量:在程序运行过程中,值不能被改变的量。 如: 123 , 1.5 ,‘ a’ ,“ hello” 等; 变量:在程序运行期间,值可以改变的量。
对于程序中每一个变量,在对程序编译连接时由编译系统给每一个变量分配对应的内存空间,用于存放变量的值,在变量名和内存地址之间由系统自动建立对应关系。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据
3
变量命名规则 变量命名的规定:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
例: 1 . sum , _total, month, Student_name , lotus_1_2_ 3, BASIC, li_ling
2 . M.D.John, ¥ 123,3D64,a>b
4
变量命名注意 编译系统将大写字母和小写字母认为是两个不同的字符。
建议变量名的长度最好不要超过 8 个字符。 在选择变量名时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写)。
要求对所有用到的变量作强制定义,也就是“先定义,后使用” 。
5
标识符、关键字 标识符标识符
标识符是变量,函数,标号等的标识符是变量,函数,标号等的名字或标记名字或标记 两类:两类:
系统定义的标识符,例如:系统定义的标识符,例如: printfprintf 、、 scanfscanf 、、 mainmain 等等 用户自己定义的,自己定义标识符时要考虑如下问题:用户自己定义的,自己定义标识符时要考虑如下问题:
只能用字母、 数字和下划线,并且第一个字母只能是字母或下划只能用字母、 数字和下划线,并且第一个字母只能是字母或下划线;线;
不能与关键字不能与关键字 (( 系统保留的特殊词汇系统保留的特殊词汇 )) 相同相同 ;; 区分大小写,即区分大小写,即 RR 和和 rr 是两个不同变量。是两个不同变量。 为便于阅读和理解,对象的取名尽可能直观为便于阅读和理解,对象的取名尽可能直观 , , 不要用系统定义的不要用系统定义的
标识符标识符 ,, 更不能用更不能用 CC 语言的关键字。语言的关键字。 关键字关键字
CC 语言中有特殊含义的词语言中有特殊含义的词 (( 在在 VCVC 中变蓝的词中变蓝的词 )) ,共,共 3232 个个
6
2. 数据类型
数据类型
基本类型
构造类型
指针类型空类型
整型
实型(浮点型)字符型 char
枚举类型数组类型结构体类型共用体类型
单精度实型 float
双精度实型 double
基本整型 int长整型 long int短整型 short int无符号整型 unsigned
7
整型变量的分类: 类型 类型说明符 长度 数的范围类型 类型说明符 长度 数的范围 基本型 基本型 int 2int 2 字节 字节 -32768-32768 ~~ 3276732767
短整型 短整型 short 2short 2 字节 字节 -2-21515 ~~ 221515-1 -1
长整型 长整型 long 4long 4 字节 字节 -2-23131 ~~ 223131-1-1
无符号整型 无符号整型 unsigned 2unsigned 2 字节 字节 00 ~~ 6553565535
无符号短整型 无符号短整型 unsigned short 2unsigned short 2 字节 字节 00 ~~ 6553565535
无符号长整型 无符号长整型 unsigned long 4unsigned long 4 字节 字节 00 ~(~( 223232-1-1 ))
3. 三种基本数据类型3.1 整型数据
整型数据的长度因系统的不同而变化;不同类型的整数其所能表示的数据范围不一样,在实际应用时根据具体情况来选择。
8
整型变量 整型变量的定义 : C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。
格式:变量类型(后跟至少一个空格)变量名 例如 : int a,b (指定变量a、b为整型) unsigned short c,d; (指定变量c、d为
无符号短整型) long e,f;( 指定变量e、f为长整型)
9
例 3.2 整型变量的定义与使用
#include <stdio.h>void main (){ int a,b,c,d; /* 指定a、b、c、d为整型变量 * / unsigned u; / * 指定u为无符号整型变量 * / a= 12 ;b= -24 ;u= 10 ; c=a+u;d=b+u; printf (″a+u=%d,b+u=%d\n″,c,d); }
说明: 说明: 所有变量必须在第一条可执行语句前定义; 一条声明语句可声明多个同类型的变量; 可以看到不同种类的整型数据可以进行算术运算
说明: 说明: 所有变量必须在第一条可执行语句前定义; 一条声明语句可声明多个同类型的变量; 可以看到不同种类的整型数据可以进行算术运算
10
3.2 浮点型数据 浮点型数据的分类
浮点型变量分为单精度( float型)、双精度( double型)和长双精度型( long double)三类形式。
类型 字节 数的范围 有效数字类型 字节 数的范围 有效数字
float 4float 4 10 10-37 -37 ~ ~ 101038 38 66~~7 7 位位doubledouble 型 型 88 10 10-307-307~~1010308308 15 15~~1616 位位
long double 16 10long double 16 10-4931-4931~~10104932 4932 1818~~1919 位位
和整型数据一样,不同类型的浮点数其所能表示的数据范围不一样,在实际应用时根据具体情况来选择。
11
浮点型变量 浮点型数据的定义
格式:变量类型(后跟至少一个空格)变量名例如:
float a;(定义 a 变量为 float型 )double b,c;(定义 b 变量为 double型)long double c;(定义 c 变量为 long double)
…
12
3.3 字符型变量
字符型变量用来存放字符常量,注意只能放一个字符。
格式:变量类型(后跟至少一个空格)变量名 如字符变量的定义形式如下: char c1,c2;
一个字符变量在内存中占一个字节。
13
字符型数据字符数据在内存中的存储形式及其使用方法 一个字符常量存放到一个字符变量中,实际上并不是把该
字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。
例 char c1=‘a’,c2=‘b’;注意 : 一个字符数据既可
以以字符形式输出,也可以以整数形式输出。
14
例 3.7 大小写字母的转换
#include <stdio.h>void main() {char c1,c2 ; c1=’a’; c2=’b’; c1=c1-32; c2=c2-32; printf(“ % c % c″ , c1,c2 ); }
运行结果:A B
说明:说明: 程序的作用是将两个小写字母 a 和 b 转换成大写字母 A 和 B 。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的 ASCII码大 32。
C语言允许字符数据与整数直接进行算术运算。
说明:说明: 程序的作用是将两个小写字母 a 和 b 转换成大写字母 A 和 B 。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的 ASCII码大 32。
C语言允许字符数据与整数直接进行算术运算。
15
字符串
字符串常量 字符串常量是一对双撇号括起来的字符序
列 . 合法的字符串常量 : “ How do you do.”, “CHINA”, “ a” , “ $123.45”
可以输出一个字符串,如 printf(“How do you do.”);
16
字符和字符串
‘a’是字符常量,“a”是字符串常量,二者不同。
如:假设 c 被指定为字符变量 : char c
c=’a’; c=” a” ; c =” CHINA”;
结论:不能把一个字符串常量赋给一个字符变量。
17
字符和字符串 C规定:在每一个字符串常量的结尾加一个 “字符串结束
标志”,以便系统据此判断字符串是否结束。 C规定以字符’\0’作为字符串结束标志。
如:如果有一个字符串常量”CHINA” ,实际上在内存中是: C H I N A \0
它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。
18
4. 各类数值型数据间的混合运算混合运算:整型(包括 int,short,long)、浮点型(包括
float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型 , 然后进行运算 .
说明: 横向表示必定的转换; 纵向表示运算对象为不同类型
时的转换方向; 这种类型转换是由系统自动进
行的。
说明: 横向表示必定的转换; 纵向表示运算对象为不同类型
时的转换方向; 这种类型转换是由系统自动进
行的。
说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如 3+6.5 。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。
说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如 3+6.5 。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。
19
强制类型转换运算符
可以利用强制类型转换运算符将一个表达式转换成所需类型。 一般形式 : (类型名)(表达式)例如: (double)a 将a转换成 double类型 (int)(x+y) 将 x+y的值转换成整型 (float)( 5%3) 将 5%3的值转换成 float型
20
5. 小结 1. 变量必须先定义,后使用; 2. 变量有不同的类型;根据需要来选择类型; 3. 不同的数据类型在内存中占用的字节数不一
样,所能表示的数据范围也不一样,; 4. 变量定义的格式: 类型名 变量名
中间至少一个空格
21
5. 一条语句可以定义多个同一类型的变量; 6. 变量命名需要遵从一定的规则(以字母
和下划线开头;见名知义;不能与 C 系统定义的标识符和关键字相同等);
7. 区分大小写
22
6. 变量赋初值 赋值运算符 “ =” 赋值表达式 由赋值元算符将一个变量和一
个表达式连接起来的式子。 格式:〈变量〉〈 = 〉〈表达式或常量〉
如 : int a=3; // 指定a为整型变量,初值为3 float f=3.56; // 指定f为浮点型变量,初值为3 .56 char c= ‘a’; // 指定c为字符变量,初值为‘ a’
23
复合的赋值运算符
复合的赋值运算符 在赋值符“=”之前加上其他运算符,可以构成复合的运算符。例如 : a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) x / =3 等价于 x=x/ 3
以“a+=3”为例来说明,它相当于使a进行一次自加3的操作。即先使a加3,
再赋给a。
24
7.1 基本的算术运算符• + (加法运算符,或正值运算符。如 : 3
+5、+3)• - (减法运算符,或负值运算符。如 : 5
-2、-3)• * (乘法运算符。如 : 3 * 5)• / (除法运算符。如 : 5/3)• % (模运算符,或称求余运算符,%两侧
均应为整型数据,如 : 7%4的值为3)。
7. 算术运算符和表达式
25
7.2 算术表达式 用算术运算符和括号将运算对象 ( 也称操
作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。
例如 : a *b/c-1 .5 +′ a′ 是一个合法的表达式
26
算术表达式的求解 C语言规定了运算符的优先级和结合性。
在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。 e.g. a-b*c+d;
对于同一优先级,C规定了各种运算符的结合方向( 结合性 )
算术运算符的结合方向为“自左至右”,即先左后右 。
运算对象与运算符的结合方向。如“左结合性”,表示运算对象先与左边的运
算符结合, e.g. a-b+c;
27
自增、自减运算符
++, - - 作用是使变量的值增1或减1如: ++i,--i(在使用i之前,先使i的值加 (减)1) i++,i--(在使用i之后,使i的值加( 减)1)例: i=3;j=i++;k=++i;请问j 和 k 的值是否一样?各
为多少?
j=3, k=4 , i=4
28
注意: (1)自增运算符(++),自减运算符(--),
只能用于变量,而不能用于常量或表达式, (2)++和--的结合方向是“自右至左”。
说明: 自增(减)运算符常用于循环语句中使循环变量自动加1。也用于指针变量,使指针指向下一个地址 C语言中有的运算符为一个字符,有的运算符由两个字符组成 ,为避免误解,最好采取大家都能理解的写法。 例如:不要写成i+++j的形式,而应写成 (i++)+j或者i+(++j)的形式 使用++,--时容易出现意想不到的问题,初学者慎用
29
8. 逗号运算符和逗号表达式 逗号运算符: “,” 逗号表达式:将两个表达式连接起来,又称为“顺序求值运算符”
一般形式 : 表达式1,表达式2 如:3+ 5,6+8
求解过程: 先求解表达式1,再求解表达式2。整个逗号表达式的
值是表达式2的值。 逗号表达式 的
值为 14
30
9. 总结 本讲主要涉及到 C 中的一些基本语法知识,
对于语法知识没有太多“为什么?”,需要记忆的必须在理解的基础上记忆;
对于语法知识,先掌握常用的一些,一开始不必细扣太多,后面有了一定的基础后再补充;
开始学习写程序,多读别人的程序,在读懂的基础上加以模仿、借鉴、应用。
31
课堂练习 1 :求圆的周长和面积编写 C 程序计算圆的周长和面积,并输出。
问题的分析 用户:请给我计算一下圆的周长和面积。 计算机:请问半径是多少? 用户: 5.3 。 计算机:圆的周长 =2*π*5.3=33.3 ; 圆的面积 =π*5.3*5.3=88.25
32
算法
要求用户输入半径要求用户输入半径
计算周长和面积计算周长和面积
输出计算结果输出计算结果
开始
结束分析:
1. 需要用到几个变量?
2. 变量是什么类型?
3. 变量之间的关系是什么?
33
参考程序 #include<stdio.h> main() { float r,C,S; /* 定义了三个 float 型变量 */ r=3; /* 给半径赋初值 */ C=2*3.14*r; /* 给出计算周长的表达式 */ S=3.14*r*r; /* 给出计算面积的表达式 */ printf(“C=%f,S=%f”,C,S);/* 输出 */ }
printf 函数:•一般格式: printf( 格式控制,输出表列 ) •格式控制:“ ”引起的字符串。包括两个方面信息:格式说明(由 % 和格式字符组成,如 %d , %f… )和普通字符(原样输
出)
34
课堂练习 2 年龄计算问题 小名今年 5岁,他父亲的年龄是他的 5倍还多 3岁,他爷爷的年龄是他的 15倍还差 2岁,他妈妈的年龄刚好是他的 5倍,编程求出小名父母及爷爷的年龄。
分析:
1. 他们的年龄如何表示?
2. 需要几个变量?
3. 变量的类型是什么?
4. 变量之间的关系是什么?
35
作业 P67 3.7 3.8 3.10
top related