c语言程序设计10(上)

上传人:宝路 文档编号:47997159 上传时间:2018-07-08 格式:PPT 页数:83 大小:441.43KB
返回 下载 相关 举报
c语言程序设计10(上)_第1页
第1页 / 共83页
c语言程序设计10(上)_第2页
第2页 / 共83页
c语言程序设计10(上)_第3页
第3页 / 共83页
c语言程序设计10(上)_第4页
第4页 / 共83页
c语言程序设计10(上)_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《c语言程序设计10(上)》由会员分享,可在线阅读,更多相关《c语言程序设计10(上)(83页珍藏版)》请在金锄头文库上搜索。

1、 不为失败找理由、要为成 功找方法!1高级语言程序设计主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 2第五章 C程序结构3本章讨论与C程序整体结构有关的问题。对正确理解C语言/正确书写C程序很重要。学习用C程 序设计时应了解的“深层问题”。1)基本数值类型的全面介绍2)函数与C程序结构,函数原型3)变量类,作用域与存在期4)预处理命令5)字位运算符(特殊问题,初步了解,需要时深入)4主要内容n数值类型n函数和标准库函数n函数定义和程序的函数分解nC程序结构与变量n预处理命令n定义常量n字位运算符n编程实例55.1 数值类型实数类型:float,double,long double

2、n实数类型外的算术类型都是整数类型。字符类型也看作整数 类型,可以作为整数参加运算。n每一基本整数类型都有带符号与无符号两种类型,用限定词 signed或unsigned说明。n无符号类型的值大于等于0。n同一基本类型的带符号/无符号类型用同样长度编码。nsigned可省略,如signed long简写为long。6字符类型:char,signed char,unsigned charn用一个字节表示,其中存字符编码。nASCII字符集里数字(字母)字符的编码连续 排列。nchar等同于signed char或unsigned char(不 同系统可能不同)。简单程序只用char,不需 要关心

3、有无符号。只有用char参加整数运算时 才需要考虑。n基本ASCII字符集的编码范围是0-127。7整数类型 基本:int,short int,long int总共六个: int unsigned int short unsigned short longunsigned longshort int简写为short,long int简写long, unsigned int简写为unsignedshort表示范围不大于int,long不小于int。无符号/有符号 类型位数相同。具体表示由C语言系统确定。基本类型是int,一般用计算机的字长表示。16位机器的C系统中,int通常用16位表示;32位

4、机器的C系统中,int通常用32位表示;8整数常量可用十进制 八进制(0开头)十六进制(0x或0X开头)长整型加后缀L或lshort无常量写法无符号数加后缀u或U123U,2987654LU,327LU,32014U无符号整数的算术运算按取模方式做(不会溢出),超出表示 范围时取模作为计算结果。例:若16位unsignd范围为065535。计算超范围时取模65536 。234U+65500U的计算结果是198U。9混合类型运算前把小类型转换到大类型的值。整数提升:小整数(short、char等)先转为int值再运算。若转换结果 超出int范围(unsigned short提升可能出问题),就提

5、升 为unsigned。基本类型相同时,认为无符号类型是比同样的有符号类型更大 的类型。例如做下面计算:2365U + 18764将先由18764(整型值)转换生成unsigned对应值,再用此新 值参与运算。10基本数据类型的选择C 语言提供多个浮点类型和整数类型,供编程者选择使用。n如无特殊需要,浮点数总用double,因其精度和范围能满足一 般要求(float精度过低,long double可能低效,一般不用)。n如无特殊需要,整数总用int。int是C语言里最基本的类型,能 得到硬件基本支持,其效率不会低于任何其他整数类型。有时 用long类型。n如无特殊需要,字符总采用char。n尽

6、量少用unsigned类型,除非服务于特殊目的。11主要内容n数值类型n函数和标准库函数n函数定义和程序的函数分解nC程序结构与变量n预处理命令n定义常量n字位运算符n编程实例12编写大程序时应特别注意函数分解。没有合理函数分解不可能完成复杂工作/多花时间/程序更难理解 /错误更难发现和纠正。开始就应强调好的编程习惯(包括函数分解)。函数的作用:把一段计算抽象出来,封装(包装)成独立实体 。这种封装程序段称为函数定义。定义后通过函数名就可以用简便方式要求执行该函数所封装的 计算。这种描述片段称为函数调用。5.2 函数和标准函数库问题复杂使程序变长。大程序难开发/难阅读理解/难修改;修 改时容易

7、破坏完整性,难保证不引进新错误。程序中常出现许多相同/类似片段。使程序更长,增加不同部分 间的联系,损害可修改性。13n基本C语言很小,ANSI C定义了标准库,其中提供最常用的与 平台无关的功能。n每个符合标准的C系统都提供了标准库,通常还提供一些扩充 库,以便使用特定硬件/特定系统的功能:pDOS 上的C系统提供与DOS有关的功能函数pWindows上的系统提供与 Windows有关的函数pUNIX系统上的系统提供与UNIX接口的函数扩充库不标准,使用扩充库的程序依赖于具体系统。库函数实现常用计算,可按规定方式调用,不必自己实现/不必关 心怎样实现。开发一次使所有用户受益。C语言的库函数1

8、4标准库功能包括输入输出、文件操作、存储管理,其他如数学函数、数据转换函数等。有关介绍散布在各章,后面有详细介绍。对具体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是可打印字符,包括空格 isgraph(c) c是可打印字符,不包括空格 isx

9、digit(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 (islower(c) +cl;printf (“digits: %dn“, cd);printf (“uppers: %dn“,

10、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() != EOFprintf(“Words: %dn“, count);return 0; 统计单词程序:18随机数生成函数p程序调试:用数据做运行试验,随机数据非常合适。p计算机模拟:模拟实际情况/过程,客观事物变化有随

11、机性。最常用的是除余定义:a0 = Aan = (B an-1 + C) mod DA,B,C,D为常数,0A。随机数生成函数:int rand(void)无参数,得到0和符号常量 RAND_MAX 间的随机整数。不同系统的RAND_MAX可能不同,至少为32767。函数srand用seed值设种子值: void srand(unsigned seed)默认初始种子值是1; rand根据当时种子值生成下一随机数并修改种子值。20n根据下面公式可以得到所需范围内的随机数:n = a + rand () % b n其中a为位移,是所需连续整数范围的第一个数,b 是比例因子,是所需连续整数范围的宽度

12、,则希望 产生1-6之间随机数的公式为:n = 1 + rand () % 6n希望产生01之间随机数的公式为:n = rand () %2伪随机数的产生 21例:编写一个投掷骰子的程序,模拟10次,输出每次投掷的点数。#include #include int main() int i;printf(“n”);for(i = 1 ; i #include void main() int i;printf(“n”);for(i = 1 ; i 例:编写一个投掷骰子的程序,模拟10次,输出每次投掷的点数23主要内容n数值类型n函数和标准库函数n函数定义和程序的函数分解nC程序结构与变量n预处理命

13、令n定义常量n字位运算符n编程实例245.3 函数定义和程序的函数分解一个C程序主要是一系列的函数定义。 函数定义形式:函数头部- 返回值类型 函数名 参数表 函数体库函数有限,编写复杂程序时需要自己定义函数。 函数头部:描述函数外部与函数内部的联系。应该总写返回类型, 无返回值用void说明。允许任意多个参数,无参函数用(void) (早期C语言对ANSI C的影响),定义无参函数时也可用()。25主函数mainnmain的返回值规定为int。这个返回值在程序结束时送给外 部,程序外部(如操作系统)可用这个值。n一般返回0表示程序正常结束,其他值表示出错nmain以外的函数只有被调用时才会执

14、行n不允许调用mainint main () /*一般写法*/. .return 0; 2627程序的函数分解什么样的程序片段应该定义为函数:重复出现的相同/相似计算片段,可设法抽取性定义为函数。长计算过程中有逻辑独立性的片段,即使出现一次也可定义 为函数,以分解复杂性。经验原则:可以定义为函数的内容,就应该定义为函数;一个函数一般不超过一页。往往存在很多可行的分解,寻找合理有效的分解是需要学习。28实例研究:字符图形 写程序打印下面这类字符图形最“简单”的方式:用一系列 putchar 调用打印星号和空格(数 清字符个数,就可以写出程序)。29方法二:程序里写一系列printf调用。例:in

15、t main () /* 打印菱形 */printf(“ * “);printf(“ * * “);printf(“ * * *);. . /* 下略 */ 不好!n若要修改图形大小或形式,程序需全部重写n如果需要画出新图形,已做工作对新工作毫无价值应考虑画这类图形的“基本动作”,定义为函数。30分析: 图形由以下部分组成 1)一段连续字符; 2)在两个特定位置的字符;字符图形未必用星号,可推广,引进一个字符参数void line(char c, int begin, int end)void points(char c, int fst, int snd) 可考虑定义两个函数,其头部分别为: void line(int begin, int end) void points(int fst, int snd) line从begin到end输出*,points在fst和snd输出*。 31如函数已经定义,画菱形程序段可写为:for (i = 10, j = 10; i 4; -i, +j)points(*, i, j);for (i+=2, j-=2; i0,转1;否则转22、根据x1 和x2求x(定义函数crossp),求f(x) (定义函数f);3、检查f(x)与f(x1 )和f(x2 )

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号