何黎霞大学计算机基础教学部计算机科学学院hlxyang@163.com个人简介2020/2/12长江大学计算机科学学院2C语言程序设计课程简介•教材–杜友福主编,《C语言程序设计》–杜友福主编,《C语言程序设计导学》–学时72学时–理论教学52+课内上机20–要求自主安排课外上机20学时以上。2020/2/12长江大学计算机科学学院3疑问现实世界中的应用如何学习并提高预期效果通过哪些方法来督促大家学习上课随机考察课后答疑上机辅导作业检验2020/2/12长江大学计算机科学学院4第一章程序设计基本概念2020/2/12长江大学计算机科学学院51.1程序与程序设计语言•程序–数据结构–算法•程序设计语言–机器语言–汇编语言–高级语言–运行–语言处理程序2020/2/12长江大学计算机科学学院61.程序运行过程•编辑处理–通过编辑程序将编写的源程序送入计算机。•语言处理–将用户编写的源程序转换成机器语言的形式,以便计算机能够识别和运行。–由翻译程序自动完成的,翻译程序除了要完成语言间的转换外,还要进行语法、语义等方面的检查。•装配链接处理•装入内存运行2020/2/12长江大学计算机科学学院72.语言处理•汇编•编译•解释生成目标代码高级语言程序可执行程序链接编译图1.2编译过程示意图2020/2/12长江大学计算机科学学院83.用计算机解决问题的基本步骤•一般由分析问题、建立数学模型、选择合适算法、编写程序、调试、运行程序直至得到正确的结果等几个阶段所组成。•设计步骤1.确定要解决的问题。主要目的是搞清楚“做什么”。2.算法设计与数据结构设计。主要任务是解决“如何做”。3.编写程序和调试程序。4.整理资料,交付使用。2020/2/12长江大学计算机科学学院91.2算法•什么是算法•如何描述算法•算法的特点–有穷性–确定性–有效性–有零个或多个输入–有一个或多个输出2020/2/12长江大学计算机科学学院101.算法描述•用自然语言表示•用伪代码表示•用传统流程图表示–直观,设计者的思路表达得清楚易懂,便于检查修改。•N-S流程图表示•用计算机语言表示2020/2/12长江大学计算机科学学院11传统流程图常用的符号2020/2/12长江大学计算机科学学院12三种基本结构(1)只有一个入口。(2)只有一个出口。(3)结构内的每一部分都有机会被执行到。(4)结构内不存在“死循环”(无终止的循环)。处理1处理2(a)顺序结构条件处理(c)循环结构满足不满足条件处理1处理2(b)选择结构满足不满足2020/2/12长江大学计算机科学学院13NS流程图•N-S流程图由美国学者I.Nassi和B.Shneiderman提出的一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线,禁用程序的转向语句,将全部算法都写在一个矩形框内,因此,N-S流程图也叫盒图。处理1处理2(a)顺序结构条件处理1处理2成立不成立(b)选择结构当条件成立时处理直到条件成立为止处理(c)循环结构2020/2/12长江大学计算机科学学院142.简单算法举例•例1求两个任意整数的最大值.开始输入两个任意整数x,yifxy输出x否是输出y结束1.传统流程图输入x,yxy是否输出x输出y2.NS流程图3.计算机语言#includestdio.hmain(){intx,y;scanf(%d%d,&x,&y);if(xy)printf(最大值:%d,x);elseprintf(最大值:%d,y);}思路传统流程图NS流程图计算机语言•例2求1+2+……+100的和x=1,sum=0sum=sum+xx=x+1直到x100为止输出sum的值#includestdio.hmain(){intx=1,sum=0;while(x=100){sum=sum+x;x=x+1;}printf(sum=%d,sum);}sum=sum+xx=x+1开始x=1sum=0x=100是否输出sum结束2020/2/12长江大学计算机科学学院171.3C语言程序的基本结构#includestdio.hmain(){intx,y;scanf(%d%d,&x,&y);if(xy)printf(最大值:%d,x);elseprintf(最大值:%d,y);}#includestdio.hmain(){intx=1,sum=0;while(x=100){sum=sum+x;x=x+1;}printf(sum=%d,sum);}2020/2/12长江大学计算机科学学院18C语言程序的基本结构•C程序是由函数组成。一个C源程序至少包含一个主函数(main函数)。•一个函数是由函数的首部和函数体两个部分组成。•一个C程序总是从主函数开始执行的,并在主函数结束执行•C程序书写格式自由•每个语句必须有分号•没有输入输出语句,只有输入输出函数•可以用//进行行注释,用/*…*/进行或多行注释2020/2/12长江大学计算机科学学院19上机基本操作指南与作业教材P15习题1三、1-4题上机基本操作《导学》p182VC++环境熟悉2020/2/12长江大学计算机科学学院20第二章数据类型、运算符、表达式•数据•数据类型•运算符•表达式能够输入到计算机并由计算机进行处理的对象数据类型决定数据在内存中的存储长度和存储格式。C语言中的运算处理功能都是由运算符来实现的。是运算符连接起来的一系列操作。表达式都有一个值,即运算结果。2020/2/12长江大学计算机科学学院212.1C语言的数据类型数据类型基本类型构造类型指针类型空类型整型实型字符型单精度型双精度型数组类型结构体类型共用体类型枚举类型2020/2/12长江大学计算机科学学院222.2常量、变量与标识符•在程序运行过程中不会发生变化。•常量类型:–整型常量–实型常量–字符常量–符号常量1.常量2020/2/12长江大学计算机科学学院23符号常量的使用例:符号常量的使用#definePI3.14159main(){floatr,l,area;r=3.5;l=2*PI*r;area=PI*r*r;printf(“l=%f,area=%f\n”,l,area);}2020/2/12长江大学计算机科学学院242.变量•变量的概念在程序运行过程中,其值可以在一定范围内发生变化的量;•变量名每一个变量都有一个名字来标识•变量值变量的值2020/2/12长江大学计算机科学学院253.标识符•规则:C语言中,标识符只能由字母、数字和下划线等三种字符组成,并且第一个字符必须为字母或下划线。•分类:•关键字•预定义标识符•用户标识符字母、数字和下划线字母或下划线2020/2/12长江大学计算机科学学院262.3整型数据整型数据整型常量整型变量1.组成2020/2/12长江大学计算机科学学院272.整型变量的分类整型变量有符号无符号短整型基本整型长整型3.整型变量的定义(关键字)有符号短整型signedshortint基本整型长整型signedintsignedlongint无符号短整型unsignedshortint基本整型长整型unsignedintunsignedlongint2020/2/12长江大学计算机科学学院293.整型变量的定义/*定义i为有符号的基本整型数据*/inti;/*定义j为有符号的长整型数据*/longintj;/*定义n为无符号的基本整型数据*/unsignedintn;/*定义k为无符号的长整型数据*/unsignedlongk;2020/2/12长江大学计算机科学学院304.整型数据在内存中的存储形式50000000000000101-51111111111111011举例说明(以基本C为例)2020/2/12长江大学计算机科学学院315.整型常量补充说明根据整型常量值的范围赋值给对应整型变量无符号的整型常量表示方法,如12345u或12345U长整型常量的表示方法,如100l或100L2020/2/12长江大学计算机科学学院322.4实型数据实型数据实型常量实型变量1.组成2020/2/12长江大学计算机科学学院332.实型变量的分类单精度双精度3.实型变量的定义(关键字)单精度float双精度double2020/2/12长江大学计算机科学学院343.实型数据的定义//定义x,y为单精度实型floatx,y;//定义z为双精度实型doublez;2020/2/12长江大学计算机科学学院354.实型数据在内存中的存储形式阶符阶码数符尾数表示:–0.1100110×2-11100000111110011000000000000000002020/2/12长江大学计算机科学学院365.实型数据的误差存储误差:用来存储实型数据的存储单元的位数有限有效位数以外的其它数字位被舍去转换误差:在将十进制数转换成二进制数时,有时也会产生误差2020/2/12长江大学计算机科学学院372.5字符型数据字符型数据字符常量字符型变量字符型常量字符串常量1.组成2020/2/12长江大学计算机科学学院381.字符常量•单个字符•转义字符控制字符含义控制字符含义\a铃声\v竖向跳格\b退格,将当前位置移到前一列\\反斜杠字符“\”\f换页,将当前位置移到下页开头\'单引号字符“'”\n换行,将当前位置移到下行开头\双引号字符“”\r回车,将当前位置移到本行开头\t横向跳格,跳到下一个tab位置\ddd\xhh1~3位八进制数所代表的字符1~2位十六进制数所代表的字符2020/2/12长江大学计算机科学学院392.字符串常量•字符串常量的形式•空串•字符串的结束标志•空串与空格组成的字符串、字符常量与单个字符组成的字符串之间的差别2020/2/12长江大学计算机科学学院403.字符变量及定义•类型名char•定义/*变量c1,c2为字符型变量*/charc1,c2;•存储空间每个字符变量在内存中只占用1个字节的2020/2/12长江大学计算机科学学院41运算符符号优先级结合性表达式(),+-*/%()单目+-*/%+-左结合性算术运算符和圆括号将函数和运算对象(如常量、变量等)按一定的规则连接起来的表达式。3*’a’+1.23/21.算术运算符2020/2/12长江大学计算机科学学院42算术运算中的类型转换•在C语言中要求参加运算的两个运算量是同一数据类型,而运算结果也是该数据类型。•对数据类型不一致的两个运算量,系统会进行数据类型转换高doublefloatlong(unsignedlong)低int(unsignedint)shortint、char图2.4算术运算中的类型转换2020/2/12长江大学计算机科学学院432.强制类型转换运算符一般格式为:(类型名标识符)(表达式)如:(int)3.5%22020/2/12长江大学计算机科学学院443.赋值运算符与赋值表达式符号优先级结合性表达式=低于算术运算符右结合性变量=表达式2020/2/12长江大学计算机科学学院45复合的赋值运算符•+=-=*=/=%=&=∧=!=<<=>>=例如:x+=3等价于x=x+3。x%=3等价于x=x%3。注意:这些运算符都是由多个字符组合而成的,其字符之间不允许有空格。2020/2/12长江大学计算机科学学院46赋值运算中的类型转换原则:系统自动将赋值运算符右边的数据类型转换成赋值运算符左边变量的类型。1.将实型数据转换为整型值时直接舍弃实数的小数部分。2.将整型值转换为实型值时整数部分取整型值,小数部分的值为零。3.将双精度的实型数据转换为单精度的实型数据时截取其小数部分中前面的7位有效数字(十进制数),指数部分保持不变。2020/2/12长江大学计算机科学学院47赋值运算中的类型转换(续)4.将整型数据转换为取值范围更大的整型数据时,对于有符号数,用其符号位的值向前扩展。对于无符号数,则用0向前扩展。5.将整型数据转换为取值范围更小的整型数据时,按所需的位数从低位直接截取。6.同等