c语言程序设计10第十讲(第五章上)课件.ppt
《c语言程序设计10第十讲(第五章上)课件.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计10第十讲(第五章上)课件.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、不为失败找理由、要为成不为失败找理由、要为成功找方法!功找方法!1高级语言程序设计高级语言程序设计主讲教师:贾彩燕主讲教师:贾彩燕计算机与信息技术学院计算机与信息技术学院计算机科学与技术系计算机科学与技术系2第五章第五章C C程序结构程序结构3本章讨论与本章讨论与C程序程序整体结构整体结构有关的问题。有关的问题。对正确理解对正确理解C语言语言/正确书写正确书写C程序很重要。学习用程序很重要。学习用C程程序设计时应了解的序设计时应了解的“深层问题深层问题”。1)基本数值类型的全面介绍)基本数值类型的全面介绍2)函数与)函数与C程序结构,函数原型程序结构,函数原型3)变量类,作用域与存在期)变量类
2、,作用域与存在期4)预处理命令)预处理命令5)字位运算符(特殊问题,初步了解,需要时深入)字位运算符(特殊问题,初步了解,需要时深入)4主要内容主要内容n数值类型数值类型n函数和标准库函数函数和标准库函数n函数定义和程序的函数分解函数定义和程序的函数分解nC程序结构与变量程序结构与变量n预处理命令预处理命令n定义常量定义常量n字位运算符字位运算符n编程实例编程实例55.1 数值类型数值类型实数类型:实数类型:float,double,long doublen实实数数类类型型外外的的算算术术类类型型都都是是整整数数类类型型。字字符符类类型型也也看看作作整整数数类型,可以作为整数参加运算。类型,可
3、以作为整数参加运算。n每每一一基基本本整整数数类类型型都都有有带带符符号号与与无无符符号号两两种种类类型型,用用限限定定词词signed或或unsigned说明。说明。n无符号类型的值大于等于无符号类型的值大于等于0。n同一基本类型的带符号同一基本类型的带符号/无符号类型用同样长度编码。无符号类型用同样长度编码。nsigned可省略,如可省略,如signed long简写为简写为long。6字符类型:字符类型:char,signed char,unsigned charn用一个字节表示,其中存字符编码。用一个字节表示,其中存字符编码。nASCII字符集里数字(字母)字符的编码字符集里数字(字母
4、)字符的编码连续连续排列排列。nchar等同于等同于signed char或或unsigned char(不不同系统可能不同同系统可能不同)。简单程序只用。简单程序只用char,不需,不需要关心有无符号。只有用要关心有无符号。只有用char参加整数运算时参加整数运算时才需要考虑。才需要考虑。n基本基本ASCII字符集的字符集的编码范围是编码范围是0-127。7整数类型整数类型 基本:基本:int,short int,long int总共六个:总共六个:int unsigned intshort unsigned shortlongunsigned longshort int简写为简写为shor
5、t,long int简写简写long,unsigned int简写为简写为unsignedshort表示范围不大于表示范围不大于int,long不小于不小于int。无符号。无符号/有符号有符号类型位数相同。具体表示由类型位数相同。具体表示由C语言系统确定语言系统确定。基本类型是基本类型是int,一般用计算机的字长表示。一般用计算机的字长表示。16位机器的位机器的C系统中,系统中,int通常用通常用16位表示;位表示;32位机器的位机器的C系统中,系统中,int通常通常用用32位表示位表示;8整数常量可用十进制整数常量可用十进制 八进制八进制(0开头)开头)十六进制(十六进制(0 x或或0X开头
6、)开头)长整型加后缀长整型加后缀L或或l short无无常量常量写法写法 无符号数加后缀无符号数加后缀u或或U123U,2987654LU,327LU,32014U无符号整数的算术运算无符号整数的算术运算按取模方式做按取模方式做(不会溢出),超出表示(不会溢出),超出表示范围时取模作为计算结果。范围时取模作为计算结果。例:若例:若16位位unsignd范围为范围为065535。计算超范围时取模。计算超范围时取模65536。234U+65500U的计算结果是的计算结果是198U。9混合类型运算前把小类型转换到大类型的值。混合类型运算前把小类型转换到大类型的值。整数提升整数提升:小整数(小整数(s
7、hort、char等)等)先转为先转为int值再运算。若转换结果值再运算。若转换结果超出超出int范围(范围(unsigned short提升可能出问题),就提升提升可能出问题),就提升为为unsigned。基本类型相同时,认为无符号类型是比同样的有符号类型更大基本类型相同时,认为无符号类型是比同样的有符号类型更大的类型。的类型。例如做下面计算:例如做下面计算:2365U+18764将先由将先由18764(整型值)转换生成(整型值)转换生成unsigned对应值,再用此新对应值,再用此新值参与运算。值参与运算。10基本数据类型的选择基本数据类型的选择C 语言提供多个浮点类型和整数类型,供编程者
8、选择使用。语言提供多个浮点类型和整数类型,供编程者选择使用。n如无特殊需要,浮点数总用如无特殊需要,浮点数总用double,因其精度和范围能满足一因其精度和范围能满足一般要求(般要求(float精度过低,精度过低,long double可能低效,一般不用)。可能低效,一般不用)。n如无特殊需要,整数总用如无特殊需要,整数总用int。int是是C语言里最基本的类型,能语言里最基本的类型,能得到硬件基本支持,其效率不会低于任何其他整数类型。有时得到硬件基本支持,其效率不会低于任何其他整数类型。有时用用long类型。类型。n如无特殊需要,字符总采用如无特殊需要,字符总采用char。n尽量少用尽量少用
9、unsigned类型,除非服务于特殊目的。类型,除非服务于特殊目的。11主要内容主要内容n数值类型数值类型n函数和标准库函数函数和标准库函数n函数定义和程序的函数分解函数定义和程序的函数分解nC程序结构与变量程序结构与变量n预处理命令预处理命令n定义常量定义常量n字位运算符字位运算符n编程实例编程实例12编写大程序时应特别注意函数分解。编写大程序时应特别注意函数分解。没有合理函数分解不可能完成复杂工作没有合理函数分解不可能完成复杂工作/多花时间多花时间/程序更难理解程序更难理解/错误更难发现和纠正。错误更难发现和纠正。开始就应强调好的编程习惯(包括函数分解)开始就应强调好的编程习惯(包括函数分
10、解)。函数的作用函数的作用:把一段计算抽象出来,封装(包装)成独立实体。:把一段计算抽象出来,封装(包装)成独立实体。这种这种封装程序段封装程序段称为称为函数定义函数定义。定义后通过函数名就可以用简便方式要求执行该函数所封装的定义后通过函数名就可以用简便方式要求执行该函数所封装的计算。这种计算。这种描述片段描述片段称为称为函数调用函数调用。5.2 函数和标准函数库函数和标准函数库问题复杂使程序变长。问题复杂使程序变长。大程序难开发大程序难开发/难阅读理解难阅读理解/难修改;修难修改;修改时容易破坏完整性,难保证不引进新错误。改时容易破坏完整性,难保证不引进新错误。程序中常出现许多相同程序中常出
11、现许多相同/类似片段。类似片段。使程序更长,增加不同部分使程序更长,增加不同部分间的联系,损害可修改性。间的联系,损害可修改性。13n基本基本C语言很小,语言很小,ANSI C定义了标准库,其中提供最常用的定义了标准库,其中提供最常用的与与平台无关平台无关的功能。的功能。n每个符合标准的每个符合标准的C系统都提供了标准库,通常还提供一些扩充系统都提供了标准库,通常还提供一些扩充库,以便使用特定硬件库,以便使用特定硬件/特定系统的功能:特定系统的功能:pDOS 上的上的C系统提供与系统提供与DOS有关的功能函数有关的功能函数pWindows上的系统提供与上的系统提供与 Windows有关的函数有
12、关的函数pUNIX系统上的系统提供与系统上的系统提供与UNIX接口的函数接口的函数扩充库不标准,使用扩充库的程序依赖于具体系统。扩充库不标准,使用扩充库的程序依赖于具体系统。库函数库函数实现常用计算,可按规定方式调用,不必自己实现实现常用计算,可按规定方式调用,不必自己实现/不必关不必关心怎样实现。开发一次使所有用户受益。心怎样实现。开发一次使所有用户受益。C语言的库函数语言的库函数14标准库标准库功能包括功能包括 输入输出、文件操作、存储管理,输入输出、文件操作、存储管理,其他如数学函数、数据转换函数等其他如数学函数、数据转换函数等。有关介绍散布在各章,后面有详细介绍。有关介绍散布在各章,后
13、面有详细介绍。对具体对具体C系统的扩充库可查阅系统联机帮助,或查阅有关手册、系统的扩充库可查阅系统联机帮助,或查阅有关手册、参考书籍。参考书籍。下面介绍两组常用标准函数。下面介绍两组常用标准函数。15字符分类字符分类()isalpha(c)c是字母字符是字母字符isdigit(c)c是数字字符是数字字符isalnum(c)c是字母或数字字符是字母或数字字符isspace(c)c是空格、制表符、换行符是空格、制表符、换行符isupper(c)c是大写字母是大写字母islower(c)c是小写字母是小写字母iscntrl(c)c是控制字符是控制字符isprint(c)c是可打印字符,包括空格是可打
14、印字符,包括空格isgraph(c)c是可打印字符,不包括空格是可打印字符,不包括空格isxdigit(c)c是十六进制数字字符是十六进制数字字符ispunct(c)c是标点符号是标点符号int tolower(int c)转为对应小写字母转为对应小写字母int toupper(int c)转为对应大写字母转为对应大写字母是返回非零,是返回非零,不是返回零不是返回零16#include#include int main()int c,cd=0,cu=0,cl=0;while(c=getchar()!=EOF)if(isdigit(c)+cd;if(isupper(c)+cu;if(islowe
15、r(c)+cl;printf(digits:%dn,cd);printf(uppers:%dn,cu);printf(lowers:%dn,cl);return 0;用标准库函数完成判断比自己写条件更合适。用标准库函数完成判断比自己写条件更合适。17#include#include int main()int count=0,c;while(c=getchar()!=EOF)if(isspace(c)continue;+count;while(c=getchar()!=EOF&!isspace(c);printf(Words:%dn,count);return 0;统计单词程序:统计单词程序:
16、18随机数生成函数随机数生成函数p程序调试程序调试:用数据做运行试验,随机数据非常合适。:用数据做运行试验,随机数据非常合适。p计算机模拟计算机模拟:模拟实际情况:模拟实际情况/过程,客观事物变化有随机性。过程,客观事物变化有随机性。最常用的是除余定义:最常用的是除余定义:a0=Aan=(B an-1+C)mod DA,B,C,D为常数,为常数,0AD。适当选择适当选择B、C可产生可产生 0 到到 D-1 的较好随机数列。的较好随机数列。计算机只能生成计算机只能生成“伪随机数伪随机数”。常用方法是定义某种递推关系,。常用方法是定义某种递推关系,设法使序列中的数比较具有随机性。设法使序列中的数比
17、较具有随机性。19标准库提供随机数功能,需要包含文件标准库提供随机数功能,需要包含文件。随机数生成函数:随机数生成函数:int rand(void)无参数,得到无参数,得到0和符号常量和符号常量 RAND_MAX 间的随机整数。间的随机整数。不同系统的不同系统的RAND_MAX可能不同,至少为可能不同,至少为32767。函数函数srand用用seed值设种子值值设种子值:void srand(unsigned seed)默认初始种子值是默认初始种子值是1;rand根据当时种子值生成下一随机数并修改种子值。根据当时种子值生成下一随机数并修改种子值。20n根据下面公式可以得到所需范围内的随机数:根
18、据下面公式可以得到所需范围内的随机数:n=a+rand()%b n=a+rand()%b n其中其中a a为位移,是所需连续整数范围的第一个数,为位移,是所需连续整数范围的第一个数,b b是比例因子,是所需连续整数范围的宽度,则希望是比例因子,是所需连续整数范围的宽度,则希望产生产生1-61-6之间随机数的公式为:之间随机数的公式为:n=1+rand()%6 n=1+rand()%6n希望产生希望产生0101之间随机数的公式为:之间随机数的公式为:n=rand()%2 n=rand()%2伪随机数的产生伪随机数的产生 21例:编写一个投掷骰子的程序,模拟例:编写一个投掷骰子的程序,模拟1010
19、次,输出每次投掷的点数次,输出每次投掷的点数。#include#include int main()int i;printf(“n”);for(i=1;i=10;i+)printf(%3d,1+rand()%6);return 0;结果:结果:6 6 5 5 6 5 1 1 5 3第二次运行:第二次运行:6 6 5 5 6 5 1 1 5 3使用使用srandsrand函函数,通过提供不同数,通过提供不同的种子产生不同的种子产生不同的随机数序列的随机数序列。srand(x);/*初始化随机数发生器初始化随机数发生器*/*/unsigned x;scanf(“%d”,&x);/*/*输入一个非负
20、的整数做种子输入一个非负的整数做种子*/*/16161 3 4 3 5 6 5 2 6 21 3 4 3 5 6 5 2 6 233333 1 5 3 5 6 5 4 1 53 1 5 3 5 6 5 4 1 516161 3 4 3 5 6 5 2 6 21 3 4 3 5 6 5 2 6 222#include#include void main()int i;printf(“n”);for(i=1;i=10;i+)printf(%3d,1+rand()%6);结果:3 4 5 3 3 1 4 3 1 5再次运行:4 4 3 2 3 5 5 3 2 3 srand(time(NULL);/
21、*/*使用使用timetime函数返回值做种子函数返回值做种子*/*/#include例:编写一个投掷骰子的程序,模拟例:编写一个投掷骰子的程序,模拟1010次,输出每次投掷的点数次,输出每次投掷的点数23主要内容主要内容n数值类型数值类型n函数和标准库函数函数和标准库函数n函数定义和程序的函数分解函数定义和程序的函数分解nC程序结构与变量程序结构与变量n预处理命令预处理命令n定义常量定义常量n字位运算符字位运算符n编程实例编程实例245.3 函数定义和程序的函数分解函数定义和程序的函数分解一个一个C程序主要是一系列的函数定义。程序主要是一系列的函数定义。函数定义形式:函数定义形式:函数头部函
22、数头部-返回值类型返回值类型 函数名函数名 参数表参数表 函数体函数体库函数有限,编写复杂程序时需要自己定义函数。库函数有限,编写复杂程序时需要自己定义函数。函数头部:描述函数外部与函数内部的联系。函数头部:描述函数外部与函数内部的联系。应该总写返回类型应该总写返回类型,无返回值用无返回值用void说明。说明。允许任意多个参数,允许任意多个参数,无参函数用无参函数用(void)(早期(早期C语言对语言对ANSI C的影响),定义无参函数时也可用的影响),定义无参函数时也可用()。25主函数主函数mainnmain的的返返回回值值规规定定为为int。这这个个返返回回值值在在程程序序结结束束时时送
23、送给给外外部,程序外部(如操作系统)可用这个值。部,程序外部(如操作系统)可用这个值。n一般一般返回返回0表示程序正常结束,其他值表示出错表示程序正常结束,其他值表示出错nmain以外的以外的函数只有被调用时才会执行函数只有被调用时才会执行n不允许调用不允许调用mainint main()/*一般写法一般写法*/.return 0;2627程序的函数分解程序的函数分解什么样的程序片段应该定义为函数什么样的程序片段应该定义为函数:重复出现重复出现的相同的相同/相似计算片段相似计算片段,可设法抽取性定义为函数。,可设法抽取性定义为函数。长计算过程中长计算过程中有逻辑独立性有逻辑独立性的片段,即使出
24、现一次也可定义的片段,即使出现一次也可定义为函数,以分解复杂性。为函数,以分解复杂性。经验原则经验原则:可以定义为函数的内容,就应该定义为函数;:可以定义为函数的内容,就应该定义为函数;一个函数一般不超过一页。一个函数一般不超过一页。往往存在很多可行的分解,寻找合理有效的分解是需要学习往往存在很多可行的分解,寻找合理有效的分解是需要学习。28实例研究:字符图形实例研究:字符图形写程序打印下面这类字符图形写程序打印下面这类字符图形最最“简单简单”的方式:用一系列的方式:用一系列 putchar 调用打印星号和空格(数调用打印星号和空格(数清字符个数,就可以写出程序)。清字符个数,就可以写出程序)
25、。29方法二:程序里写一系列方法二:程序里写一系列printf调用。例:调用。例:int main()/*打印菱形打印菱形*/printf(*);printf(*);printf(*);./*下略下略*/不好!不好!n若要修改图形大小或形式,程序需全部重写若要修改图形大小或形式,程序需全部重写n如果需要画出新图形,已做工作对新工作毫无价值如果需要画出新图形,已做工作对新工作毫无价值应考虑画这类图形的应考虑画这类图形的“基本动作基本动作”,定义为函数。,定义为函数。30分析:分析:图形由以下部分组成图形由以下部分组成1)一段连续字符;)一段连续字符;2)在两个特定位置的字符;)在两个特定位置的字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 10 第十 第五 课件
限制150内