1、教材、参考书与课时安排教材C程序设计(第二版)谭浩强编著清华大学出版社参考书C语言程序设计教程谭浩强高等教育出版社C高级实用程序设计王士元清华大学出版社C程序设计试题汇编谭浩强清华大学出版社课时安排64学时熟记C语言的基本概念熟悉TurboC的上机操作环境会读、会编、会调试C程序学习要点熟记C语言的语法学会算法分析与算法设计课程目的课程要求课前请做好预习保持课堂安静,头脑清醒,思维活跃认真、独立、按时完成并提交作业重视上机实践,有效利用宝贵的上机时间第1章C语言概述第2章程序的灵魂算法第3章数据类型、运算符与表达式第4章最简单的C程序设计顺序程序设计第5章选择结构程序设计第6章循环控制第7章数
2、组第8章函数第9章预处理命令第10章指针第11章结构体与共用体第12章位运算第13章文件目录C语言发展历史C语言的特点简单的C程序介绍C程序的上机步骤第1章C语言概述 C语言程序设计 第一章 C语言概述1.1C语言发展历史程序设计语言的发展CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统,可进行地址、位操作如ADDA,B编写系统软件,直接对硬件操作,可读性,移植性差面向机器的语言 C语言程序设计 第一章 C语言概述可读性,移植性好,编写应用程序一般较难实现汇编语言的某些功能如:地址和位的操作C语言兼有高级和低级语言的功能适合写系统软件
3、和应用软件又称中级语言C语言发展过程产生背景ALGOL60CPL语言BCPLB语言,写UNIX系统产生过程时间:19721973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:1978年K&R合著TheCProgrammingLanguageANSIC:1983年87ANSIC:1987年1990年国际标准的ANSIC,1994年再次修订。C版本MicrosoftC或称MS-CTurboC或称TC C语言程序设计 第一章 C语言概述1.2C语言的特点语言简洁、紧凑、灵活运算符丰富数据结构、数据类型丰富链表、树、栈程序设计
4、结构化、模块化结构化控制语句:ifelse、while、switch、for函数作为模块单位语法不严格、程序设计自由度大可以访问内存地址、进行位运算生成目标代码质量高可移植性好 C语言程序设计 第一章 C语言概述32个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef
5、 unsigned union voidvolatile whileTurboC扩充了11个关键字:asm_cs_ds_es_sscdeclfarhugeinterruptnearpascal注意:在C语言中,关键字都是小写的。C语言程序设计 第一章 C语言概述C语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字,见365页 附录B 9种控制语句:if()elsefor()while()dowhile()continuebreakswitchgotoreturn C语言程序设计 第一章 C语言概述C语言有 9 种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成
6、分。C语言程序设计 第一章 C语言概述表1.1 C语言与Pascal语言比较通过表1.1 我们可以得出结论:C比 Pascal简练,因此源程序更短,编程效率高。C C语言言PASCALPASCAL语言言含含义 if(e)S;if(e)S;int i;int i;int a10;int a10;int f();int f();int*p;int*p;i+=2;i+=2;i+,+I;i+,+I;BEGIN BEGIN ENDENDIF(e)THEN S;IF(e)THEN S;VAR i:INTEGER;VAR i:INTEGER;VAR a:ARRAY1.10 OF VAR a:ARRAY1.1
7、0 OF INTEGER;INTEGER;FUNCTION f():INTEGER;FUNCTION f():INTEGER;VAR P:INTEGER;VAR P:INTEGER;i=i+2;i=i+2;i=i+1;i=i+1;函数体、分程序、复合函数体、分程序、复合语句句条件条件语句句 定定义i i为整形整形变量量定定义a a为一一维数数组定定义f f为返回整形返回整形值函数函数;p p为指向整形指向整形变量的指量的指针变量量;赋值语句,使句,使i+2i+2赋给I Ii i自增自增值1 1,i i加加1 1赋给I I34种运算符:算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&
8、|位运算符 :|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它 :()-注意:各种运算符混合使用,其优先级与结合方法是难点,可先预习。C语言程序设计 第一章 C语言概述C语言运算符丰富(附录C)C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union C语言程序设计 第一章 C语言概述C语言数据结构丰富例1.2求俩个
9、数的和/*example1.1 calculate the sum of a and b*/#include/*This is the main program */void main()int a,b,sum;/*定义变量*/a=10;b=24;sum=add(a,b);printf(”sum=%dn,sum);/*This function calculates the sum of x and y */int add(int x,int y)int z;z=x+y;return(z);运行结果:sum=34函数语句预处理命令注释 C语言程序设计 第一章 C语言概述printf语句中的“%
10、d”是表示“十进制整数类型”1.3简单的C程序介绍/*example1.1 The first C Program*/#include void main()printf(“This is a c program.n”);C语言程序设计 第一章 C语言概述注释编译预处理主函数语句输出:This is a c program.例1.1 第一个程序This is a c program.例1.3 从键盘输入两个整数,输出其中较大的数#include void main()int max(int x,int y)int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);pr
11、intf(max=%d,c);int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);scanf语句中“&a”的含义是“取地址”输入:10,20输出:max=20声明部分,定义变量调用max函数,返回值赋给c定义max子函数,函数值、形参x、y为整型通过max函数将z值带回调用处C语言格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式 C语言程序设计 第一章 C语言概述main().main()inti,j,sum;sum=0;for(i=1;i10;i+)for(j=1;j10;j+)sum+=i
12、*j;printf(“%dn”,sum);优秀程序员的素质之一:使用TAB缩进对齐有足够的注释有合适的空行C语言结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main(),可以放在程序中任一位置程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/*/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法v编译预处理命令 C语言程序设计 第一章 C语言概述编辑链接编译执行1.4C程序的上机步骤C程序开发步骤file.exe C语言程序设计 第一章 C语言
13、概述程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exeTurboC集成开发环境配置要求UNIX,PC-DOS,MS-DOS,UCDOS操作系统硬盘容量约2M,448KRAM运行空间安装TurboC创建子目录Install若不是可安装盘,将文件拷贝到对应的目录下TC*.*INCLUDELIB*.*SYS*.*C语言程序设计 第一章 C语言概述进入TurboCD:TCTC.exe主控菜单文件操作FILE:NewLoadSaveWriteto编辑操作EDIT:插入/修改块查找/替换编译链接COMPILELINKMAKE执行RU
14、N退出TurboCAlt+xAlt+F,Q帮助HelpF1Ctrl+F1 C语言程序设计 第一章 C语言概述基本操作:F10-调用主菜单F2-存盘F3-打开F1-帮助信息Alt+F9-CompileCtrl+F9-RunAlt+F5-UserScreenAlt+X-退出Tcv常用热键文本编辑:-移动光标PgUp,PgDn-上下翻页Ctrl+PgUp,Ctrl+PgDn-文件首尾Home行首 End行尾Ddelete Insert Bkspace块操作:Ctrl+KB-块开始标记Ctrl+KK-块结束标记Ctrl+KC-块拷贝Ctrl+KV-块移动Ctrl+KY-块删除Ctrl+KH-块隐藏程序
15、调试:F8-StepoverF7-TraceintoF4-GotoCursorCtrl+F7-AddWatchCtrl+F8-ToggleBreakpointCtrl+F2-ProgramReset窗口操作:F5-窗口缩放F6-窗口切换 C语言程序设计 第一章 C语言概述课后作业预习“题解与上机指导”一书中vP181199页的14.314.10节vP236页实验1教材P12:1.5、1.6、1.7、1.8题。注意:有关设计程序的作业,必须经过上机调试!C语言程序设计 第一章 C语言概述算法的概念简单算法举例算法的特性怎样表示一个算法第2章程序的灵魂算法 C语言程序设计 第二章 程序的灵魂算法结
16、构化程序设计方法 C语言程序设计 第二章 程序的灵魂算法程序包括的内容:v数据结构:数据的类型和组织形式v算法:操作步骤的描述NikiklausWirth提出:程序=数据结构+算法教材认为:程序=算法+数据结构+程序设计方法+语言工具和环境 灵魂加工对象工具 C语言程序设计 第二章 程序的灵魂算法2.1 算法的概念为解决一个问题而采取的方法和步骤,就成为算法。例如:歌曲的乐谱,建造房子等。算法核心是解决“做什么”和“怎么做”的问题。vP15页的例2.1,求15之积。v可以有多种方法,一般采用简单和运算步骤少的。准确、高效计算机算法类别v数值运算算法v非数值运算算法 C语言程序设计 第二章 程序
17、的灵魂算法2.2 简单算法举例例2.1v方法1:累乘v方法2:用循环结构解决,灵活、通用。例2.2v通过循环选择打印例2.3v判断闰年例2.4v累加求级数的和,循环改变正负号和分母加1。例2.5v判断素数课后认真思考,加深什么是算法的概念 C语言程序设计 第二章 程序的灵魂算法2.3 算法的特性有穷性在合理范围内可完成确定性无歧义性有零个或多个输入从外界得到信息有一个或多个输出问题的答案有效性每步有确定的结果 C语言程序设计 第二章 程序的灵魂算法2.4 怎样表示一个算法自然语言表示v2.2节例。易懂,文字冗长,易歧义性流程图表示v用流程图符号构成,直观,易懂 N-S流程图表示伪代码表示计算机
18、语言表示q 顺序结构q 选择结构q 循环结构 C语言程序设计 第二章 程序的灵魂算法传统流程图流向混乱、可读性差,所以应该采用结构化流程图。结构化程序设计v基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)v结构化程序:由三种基本结构反复嵌套构成的程序v优点:结构清晰,易读,提高程序设计质量和效率三种基本结构v顺序结构ABAB流程图N-S图 C语言程序设计 第二章 程序的灵魂算法PAB真假PBA真假v选择结构kA1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构l多分支选择结构 C语言程序设计 第二章 程序的灵魂算法v循环结构l当型循环结构l直到型循环
19、结构PA假真当P为真AAP真假A直到P为真注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构 C语言程序设计 第二章 程序的灵魂算法三种基本结构的共同特点:v只有一个入口;v只有一个出口;v结构内的每一部分都有机会被执行到;v结构内不存在“死循环”。C语言程序设计 第二章 程序的灵魂算法2.5结构化程序设计方法结构化程序:用三种基本结构组成的程序基本设计思路:v复杂问题分解成几个最基本问题,再分别处理。采用的方法:v自顶向下;v逐步细化;v模块化设计:复杂问题按功能分成多个子模块v结构化编码:正确采用三种基本结构实现 C语言程序设计 第二章 程序的灵魂算法课后作业P36页习题:v2
20、.4、2.8(结合实验指导读懂答案)v用N-S图表示2.4题中v用传统流程图求解以下问题:将一个16进制数转化为10进制数 复习二进制的基本概念v“计算机文化基础”一书中P2733页第3章数据类型、运算符与表达式 C语言程序设计 第三章 程序的灵魂算法C的数据类型常量与变量整型数据实型数据字符型数据变量赋初值各种数值型数据间的混合运算算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式 C语言程序设计 第三章 程序的灵魂算法3.1C的数据类型C数据类型基本类型构造类型指针类型空类型void字符型char整型实型(浮点型)单精度型float双精度型double数组类型结构体类型共用
21、体类型短整型short长整型long整型int枚举类型enum数据类型决定:1.数据占内存字节数2.数据取值范围3.可以进行的操作 C语言程序设计 第三章 程序的灵魂算法常量和符号常量v定义:程序运行过程中,其值不能被改变的量(常数)v分类:直接常量、符号常量3.2常量与变量类型类型示例示例整型常量整型常量12、0、-3实型常量实型常量4.6、-1.23字符常量字符常量a、b 符号常量符号常量PRICE、PAI C语言程序设计 第三章 程序的灵魂算法l符号常量:用标识符代表常量u一般用大写字母:PRICE、PIu定义格式:#define 符号常量 常量u其值在作用域内不能改变和再赋值。例3.1
22、符号常量举例#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);total=300运行结果:符号常量的优点是:见名知意、一改全改 C语言程序设计 第三章 程序的灵魂算法变量v 定义:其值可以改变的量。v 定义格式:数据类型 变量名;v 变量应该有名字,并在内存中占据一定的存储单元。v 变量名和变量值有不同的含义l变量名实为一个符号地址 a3例变量的使用main()inta;a=3;printf(“a=%d,a);变量名变量值存储单元 C语言程序设计 第三章 程序的
23、灵魂算法标识符v定义:标识变量名、符号常量名、函数名、数组名、文件名的字符串序列名字。v命名规则:l只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线l大小写字母含义不同,一般用小写l不能使用关键字lTC允许最长32个字符,建议长度不超过8个字符v使用:先定义、后使用标识符应该“见名知意”,如 total,max标识符应该“不宜混淆”,如 l与1,O与0这些标识符合法吗?1A、M.D.John、¥123、#33、Tatol、int、max C语言程序设计 第三章 程序的灵魂算法3.3 整型数据整型常量(整常数)的三种表示方法v十进制整数:由数字09和正负号表示.如 123,-456,
24、0v八进制整数:由数字0开头,后跟数字07表示.如 0123,011v十六进制整数:由0 x开头,后跟09,af,AF表示.如 0 x123,0 xff C语言程序设计 第三章 程序的灵魂算法 补充知识:字节和位v内存以字节为单元组成v每个字节有一个地址v一个字节一般由8个二进制位组成v每个二进位的值是0或101234567012345678910.7643251 C语言程序设计 第三章 程序的灵魂算法数值的表示方法原码、反码和补码v原码:最高位为符号位,其余各位为数值本身的绝对值v反码:l正数:反码与原码相同l负数:符号位为1,其余位对原码取反v补码:l正数:原码、反码、补码相同l负数:最高
25、位为1,其余位为原码取反,再对整个数加13126912457810119-5=49+7=16=(14)12 C语言程序设计 第三章 程序的灵魂算法原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字节表示数)v负数补码转换成十进制数:最高位不动,其余位取反加1
26、例 补码:11111001 取反:10000110 加1:10000111=-7 C语言程序设计 第三章 程序的灵魂算法整型变量v整型数据在内存中的存放形式l数据在内存中以二进制补码形式存放l每一个整型变量在内存中占2个字节10的原码反码补码-10的原码取绝对值反码补码00 00 00 00 00 00 10 1000 00 00 00 00 00 10 1000 00 00 00 00 00 10 1010 00 00 00 00 00 10 1000 00 00 00 00 00 10 1011 11 11 11 11 11 01 0111 11 11 11 11 11 01 10整数的最
27、左二进制位是符号位,0正、1负 C语言程序设计 第三章 程序的灵魂算法v整型变量的分类l三类整型变量有符号无符号基本型(简称整型)intunsignedint短整型short或shortintunsignedshort长整型long或longintunsignedlongl整数类型和取值范围TURBO C所占位数最小取值范围int16-32768+32767short16-32768+32767long32-2147483648+2147483647unsigned int16065535unsigned short16065535unsigned long3204294967295 C语言程
28、序设计 第三章 程序的灵魂算法v整型变量的定义l先定义后使用强制类型定义inta,b;(指定变量a、b为整型)unsignedshortc,d;(指定变量c、d为无符号短整型)longe,f;(指定变量e、f为长整型)00 00 00 00 00 00 11 0100 00 00 00 00 00 00 0000 00 00 00 00 00 11 0100 00 00 00 00 00 11 0100 00 00 00 00 00 00 0000 00 00 00 00 00 11 0100 00 00 00 00 00 11 0100 00 00 00 00 00 11 01int 型sh
29、ort 型long 型unsigned int 型unsigned int 型unsigned long 型符号位例3.2整型变量的定义与使用#includevoidmain()inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%dn,c,d);指定abcd为整型变量指定u为无符号整型变量定义放在函数开头的声明部分作用域不同类型混合运算,类型自动转换结果:a+u=22,b+u=-14定义与赋值同时进行:inta=12;C语言程序设计 第三章 程序的灵魂算法v整型数据的溢出l此情况称为“溢出”,运行时不报错,编
30、程时要注意01 11 11 11 11 11 11 11整型变量最大值3276710 00 00 00 00 00 00 00加1后是32768的补码形式例3.3整型数据的溢出#includevoidmain()inta,b;a=32767;b=a+1;printf(%d,%dn,a,b);32767,-32768运行结果:改为:long b;结果是什么?C语言程序设计 第三章 程序的灵魂算法整型常量的类型v整型常量的值在-32768+32767范围内,编译器认为是int类型v整型常量的值超过上述范围,而在2147483648 +2147483647范围内,编译器认为是long类型v当系统定义
31、short int与int占内存长度相同,则两种类型常量均可以赋给int和short int型变量v在整型常量后面加大写L或小写l,则告诉编译器,把该整型常量作为long类型处理。例:123L、0L v在整型常量后面加u,则按无符号整型方式存放,负数转换成补码再按无符号整型方式存放。C语言程序设计 第三章 程序的灵魂算法3.4 浮点型数据浮点型常量的表示方法v浮点数(float)又称为实数(real)v两种表示方法:l十进制小数形式:必须有小数点 如0.123、.123、123.0、0.0、123.l 指数形式:e或E之前后必须有数字;指数必须为整数 如123.456e0、12.3456e1、
32、1.23456e2、0.123456e3、0.0123456e4等v规范化指数形式l只有一位非零整数的指数形式l是指数的输出形式6.28e-2表示6.2810-2-3.0824e4表示3.0824104 C语言程序设计 第三章 程序的灵魂算法浮点型变量v浮点型数据在内存中的存放形式l浮点型数据在内存中占4个字节(32位)l在内存中分成3部分,指数为2的幂次+.314159 1数符小数部分指数v浮点型变量的分类单精度 float 32位67双精度 double 型64位1516长双精度long double型128位1819类 型位数有效数字floatx,y;(指定x、y为单精度浮点型变量)do
33、ublez;(指定z为双精度浮点型变量)longdoublet;(指定t为长双精度浮点型变量)C语言程序设计 第三章 程序的灵魂算法v浮点型数据的舍入误差l数据超过有效位数,则产生误差l要避免一个很大的数与一个很小的数加减例3.4浮点型数据的舍入误差#includevoidmain()floata,b;a=123456.789e5;b=a+20;printf(%fn,b);舍入误差使1.0/3*3的结果并不等于1!12345678848.000000运行结果:浮点型常量的类型l浮点型常量一般按双精度64位处理,数后加F或f按单精度l浮点型常量不分float和double C语言程序设计 第三章
34、 程序的灵魂算法3.5字符型数据字符常量v定义:用单引号括起来的单个字符或转义字符v字符常量的值:该字符的ASCII码值v定义格式:char变量名=值v转义字符:反斜线后面跟一个字符或一个代码值表示如 a A n t 如 a97,A65 n10,t9charch=65与charch=A与char=101是等效的 C语言程序设计 第三章 程序的灵魂算法表3.3转义字符及其含义转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车(不换行)响铃单引号3位8进制数代表的字符水平制表(右移8格)退格换页反斜线双引号2位16进制数代表的字符例3.5转义字符的使用#includevoidma
35、in()printf(“abctderftgn”);printf(“htibbjk”);f gdeh j k显示结果:打印结果:fab gdeh jik C语言程序设计 第三章 程序的灵魂算法字符变量l存放字符常量,占用一个字节,存放一个字符l定义形式:赋值:charc1,c2;c1=a;c2=b;字符数据在内存中的存储形式及其使用方法l以二进制存放字符的ASCII码值(0255整数)l与整数的存储形式类似v以字符或整数形式输出例3.6向字符变量赋整数#includevoidmain()charc1,c2;c1=97;c2=98;printf(“%c%cn,c1,c2);printf(“%d%
36、dn,c1,c2);ab9798运行结果:输出形式取决于printf函数中的格式符格式符为“%c”时输出的变量值为字符格式符为“%d时输出的变量值为整数 C语言程序设计 第三章 程序的灵魂算法对字符数据进行算术运算l实质是对其ASCII值进行算术运算例3.7大小写字母的转换#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c%c,c1,c2);AB运行结果:字符型与整型间互相赋值例:互相赋值#includevoidmain()intc1;charc2;c1=a;c2=98;c1=c1-32;c2=c2-32;pri
37、ntf(“%c%c,c1,c2);小写字母比大写字母的小写字母比大写字母的ASCIIASCII码大码大(32)(32)1010 C语言程序设计 第三章 程序的灵魂算法字符串常量v定义:用双引号(“”)括起来的字符序列“Howdoyoudo”,“CHINA”,“a”,“$123.45”v存储:每个字符串尾自动加一个0作为字符串结束标志hello0例 字符串“hello”在内存中例 空串 “”0v字符常量与字符串常量不同aa0例a“a”例:charch;ch=“A”;例:charch;ch=A;没有字符串变量,没有字符串变量,只能用字符数组存放只能用字符数组存放 C语言程序设计 第三章 程序的灵魂
38、算法3.6 变量赋初值v变量的使用:先定义,后使用v变量定义位置:一般放在函数开头v变量初始化:可以在定义时赋初值例:inta=1,b=-3,c;floatdata=3.67;charch=A;intx=1,y=1,z=1;intx=y=1;()编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1,b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数错!inta=b=c=3 C语言程序设计 第三章 程序的灵魂算法3.7 各类数值型数据间的混合运算v整型、实型、字符型数据间可以混合运算自动转换v什么情况下发生l运算转换-不同类型数据混合运算时l赋值转换-把一个值赋给与其
39、类型不同的变量时l输出转换-输出时转换成指定的输出格式l函数调用转换-实参与形参类型不一致时转换v运算转换规则:不同类型数据运算时先自动转换成同一类型 C语言程序设计 第三章 程序的灵魂算法doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a+i*f-d/l例inti;floa
40、tf;doubled;longl;C语言程序设计 第三章 程序的灵魂算法强制转换(见P56强制类型转换运算符部分)v一般形式:(类型名)(表达式)例:(int)(x+y)(int)x+y (double)(3/2)(int)3.6 v说明:强制转换得到 所需类型的中间变量,原变量类型不变 例3.8#includemain()floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3精度损失问题精度损失问题较高类型向较低类型转换时可能发生强制类型转强制类型转换运算符换运算符表达式仅一个表达式仅一个变量时,括号变量时,括
41、号可以省略可以省略 C语言程序设计 第三章 程序的灵魂算法3.8算术运算符和算术表达式C运算符算术运算符:(+-*/%+-)关系运算符:(=!=)逻辑运算符:(!&|)位运算符 :(|&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(.-)下标运算符:()其它 :(()-)学习运算符应注意:v运算符功能v与运算量关系l要求运算量个数l要求运算量类型v运算符优先级别v结合方向v结果的类型 C语言程序设计 第三章 程序的灵魂算法算术运算符和算术表达式v基本算术运算符:+-*/%l结合方向:从左向右
42、l优先级:-*/%-+-(2)(3)(4)说明:l“-”可为单目运算符时,右结合性l两整数相除,结果为整数l%要求两侧均为整型数据l+-*/运算的两个数中有一个数为实数,结果是double型例 5/2 =-5/2.0 =例 5%2 =-5%2 =1%10 =5%1 =5.5%2例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()C语言程序设计 第三章 程序的灵魂算法v自增、自减运算符+l作用:使变量值加1或减1l种类:u前置 +i,-i (先执行i+1或i-1,再使用i值)u后置 i+,i-(先使用i值,再执行i+1或i-1
43、)例j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;/k=4,j=4/k=3,j=4/4,j=4/3,j=4/c=20,a=4/c=15,a=4 C语言程序设计 第三章 程序的灵魂算法l几点说明:例-i+i=3;printf(“%d”,-i+);-(i+)/-3 u+-不能用于常量和表达式,如 5+,(a+b)+u+-结合方向:自右向左u优先级:-+-*/%-+-(2)(3)(4)u该运算符常用于循环语句中,使循环变量加减1v有关表达式使用中的问题说明l不同系
44、统对运算符和表达式的处理次序不同,尽可能写通用性强的语句l不要写有歧义和不知系统如何执行的程序 C语言程序设计 第三章 程序的灵魂算法3.9 赋值运算符和赋值表达式v简单赋值运算符l符号:=l格式:变量标识符=表达式l作用:将一个数据(常量或表达式)赋给一个变量l左侧必须是变量,不能是常量或表达式例 a=3;d=func();c=d+2;例 3=x-2*y;a+b=3;()C语言程序设计 第三章 程序的灵魂算法v赋值表达式l形式:l赋值表达式的值与变量值相等,且可嵌套例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/表达式值为5,a,b
45、,c值为5/b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2 C语言程序设计 第三章 程序的灵魂算法3.10 逗号运算符和逗号表达式v形式:表达式1,表达式2,表达式nv结合性:从左向右v优先级:15,级别最低v逗号表达式的值:等于表达式n的值v用途:常用于循环for语句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);/a=15,表达式值60
46、/a=15,表达式值20/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,3 C语言程序设计 第三章 程序的灵魂算法例:逗号表达式使用main()intx,y=7;floatz=4;x=(y=y+6,y/z);printf(x=%dn,x);X=3运行结果:本章的内容散乱而复杂,但却是程序设计的基础,要认真看书,通过编程序才可以深入理解。C语言程序设计 第三章 程序的灵魂算法课后作业P6668页习题:v3.2,3.5(思考)v3.3,3.4,3.9,3.12(写出答案)v3.6,3.10(上机验证)上机:实验教材:实验2(做好上机准备)预习第四、第五章
47、第4章最简单的C程序设计顺序程序设计 C语言程序设计 第四章 顺序程序设计C语言概述赋值语句数据输入输出的概念及在C语言中的实现字符数据的输入输出格式输入与输出顺序结构程序设计举例4.1 C语句概述C程序结构:v一个C程序可以由多个源程序文件构成v一个源程序文件由若干函数、预编译命令及全局变量声明部分构成v函数包括数据定义部分和执行部分,执行部分是C语言语句,完成对数据的操作 C语言程序设计 第四章 顺序程序设计C语句分为5类v控制语句:共9种l完成一定的控制功能,这些语句能够根据一定的测试条件决定某些语句是否被执行,如分支、循环、跳转等语句。C语言程序设计 第四章 顺序程序设计if()els
48、e(条件语句)for()while()(循环语句)dowhile()continue(结束本次循环语句)switch(多分支选择语句)break(终止switch或循环语句)goto(转向语句)return(从函数返回语句)C语言程序设计 第四章 顺序程序设计v空语句:只有一个“;”,什么也不做v表达式语句:由表达式加“;”组成l典型的是赋值语句,由赋值表达式加分号构成,如:y=x+1是表达式,而y=x+1;则是赋值语句。实际上函数调用语句也属于表达式语句。v函数调用语句:由函数加“;”组成printf(“ThisisaCprogram”);a=3;i+;for(i=0;i100;i+);v复
49、合语句:l用括起来的一组语句,也称作程序块。l一般形式:C语言程序设计 第四章 顺序程序设计inti=0,sum=0;while(i=100)sum=sum+i;i=i+1;l说明u复合语句“”后不加分号u语法上和其它语句相同u复合语句可嵌套4.2 赋值语句v基本格式:赋值表达式+;l赋值表达式可以包含在其它表达式中,而赋值语句不可以。C语言程序设计 第四章 顺序程序设计例:if(a=b)0)t=a;不可写为:if(a=b;)0)t=a;C语言程序设计 第四章 顺序程序设计表达式中允许出现运算符号、变量、数值、函数序号语句含义右侧表达式包括1a=5常量5i=0 x30+255十进制、十六进制c
50、h=ch-A6变量、字符常量7m=a1+a2数组变量8x=*px+指针变量、增1运算2S=pi*r*r变量、乘号求圆面积3average=(a+b)/2变量、常数、括号求平均数4x=l*cos(q)变量、函数求横坐标v另一种形式的赋值语句=;C语言程序设计 第四章 顺序程序设计示例含义a+=表达式a=a+(表达式)a%=表达式a=a%(表达式)a-=表达式a=a-(表达式)a*=表达式a=a*(表达式)a/=表达式a=a/(表达式)我们可以理解为:=;只适合于整型变量v连续赋值语句 C语言程序设计 第四章 顺序程序设计int a,b,c;a=b=c=1;连续赋值语句应“从右向左”计算a=b=c