你该逆袭了
零、章节先容
1、关键字:while、typedef
2、运算符:=、-、*、/ 、%、++、–、
3、C语言的各种运算符,包括用于平凡数学运算的运算符
4、运算符优先级以及语句、表达式的含义
5、while循环
6、复合语句、自动范例转换和逼迫范例转换
7、如何编写带有参数的函数
一、基本运算符
1、赋值运算符
赋值表达式语句的目的:把值储存到内存位置上。
几个术语:数据对象、左值、右值、运算符
(1)、数据对象
用于储存值的数据存储区域
(2)、左值
C语言的术语,用于标识特定数据对象的名称或表达式。
左值:用于标识或定位存储位置的标签。
由于C语言的发展,C尺度新增了一个术语:可修改的左值。
可修改的左值:用于标识可修改的对象。
当前的C尺度建议:使用术语 对象定位值 更好。
(3)、右值
能赋值给可修改左值的量。
当前尺度在描述这一概念的时,使用的是:表达式的值。
(4)、运算符
“吃汉堡”:“吃” 就是 “运算符操作”;“汉堡” 就是 “运算对象”
- int ex;
- int why;
- int zee;
- const int TWO = 2;
- why = 42;
- zee = why;
- ex = TWO * (why + zee);
复制代码 ex、why、zee 都是可修改的左值(或对象定位值),
它们可用于赋值运算符的 左侧 和 右侧 。
TWO 是不可改变的左值,
它只能用于赋值运算符的右侧。
表达式(why + zee)是右值,
该表达式不能表示 特定内存位置,而且不能给它赋值。
它只是程序计算的一个暂时值,在计算完毕后便会抛弃。
2、加法运算符
- income = salary + bribes;
复制代码 income、salary、bribes、都是 可修改的左值。
表达式:salary + bribes,是一个右值。
3、减法运算符
4、符号运算符:- 和 +
5、乘法运算符:*
1、指数增长
棋盘中计算谷粒的总数
- //P109 程序清单5.5
- #include <stdio.h>
- #define SQUARES 64 //棋盘中的方格数
- int main()
- {
- const double CROP = 2E16;
- double current = 0;
- double total = 0;
- int count = 1;
- printf("square grains total ");
- printf("fraction of\n");
- printf(" added grains ");
- printf("world total\n");
- total = current = 1.0; //从 1 颗谷粒开始
- printf("%4d %15.2e %11.2e %10.2e\n", count, current, total, total / CROP);
- while (count < SQUARES)
- {
- count = count + 1;
- current = 2.0 * current; //下一个方格谷粒翻倍
- total = total + current; //更新总数
- printf("%4d %15.2e %11.2e %10.2e\n", count, current, total, total / CROP);
- }
- printf("That's all\n");
- return 0;
- }
复制代码
6、除法运算符:/
截断:在C语言中,整数除法结果的小数部门被抛弃,这一过程被称为 截断。
- //P110 程序清单5.6
- //演示除法
- //截断:在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为 截断。
- #include <stdio.h>
- int main()
- {
- printf("integer division: 5/4 is %d \n", 5 / 4); // 1
- printf("integer division: 6/3 is %d \n", 6 / 3); // 2
- printf("integer division: 7/3 is %d \n", 7 / 4); // 1
- printf("floating division: 7./4. is %1.2f \n", 7. / 4.); // 1.75
- printf("floating division: 7./4 is %1.2f \n", 7. / 4); // 1.75
- return 0;
- }
- //整数除法 会截断计算结果的小数部分(丢弃整个小数部分),不会 四舍五入 结果。
- //混合整数 和 浮点数 计算的结果是 浮点数。
- //实际上,计算机不能真正用 浮点数 除以 整数,
- //编译器会把两个运算对象转换成相同的类型。
- //本例中,在进行除法运算前,整数 会被转换成 浮点数。
复制代码 整数除法 会截断计算结果的小数部门(抛弃整个小数部门),不会 四舍五入 结果。
混淆整数 和 浮点数 计算的结果是 浮点数。
实际上,计算机不能真正用 浮点数 除以 整数,
编译器会把两个运算对象转换成雷同的范例。
本例中,在举行除法运算前,整数 会被转换成 浮点数。
- #include <stdio.h>
- int main()
- {
- printf("%d\n", -5 / 2); // -2
- return 0;
- }
- //C99标准以前,C语言给语言的实现者留有一些空间,让他们来决定如何进行负数的整数除法。
- //一种方法是:舍入过程 采用小于或等于 浮点数 的最大整数。
- //当然,对于 3.8 而言,处理后的 3 符合这一描述。
- //但是 -3.8 会怎样?
- //该方法建议四舍五入为 -4,因为 -4 小于 -3.8.
- //但是,另一种舍入方法是 直接丢弃小数部分。
- //这种方法被称为 趋零截断,即把 -3.8 转换成 -3.
- //在C99以前,不同的实现采用不同的方法。
- //但是 C99 规定使用 趋零截断。
- //所以,应把 -3.8 转换成 -3.
复制代码 C99尺度以前,C语言给语言的实现者留有一些空间,让他们来决定如何举行负数的整数除法。
一种方法是:舍入过程 采用小于或即是 浮点数 的最大整数。
固然,对于 3.8 而言,处理后的 3 符合这一描述。
但是 -3.8 会怎样?
该方法建议四舍五入为 -4,由于 -4 小于 -3.8.
但是,另一种舍入方法是 直接抛弃小数部门。
这种方法被称为 趋零截断,即把 -3.8 转换成 -3.
在C99以前,差别的实现采用差别的方法。
但是 C99 规定使用 趋零截断。
以是,应把 -3.8 转换成 -3.
7、运算符优先级
如果两个运算符的 优先级 雷同怎么办?
如果它们处理同一个运算对象,则根据他们在语句中出现的顺序来实行。
对大多数运算符而言,
这种情况都是按从左到右的顺序来举行(=等个别运算符除外)
8、优先级 和 求值顺序
如果两个运算符的 优先级 雷同怎么办?
如果它们处理同一个运算对象,则根据他们在语句中出现的顺序来实行。
对大多数运算符而言,
这种情况都是按从左到右的顺序来举行(=等个别运算符除外)
运算符优先级 为表达式中的求值顺序提供紧张的依据,但是并没有规定所有的顺序。C 给语言的实现者留有选择的余地。思量下面的语句:
当运算符共享一个运算对象时,优先级决定了求值顺序。
例如上面的语句中,12 是 * 和 + 运算符的运算对象。
根据运算符的优先级,* 的优先级比 + 高,以是先举行 * 运算。
雷同地,先对 5 举行 * 运算,而不是 + 运算。
简而言之,先举行两个 * 运算:6 * 12 和 5 * 20,再举行 + 运算。
但是,优先级并未规定到底先举行哪一个 * 运算。
C 语言把自动权留给语言的实现者,根据差别的硬件来决定先计算前者还是后者。
大概在一种硬件上采用某种方案服从更高,而在另一种硬件上采用另一种方案服从更高。
无论采用那种方案,表达式都会简化未 72 + 100,以是这并不影响终极的结果。
但是,读者大概会根据乘法从左往右的结合律,认为应该先实行 + 运算符左边的乘法。
结合律只适用于 共享 同一运算对象运 算符。
例如,在表达式 12 / 3 * 2 中,/ 和 * 运算符的优先级雷同,共享运算对象 3.
因此,从左往右的结合律 在这种情况下起作用。
表达式简化为 4 * 2 ,即 8 (如果从右往左计算,会得到 12 / 6,即 2 ,这种情况下计算的先后顺序会影响终极的计算结果)。
在该例中,两个 * 运算符并没有共享用一个运算对象,因此从左往右的结合律不适用这种情况。
二、其他运算符
C 语言约莫有 40 个运算符,以下先容 4 个比较有用的运算符。
1、sizeof 运算符 和 size_t 范例
C语言规定,sizeof 返回 size_t 范例的值。这是一个 无符号整形 范例。
C99 做了进一步调整,新增了 %zd 转换说明用于 printf() 显示 size_t 范例的值。
如果系统不支持 %zd,可使用 %u 或者 %lu 代替 %zd。
- #include <stdio.h>
- int main()
- {
- int n = 0;
- size_t intsize;
- intsize = sizeof(int);
- printf("n= %d, n has %zd bytes; all ints have %zd bytes.\n", // 0 4 4
- n, sizeof n, intsize);
- return 0;
- }
- //C语言规定,sizeof 返回 size_t 类型的值。这是一个 无符号整形 类型。
- //C99 做了进一步调整,新增了 %zd 转换说明用于 printf() 显示 size_t 类型的值。
- //如果系统不支持 %zd,可使用 %u 或者 %lu 代替 %zd。
复制代码 2、求模运算符:%
% 只能用于整数,不能用于浮点数。
3、递增运算符:++
4、递减运算符:- -
类同。
5、优先级
只有 圆括号 的优先级 比 递增运算符(++)和递减运算符(–) 高。
6、不要自作聪明
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |