《2023年c语言教学设计(精选多篇).docx》由会员分享,可在线阅读,更多相关《2023年c语言教学设计(精选多篇).docx(131页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年c语言教学设计(精选多篇) 推荐第1篇:C语言教学设计(推荐) C语言中的“潜规则” C语言中有一些默认处理规则,了解这些规则对于阅读程序和理解程序运行结果非常有帮助。 (1) 自动类型转换。 将一个值赋值给变量时,如果那个值与变量的数据类型不同,则将自动转换为变量的数据类型,否则数据无法写入变量。 表达式求值过程中,char型变量和常量被引用时,自动转换为int型;float型变量被引用时,自动转换为double型;然后按照“int 在C语言中,任何标识符都有意义。但是函数名的意义是什么呢?它实际上是一种函数指针值,代表着函数的第一条指令。初学者在调用函数时容易漏掉(),可能导致逻
2、辑错误。试比较下面程序中的2条if语句。 if fun() void main() if(fun() /*如果函数fun的返回值逻辑上为真,则如何如何*/ if(fun) /*这里fun被看作是指针值,函数没有得到调用。*/ (3) 默认的数据类型。 请问,下面的函数定义中,函数的返回值类型是什么? fun(float x,float y) 如果你认为是void或者没有返回值,那就错了。C语言规定,默认的数据类型一律是int。函数定义时,不指定返回值类型,编译器将返回值类型默认为int。如果设计一个没有返回值的函数,必须将返回值类型默认为void。 下面程序中,函数Multi的意图是计算参数x
3、和y的乘积,但是只保留小数点后1位,其他位按照四舍五入处理。但是运行时,当用户输入1.63,4按“回车”键后,程序输出结果是: The result is 6.0 而我们期望的结果应该是: The result is 6.5 而且,无论你输入哪两个数,最终输出结果中小数点后面一定是0.问题就出在Multi函数定义上。这个函数在定义时没有指定返回值类型,C语言编辑器将其默认为int型。 推荐第2篇:C语言教学建议 教学建议 第1章 C语言程序设计概述 1本章学习之前一定要让学生了解课程的任务和特点,强化学生的直接学习动机,使学生自觉地训练结构化的程序设计能力,并着手养成边学边做的习惯。 2相关链
4、接的内容根据学生特征灵活掌握,删除后不影响后续内容的教学。特别是关于补码的内容,学生若不能理解不必强求,以后涉及到补码也可不作介绍。 3数据存储的概念在后续内容的教学中非常重要,也比较难以理解。这里只是顺便提出几个概念。这里的地址也可以用电话号码作比喻。 4介绍机器语言和汇编语言的目的是让学生更好地理解c程序的运行过程。 5C语言的特点和程序构成应结合程序实例讲解,且C语言的特点需要在长时间内逐步体会,不必讲得过细。 6C程序的执行过程的熟悉,需要让学生亲自编码写一段程序。 7“基本训练”是在教师的指导下由学生在课内完成的,是课堂教学的一个重要组成部分,这是一种师生互动的教学过程,譬如:在数制
5、之间的转换就是在教士的指导下有学生自主完成的,教师对学生提供的帮助信息是根据现场需要而确定的。“习题”是学生在课外自主或合作完成的。建议此课程实施时开放网络机房,并尽可能为学生提供学习需要的教学资源。条件具备时,可在校园网上建立合作学习的平台。 8在下章开始之前,要为学生布置于习任务,这是培养学生自主学习能力的一个重要手段。 9鼓励学生参加一些学习社区,经常浏览C语言程序设计的一些相关网站。 1 第2章 顺序结构程序设计 1.本章在结构上与原有的教材有很大的不同,主要是采用了“任务驱动”的思想。在“2.2数据”一节,集中囊括了基本数据类型、常量与变量、运算符等重要概念。对这些概念目前只要求掌握
6、到“必需”的程度,在以后的程序设计中再逐步加深理解。尤其是不能让学生一开始就记忆大量的“规定”。比较和逻辑运算放在了分支程序设计中。 2本书的例题、习题都是经过精心设计的,是作者“著作”的成分。例2-3就是通过实例来分析和体会自加、自减运算符的运用。教师应该在课前对这些例题、习题作详细分析,体会之中的用意。必要时应亲自调试一下。 3对格式输入输出的学习,一开始也尽可能简单一些,以保证学生便正常编写、运行程序为宜。当遇到相应问题时,可返回来查阅本节内容。 4对初学者来说,理解顺序程序结构是理解程序结构的基础。2.5节是作者对顺序程序设计所做的一点总结。这只是一种尝试。恳切希望广大同仁共同完善这一
7、部分内容。 5 2.6节介绍了三段程序,目的是将学生引入程序设计的大门。学完这部分内容以后,学生就可以着手编写一些解决实际问题的程序了。学习本章时,学生对开发环境尚不熟悉,遇到的问题较多,因此,应酌情增加上机时间。 6本章习题的第5题有两个目的:一是激发学生学习程序设计的兴趣;二是使学生学习使用C语言中的库函数,因为大量的库函数不可能都由教师讲解。下一章还要用到这些内容。 2 第三章 分支程序设计 1分支程序使计算机有了判断的功能。本章应该使学生练就分支程序编写的基本功,熟悉分支程序设计遇到中的一些特定问题,譬如:逻辑判断的顺序等。 2由于传统流程图更为直观,而且已被应用到其它领域(如教学设计
8、),因此,本书主要采用传统流程图,对N-S图仅作简单介绍。建议学生学会绘制传统流程图,学会识读N-S图。 3学会逻辑表达式的运用是编写分支程序的关键。建议在此方面多做训练。同时应注意,逻辑表达式过于复杂会影响程序的可读性,要让学生体会程序质量的要求,学会在程序的简洁性和易读性上加以平衡。通过例3-4可以很好地体会这个问题。总的原则是,手段是为程序设计者带来方便的,而不能让程序设计者为手段所累。 4条件运算符是C语言简洁风格的典型体现,应该让学生多体会一下。使用if完全可以替代条件运算,因此,条件运算的作用常常被忽视,有些教材甚至认为条件运算中不能使用格式输出函数,而事实上条件运算的功能是非常强
9、大的。 5在“3.1.5 if的嵌套”中,作者尝试着对嵌套情况和常犯的错误进行了归纳。授课中教师也可以根据自己的经验重新归纳,或者以“试误”的方式让学生体会这些问题。 661页 “基本训练”中的第2题,看似一个非常简单的问题,但事实上多数学生很难在短时内编写出正确程序。教师可以让学生在课内编写出程序雏形,在课后完成程序。 7“3.2 switch”逻辑上比较简明,重要的是通过练习使学生熟悉相关的规定,避免出现语法错误。恰当地设计“条件”也是一个关键。 8例3-11出现了while 结构,起着“毛毛雨”的作用。但不要因此使学生形成理解上的障碍,千万不要过多地介绍循环结构及执行过程。 9如果学生能
10、够顺利完成65页的“基本训练”,就基本掌握了switch结构的运用。 10 “3.3典型程序举例”起着引路的作用,目的是引导学生发现更多的相关问题,并尝试编程解决。例3-13中,使用条件运算表达式可能会更简明一些。 11 课后作业应特别强调有学生提出问题。发现问题是主动的,与解决教师提出的问题有着质的区别。 3 第4章 循环结构程序设计 1循环是学生比较感兴趣的问题,也是训练编程能力的重点。在本章可以综合运用前面几章的知识。建议教师酌情加强训练,必要时增加一些课时。 2循环控制条件是循环程序中的核心问题,需要通过训练使学生获得相关经验。 3本章例题较多,目的达到“熟能生巧”之效。多数例题都经过
11、了精心设计,因该让学生仔细体会作者的用意。例4-3和 例4-4让学生体会变量类型的确定,此时可返回第2章看一下关于数据类型的规定; 例4-5与 例4-6、例4-7中的两段程序,通过对比的方法使学生了解程序设计的灵活性和创造性,要让学生在程序设计中体会到美的感受( 例4-7中的程序在后面还要用到); 例4-8的程序非常简明,目的仍然是让学生体会一种方法。 4第82页和86页上的“基本训练”应该让学生独立完成。 5例4-21和 例4-22在繁简上形成的鲜明对比,但目的都是为了领会continue的作用。 6“4.8典型程序举例”是为了进一步让学生领会“循环问题”。 7课后作业酌情布置。最好选择其中
12、的若干题目做一次测验,根据结果做一次小结。若教师能够确定学生已达到前四章的学习目标,也可以不再练习,直接进入下一阶段。 8到此为止,本课程完成第一个阶段,即基本训练阶段,本阶段的特征是对单个“元件”的认识和使用。下一阶段进入“组装阶段”,即中级训练阶段,基本任务是:(1)将单个数据组合成“构造类型数据”;(2)将单个函数组装成一个完整的程序文件。 9由于任务的变化,后续内容在学习方法上也有一些改变。教师的讲解所占比重应该加大,课堂基本训练逐步减少。上机实习也应由原来的“小周期”变为“大周期”。教师应提前让学生做好思想准备。 4 第5章 数组与字符串 1学习数组,让学生领会数组元素的存储是构建数
13、组概念的关键。教师应采用多媒体手段,使学生对数组存储有一个形象化的认识。单靠语言和纸制教材教学效果可能会不理想。 2为了增强程序的可靠性,书中较少使用a1+这样的运算,但在教学中教师应该适当地补充这种知识。 3一维数组的排序是一个重点内容,掌握典型的排序算法,无论对于数据处理还是工业控制都十分重要。每一位同学应通过训练,熟练地掌握一种算法,对其它算法也就很容易掌握了。 4例5-7是一个典型程序,可以扩展到其它问题。教师在使用中可以整理一些类似的问题。学会编写这类程序,也是对前面几章内容的巩固和提高。 5二位数组繁而不难。关键是抓住元素存放顺序。对关于二位数组的大部分程序,可以有学生自行阅读。通
14、过基本训练,巩固和检验教学效果。 6字符数组的处理难度不大,但很重要。重点是由学生体会字符数组处理的特点,通过与数值数组处理的对比,掌握字符数组处理的规律。“5.4.4 字符串处理的标准函数”只需理解,不需强化记忆,应在实例中加深理解和记忆。 7建议学生在课外完成程序的编辑和调试,课内只解决难度较大的调试问题。在调试过程,学生可以结组讨论。 8习题中的最后一题已经涉及到下一章的内容,这种作业并不是真的让学生“完成”,而是让学生发现和思考相关的问题。 5 第六章 函数 1这一章是一个关键的章节。前面各章看到的是“树木”,本章看到的是“森林”;前面各章是“零件加工”,本章是“组装”。学完这一章,学
15、生的程序设计能力将上一个新的台阶。教师在讲解这一章时,应引导学生提高站位,而不要只看到一些细枝末节。这里可能有一个思维习惯的问题。如果说在其它章节同学们是一个冲锋陷阵的战士,那么,在本章将为成一名指挥大兵团作战的将军。整体的协调是本章的主要任务。 2如何处理“结构化程序设计”与“面向对象的程序设计”之间的关系,是一个非常值得探讨的课题。作者曾就此问题咨询过爱尔兰都柏林工业大学的计算机教学专家,他们也认为这是一个很有趣的问题,可以谈上三天三夜。我的意见是,让学生掌握结构化程序设计的思想和方法是有必要的,面向对象的程序设计是以结构化程序设计思想为基础的。当然,对于职业院校的学生来说,将来要做一名高
16、级软件蓝领,可能仅有面向对象的程序设计能力也可以工作。但是,随着职业成长,软件蓝领也可能成为系统分析师,掌握结构化思想就非常必要了。况且,在控制领域,一些结构化的c语言仍在应用。 3学习本章内容时,可以有23名学生组成一个小组,分别编写主函数和子函数。目的有两个:一是让学生体会函数之间参数传递级变量使用的规律;二是培养职业活动中所需要的合作能力。 第7章 编译预处理 编译预处理命令在前面几章已在使用。这一张介绍了宏定义的一些技巧和注意事项,属于较高层次的应用。条件编译命令仅作了解即可,千万不要在此纠缠不清。 第8章 指针 指针运算将数据运算深入到了系统内部,要求学生了解一些硬件知识。一些非计算
17、机专业学生感到学习指针很难,原因就在这里。计算机专业的学生如果在入学初期阶段学习者们课程,同样也存在这个问题。建议教师多使用形象化的比喻,以“黑箱法”讲授。 本章只是介绍指针的基本概念。下一章才涉及到指针的实际应用。 学习指针的目的是为了方便操作,对于某些感到暂时难以应用的部分可以暂时删去。 第9章 结构体和共用体 学习本章后,同学们才算真正了解了C语言的数据结构。建议在熟悉结构体的基础上,在对比学习共用体,而不要已开始就将二者对比学习。 用指针处理结构体,是指针的一个重要功能。指针与结构体的结合,才是C语言的精华所在。掌握了这部分内容,在学习复杂数据结构就不难了。 6 第10章 文件 文件是
18、程序设计中的一个重要概念。应通过综合性实践是同学们掌握文件的操作,通过使用文件牢固树立文件的概念。 要求学生了解文件的概念,让同学知道一个C文件是一个“流式文件”,并不是由记录组成的,为以后学习其它语言文件做奠定基础; 掌握文件的基本操作函数; 宜采用计算机大屏幕投影等先进的教学设备和电子教案、多媒体课件教学。 第11章 位运算 a) 本章是C语言的一个特色,也是一个相对独立的单元,这也是将这一章放在最后的原因。 b) 学习本章需要有一定的数字电路基础知识。如果学生不了解这方面的知识,教师应加以适当补充。千万不要紧学习“C语言”之中的操作,而不了解这些操作的意义。教师至少让学生了解位运算的用途
19、,在这里留下一个“接口”。 第12章 综合实例 本章要求学生独立设计一个程序。“12.2程序示例”不同于前面章节中的例题,他不是直接供学生使用的程序,而仅仅是一个参考。同学们完全可以设计出不同的程序,即便是不能完全调试成功,这个训练过程仍然是十分重要的。 推荐第3篇:c语言教学教案 第一讲 C语言概述 1.1 C语言发展概述 C语言是在1972年至1973年间由美国的贝尔实验室的M.D.Ritchie和K.Thompson以及英国剑桥大学的M.Richards等为描述和实现UNIX操作系统而设计的。 最初的C语言是附属于UNIX的操作系统环境,而它的产生却可以更好地描述UNIX操作系统。时至今
20、日,C语言已独立于UNIX操作系统。它已成为微型、小型、中型、大型和超大型(巨型)计算机通用的一种程序设计语言。 随着C语言的不断发展、应用和普及,目前,C语言已经能够在多种操作系统下运行,实用的C语言编译系统种类繁多,如Microsoft C、Turbo C等。 1.2 C语言的特点 C语言能够成为目前广泛的高级设计语言之一,完全是由其语言特点决定的。 (1)语言基本组成部分紧凑简洁。 (2)C语言运算符丰富,表达能力强。 (3)C语言数据结构丰富,结构化好。 (4)具有结构化的控制语句。 (5)C语言提供了某些接近汇编语言的功能。 (6)C语言程序所生成的目标代码质量高。 (7)C语言程序
21、可移植性好。 C语言的弱点: (1)运算符的优先级较复杂,不容易记忆 (2)C语言的语法限制不太严格,一定程度上降低了某些安全性。 1.3 简单的C语言程序。 1.3.1 C语言程序的构成 1.3.2 C语言程序的特点 (1)C程序是由函数构成的,其中至少包括一个函数main( )。 (2)函数体是由左右花括号 括起来的部分。 (3)C语言中的每个基本语句都以“;”结束。 (4)C语言书写格式自由,一行内可以写一个语句,也可以写多个语句。 (5)#include语句是编译预处理语句,其作用是将由双引号或尖括号括起来的文件内容读入该语句位置处。 对程序说明: (1)可用/*/对C程序中的任何部分
22、作注释。 (2)C语言中所有变量都必须先定义类型,然后再使用。 (3)一个C语言程序通过函数之间的相互调用来实现相应的功能。即可以是系统提供的库函数,也可以是根据需要自己定义的函数。 1.4 C语言上机步骤 运行环境:DOC操作系统下的Turbo C 1.4.1 C程序上机步骤 1.编辑:在TurboC环境下。将C语言源程序通过键盘输入到计算机中,并以文件形式存盘,源程序都是以.C为扩展名。 2.编译:通过编辑程序将源程序输入到计算机后,需要经过C语言编译器将其生成目标程序。得到的目标文件都是以.OBJ为文件扩展名。 3.连接:经过编译后生成的目标文件需经过连接后才能生成可执行代码。其扩展名是
23、.EXE。 所谓连接,是将目标文件和库函数或其他目标程序连接成可执行的目标程序。 4.执行:连接后源程序的目标程序就是可执行文件了。在DOS系统下,只要键入可执行文件名,按回车键就可以了。 1.4.2 Turbo C系统菜单 1.Turbo C的主屏幕和主菜单功能 2.文件菜单及功能 1.4.3 程序调试方法 一个计算机程序必须对其进行测试来确定其可以正确地工作,这一过程称为调试。 程序错误 语法错误:通过编译和连接就会找到 运行错误:通过调试自己找出问题所在 1.设置和使用观察变量 2.单步执行程序 3.设置和使用断点 2.1 常量和变量 2.2 整型数据 2.3 字符型数据 2.4 浮点型
24、数据 2.5 变量的初始化 第二章 数据类型与表达式 2.1 常量和变量 2.1.1 常量:在程序运行过程中其值不能被改变的量。 2.1.2 变量:在程序运行过程中其值可以被改变的量。 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。 1.标识符的有关规定: (1)由英文字母、数字、下划线组成,且第一个字符必须是字母或下划线,一般不超过8个字符; (2)大小写字母的含义不同。 (3)不能使用C语言中的关键字做标识符, (4)用户取名时,应当尽量遵循“简洁明了”和见名知意的原则。 2.变量名的有关规定: (1)使用变量名前,一定先定认,后使用,否则不能做为变量名
25、。 (2)每一个变量属于一种类型,便于在编译时据此检查该变量所进行的运算是否合法。 (3)变量名的定义:存储属性、数据类型、变量名表 3.数据类型 2.2 整型数据 2.2.1整型常量 (1)十进制整数:数码直接开头的十进制数。如1234,-234。 (2)八进制整数:以0开头的常量是八进制数。如011=(11)8 (3)十六进制整数:以0x开头的数是十六进制。如0x123即(123)16 例2.1 三种进制表示方法的转换 源程序a1.c main() Int x=1246,y=01246,z=0x1246; Printf(“%d,%d,%dn”,x,y,z); Printf(“%o,%o,%
26、on”,x,y,z); Printf(“%x,%x,%xn”,x,y,z); C:>a1 1246,678,4678 2336,1246,11106 4de,2a6,1246 2.2.2整型变量 原则:使用变量前,先定义,后使用。 (1)基本型:用int表示; (2)短整型:用short int或short表示; (3)长整型:用long int或long表示; (4)无符号型: 无符号整型:用unsigned int或unsigned表示; 无符号短整型:用unsigned short int或unsigned short表示; 无符号长整型:用unsigned long int或un
27、signed long表示; 2.2.3 整型变量使用 不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。 例2.2不同类型的数据进行算术运算。 源程序a2.c Main() Int a,b,s1,s2; Unsigned x; a=10;b=-30;x=20; S1=a+x;s2=b+x; Printf(“a+x=%d,b+x=%dn”,s1,s2); C:>a2 运行结果为 a+x=30,b+x=-10 2.2.3 整型变量使用 不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。 例2.3 整型数据各类型所能表示的范围 源程序a3.c main
28、() int a,b; long c,d; unsigned e,f; a=32767;b=1; c=2147483647;d=1; e=65535;f=1; Printf(“int: %d,%d,n”,a,a+b); Printf(“long: %d,%ldn”,c,c+d); Printf (“unsigned: %u,%un”,e,e+f); C:>a3 运行结果为 Int: 372767,-32768 Long: 2147483647,-2147483648 Unsigned:65535,0 2.3 字符型数据 2.3.1 字符型常量 字符常量是由一对单引号括起来的单个字符构成,
29、例如:A,b,2,%;等。一个字符型常量是该字符集中对应的编码值:09的ASC编码值是4857。显然0与数字0是不同的。 2.3.2 字符型变量 字符型数据分为两类:一般字符类型(char) 和无符号字符类型(unsigned char)。 例2.4 字符型数据与整型数据可以通用 源程序a3.c Main() char c1,c2; Printf(“%c,%cn”,c1,c2); Printf(“%d,%dn”,c1,c2); C:>a4 运行结果为 A,B 65,66 2.3.3 字符串常量 字符串常量是由一对双引号括起来的字符序列,例:“fsdf”,”A”等。 字符串常量中不能直接包
30、括单引号、双引号和反斜杠“。 字符串常量与字符常量的区别: (1)字符串常量是用双引号括起来的字符序列。 (2)字符串常量有串尾标记”0”; (3)字符串常量允许扩展表示法; (4)C语言中没有专门的字符串变量。字符串如果需要存放在变量中,需要用字符型数组来存放。 注意:不要将单个字符组成的字符串常量与字符常量混淆。a为字符串常量,不能把一个字符串常量赋给一个字符变量。例如:下面的用法都是错误的: Char c1,c2; C1=“a” C2=“CHINA”; 字符0由系统自动加入到每个字符串的结束处,不必由编程人员加入。 字符串“CHINA”在内存中的存放形式如下图,其长度是六个字节,而不是5
31、个字节。字符0所对应的ASC值为0,即“空”字符。 2.4 浮点型数据 2.4.1 浮点型常量 浮点型常量有两种表示形式。 十进制数形式 它是由数字和小数组成,如:3.14159,-7.2,8.9 指数法形式 如:180000.0用指数法可表示为1.8e5,1.8称为尾数,5称为指数。 0.00123用指数法可表示为1.23e-3 注意: (1)字母e 或E之前(即尾数部分)必须是有数字的。 (2)e或E后面的指数部分必须是整数。 如:e-3,9.8e3.1,e5都是不合法的。 2.4.2 浮点型变量(实型变量) 把带有小数点的数称为浮点数,或实型数。浮点型变量又称为实型变量,按能表示数的精度
32、,分为:单精度浮点型变量和双精度浮点型变量,其定认方法如下: float a,b; /*单精度变量的定义*/ double c,d; /*双精度变量的定义*/ 单精度:占4个字节,有效位为7位,数值范围为10-371038 双精度:占8个字节,有效位为1516位,数值范围约为10-30710308 浮点型常量不存在单精度型和双精度型之分。 2.5 变量的初始化 变量的初始人化:在定义变量的同时给变量赋予初值。 方法: (1)先说明变量类型,然后再赋值。 (2)在对变量类型说明的同时,给变量赋初值。 先定义后赋值 int a,b,c; char d; floatb f; a=2; b=5; c=
33、10; d=a; f=5.7; 定义和赋值同时进行 int a=5; short b=10; char c=a; float d=7.8; 3.对几个变量同时赋一个初值 Int a1=10,a2=10,a3=10; 初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋以初值的。相当于一个赋值语句。例如: int a=10; 相当于: int a; a=10; 又如: Int a;,b,c=20; 相当于: Int a,b,c; C=20; 第三讲 运算符以及数据类型 2.6 运算符及表达式 2.7 数据类型转换 2.8 类型定义 2.6 运算符及表达式 C语言运算符可以分为:算术运算符、
34、逻辑运算符、关系运算符、位运算符、赋值运算符。 2.6.1 算术运算符和算术表达式 1.算术运算符:加、减、乘、除及取模即:+,-,*,/,%来表示。C语言规定: (1)模运算符%,仅用于整型变量或整型常量。 (2)优先级:一个表达式中如有多个运算符,则计算先后次序为相应运算符的优先级高的优先。乘、除、模优先级高于加、减的优先级。 (3)结合方向:是一个运算对象两侧的运算符的优先级别相同时,应遵循的处理规则。 算术运算符的结合方向是从左至右; 赋值运算符的结合方向是从右至左。 算术表达式:由算术运算符、括号以及操作对象组成的符号C语言语法规则的表达式称为算术表达式。 2.6.2 赋值语句 1.
35、赋值运算符 语言的赋值运算符是“=”,它的作用是赋值运算符右边表达式的值赋给其左边的变量。 例如:a=10,x=a+5,前者是把常量10赋给变量a,后者是将表达式a+5的值赋给变量x.注意:如果“=”两侧的类型不一致,在赋值时要进行类型转换。例如a=b,执行该语句时,b的结果转换为a的类型后才能进行赋值运算。 2.复合赋值运算符 C语言允许在赋值运算符“=“之前加上其它运算符,以构成其复合运算符。复合运算符多数为双目。 复合运算符有: +=,-=,*=,/=,%=,=,&=,=,|= 例: a+=2 等价于 a=a+2 x*=y+5 等价于 x=x*(y+5) x%=8 等价于 x=x%8 赋
36、值运算符都是自右向左执行。 3.赋值语句与赋值表达式 赋值语句最简单的形式是: = ; 功能:是赋值运算符右边的“表达式”的值赋给左边的变量。 赋值表达式也可以包含复合的赋值运算符,例: 如果a=10,表达式a+=a-=a*a的值为-180。其步骤为: (1)先进行a-=a*a的计算,它相当于a=a-a*a=10-10*10=-90.(2)再进行a+=-90的计算,它相当于a=a+(-90)=-90-90=-180.4.自增自减运算符 i+(或i-)表示在使用该表达式值之后将i值加1(或减1)。 +i(或-i)表示在使用该表达式值之前将i值加1(或减1)。 说明: (1)+和-仅适用于变量,不
37、能用于常量或表达式。 (2)+和-运算符的结合方向是“至右向左”。 Main() int a=100; printf(“a+=%dn”,a+); printf(“+a=%dn”,+a); printf(“a-=%dn”,a-); printf(“-a=%dn”,-a); 输出结果: a+=100 +a=102 a-=102 -a=100 2.6.3 关系运算符和关系表达式 1.关系运算符 关系运算符均为两目运算符。共有六种: 大于 小于 = 大于等于 小于等于 = 等于 != 不等于 关系运算符要求两个操作数是同一种数据类型,其结果为一逻辑值,即关系成立时,其值为真(true),用非0值表示;
38、关系不成立时,其值为假(false),用0表示。 关系运算符的优先级借低于算术运算符,关系运算符=和!=低于前四种运算符,并且结合方向均为自左至右。 2.关系表达式 由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。 如:a+b 关系表达式的值是一个逻辑值,即“真”或“假”。用1表示“真”,用0表示“假”。 如: a=4,b=1,C=ab;c的值为1, 若a=1,b=8,x=ab;x的值为0。 2.6.4 逻辑运算符和逻辑表达式 1.逻辑运算符 逻辑运算符有“&“(逻辑与)、”|“(逻辑或)和”!“(逻辑非)三种。 逻辑运算符的操作对象为零或非零整数值,见表2.4.表2.4 逻辑运
39、算规则 逻辑表达式 由逻辑运算符和其操作对象组成表达式称为逻辑表达式。 2.6.5 位运算符 位(bit)运算是C语言的一大特色,可直接对构成内存的基本单位 “字节”(byte)进行按位操作。按位与(&) 操作规则:参加运算的两个运算量,如果两个相应的位均为1,则该 位的结果为1,否则为0,见表2.5 表2.5 接位与 例如:(1)清零。 (2)取一个数中的某些位。 高位清零: 00101101 10011100 & 00000000 11111111 00000000 10011100 低位清零: 00101101 10011100 & 11111111 00000000 00101101
40、00000000 按位或(|) 操作规则:参加运算的两个运算量,其相应的位中只有一个为1,则该位的结果为1,否则为0。 表2.6 按位或 例如: (1) 01000001 | 00101001 01101001 (2) 01000001 | 00000000 01000001 (3) 01000011 | 11111111 11111111 (4) 01000001 | 10111110 11111111 例如:将某一个数的某些位置为1。一个整数a,要将其低字节全置为1,即低字节为11111111,可将该数与255(十六进制为FF,二进制为11111111)按按位或即可。 按位异或() 操作规
41、则:参加运算的两个运算量,当相应位相同时,其结果在该位为0,相应位不同时,其结果在该位为1,即按位相加,但不进位。 表2.7 按位异或 (1)使指定位翻转。即由1变为0,由0变为1。例: 01100110 00001111 01101001 (2)不使用临时变量,交换两个值。方法为:若有两个数a和b,通过 下面的赋值语言可将 a和b的值互换: a=ab; b=ba; b=ab; 4.按位求反() 操作规则:运算符是一个单目运算符,用来对一个数二进制表示按位求反,即瘵0变成1,将1变成0。 表2.8 按位求反 例: 01101001 10010110 将一个数的某些位变为0。方法是:瘵该数a与b
42、按位求与,此处的b为这样的一个数,即要求a 中变为0的那些位均为1,其余位均为0。如要将a的最低位变为0,则可使用下述表达式实现。 A=a&1 5 .左移( 操作规则:将一个数的各二进制位全部左移若干位,左移后,右边的这些位用0填补,左边移出的位舍弃不用。 例:a=a 将一个数左移1位,相当于该数乘以2,左移2位相当于该数乘以4。如上例中a=15,则a=a 6.右移() 操作规则:将一个数的各二进制位全部右移若干位,右移后,右边移出的位被舍弃,而左边的填补分两种情况: (1)该数为无符号数,则高位补0。 例:a=a2; 右a=15,二进制为00001111,右移两位后为00000011。 (2
43、)该数为有符号数,若原来的符号位为0(最高位为0,即正数)则高位补0,若原来的符号位为1(即表示该数为负数),高位补0或1,取决于所使用的计算机系统。有的系统补0,称为逻辑右移,有的系统补1,称为算术右移。 例:a:1000110110000111 a1:0100011011000011(逻辑右移) a1:1100011011000011(算术右移) 2.6.6 其他运算符 逗号运算符 逗号运算符为“,“。逗号表达式是用逗号运算符把两个表达式组合成的一个表达式。其一般形式为 表达 式1,表达式2 说明: (1)逗号表达式的执行过程是:先求表达式1的值,再求表达式2的值,表达式2的值就是整个逗号
44、表达式的值。 (2)一个逗号表达式可以与另一个表达式构成一个新逗号表达式。 (3)逗号运算符是所有运算符中级别最低的。 (4)逗号表达式常用于for语句中,它可以表达多个初值或多个步长增量。 逗号表达式的一般形式可以扩展为 表达式1,表达式2,表达式3,表达式N 表达式n的值是整个表达式的值。 条件运算符 条件运算符是一个三目运算符,把三表达式组合成一个表达式。其一般形式为 表达式1?表达式2:表达式3; 功能:计算表达式1的值,如果该值为真(非0值),则计算表达式2的值,并且该值即为条件表达式值。若表达式1的值为假(0),则计算表达式3的值,并将该值作为条件表达式的值。 说明: (1)条件运算符优先级别高于赋值运算符,低于关系运算符和算术运算符。 (2)条件运算符结合方向是“自右至左”。 (3)表达式1与表达式2、