1 / 245

C 语 言 程 序 设 计

C 语 言 程 序 设 计 但愿她是你知识大厦的又一块基石。 但愿她是开启你智慧的又一把钥匙! 学习目的 学习掌握 C 语言的语法结构。 学习结构化程序设计的一般方法,提高分析能力和综合能力。 能够用 C 语言编程解决一定的实际问题。 学习方法 结构化程序设计的思想方法。 方 法 解决特定问题的一般方法。 算 法 语言基本元素、基本构词方法、 句法、结构等规则的集合 。 语 法 第一章 C 语言概论 1.0 高级语言的概念 机器语言 汇编语言 高级语言 特点:二进制表示、面向机器、直接运行。

arleen
Download Presentation

C 语 言 程 序 设 计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C 语 言 程 序 设 计 但愿她是你知识大厦的又一块基石。 但愿她是开启你智慧的又一把钥匙!

  2. 学习目的 • 学习掌握C语言的语法结构。 • 学习结构化程序设计的一般方法,提高分析能力和综合能力。 • 能够用C语言编程解决一定的实际问题。

  3. 学习方法 结构化程序设计的思想方法。 方 法 解决特定问题的一般方法。 算 法 语言基本元素、基本构词方法、 句法、结构等规则的集合。 语 法

  4. 第一章 C语言概论

  5. 1.0 高级语言的概念 机器语言 汇编语言 高级语言 特点:二进制表示、面向机器、直接运行。 特点:符号化的机器语言、面向机器、翻译后运行。 特点:类自然语言、面向问题、翻译后运行。 2+3 ADD 2,3 010100100011 2+3 高级语言程序 翻译系统 二进制机器语言 编译或解释程序。

  6. 1.1 C语言的特点 C语言是由Dennis M Ritchie和Brian W Kernighan于1972 年在B语言的基础上提出的,他们用C语言重写了在PDP –11小型 机上的Unix,并取得了成功。 C语言的特点: ⑴C语言具有完善的功能和非常高的效率。 ⑵C语言可以对硬件操作,是介于汇编语言和高级语言之间的一种语言。 ⑶C语言是结构化的程序设计语言。 ⑷C语言具有丰富的数据类型和运算类型。 ⑸C 语言具有良好的移植性。 ⑹C语言书写灵活,表达简洁。

  7. 1.2 C语言的基本程序结构 实例:输入两个数及其运算关系,输出运算结果。 int fun(int x,char op,int y) { int z; switch(op) { case ‘+’: z=x+y; break; case ‘-‘ : z=x-y; break; case ‘*’: z=x*y; break; case ‘/’ : z=x/y; break; } return z; } #include <stdio.h> void main(void) { char ch; int a, b; int c; scanf(“%d%c%d”,&a,&ch,&b); c=fun(a,ch,b); printf(“a%cb=%d”,ch,c); } 子函数 主函数 ⒈程序是由函数组成的,函数是由语句组成的。其中主函数有且唯一,主函数名位main。子函数可有可无也可以有多个。 ⒊C语言的语句用;作为结束,因此一句可以用一行或几行书 写,但不能割裂构词。 ⒉C语言的系统构词必须用小写,用户构词可以大小写混用。 ⒋各词之间用一个或几个space分隔。

  8. 1.3 C语言的词法 ⒈ C语言的字符集 ⑴字母:A、a、B、b…、Z、z 52个 ⑵数字符号:0、1…、9 10个 ⑶特殊符号:+ - * /… 20个 ⒉保留字 系统占用词(共32个) auto、break、case、char、const、continue、default、do、 double、else、enum、extern、float、for、goto、if、int、 long、register、return、short、signed、sizeof、static、 struct、switch、typedef、union、unsigned、void、volatile、 while 建议不要使用: define、undef、include、ifdef、ifndef、endif、line、error、 elif、pragma

  9. ⒊标识符 作 用:用户为各种自定义数据命名。 组成规则: ⑴字母和数字以及 下划线_ 组成。 ⑵以字母和 下划线_ 开头。 ⑶长度不超过31个字符。 ⑷不能使用保留字。 注 意:系统区分大小写字母。 aBc Abc _iArea _fLoad iStatus faS 2Ab int ERROR!

  10. 1.4 计算机算法的概念 ⒈算法(Algorithm)的定义: 广义地讲:算法是解决问题的逻辑步骤,是对特定问题求解步骤的一种描述。 计算机算法:是用程序解决问题的逻辑步骤,是指令的有限序列。 只有通过算法能够描述出来的问题,才能够通过计算机求解。能够用算法描述的问题称为可以形式化的问题。 正确的算法有三个条件: ⑴每个逻辑步骤有可以实现的语句来完成; ⑵每个步骤间的关系是唯一的; ⑶算法要能终止(防止死循环)。

  11. 算法举例 • ⒈求数列n=1+2+…+m的值n,当n>10000时结束。 • 步骤:①n=0 • ②m=0 • ③m加1 • ④n加m • ⑤判n是否大于10000 • 如果满足关系结束; • 不满足关系继续执行③。 ⒉欧几里德求m,n(m>n)的最大公约数算法 ①m除以n的余数为k ②如果k不为0,nm,kn ③重复①。 ④如果k为0,n为最大公约数。

  12. ⒉算法与计算方法 计算方法(Computational Method): 求数学近似解的方法,如SinX=X-X3/3!+X5/5!-X7/7!+… 算法(Algorithm):逻辑步骤,过程。 ⒊算法的特征 • 有穷性:有限次完成; • 确定性:各步骤之间的关系要确定; • 有输入:有原始数据输入; • 有输出:有结果输出; • 可行性:可以编程实现; • 高效性:执行速度快、占用资源少; • 健壮性:对数据响应正确。

  13. 算法确定性举例 死过程 图书馆l 医院h ab if( d min)b l else if(to h)b h,h l else if (to s)b s,s l end 如果走近路 如果路过医院 商店A 如果路过教室 三岔路口b 教室s

  14. ⒋算法的表示 • 自然语言 • 伪 代 码 • 流 程 图 ab if(to h)b h,h l else if(to s)b s,s l else if(d min)b l end

  15. 1.5 程序流程图 概念:以特定的图形符号加上说明,表示算法的图 ,称为流程 图或框图。 规则:从上到下,从左到右。 符号及其意义: 流程线 端点框 处理框 判断框 连接点 I/O框 过程框

  16. 流程图描述算法举例 用框图描述函数 1 x  0 y = -1x < 0 start A 输入x 输出y no yes x 0? end y=-1 y=1 A

  17. 1.6 程序设计的一般方法 ⒈程序的开发过程 开始 A ⑴系统描述 ⑵需求分析 描述系统功能 ⑶结构分析 分析设计,算法描述 ⑷详细设计 编码 ⑸代码调试 ⑹单元测试 调试 ⑺系统测试 ⑻运行维护 ——Steve Mc Connell 编辑 完成 编译 yes 语法错? no 连接、运行 ⒉上机过程 yes 逻辑错? no A

  18. 1.7 预备知识 ⒈计算机中数值的表示方法 数值型数据的表示有三个要素: ⑴数值的绝对值; ⑵符号; ⑶小数点。 计算机内部的量都是用二进制表示的。数学表示称为真值,计 算机内部的表示称为机器数。真值转换为机器数称为编码。 计算机的计数系统是有模系统。有模系统当计数值超过系统的 “模”时系统重新计数。 如:时钟从9点,调整到6点有两种方法: 9- 3=6 9+9=12+6 12位计数系统的模,3,9互为补数。

  19. 符号的表示:补码 计算机内部的量都是用二进制表示的。数学表示称为真值,计 算机内部的表示称为机器数。真值转换为机器数称为编码。 补码编码方式:2n+x。 8bit表示一个数: 100000000 + 01010110 +1010110 01010110 100000000 - 01010110 -1010110 10101010 最高位表示符号,其余位数表示数值。1代表-, 0代表+。

  20. 小数点的表示 约定的小数点位置。 • 定点表示 定点纯小数 0.1010100 01010100 定点纯整数 -1010110 10101010 • 浮点表示 约定的小数点位置。 表示的量为: M2N M称为尾数,用定点纯小数表示。 N称为阶码,用定点纯整数表示。 ⒉字符的表示 计算机中字符数据,用ASCII码表示,如A表示成65。

  21. 思考题: ⒈用程序流程图描述算法 1 x > 0 y = 0 x = 0 -1 x < 0 ⒉用框图描述,欧几里德求最大公约数算法。 ⒊从生活或学习中找出可以用算法描述的一件事,并加以抽象 的描述。

  22. 第二章 C语言基础

  23. 主 要 内 容 ⒈数据及其表示方法; ⒉数据的基本运算; ⒊基本输入输出。 以上三个问题是程序设计的最基本问题!

  24. 2. 0 预备知识 ⒈计算机中数值的表示方法 数值型数据的表示有三个要素: ⑴数值的绝对值; ⑵符号; ⑶小数点。 计算机内部的量都是用二进制表示的。数学表示称为真值,计 算机内部的表示称为机器数。真值转换为机器数称为编码。 计算机的计数系统是有模系统。有模系统当计数值超过系统的 “模”时系统重新计数。 如:时钟从9点,调整到6点有两种方法: 9- 3=6 9+9=12+6 12位计数系统的模,3,9互为补数。

  25. 符号的表示:补码 计算机内部的量都是用二进制表示的。数学表示称为真值,计 算机内部的表示称为机器数。真值转换为机器数称为编码。 补码编码方式:2n+x。 8bit表示一个数: 100000000 + 01010110 +1010110 01010110 100000000 - 01010110 -1010110 10101010 最高位表示符号,其余位数表示数值。1代表-, 0代表+。

  26. 小数点的表示 约定的小数点位置。 • 定点表示 定点纯小数 0.1010100 01010100 定点纯整数 -1010110 10101010 • 浮点表示 约定的小数点位置。 表示的量为: M2N M称为尾数,用定点纯小数表示。 N称为阶码,用定点纯整数表示。 ⒉字符的表示 计算机中字符数据,用ASCII码表示,如A表示成65。

  27. 1/2 ? 2.1 基本数据类型 数据是对客观事物特征的符号化表示,客观事物不同,表示的 方法也不同(人数以整数表示,圆面积用小数表示,灯的状态用开 关表示,信件要用文字表示),计算机的处理方法也不同,因此根 据程序处理的数据对象,应规定数据的类型。 计算机由于工程的限制,只能在有限精度和有限范围内在工程 上近似地描述操作的对象——数据。 数据类型不同时: ⑴数据的外部表示方式和内部存储方式不同; ⑵表示的范围和精度不同; ⑶对数据的处理方式不同。

  28. C语言的数据类型 整 型 int 基本类型 字符型 char 浮点型 float double C语言的数据类型 构造类型 枚举型 enum 数组、结构、联合。 指针类型 空类型 void

  29. 2.2 常量(Constant)及其类型 ⒈常量的概念 在程序中不能改变的量称为常量。常量的类型由数据的外部表 现形式确定。 ⒉常量的外部形式及其确定的类型 ⑴整型常量的表示 整型常量根据表示的范围可以有长整型和一般整型,还可以表 示为十进制、八进制、十六进制。其中八进制、十六进制不能有符 号。 一般整型的表示 进 制  表示举例  范 围 字节数 十 进 制   2304 -32768 ~ +327672 八 进 制 04400 0 ~ 0177777 2 十六进制 0xaa00 0x0000 ~ 0xffff 2 长整型的表示 进 制  表示举例  范 围 字节数 十 进 制   -21234l -231 ~ +231-14 八 进 制 04400l 0 ~ 01777777777 4 十六进制 0xaa00l 0x0000----0xffffffff 4

  30. ⑵浮点型常量的表示(只有十进制表示) 浮点型常量有两种表示方式:小数表示方法,指数表示方法。 不区分单、双精度。 小数表示方式规则:一个小数点、符号和至少一位数字。 指数表示方式规则: -2.0 1. 0.11113 -15. 指数部分,两位整数。 规则:ne±m 表示 n×10m n小数部分,整型常量或小数形式表示的实型常量。 n决定精度,一般精度为7位;m决定范围,范围10-38到10+38,当超过范围时称为“溢出”,小于10-38称为下溢,当0处理,大于10+38,称为上溢,系统出错! 123.456表示为 0.123456E+3 -10000000表示为 -1e+7 0.0000123表示为 0.123e-4

  31. ⑶字符常量的表示 表示ASCII字符集中的一个字符。字符有一个整型值,即该字符 的ASCII码值。表示方法:’a’ 、 ’!’。撇号定界的一个字符。 ⑷字符串常量的表示 值为:97 双引号“定界的字符序列。系统会在最后一个字符后加NULL( ASCII码值为0),标志字符串的结束。 ’a’ 和 ”a”的区别? ⑸转义字符 如:”HEFEI ””hello” 内部 ’a’ :97 ”a”: 97NULL 转义字符是C语言表示字符的特殊方法,用来表示ASCII字符集 中的控制字符,以及系统占用字符如:”。 表示方法:① \字符;②\八进制(十六进制整数,小于256) \a 表示BELL \b 表示BACKSPACE 字母 \n 表示换行 \r 表示回车 \t 表示TAB \\ 表示\ \? 表示? 符号 \’ 表示’ \” 表示” \0 表示NULL printf(“\007”); printf(“语文\n数学\n”); 八进制十六进制数 \0x41 \0101 代表’A’

  32. 2.3 变量(Variable) ⒈变量的概念 变量是在程序中可以改变的量,变量具有三个特征: ⑴变量有名,用标识符命名; ⑵变量有类型; ⑶在程序中可以改变。 变量对应于内存中某一地址下的几个单元,变量名作为程序引 用变量的标志。变量的类型确定了变量在内存中所占单元的数量及 其表示的方式。变量的地址可以通过&运算获得。 int a; 整型变量占两个内存单元。 a变量的引用标志 &a对应a的地址。 内存 变量必须先说明后使用!说明的目的是确定变量的名字和类型。

  33. int a,b,c; ⒉变量的说明 形式: type 变量名表;/*以,分隔的标识符表*/ 基本类型说明符:int、char、float、double 类型说明词,包括基本类型说明和修饰说明。 修饰类型说明符:unsigned/signed、short/long short a,b,c; int e,f,g; long _qs,num; ⑴整型变量说明 ①有符号整型变量说明 说明符 所占字节数 范围 int 2 -32768 ~ +32767 short [int] 2 -32768 ~ +32767 long [int] 4 -2147483648 ~ +2147483647 ②无符号整型变量说明 unsigned d,e,f; 说明符 所占字节数 范围 unsigned 2 0 ~ 65535 unsigned short 2 0 ~ 65535 unsigned long 4 0 ~ 4294967295

  34. ⑵字符型变量的说明 说明符 所占字节数 范围 char 1 -128 ~ +127 unsigned char 1 0 ~ 255 ⑶浮点型变量的说明 说明符 所占字节数 范围 精度 float 4 10-38 ~ 10+38 7位 double 8 10-306 ~10+306 16位 浮点型变量包含精度和范围两个概念。 ⑴超过精度位数后的位数值不确定。 float a; a=1.1111111111; 超出精度部分,不准确。 ⑵超过范围溢出(Overflow)。 当运算结果大于10+38称 为上溢,系统出错。 当运算结果小于10-38称 为下溢,当0处理。 float a,b,c; a=1.234e+20 b=2.345e+21 c=a*b 超出1038,溢出。

  35. 2.4 算术运算与表达式 程序重要的一点是对数据按照算法进行处理(运算)。C 语言 的运算功能强大。数据通过运算符连接的式子称为表达式,表达式 根据运算对象及运算关系得到一个值。分类介绍如下: ⒈变量赋值运算 格式: V=expression;/* 将expression的值赋给变量V*/ int a=2; /*说明赋值,编译时赋值。*/ int b; b=3+2; /*说明后赋值,执行时赋值。*/ 说明: ⑴ =是赋值号(动词); ⑵ 赋值运算的左值只能是变量。 int a=2.5 ; /* 2a */ ⑶ 赋值号两边类型应该一致,如不一致,以变量类型转换。 a=a+2; iCount=iCount+10; a+2=12; /*Error!*/

  36. ⒉算术运算 功能:完成各种类型数据的加、减、乘、除及求余数运算。 ⑴双目算术运算(两个运算对象参加的运算) 注意:乘号不能省略! 只能对整型或字符型数据运算。 余数符号与被除数相同。 -12%(-5) -12%5-2

  37. ⑵自加、自减运算(单目运算) 说明: ①运算对象只能是一个变量。 2++; /* Error !*/ ②前置是先运算,后引用,而后置则是先引用,后运算。 int i, x; i=5; x=i++;/* x=i;i=i+1;*/ i=5; x=++i;/* i=i+1;x=i;*/

  38. ⑶算术赋值运算 说明: ①运算对象的左值只能是一个变量。 (a+2)+=5; /*Error !*/ ②%=运算的对象,必须是整性。

  39. ⑷算术运算的说明 ①运算中的类型问题 运算对象的类型相同,运算结果取运算对象相同的类型。 int a; float b; b=2/3; /* 0b 0.0*/ a=5.0/2.0; /*2.5a 0 */ 运算对象的类型不同,先将低等类型转换为高等类型后再进行 运算,运算结果取高等类型。等级原则如下: char int long double float 2*16.0+15.0 float double 运算时可以实行类型的强制转换,格式如下: (type)expression 只对当前表达式起作用。 double (float)a/(int)’c’+(float)(a+10)

  40. ②运算的优先级 表达式的运算是分步骤进行的。因此当一个表达式中出现多种 运算时,存在优先级的问题。 算术运算的优先级如下: ++、- -、(type) *、/、% 3*4+6/a- 6%3 +、- 相同优先级,结合顺序从左到右! a=b=c+=2 =、op= c=c+2 b=c a=b 相同优先级,结合顺序从右到左! 可以用( )调整优先级。

  41. ⒊其他运算 ⑴三项条件运算 格式: e1 ? e2 : e3 e1、e2、e3为表达式,当e1非0时,运算结果取e2的值;当e1 为0时,取e3的值。 int a=3,b=4,d; d=(a+=2,++b)*5 int a=2,b=3,c=-1,d; d=a?b:c; /*d为3*/ a=0; d=a?b:c; /*d为-1*/ int a,b,c; b=sizeof a; /*b的值为2 */ c=sizeof(float); /* c的值为4*/ ⑵逗号表达式 格式: e1, e2, e3,…,en ; 用,分隔的表达式,取值为en; ⑶sizeof 运算 形式: sizeof 数据对象; sizeof(类型说明符);

  42. C语言常用数学函数 为方便用户使用,C语言系统定义了大量函数。数学函数主要目 的是求解常用数学函数,如sinX等。数学函数的原型定义在系统的 math.h头文件中。在使用此类函数时,应在程序的开始出加如下语 句: #include <math.h> 使用方法: 作为一个运算项参加表达式运算。 y=sqrt(sin(x)*sin(x)+cos(x)*cos(x)) 函数的参数(自变量)、函数的值 都是double类型。

  43. 2.5 基本数据输入输出 C 语言没有输入输出语句,输入输出是通过系统定义的标准函 数来实现的。 I/O函数的原型定义在stdio.h头文件中,在引用I/O函数时,应 在程序开始处加预处理语句包含头文件。 #include <stdio.h> ⒈输入输出的概念 输入输出指的是内存变量或程序和外部设备间的数据交换。 输入 内 存 外 设 输入输出函数要描述: ⑴输入输出的量; ⑵输入输出的格式; ⑶输入输出的设备。 输出

  44. 用,分隔的常量、变量、表达式表。 格式描述。 ⒉格式输入输出函数 ⑴输出函数printf( ) 格式: printf(“输出格式字符串”,输出项列表); 输出格式字符串可包含以下内容: ①普通字符 ,如:a= ②转义字符,如:\n 对于普通字符和转义字符在相应位置原样输出,其中%用%%。 printf(“\nabcd%%”); 输出结果: abcd% ③格式说明符组,说明输出项列表中的各项的输出格式。格式 说名符组用%为开始标志。内容包含对一项输出对象的格式说明。

  45. 格式说明类型表 格式说明符应和输出的列表项对应,产生相应的输出。其中输 出的表项应与格式说明符类型一致。 printf(“a=%5d\nb=%f”, 2+3, 5.34);

  46. 格式说明串的一般形式和意义 % - m.nl 格式类型字符 整型长度,缺省短整型,l长整型。 宽度.精度(位数),宽度:输出总列数,精度:小数位数(或字符位数)。 对齐方式:缺省为右对齐,-为左对齐。 #include <stdio.h> void main(void) { float a; a=1.232326 ; printf(“a=%10.4f”,a); } 格式说明标志 CHAP2EX1

  47. 各种类型数据输出举例 ⑴字符型输出 char a=’b’; printf(“%5c, %-5c,%c” ,a ,a-32,’s’+1); 输出结果: ƀƀƀƀb,B ƀƀƀƀ,t ⑵字符串输出 #include <stdio.h> void main(void) { char chString[ ]="China"; printf("%s,%6s,%-6s\n",chString,chString,chString); printf(“%4s%6.2s%-6.2s","Hefei","Hefei","Hefei"); } m.n,m为总输出列数, n 截取输出字符数。 China, ƀChina, Chinaƀ HefeiƀƀƀƀHeHeƀƀƀƀ 宽度不够,原样输出。

  48. ⑶整型输出 #include <stdio.h> void main(void) { unsigned int a=65535; int b=-2; printf("a=%d,%o,%x,%u", a, a, a, a); printf("\nb=%6d%8o%5X%6u",b, b, b, b); } a=-1,177777,ffff,65535 b=-2177776FFFE65534

  49. ⑷浮点数输出 include <stdio.h> void main(void) { float f=123.456; printf("%f,%10f,%10.2f,%-10.2f\n",f ,-f ,f ,-f); } 123.456001,-123.45600,123.46,-123.46 符号占一位! 小数保留两位,四舍五入截断。

  50. ⑵输入函数scanf() 格式: scanf(“格式说明字符串”,输入变量地址列表); 说明: ①输入时不能使用%u; ②m域宽可自动截取,空格可以作为数据分隔符。 void main(void) { int i,j; scanf("%3d%3d",&i,&j); printf("%d\n%d",i,j); } 123456 void main(void) { int i,j; scanf("i=%d,j=%d",&i,&j); printf("\n%d\n%d",i,j); } CHP2EX2 scanf(“%7.2f”,&a); ERROR! ③实型变量输入时不能规定精度; ④数据输入用SPACE分隔,当格式字符用其他字符隔离,输入 时也应在对应位置上输入相同的字符; ⑤输入项只能是变量,且必须用地址形式。

More Related