5.1 基本运算符
1.赋值运算符:=
在C语言中,=并不意味着“相等”,而是一个赋值运算符,下面表达式语句意为把值2017赋给变量bmw:
bmw = 2017;
2.几个常见的术语:数据对象、左值、右值和运算符
1.用于储存数据的数据储存区域统称为数据对象。
2.左值是C语言的术语,用于标识特定数据对象的名称或表达式。
3.右值是指能赋值给可修改左值的量,且本身不是左值。
4.加法运算符:+
加法运算符用于加法运算,使其两侧值相加。
5.减法运算符:-
减法运算符用于减法运算,使其左侧数减去右侧数。
6.符号运算符;-和+
减号还可以标明和改变一个值得代数符号,如:
rocky = -12 ;
7.乘法运算符:*
符号*代表乘法,如:cm = 2.54 * inch;
8.除法运算符:/
C使用符号/来表示除法,/左侧的值是除数,右侧的值是被除数。
5.2 运算符优先级
运算符优先级(从高到低):
运算符
结合律
()
从左往右
+ - (一元) 从右往左
* /
从左往右
+ - (二元)
从左往右
=
从右往左
5.3 其他运算符
1.sizeof运算符和size_t类型
在前几章就是用过sizeof运算符,sizeof运算符以字节为单位返回运算对象的大小。运算对象可以使具体的数据对象或类型。
C语言规定,sizeof返回size_t类型的值。
2.求模运算符:%
求模运算符用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数。只能用于整数,不能用于浮点数。
3.递增运算符:++
递增运算符执行简单的任务,将其运算对象递增1,该运算符以两种形式出现,如:++i和i++,两种形式的区别在于递增行为发生的时间不同。
正确的使用递增运算符可以使程序代码简洁。
4.递减运算符:--
与递增运算符相对,递减运算符将其运算对象递减1。
5.优先级
递增运算符和递减运算符都有很高的优先级,只有圆括号的优先级比它们高。
5.4. 表达式和语句
1.表达式
表达式由运算符和运算对象组成。
C表达式的一个最重要特性是,每个表达式都有一个值,要获得这个值,必须根据运算符优先级规定的顺序来执行操作。
2.语句
语句是C程序的基本构建块。一条语句相当于一条完整的计算机指令。
最简单的语句是空语句: ;
3. 复合语句
复合语句是 用花括号括起来的一条或多条语句,例:
index = 0;
while(index++ < 10)
{
sam = 10 * index +2 ;
printf(“sam = %d\n”,sam);
}
4.类型转换
通常,在语句和表达式中应使用类型相同的变量和常量,但是,如果使用混合类型,C语言不会像Pascal那样停在那死掉,
而是采用一套规则进行自动类型转换。虽然这很便利,但是有一定的危险性,尤其是在无意间混合使用类型的情况下。
类型的级别从高到低依次是:long double 、double、float、unsignedlong long、long long、、unsigned long、long、
unsigned int、int。
在赋值表达式语句中,计算结果的最终结果会被转化成赋值变量的类型。这个过程可能导致升级或降级,所谓降级,是指
把一种类型转换成更低级别的类型。
当作为函数参数传递时,char和short被转换成int,float被转换成double。
5.强制类型转换运算符
通常,应避免自动类型转换,尤其是类型降级。有时需要进行精确地类型转换,或者在程序中标明类型转换的意图,这种情况
要用到强制类型转换。圆括号和它括起来的类型名构成了强制类型转换运算符,例:
mice = (int)1.6 + (int) 1.7 ;
5.5 带参数的函数
示例代码:
#include
#include
void pound (int n); //ANSI函数原型声明
int main(void)
{
int times = 5;
char ch = '!'; //ASCII码是33
float f = 6.0f;
pound(times);
pound(ch);
pound(f);
return 0 ;
}
void pound(int n) //ANSI风格函数头
{
while (n-- > 0) //表明该函数接受一个int类型的参数
printf("#");
printf("\n");
}
首先来看程序的函数头:
void pound(int n)
如果函数不接受任何参数,函数头的圆括号中应该写上关键字void。由于该函数接受一个int类型的参数,所以
圆括号中包含一个int类型变量n的声明。
声明参数就创建了被称为形式参数(简称形参)的变量。
在该程序中,调用pound(times)就是把times的值(5)赋给n。我们称函数调用传递的值为实际参数(简称实参)。
变量名是函数私有的,即在函数中定义的变量名不会和别处的相同名称发生冲突。
5.6 编程练习
1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define 或const创建一个
表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0才停止循环。
编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括)比输入的值大10
的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用空格、制表符
或换行符分开。
2.编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数。要求打印的各值之间用一个空格、
制表符或换行符分开。
编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括)比输入的值大10
的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用空格、制表符
或换行符分开。
编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括)比输入的值大10
的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用空格、制表符
或换行符分开。
3.编写一个程序,提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。
main()函数要求把用户输入的值传递给该函数。