课程概况学时分配:课堂48学时实验计划内30学时.ppt

上传人:za****8 文档编号:15496025 上传时间:2020-08-13 格式:PPT 页数:152 大小:2.36MB
返回 下载 相关 举报
课程概况学时分配:课堂48学时实验计划内30学时.ppt_第1页
第1页 / 共152页
课程概况学时分配:课堂48学时实验计划内30学时.ppt_第2页
第2页 / 共152页
课程概况学时分配:课堂48学时实验计划内30学时.ppt_第3页
第3页 / 共152页
点击查看更多>>
资源描述
1,2,课 程 概 况 学时分配: 课堂48学时 实验计划内30学时;计划外18学时 课程目标: 1. 掌握C语言基本语法、语义、语用、数据类型; 2. 掌握程序设计的基本概念、方法和思路; 3. 掌握常用算法的设计及实现; 4. 掌握调试程序的基本技能;,3,内容与进度: 第 1 章 C语言概述 (1学时) 第 3 章 数据类型、运算符与表达式 (5学时) 第 4 章 最简单的程序设计顺序程序设计 (4学时) 第 2 章 程序的灵魂算法 (1学时) 第 5 章 选择结构程序设计 (3学时) 第 6 章 循环控制 (4学时),4,第 7 章 数组 (4学时) 第 8 章 函数 (7.5学时) 第 9 章 预处理命令 (1.5学时) 第10章 指针 (7学时) 第11章 结构体 (6学时) 第13章 文件 (4学时) 第16章 常见错误和程序调试 (自学),5,第一章 C语言概述 1.1 C语言出现的历史背景 1.2 C语言的特点 1.3 简单C程序介绍,6,回顾: 1. 计算机语言 编制计算机程序的工具; 每种语言都规定了各自的语法、语义。 2. 计算机语言的分类 机器语言二进制机器指令、可直接执行、依 赖具体计算机硬件; 汇编语言助记符号、需经汇编处理、依赖具 体计算机硬件; 高级语言需经编译处理、与硬件无关,可移 植性好;,7,3. 常用的高级语言 FORTRAN数值计算、丰富的数学库; BASIC解释型、编译型; PASCAL第一个系统体现结构化的语言; C可用于系统软件、应用软件的开发; C + +面向对象的方法;C的超集; JAVA与操作平台无关,适于编写网络异构 环境应用软件;,8,1. 2 C语言的特点 1. 简洁、紧凑、使用方便、灵活 如:只有32个关键字、9种控制语句、书写格 式自由、语句简练等。 2. 运算符丰富 34种运算符,运算能力强、效率高。 3. 数据类型丰富 基本类型、构造类型、指针类型;并可很方便 地实现链表、树等动态数据结构。,9,4. 是理想的结构化语言 结构化是程序设计的一种规范和风格,结构化 的程序结构清晰、便于阅读、扩充;可靠性强。 5. 语法检查不太严格 6. 可直接对硬件进行操作 7. 块型结构(多模块结构) 8. 较高的可移植性,10,1.3 简单C程序介绍 例1.2 /*求两数之和*/ main( ) int a , b , sum ; /*定义变量*/ a=123 ; b=456 ; sum= a + b ; printf (“Sum is %dn”, sum) ; Sum in 579,11,例1.3 求两数之最大值 main( ) int a , b , c ; scanf (”%d,%d”, ,YS,12,未使用用户自定义函数: main( ) int a , b , c ; scanf (”%d,%d”, ,13,【例】求a、b、c、d四数之最大值 main( ) int a , b , c , d , m; scanf (”%d,%d,%d%d”, ,YS,14,【例】调用系统库函数计算x2、 #include math.h main( ) double x, y, z ; printf(Please input x:) ; scanf (”%lf”, Please input x: 25 y=625.000000, z=5.000000,YS,15,总结C程序概貌: 1. 函数是构成C程序的基本单位; 2. 一个C程序中必须有一个而且只能有一个main函数;一个程序总是从main函数开始执行。 3. 被调用函数可是用户自定义函数、也可是系统 提供的库函数; 4. 函数的构成: 函数类型 函数名(函数参数) 函数首部 变量定义 函数体 执行语句 ,16,实例演示: 绘制金刚石图案 2. 根据选择将输入的二进制字串转换为十进制整 数、十进制实数、十六进制数。 3. 绘制时钟,YS,YS,YS,17,第三章 数据类型、运算符与表达式 3. 1 C的数据类型 3. 2 常量与变量 3. 3 整型数据 3. 4 实型数据 3. 5 字符型数据 3. 6 变量赋初值 3. 7 各类数值型数据间的混合运算 3. 8 算术运算符和算术表达式 3. 9 赋值运算符和赋值表达式 3. 10 逗号运算符和逗号表达式,18,3. 1 C的数据类型 程序 = 算法 + 数据结构 算法:求解问题的方法和步骤; 数据结构:数据对象、相互关系和构造方法; 说明: 高级语言的数据结构是通过数据类型来体现数据间的组织形式和结构关系的。,19,整型 (6类) 基本类型 实型 (2类) 字符型 数组 C的数据类型 构造类型 结构体 共用体 指针类型 空类型,20,3. 2 常量与变量 1. 常量 何谓常量程序中直接书写的数据; 例如:a=100; b=a+12; 常量类型以字面形式区分; 例如: 123 (基本整型) 3.5 (实型) 123L (长整型) A (字符型) 符号常量用标识符代表一个常量。,21,符号常量的定义: 【例】 #define PRICE 30 /*定义符号常量*/ main( ) int num1, num2, num3, cost1, cose2, cost3; cost1=num1*PRICE; /*引用符号常量*/ cost2=num2*PRICE; cost3=num2*PRICE; ,22,【例】求圆柱体的顶面积、圆周长和圆柱体体积 # define PI 3.1415926 main( ) float r, h, c, s, v; printf(“Input radius and height:”); scanf(“%f%f”, ,23,定义符号常量的意义: 在程序中多处引用同一个常数时,采用符号常 量便于参数的修改、增加了可读性。 注意: 1) 符号常量名可用大写或小写字母,为了便于与变量名区分,通常用大写。 2) 在符号常量作用域内,不得出现符号常量被赋值 现象。如:PRICE=20 非法。,24,2. 变量 何谓变量程序运行过程中允许被改变的量; 程序中用标识符标识每一个变量。 C标识符构成规则: 由大或小写字母、数字、下划线组成,且第一个字 符必须是字母或下划线。 标识符标识的对象: 变量、数组、函数、符号常量等。 标识符长度: MSC有效字符为8个,多余部分不予识别; Turbo C隐含有效字符为32个,可自行调整。,25,变量命名举例: 合法:sum、SUM、Average、toal、cost_1、_1 非法:for、num1、2a、8L、ABC# 注意: 1. C变量名中字母可大小写,但有大小写之分, SUM、sum、Sum被视为不同的变量。 2. 有效字符相同的变量名被视为是同一个变量; 如MS C中student_name与student_number。 3. 在实际应用中命名应尽量见名知义。 4. 长名惯用方法: CharToString、GetSum 5. C中变量必须先定义后引用。,26,与变量有关的概念: 变量三要素:变量名、变量地址、变量值 变量的地址 (变量的指针) 给变量分配的存储单元第一个字节的地址; 例如:int n, m; n=10; m=25;, ,n的地址 202 m的地址 204,10 25,27, 变量被赋值的物理意义是向它的存储单元写数; 变量可多次被赋值,新值将覆盖旧值; 例如:n=10; /*赋值:破坏性的*/ n=45; 变量被引用的物理意义是从存储单元中读数; 例如:n=10; m=n+2; /*引用:非破坏性的*/ 两变量内容的交换可借助另一个变量或利用运算 关系实现。,28,5,10,例如:实现两个变量内容的交换 方法1:利用中间变量实现 int a=5, b=10, t; t=a; a=b; b=t; 方法2:利用运算关系 a=a+b; /*5+10=15a*/ b=a-b; /*15-10=5 b*/ a=a-b; /*15-5=10a*/,10,a,t,b,5,5,29,3. 3 整型数据 1. 整常量 有三种表示形式: 十进制 八进制以数字0开头; 十六进制以0 x 或0X开头;其中0:数字0 例: 53 -127 0 0123 -0177 0 x53 -0X7F,30,2. 整型变量 1) 分类分为六类,31,在Turbo C (16位系统)中:,32,2) 整型变量的定义 C变量定义的一般形式: (适合于任何类型) 存储类别类型标识符变量名表; 其中: 存储类别auto(隐含): 变量初值不定; static: 初值自动为0; 变量名表多个变量以逗号分隔; 变量定义位置通常在函数体内执行语句之前。,33,【例】: main( ) int i, j, k; static int m; long a, b=5; unsigned u; i=20; b=i+20; ,2byte,4byte,2byte,i 初值不定 j 初值不定 K 初值不定 a 初值不定 b 初值为5 u 初值不定 m 初值为0,a=b+i; ?,34,3. 整常量类型 int 型常数: 3276832767视为int常数; 可赋给int、long型变量。 long型常数: 在 2147483648 2147483647之内、但超出 3276832767的数及带后缀l / L的视为long型常数;可赋给long型变量。,2147483648 32768 0 32767 2147483647,long int long,带后缀 l 或L的数:long,35,4. 整型量的溢出 若一个变量无法容纳下要存入的数,这种现象称为溢出,溢出将导致数据存储错误;在运算过程中也有可能产生溢出导致运算结果错,因此程序设计中应避免产生溢出。 例:int a, b; a=65538; /*65538:长整型*/ b=123*456; printf(a=%d, b=%d, a, b); a=2, b=-9448 (溢出的错误结果),YS,36,溢出原因:位数或范围超出 1) a=65538; 65538=(1 0000 0000 0000 0010 )2 a: 只存入后16位 2) b=123*456; 123456=56088=( 1101 1011 0001 1000 )2 b: -9448的补码,0000 0000 0000 0010,1101 1011 0001 1000,37,解决办法: long a, b; a=65538; b=123*456; /*计算结果有溢出*/ printf(a=%ld, b=%ld, a, b); a=65538, b=-9448 (仍有错) long a, b; a=65536; b=123L*456; printf(a=%ld, b=%ld, a, b); a=65536, b=56088 (正确),38,3. 4 实型数据 1. 实型常量 有两种表示形式:十进制小数、十进制指数 【例】123.0 0.123 -14.2 0.0 0. .123 【例】表示12亿3千万 数学方式1230000000或12.3108 程序中1230000000.0 (小数形式的实常数) 12.3e+8、1.23e9、123e7 (指数形式),39,指数形式说明: 12.3 e+8 指数部分 数值部分 指数部分:e表示以10为底,可大/小写; 8为指数值(幂), 只能是整数; 指数符号为正可省略; 数值部分: 可是小数或整数;,40,【例】表示电子质量0.9110-30 小数形式:0.0000 0091 指数形式:0.91e-30、0.91E-30、91e-32 可见:在程序中表示较大或较小数时,采用指数 形式简洁、不易书写错。 注意: 一个数可写成多种指数形式,但存储格式一致; 2) 指数部分不可单独代表常数; 如表示108:e+8被编译系统理解为变量e加8; 正确表示:1.0e8、1e8,41,2. 实型变量分为两类;,42,回顾浮点存储格式: 例如:float a= -5.5 ; 实数-5.5的浮点格式机器数: (-5.5)10=(-101.1)2=23(-0.1011)2 a:,阶符 阶码 数符 尾数,1bit 7bit 1bit 23bit,43,32bit 浮点数所能表示的最大数: N = 2 J正规化尾数 MAX= 2127 (1223) 2127 1038 有效位数:23/3.32 7,阶符 阶码 数符 尾数,1bit 7bit 1bit 23bit,比较:32bit的long型所能表示的最大数 231(2311) 2147483648 2147483647,44,3. 实型量的舍入误差 例:float a, b; a=12345678900.0; /*赋值产生误差*/ b=a+20; /*引用误差的a*/ printf(%f, b); 12345678848.000000 (前7位有效) 理论值应为: 12345678900.0+20=12345678920.0 要精确存储12345678900.0需37bit尾数; 解决办法:double a, b;,45,3. 5 字符型数据 扩展ASCII码字符分类: (P374),46,1. 字符常量 在程序中有两种表示形式: 单引号括起来的一个字符 适合于可键入字符的表示;如: A 3 # 单引号中右斜杠开头的转义字符 适用于所有字符,通常用于控制字符和不可键入字符的表示。,47,C特别规定的转义字符:,48,例: 在程序中表示下列字符,例:在程序中表示字符序列ABC、123 ABC、123 构成字符串常量,49,例:输出一个字符序列(字符串) printf(How are you?n); How are you? /*输出结果*/ /*光标位置*/ 例:输出包含控制字符的字符串 printf(abctderftgn); printf(htibbjk); fgde /*为空格*/ h jk 列:123456789012345678901234567890,YS,YS,50,2. 字符变量有两种类型;,51,3. 字符量的存储及引用 例:char c1, c2 ; c1=A ; c2=c1; 存储:字符的ASCII编码 c1: 若:c1按字符解读字符A c1按整数解读 +65,52,C允许字符量与0255之间的整形量互相通用: 通用的范围包括: 1) 互相赋值 2) I/O格式符通用 3) 进行算术、关系运算,53,例:整型量、字符量互相赋值和格式符通用 main( ) char c ; int i ; c=97; /*c: 01100001*/ i= b ; /*i:00000000 01100010*/ printf (”%c,%dn”, c, c); printf (”%c,%dn”, i, i); a,97 b,98,54,例:字符量与整型量的算术运算 main( ) char c1, c2 ; c1=A ; c2=B ; c1=c1+32; c2=c2+32; printf(”%c%c”, c1, c2); ab,55,例:字符量与整型量的关系运算 main( ) char c1; scanf(”%c”; a 输入 A 输出,56,例:不可键入字符的表示 main( ) int a, b; char c; scanf(”%d,%d”, 8, 5 输入 85 输出,57,例:unsigned char类型的使用 main( ) char c; c=254; /*or c=xfe */ printf(” %ct%d”, c, c); -2 为什么用%d格式解读c输出的不是254? 因%d是按有符号补码解读c的。 c: 相当于-2的补码,58,上例改为: main( ) unsigned char c; c=254; /*or c=xfe */ printf(” %ct%d”, c, c); 254 即: %d输出char型按有符号数解读; %d输出unsigned char型按无符号数解读。,59,4. 字符串常量 1) 表示由一对双引号括起来的字符序列; ”How do you do.” 长度:14 ”123.456” 长度:7 ”a” 长度:1 在程序中表示下列字符串: xy ”xxf2y” 长度:3 C:DOS ”C:DOS” 长度:6 ”OK!” ”OK!” ” 长度:5,60,2) 存储双引号内每个字符占用一个字节,所有 字符按顺序连续存储,自动在最后加入字串 结束标志:空字符 例: 0010 0000 0000 0000 空字符:名为NUL的控制字符 其ASCII码值:0 程序中表示: 0 注意:空字符与空格字符是不同的字符。,61,3) 用途给字符数组赋初值; 在I/O函数中作为格式字符串。 例: printf(”Please Input a,b:”); scanf(”%d,%d,%d”, ,YS,62,3. 6 变量赋初值 在定义变量时给变量赋值叫做赋初值。 例:int a=10, b=5, c ; 例:int x=y=z=0 ; 编译时将指出错误 可改为:int x, y, z=x=y=0 ; 或:int x, y, z; x=y=z=0; /*初始化变量*/,63,3. 7 各类数值型数据间的混合运算 包括: 整型常量 / 变量 实型常量 / 变量 混合运算 字符型常量 / 变量 例:若有如下定义 int i; float f; long l; double d; 且每个变量已赋值: 则混合表达式 8+2+a+ i*fd/l 合法。,64,混合运算规则: 1) 通常类型相同直接运算,结果保持原类型; 2) 类型不同,系统自动转换为同一类型再进行运 算,结果为转换后的类型。 不同类型运算时的自动转换规则: 高级 double float long unsigned 低级 int char、short,转换方向,65,注意: 因类型越高,数值范围越大、精度越高,因此这种转换无精度损失,是安全的; 2) 表达式中只要有一个实型量(单或双),表达式 结果为双精度实型量; 3) 对变量而言,仅仅是将读出的变量值进行了转 换,变量的类型和变量存储内容保持不变。 i f if : 10.0 1.20,10,1.2,66,3. 8 算术运算符和算术表达式 1. C算术运算符简介 34种、13类、15个优先级、2个结合性; 1) 算术 6 ) 条件 11 ) 分量 2) 关系 7 ) 逗号 12 ) 下标 3) 逻辑 8 ) 指针 13 ) 函数调用 4) 位 9 ) 求字节数 5) 赋值 10 ) 强制类型转换,67,2. 算术运算符和算术表达式 1) 基本算术运算符 + 加 / 取正 (双目运算符 / 单目运算符) 减 / 取负 (双目运算符 / 单目运算符) * 乘 (双目运算符) / 除 (双目运算符) % 整除取余 (双目运算符),68,注意: +、-为复用运算符; 如:int a, b, c; a=5; b=a-3; /*减:两个运算目标*/ c=-a; /*取负:一个运算目标*/ 2) 两整数相除结果仍为整数 如:5/22 -5/3-1 1/20 123/1012 要依实际应用情况加以利用或避免。,69,3) 求余运算要求两运算元素均为整型,余数仍 为整型; 如:int a, b, c; a=11%3; /*2 a*/ b=5%a; /*1 b*/ c=b%a; /*1 c*/ c=123%10; /*分离出个位3*/ 若有: a=11.0%3; 编译时将视为语法错。,70,2) 算术表达式 C表达式:由运算符、括号将运算元素连接起来 的有值的式子。 算术表达式: 由算术运算符、括号将数值型的运算元素连 接起来,其值为数值量的式子。 其中:运算元素可为常量、变量、函数调用等。 如:28+a sin(1.0)*10+y,71,注意: 为保证表达式运算关系的正确性,需加入必要的括号,并注意括号的层次及配对关系; 2) 乘号不得省略; 3) 应避免整型量相除可能带来的不良影响; 4) 函数调用是以函数的返回值来参与运算的。,72,3)算术运算符的运算优先级和结合性 C运算符优先级:15个 结合性:两个 运算规则: C在处理表达式时,不同级别运算符的运算顺 序按优先级别由高到低进行。同一级别运算符的运 算顺序按本级别的结合性进行。 结合性:左结合性自左而右顺序 右结合性自右而左顺序,73,C算术运算符优先级及结合性: ( ) 1级,自左而右 取负 2级 *、/、% 同为3级,自左而右 +、 同为4级,自左而右 如:100+(a+2)*-b/3.0,74,4) 强制类型转换运算符 运算一般形式: (类型名) (表达式) 其值是被转换对象, 可是常、变、表达式。 类型转换运算符,2级、单目。 强制类型转换的意义: 当自动类型转换不能达到目的,人为强制转换; 2) 函数调用时,为了使实参、形参类型匹配,可采用强制类型转换。,75,例:用强制类型转换进行匹配处理 float a=11.0; int b; b=a%2; /*编译出错*/ 修改后: b=(int)a%2; 注意被转换对象的范围: b=(int)(a%2); 仍有错;,76,例:用强制类型转换处理溢出、精度问题。 int a=123, b=456, c=10; long sum; sum=a*b; /*表达式a*b结果溢出*/ printf(%ld,%d, sum, a/c); /*a/c精度不够*/ -9448,12 修改后: sum=(long)a*b; printf(%ld,%f, sum, (float)a/c); 56088,12.300000,77,例:用强制类型转换简化运算过程,提高程序 执行效率。 main( ) int i; scanf(“%d”, 12 20,i=i+(int)8.71; 则少转换一次,78,5) 自增、自减运算符 自增1:+ 自减1: 含义: +i 前置自增;先自加1,后引用; i+ 后置自增;先引用,后自加1 ; i 前置自减;先自减1,后引用; i 后置自减;先引用,后自减1 ; 意义:可提高执行效率。,优先级2级、单目、自右而左,79,注意: 只能对变量进行自增、自减运算; 2) +、- 、取负同为二级,结合性:自右而左; 如: i=3; j= -i+; /* -3j , i: 4 */ 3) 自加/减作为函数参数时,注意参数求值顺序; 如:i=3; printf(%d,%d, i, i+); 4, 3 3, 3,输出顺序,Turbo C求值顺序,Unix C求值顺序,80,3. 9 赋值运算符和赋值表达式 1. 赋值运算符 = 优先级14级、双目、自右而左; 2. 赋值表达式 一般形式:变量 = 表达式 其中: 表达式可是C任何形式的表达式,包括算术、 条件、逗号、赋值等表达式; 特殊形式:单独的常量、变量、函数调用。,81,例:b=20 c=sin(1.0) d=pow(2, b)/2 e=ab a=(b=5) a=b=c=d=0 c=b=a*2; a=(b=10)/(c=2),82,3. 赋值运算时的类型转换 被赋值变量类型与表达式值的类型一致时,直接赋值;不一致系统自动以被赋值变量的类型为准进行转换,然后赋值。 例:int i=10, j; float f; double d; i=i-5; /* 5i */ j=i+3.56; /*8 j */ f=23; /*单精度23.0 f */ d=j+f; /*双精度31.0 d */,83,注意:赋值时的自动类型转换所造成的误差 例:main( ) float x, y ; /*double x, y;*/ x=123.456781234; y=x+0.111111111; printf(”X=%f,Y=%fn”, x,y); X=123.456779, y=123.567894 x、y改为双精度的结果: x=123.45678123400000,y=123.56789234500000,84,4. 复合赋值运算符 在赋值运算符前加上其它双目运算符构成; 算术复合赋值运算符: + = 和赋值 = 差赋值 * = 积赋值 优先级14级、自右而左 / = 商赋值 %= 模赋值 意义:提高编译效率、目标代码的质量。,85,例: a+=3 a=a+3 x%=3 x=x%3 x+=y-8 x=x+(y+8) x=x+y+8 a*=b-3 a=a*(b-3) a=a*b-3 注意:复合赋值运算符针对右边整个表达式。 例:a=6; a+=a*=a-1; /*60 a*/,86,3. 10 逗号运算符和逗号表达式 1. 逗号运算符 (也称为顺序求值运算符) , 优先级15级、双目、自左而右; 2. 逗号表达式 一般形式:表达式1,表达式2 扩展形式:表达式1,表达式2,表达式n 其中:各表达式是C合法的任何表达式; 逗号表达式 的值:最后一个表达式的值; 【例】 a=3*5, b=a*4,87,意义:在语法规定的只能是一个表达式的位置,实现多个表达式的计算或多个变量的赋值。 【例】for语句格式:for(e1; e2; e3) 内嵌语句; for(i=0, j=10; i10; i+, j+) 两个表达式的比较: x=(a=3, 6*3) 18x, a:3 x=a=3, 6*a x:3, 表达式的值为18,88,补充:求字节数运算符 一般形式:sizeof (被测对象) 形式: 类型标识符 各类常量、变量 各种表达式 数组名等; 优先级:2级、自右而左; 运算结果:被测对象的存储字节数。,89,例:sizeof (int) 结果:2 (TC) a=sizeof (double) 8 sizeof (sum) sum变量的类型长 sizeof (40+25) 2 sizeof(40.0+25) 8 sizeof(123) 2 sizeof(123L) 4 sizeof(456*789) 2 例:char c1; int l1, l2; l1=sizeof (c1); l2=sizeof (”Hello!”) 1;,90,第4章 最简单的C程序设计 顺序程序设计 4.1 C语句概述 4.2 赋值语句 4.3 数据输入输出的概念及在C语言中的实现 4.4 字符数据的输入输出 4.5 格式输入与输出 4.6 顺序结构程序设计举例,91,4.1 C语句概述 C程序的构成,92,2. C语句的分类 控制语句9种,可控制程序的执行流程。 函数调用语句由函数的一次调用加分号构成。 表达式语句任何合法的C表达式加分号构成。 空语句只有一个分号构成。 复合语句由一对花括号将多条语句括起来构 成一条复合语句。,93,4.2 赋值语句 其它高级语言只能用赋值语句给变量赋值,而C不仅可用赋值语句给变量赋值,还可在表达式的位置上利用赋值表达式给变量赋值,这大大增加了C程序设计的灵活性。 例: for语句格式:for(表达式1;表达式1;表达式1) 具体应用:for( i=1; i=10; i=i+1 ) 例:while ( (c=getcher( )!=n ) ,94,4.3 数据输入输出的概念及在C语言中的实现,编辑,编译,连接,运行,myprg.c myprg.obj 库函数obj代码 myprg.exe,函数库(磁盘文件):,库函数的obj代码,包括:数学库 标准I/O库 图形库 等;,磁盘,95,4.4 字符数据的输入输出 1. putchar字符输出函数 调用格式: putchar( 参数) 参数形式:字符常量 / 变量、整型常量 / 变量; 功能:向系统隐含输出设备(显示器)输出一个字符。 要求:使用文件包含预编译命令 # include 或:# include ”stdio.h”,96,2. getchar字符输入函数 调用格式: getchar( ) 功能:从系统隐含的输入设备(键盘)输入一个字符。 说明:无参,返回值为输入字符的ASIIC码; 是带输入缓冲区和回显的函数; 要求:使用文件包含预编译命令 # include ,97,例1:输入一个字符并输出 #include ”stdio.h” main( ) char c; c=getchar( ); putchar(c); putchar(#); putchar(n); a 输入 a# 输出 ,YS,98,使用说明: 1) 利用getchar函数可达到暂停效果; 例2:#include ”stdio.h” main( ) printf (”15*4=%dn”, 15*4); printf (”Press Enter key to continue”); getchar( ); /*不引用返回值*/ 15*4=60 输出 Press Enter key to continue,YS,99,2) getchar总是先从缓冲区读字符, 只有缓冲区空 才会暂停等待新的输入。 例3: #include ”stdio.h” main( ) char c1, c2, c3; c1=getchar( ); c2=getchar( ); c3=getchar( ); printf (”%d,%d,%d”, c1, c2, c3); abcde a 97,98,99 bcd 97,10,98,YS,100,4.5 格式输入与格式输出 printf 格式输出函数 调用格式:printf (格式控制字符串,输出项列表) 功能:在标准输出设备上,按指定格式对应输出各 个输出项。 参数: 格式控制字符串中可包含格式说明、直接 字符、控制字符; 输出项列出了要输出的对象(可以没有), 多项之间逗号分隔; 形式:常量、变量、表达式、函数调用等。,101,格式说明在个数、顺序、类型上应与输出项对应。 例: #include ”stdio.h” main( ) float f=123.456; int a=25, b=5; printf (”t%d+%d=%dn”, a, b, a+b); printf (”t%d,%fn”, 66, sqrt(float)a) ); 25+5=30 66,5.000000,YS,102,函数printf能够实现如下输出格式化功能: 1) 指定任何类型数据输出的域宽; 2) 指定输出在域宽内左对齐或右对齐; 3) 插入要输出的直接字符; 4) 以8进制或16进制输出整型量的存储镜像; 5) 指定实型数以小数或指数形式输出; 6) 指定实型数的输出小数位数; 7) 通过控制字符t、n、b等定位输出列。,103,printf 函数格式说明的一般形式: % 附加格式说明 格式字符 d、o、x、u、c、s、f、e、g l 用于长整型 m n 指明左对齐方式,隐含右对齐。,正整常数,指明输出所占列宽,104,一、整型量的格式说明 适用于整型的常量、变量、表达式、函数。 按数据的实宽输出 说明: 8进制、16进制按存储镜像输出。,105,2) 指定输出列宽和对齐方式 说明: 若m 输出数据的实长,m失效,按实长输出。 以八、十六进制输出时,将整数的符号位也视作 数据位,即不可能输出负的八、十六进制数。,106,例:main( ) int a=-15, b=12345; long x=987654321; printf (”n%d,%8d,%ld”, a, b, x); printf (”n%-6d,%4d,$%12ld”, a, b, x); printf (”n%8x%8o%12lX”, a, a, x); -15,12345,987654321 -15,12345,$987654321 fff11777613ADE68B1,YS,107,二、无符号整型量格式说明 按数据的实宽输出 说明: 8进制、16进制按存储形式输出。 2) 指定列宽和对齐方式(含义同上),108,例: main( ) unsigned int a=65535; /* a:FFFFH */ int i=-2; /*i: FFFEH*/ printf (”%8X,%8u,%d,%un”, a, a, a, i); FFFF,65535,-1,65534 说明:%d将无符号整型量按补码格式解读; %u将整型量按无符号格式解读。,YS,109,三、字符量格式说明 例如:main( ) char ch1= a; int i = 98; printf (”%c,%5c,%c”, ch1, i, 99 ) ; a, b, c,110,四、字符串格式说明 1) 按实长输出字符串 2) 指定宽度和对齐方式 %ms、%ms,111,3) 截取字符串中的部分字符输出 %m.ns按m列宽输出前n个字符,右对齐; %m.ns按m列宽输出前n个字符,左对齐; %.ns截取前n个字符并按截取宽度n输出。 例:main( ) printf (”%s,%7.2s,%-5.3sEND”, ”CHINA”, ”CHINA”, ”CHINA”); CHINA, CH,CHIEND,112,五、实型量格式说明 适用于实型的常量、变量、表达式、函数。 1) 按系统隐含的宽度输出 (TC环境) %g:自学,113,2) 指定宽度和对齐方式 %m .nf m:总列宽,n:小数位数,自动四 舍五入,右对齐。 %m .ne m:总列宽,n:数字部分的小数位 数(包括小数点),自动四舍五入。 对齐方式:与上述方法和含义相同。,114,例:main( ) float f1, f2 ; f1=123.456; f2=123.45678; printf(”%f,%-12f,%10.2fn%.2f,%-10.2fn”, f1, f1, f1, f1, f1 ); printf(”%e,%e,%15.8en”,f1,f2,f2 ); 123.456001,123.456001, 123.46 123.46,123.46 1.23456e+02,1.23457e+02,1.2345678e+02,115,例: main( ) double d1, d2 ; d1=2222222222222.222222222; /* 13 : 9*/ d2=123.4567e128; printf (” %f,%en”, d1, d2); 2222222222222.222170,1.23457e+130,116,使用格式输出函数 printf 的说明: 1) 格式说明在个数上、顺序上、类型上必须与输出 项对应一致,否则,编译时不做匹配性检查,编 译可通过,但输出结果错。 2) 格式字符 x、e 可小写或大写 %X:十六进制字母字符大写,如3AF; %E:1.23457E+130 其余格式字符d、o、u、c、s、f只能小写。 3) 串中直接字符、%、” 的表示: % ”,117,scanf 格式输入函数 调用格式:scanf(格式控制字符串,地址项表) 功能:按格式控制字符串中指定的格式,从键盘输 入常数,并存入对应变量的地址中。 参数:格式控制字符串中可包含格式说明、直接 字符;注意:不要使用控制字符; 地址项是要获得数据的变量地址,多个输 入项间逗号分隔; 变量地址: long m, n; printf(”Enter a, b:”); scanf(”%d,%d”, Enter a, b:12, 6 a+b=18 Enter m n:500 900 m*n=450000,119,格式输入函数 scanf 的格式说明: %附加格式说明 格式符 d、o、x、u、c、s、f、e l 附加于长整型、双精度实型; m 正整数,指定读取数据的宽度; * 抑制符,跳过某输入项或指定列。,120,121,122,123,scanf 的使用说明: 1) 输入的常数、格式说明、输入变量三者在个数 上、 类型上、顺序上必须对应一致; 特例:对实型变量可输入整数形式。 如:float x, y; scanf(%f%f, 123456 ,124,3) 可用直接字符来指定输入数据的分隔符,而在 输入时必须与指定的一致,否则获值错乱; 如:scanf (”%d,%d,%d” , a=3 , b=4 , c=5 注意:输入是在运行过程中进行的,若输入时违背 了以上规则,变量获值将发生混乱,并导致结果错。,YS,125,例:main( ) long l1, l2; printf(Enter l1, l2:); scanf(%d,%d, Enter l1,l2: 1, 2 l1=1,l2=-22,YS,126,5) scanf 是带输入缓冲区的函数,输入时以回车符 提交数据到缓冲区, scanf 直接在缓冲区读取。 若已输入数据个数少于要求个数,还会出现等待; 如:scanf(”%d%d%d”, 3 4 5 6 7,127,6) 用%c格式时,每个输入的字符都是有效的。 如:scanf(”%c%c%c”, abc 结果:ac1, bc2, cc3 a b c ac1, 空格c2, bc3 a b c c1, ac2, c3,128,7) 按指定列宽截取数据通常针对一个数字串; 如:scanf(”%3d%3d%4d”, 0298487402 结果: 29qh 7402xh,129,9) scanf中%f格式不能指定精度:%7.2f是错误的。 10) scanf格式控制串中若包含控制字符将造成麻烦 如:scanf(”%d,%dn”, 3,4,5 3 n 3 4 5 1 n,130,4.6 顺序结构程序举例 3,4,6 例1:输入三角形的三边长,求三角形的面积。 公式: #include ”math.h” main( ) float a, b, c, area, s; printf(”Enter a, b, c:”); scanf(”%f,%f,%f”, ,YS,131,例2:将一个三位整数的各位数符分离出来,并转 换为数字字符倒序输出。 main( ) int num; char c1, c2, c3; printf(”Enter a data(100999):”); scanf(”%d”, ,YS,132,例3:定期存款一年期利率2.3%,三年期年利率 3.2%,今有本金1万元,按一年期连续存三年和按三年期存入,各得多少利息? (按一年期再存时本息一并存) 设:d为本金,p为利率 一年期利息公式: 第一年本息:d+dp= d(1+p) 第二年本息:d(1+p)+ d(1+p)p= d(1+p)2 第 n年本息: d(1+p)n 三年利息:d(1+p)3d 三年期利息公式:dp3,133,源程序: #include math.h #define P1 2.3/100 #define P3 3.2/100 main( ) float x1, x3, d; scanf(“%f”, ,YS,134,第二章 程序的灵魂算法 2.5 结构化程序设计方法 2.1 算法的概念 2.3 算法的特征(自学) 2.4 算法的表示 2.2 算法举例,135,2.5 结构化程序设计方法 早期的程序设计缺乏统一的标准和规范,风格各异。 针对问题60年代初,大型软件开发遭到重大挫 折,进度推迟、成本超出预算、成品不可靠。 研究结果60年代末,结构化程序设计方法诞生。 是科学的、规范的编程方法。,136,软件开发过程: 概要设计、详细设计、实现、组装测试、确认测试 结构化程序设计的基本思想: 1) 自顶向下、逐步求精:先全局后局部,由抽象到具体,由整体到细节逐层划分功能; 2) 模块化设计:每个模块各司其职实现具体功能; 3) 结构化编码:用单入单出的结构化语句描述控制过程。 结构化程序的特点结构清晰、模块化强、可靠性强、易于调试、易于验证、易于扩充等。,137,2.1 算法的概念 算法求解问题的方法和步骤; 算法设计要考虑到是否正确、质量优劣、 表达明确清晰; 算法类别数值运算算法、非数值运算算法;,138,2.4 算法的表示 算法的表示方法: 1) 自然语言 2) 传统流程图 3) N-S结构化流程图 4) 伪代码 等 结构化程序设计的三种基本结构: 1) 顺序结构 2) 选择结构 3) 循环结构,139,结构化程序设计的三种基本结构: 1) 顺序结构 传统流程图 N-S流程图,其中:A、B为操作框,可由一条或一组语句实现。,140,传统流程图与N-S流程图的区别: 传统流程图流程线可向前或向后随意转移; N-S流程图从画法上取消了流程线,杜绝了 基本结构之间的转移,提高了算法的可靠性。,141,2) 选择结构(分支结构) 传统流程图 N-S流程图 入口 出口,T F,其中:P为分支判断条件; A、B必有一个且只有一个被执行; A、B之一可是空操作,用 表示。,142,例:用N-S流程图描述:找出x、y中的较大者,xy? T F xmax ymax,例:对学生成绩s进行判断,及格则输出PASS字样,s=60? T F 输出PASS ,s60? T F 输出PASS,143,例:使a、b、c降序排序,输入a、b、c ab? a t b a t a ac? a c bc? b c 输出a、b、c,T,T,T,F,F,F,144,选择结构的扩充多分支选择结构 入口 k1 k2 kn 出口,其中:K为多分支判断条件; Ai必有一个且只有一个被执行;,K,A1,A2,An,145,3) 循环结构 当型循环先判断后循环,有可能一次也不循环。 入口 F T,当P为真 A,其中:P为循环判断条件; A为要重复执行的操作,称为循环体;,146,直到型循环先循环后判断,至少循环一次。 入口 F T,P,A,A 直到P为真,出口,其中:P为循环判断条件; A为要重复执行的操作,称为循环体;,147,2.2 算法举例 例:计算5! (12345),当型循环 直到型循环,148,例:根据 x求y值。,3x - 11 ( 0 x 10) y= 2x + 5 (10 x 20 ) x (20 x 30),x0&x30 T F,x10 T F,x20 T F,y=x,y= 3x-11,y= 2x+5,输 出 x 无 效,输出 y,输入x,输出X无效,3x-11y,x0&x30,x10,x20,2x+5y,xy,输出y,F,F,F,T,T,T,149,例:判别一个数是否是素数 w: 标志变量 复合循环条件,输入n w=0, i=2 k=sqrt(n) i=k & w=0 n%i=0? w=1 i+ w=0? 输出Yes 输出No,Y F,Y F,循环 分支,顺序,150,算法总结: 一个复杂的问题应分解为具有层次关系的多个相对容易的子问题; 2) 任何复杂的问题都可由三种基本结构的顺序 组合描述出来; 3) 三种基本结构之间可以互相包含;,151,152,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!