该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

C语言研究性学习的路线

现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常“误导”读者,于是,“死记硬背”便成了学习C语言的唯一选择。本文

以拙作《新编C语言程序设计教程》(清华大学出版社出版,配套视频zeq126.56.com)为基础,探讨了C语言的研究性学习。

二、 表达式的求值

(一)基础知识

在后面加一个分号(;),C语言表达式就变成了C语句,此时计算机执行C语句的过程就是对表达式求值的过程,因此表达式求值实际上模拟了计算机的计算。

C语言表达式的重要特征是每个表达式都有一个确定的值及类型。求值时需根据操作符的优先级和结合性来确定运算顺序。能否顺利地求出表达式的值可作为判断C语言表达式是否合法的依据。

从表3-1可知,C语言操作符的种类繁多,但是数学上常见的一些运算在C语言中却并没有相关的操作符,如求平方根、求绝对值、幂运算等,不过C语言提

供了相应功能的库函数,如sqrt函数、fabs函数、pow函数等。与printf函数类似,使用这些库函数需要在程序中包含math.h头文件

(#include )。

重点:

1. 每个表达式都有一个确定的值。

2. 利用数学库函数写出常见的数学式子。

3. 查表根据优先级和结合性利用加括号的方式确定复杂的表达式的求值顺序,如3+5*2为(3+(5*2));i=j=k=23为(i=(j=(k=23)))。

(二)赋值表达式

赋值操作符的优先级倒数第二,右结合。

重点:

1. 赋值操作符“=”读作“赋值为”。

2. i=i+1;i=j;的执行过程。

3. 如何判断表达式i=j=k=23的合法性。

4. 理解复合赋值操作符的本质,如i*=a+b;。

难点:

类型不匹配时的赋值操作。

1. 整型之间相互赋值

1.1 编码长度相同,但有无符号数和有符号数的区别,如unsigned

short型和short型,此时只是简单地把被赋值变量的状态设置成赋值变量的存储状态。赋值后两者的值通常不同,如有unsigned uh;

short h=-1; ,则uh=h;后uh的值为65535。

1.2 编码长度不同,如long型与short型或unsigned

short型。以a=b为例,又分两种情况。当b的编码长度小于a时,赋值原则为赋值后两者的值相同。如有long l; unsigned short

uh=65535; short

h=-1;则l=uh后,l的值为65535;而l=h后,l的值为-1。由练习2.6可知,编码长度增加而值不变时编码的变化规律。当b的编码长度大于

a时,赋值操作只能使a的状态与b的部分字节状态一致,舍弃了b中高位的状态,赋值后两者的值通常不同。

2. 整型与浮点型之间的相互赋值

整数可以看作是小数部分为0的浮点数,而浮点型变量向整型变量赋值时会舍弃小数部分。

注意:

1. 编程时尽量使用安全的赋值操作。(赋值后两者的值相等)

2. 应理解类型不匹配时的赋值原则。

(三)算术表达式

C语言中算术操作符的优先级和结合性虽然和数学上的一致。但由于计算机中不同类型数据的编码格式不同,当类型不同的操作数混合运算时,得出与计算机一致的结果也并非易事。

先讨论整型间的算术运算。

表达式求值通常在运算器中进行,而运算器中专用存储单元的长度是固定的,因此,整型间运算时,当操作数的编码长度“不够”长时会被自动扩充成相应的长度。需注意两点:

1. 短变长是安全的“赋值操作”。

2. C语言中这个长度是“逻辑的”,即编译系统中int型的长度,而非计算机的实际长度。int型在TC中是2个字节,在VC6.0中是4个字节。

这也就意味着同样的代码可能可能在TC中不需扩充而直接计算,但在VC6.0中则需要扩充后才能计算。当然,字符型进行算术运算时被看作只有1个字节的整

型,无论如何都会被扩充的。

c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值相关推荐

  1. c语言乐学编程作业答案,信息乐学|浅谈C语言

    原标题:信息乐学|浅谈C语言 一大波C语言的干货正在靠近 刚刚成为大学生的小萌新们,经过两个多月的学习,你们对大学的多彩生活是否还满意?全新的学习方式你们是否还适应?然而,新鲜劲还没过,第一件让你们头 ...

  2. c语言函数参数压栈,函数调用压栈 浅谈C语言函数调用参数压栈的相关问题

    想了解浅谈C语言函数调用参数压栈的相关问题的相关内容吗,在本文为您仔细讲解函数调用压栈的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:函数调用压栈,下面大家一起来学习吧. 参数入栈的顺序 ...

  3. 如何求c语言表达式的值,浅谈C语言中表达式的求值

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言研究性学习的路线 现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常"误导"读者,于是,"死记 ...

  4. 自学c语言后的感受,一路走来,浅谈c语言的学习感想

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define PI 3.1415926 int main() { int a,b,c; float x1,x2,d, ...

  5. 分三种情况C语言编程,浅谈C语言教学的现状及几点建议.doc

    浅谈C语言教学的现状及几点建议 浅谈C语言教学的现状及几点建议 摘 要 针对C语言教学中存在的问题提出建议,以期对C语言教学有一定帮助. 关键词 C语言:课程设置:创新能力 中图分类号:G642 文献 ...

  6. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  7. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  8. c程序语言的常量变量和标识符,浅谈C语言中的常量与变量.pdf

    课程教育研究 CourseEducationResearch 2014年4月 上旬刊 教学.信息 浅谈C语言中的常量与变量 刘 星 (青 岛工学院商学院 山东 青岛 266300) [摘要]在任何一种 ...

  9. c语言弱符号与函数指针,浅谈C语言中的强符号、弱符号、强引用和弱引用【转】...

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

最新文章

  1. python计算出nan_python如何进行汇总统计?
  2. 企业如何正确选择云ERP管理软件
  3. 服务器定期监控数据_基础设施硬件监控探索与实践
  4. Java序列化的这三个坑千万要小心
  5. 怎么将一个类的成员函数作为指针传递给另一个类的成员函数
  6. 签名验签服务器性能测试,签名验签服务器 功率
  7. ue4网格转地形_关于纬地结合扫描地形图进行道路设计和出图的教程
  8. 专业运动耳机哪个品牌好?运动蓝牙耳机推荐
  9. Android studio 之 Menu(菜单)
  10. python怎么使用int四舍五入_python浮点数舍入(ROUND)方式总结
  11. 使用MySql计算两个日期的时间差函数:TIMESTAMPDIFF
  12. Springboot启动提示:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
  13. CloudCompare源码分析之ccViewer模块:应用类(阅读经典)
  14. win10 CMD大全
  15. Servlet-发送电子邮件
  16. 云服务器有哪些优势?如何租用云服务器?
  17. 浅谈与时俱进的OS发展史
  18. GitFlow使用笔记
  19. React-Native之定位实践
  20. UG NX 12 坐标系

热门文章

  1. BZOJ4372: 烁烁的游戏【动态点分治】
  2. 现代软件工程—构建之法---第三章:练习与讨论
  3. JAVA多线程--线程阻塞与唤醒
  4. ListView原理
  5. av_seek_frame() 定位为什么不准呢?
  6. oracle 数据结构
  7. AX2009 的EP开发要点
  8. 为什么莫名其妙的就被调用了
  9. C++_类和对象_C++继承_继承中子类的同名成员处理_同名变量_同名函数---C++语言工作笔记065
  10. springcloud工作笔记106---eureka实现服务监控_监控服务下线_服务注册_服务续约_判断注册中心可用_监控eurekaserver启动