编程的目标之一是通过运算得到结果,而运算则是建立在操作数据之上的;即便简单如10以内加减法、复杂如游戏、模拟程序等皆是如此。在C语言中,我们可以使用变量来存储数据,每个变量又关联到一个具体的类型。比如:箱子里苹果的个数,可以用一个整型变量存储;而苹果的重量,以小数类型表述更切贴;因此,我们从类型与变量开始。
类型
类型表明了具有某种共同特性的事物抽象,C语言提供了多种数据类型以便我们选择合适的数据表示方式。这里我们先学习三种基础数据类型,以便让我们从太多的语言细节中脱离出来。
字符类型(char)
:通常用来存储字符数据,如字母 ‘a’, ‘X’, '-'等。整型类型(int)
:用于存储正整数、负整数,如1234, 0, -965等。浮点类型(double)
:用于存储带小数点的数据,如3.14,-10.0等,也称为双精度浮点型。
变量
变量是存储数据的容器,它们通常在计算机内存的某个位置并占据一定大小的字节空间,变量名则是用来引用这些空间的一个友好名称。在C语言中,一个名称在被使用之前需要保证它是可见的。
因此,所有的变量都必须先声明后使用;定义一个变量的简易语法为:变量类型 变量名;
如:
char c; // 定义字符型变量 c
int width; // 定义整型变量 width
double pi; // 定义浮点型变量 pi
定义变量后,变量名也就同等的被声明了。变量名是区分大小的,这样 width
与 Width
将表示不同的两个变量。变量名可以包含字母、数字、下划线,但是不能以数字开头。每种语言都保留一些名称供自己使用,这些名称称为保留字,保留字不能用作变量名
,如int、case、if等。
表达式
有了变量这个表达数据的载体,我们就可以对其施加运算,如 a+3, b/5 等。这些建立在数据之上的操作,在C语言中是通过表达式来实现的。表达式由运算符与操作数构建,最简单的表达式是一个单独的操作数。
操作数可以是数据常量 4、-5、变量a、b、c或者是二者通过运算符的的组合(a+30)。C不仅提供了基本算术运算符加减乘除(+、-*、/),还提供了诸如取模(%)、赋值(=)等运算符。通过组合多个操作数与运算符,便可以建立复杂的表达式,下面是一些表达式的示例。
4
-5
3.14 + 9
w % 5
a * b + 7 / 30
表达式最重要的特性就是运行期的每个表达式都会被求值
。值是按照运算符优先级描述的顺序来完成运算。+、-、*、/
这四种运算遵循算术运算的优先级法则与求值顺序;取模(%)与乘( *)、除(/)
优先级一致。当表达式中混合有不同类型的操作数时,会尝试执行自动类型转换操作,如果不能转换到同一类型求值,则表达式错误。这就好比1斤大米与2000克面粉,你可以得到它们的总重量,但如果是2000克面粉与100米距离,计算它们的总合并没有意义。
表达式 | 值 | 说明 |
---|---|---|
4 | 4 | |
-6 | -6 | |
-4+6 | 2 | |
int a = 9 + 3 * 2 | 15 | 使用(=)为变量a设置初值 |
double b = a / 2.0 | 7.50000 | a转换为double类型再与2.0相除 |
a / “hello” | 无意义 | 数值与字符串不能相除 |
语句
语句是构造C程序的基本成分,代表一个表达的结束,每条语句以一个分号标识其结束,对于
4
a + 9
只是表达式,而
4;
a + 9;
; // 空语句
都是语句。在任何表达式后面加上分号,表达式将成为语句。最简单的语句就是一个单独的分号,称为空语句。
合法的表达式都可以应用在确切的语句中, 如:
int width = 16; // 使用操作数16赋值
int height = width / 3 * 4; // 使用表达式赋值
printf("area=%d", width * height); // 表达式作为函数参数(函数最终使用的是表达式的值)
练习
- 定义三种类型的变量,并为它们选取有意义的名称。
- 假设程序中有代码
4 + 5.0
,试想一下程序做了哪些操作。