谭浩强C语言程序设计ppt课件.ppt

上传人:小飞机 文档编号:1374979 上传时间:2022-11-16 格式:PPT 页数:329 大小:2.81MB
返回 下载 相关 举报
谭浩强C语言程序设计ppt课件.ppt_第1页
第1页 / 共329页
谭浩强C语言程序设计ppt课件.ppt_第2页
第2页 / 共329页
谭浩强C语言程序设计ppt课件.ppt_第3页
第3页 / 共329页
谭浩强C语言程序设计ppt课件.ppt_第4页
第4页 / 共329页
谭浩强C语言程序设计ppt课件.ppt_第5页
第5页 / 共329页
点击查看更多>>
资源描述

《谭浩强C语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《谭浩强C语言程序设计ppt课件.ppt(329页珍藏版)》请在三一办公上搜索。

1、主讲教师:刘 丹,C程序设计,C语言程序设计,第一章第二章第三章第四章,第五章第六章第七章,第一章 C语言概述,C语言 既可作为系统软件的程序设计语言,又可作为应用软件的程序设计语言。,尤其是当今计算机应用极为广泛,软件的设计、编写质量要求高,经常与硬件部分打交道,如:界面设计等,所以用C语言编写是最理想的。因而C语言也是当前计算机语言中用得最广泛的语言之一。, 1.1 C语言出现的历史背景,一、操作系统的设计语言,O.S. 操作系统,为用户使用计算机提供一个操作环境:系统命令、语言编程等。,如:DOS. UNIX,以前:O. S .软件用汇编指令编写。汇编语言:一种二进制指令代码的符号表示,

2、既繁琐,又易出错,可读性差。,改进:用C语言编写,既提高了程序的可读性,又可与硬件打交道。,二、发展过程, 1960年出现了Algol60语言,但该语言主要面向问题,与硬件较远,故英国剑桥大学推出了CPL(Combined Programming Language), 1967年,Matin Richards对CPL进行改进、简化、推出了BCPL (Basic Combined Programming Language), 1970年,美国贝尔实验室Ken Thomson 以BCPL为基础,再次简化推出了B语言,并写了第一个UNIX系统。, 美国贝尔实验室D.M. Ritchie 在B语言基础

3、上设计出了C语言,并用其将UNIX系统全部改写并实现。, 经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而使C语言广泛应用,各种机器皆可使用。, 1978年,美国Brain W.Kernighan与Dennis. M. Ritchie 联合出版一书The C Programming Language成为 ANSI C之基础。, 1983年,美国标准化协会(ANSI) 制定了ANSI C。, ANSI C 为基础:,不同机器有不同版本,尤其是函数均应参考相应的机器。, 1.2 C语言的特点,只有通过学习,方可理解C之特点,先简叙之:,1. 简洁、紧凑、方便、灵活 32个关键字,9

4、种控制语句, 主要用小写字母,压缩一切不必要成分,2. 运算符丰富 除了最基本的、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。,3. 数据结构丰富 除基本类型外, 有指针, 结构体、共同体等类型。,4. 具有结构化的控制语句 模块完整,控制中的语句可完整化。,5. 语法严格,但有灵活性 如:数据类型可相互通用:整型、字符型通用。,6. 可与机器硬件打交道,直接访问内存地址,具有“ 高”、“ 低”级语言之功能。,7. 生成目标代码质量高,执行效率高。,8. 可移植性优于汇编语言。,1.3 简单的C程序介绍,为了更好、更快地掌握C程序,我们先看几个C语言程序:,例1.

5、 main( ) printf (This is a c programn); ,例2. main ( ) /*求两个数之和*/ int a, b, sum; /*这是定义变量*/ a=123; b=456; sum=a+b; printf(sum is %dn, sum); ,例3.main( ) /* 主函数*/ int a, b, c; /*定义变量*/ scanf(%d, %d, ) /*输出c的值*/ ,int max (x, y) int x, y; /*对形参x、y作类型定义*/ int z; /*max函用到的变量z,也要加以定义*/ z=y; if (xy) z=x; ret

6、urn (z); /*将z的值返回,通过max带回调用处*/ ,通过分析,初步看到:1. C程序全部由一个一个的函数构成。至少有一个主函数main ( ), 其它函数可被主函数调用或相互调用。其它函数可为C 函数库中函数,也可为自己编的函数。,上述特点称为程序的模块化.,2. 函数的构成: 函数说明+函数体,函数体: 变量定义与执行语句,可允许空函数: dump ( ) ,函数说明包括:函数名、类型、属性、参数等,3. 函数的执行一定从main ( )开始。尽管main ( )函数位置可自由。,4. 书写自由,一个语句可多行,一行可多个语句。,5. 每一条语句必须有一个分号;,6. C语言的输

7、入 / 出均以函数形式出现。scanf( ), printf( ).,7. 可用/ /对C语言加注释,主讲教师:刘 丹,第二章 数据类型、运算符与表达式,2.1. 数据类型,著名计算机科学家沃思提出: 程序数据结构算法,所以,存放数据的方式直接反映了一种语言的数据表达能力。 数据的存储方式又称之为:数据类型。,举 一个例子:以考生各科成绩及总分排队问题为列。 成绩的存放 以数组形式 排队方法 算法,前面已述. C数据类型丰富,分为:,基本类型,构造类型,指针类型,空类型,整型,字符型,实型,单精度,双精度,数组,结构体,共用体,数据有常量、变量之分,均为其中一种类型。,本章先学习基本类型。,枚

8、举,2.2 常量与变量,2.2.1 常量和符号常量,常量 程序运行过程中不能被改变的量。,一般的数据显式写法均表示常量。 如程序中: 20 整型常量 15.8 实型常量 a 字符常量,例: #define PRICE 30 main ( ) int num, total; num=10; total=num*PRICE; printf(total=%d,total); ,还可用一个符号表示一个常量 符号常量,符号常量(一般用大写,以区分变量),再如: =3.1415629 #define PAI 3.1415629,#define PRICE 30,2.2.2变量,程序执行中可以改变的量称为变

9、量。变量包括变量名和变量值。,变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。,标识符 由字母、数字、下划线组成且由字母或下划线开头的字符串。,标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。 如: _sum, sum, student_name, price等,习惯上,变量名、函数名等用小写字母表示。常量名用大写字母表示(以增加可读性)。,另: 需注意标识符长度,视不同系统而定。 设允许8个字符。 则: student_ name student_ number为同一名字。,C语言中, 变量须先定义,后使用 如: int stud

10、ent student=30; 则若写成student=30, 则未定义, 编译时指出其错。, 一旦变量被定义,即可在编译时为其分配相应数量的单元。,一旦变量被定义, 其类型便确定。则可检查其运算的合法性。,如: a % b 表示a整除以b的余,则a,b必须为整型量。,2.3整型数据,2.3.1 整型常量,整型常量 整型常数,C语言提供了三种形式 十进制 如: 256, 308, 120等, 八进制 以数字0开头表示的整数 例:0235, 0146 012等. 0235=28238515710 014618248610210 012(182)1010,十六进制 以0 x开头的整型数 如: 0

11、x16, 0 x28,2.3.2 整型变量,一、分类: 分为四种:基本型、短整型、长整型、无符号型,2.短整型: 用short int或 short定义,3.长整型: 用long 或 long int 定义,1.基本型: 用int定义,4.无符号型: 不存放符号,则不带符号数.,又分无符号整型,无符号短整型, 无符号长整型。,上述各种类型所占内存单元数及取值范围视不同机器而不同。详见P13。,二、定义方法 整型变量分别以下列方式定义,2. 短整型 short int 或 short a, b, c;,3. 长整型 long int 或 long a, b, c;,1. 基本整型: int a,

12、 b, c;,4. 无符号型 unsigned a, b, c; unsigned short a, b, c; unsigned long a, b, c;,例: main ( ) int a, b, c, d; /*指定a, b, c, d为整型变量*/ unsignd u; /*指定u为无符号整型变量*/ a=12; b= 24; u=10;,c=a+u; d=b+u; printf(a+u=%d, b+u=%dn,c,d); ,由此看到: 不同类型的整型数据可进行算术运算。 但有一定规则,见2.7.,运行结果为 a+u=22, b+u= 14,三、关于整型常量 程序中出现的整型常数,

13、系统按以下规则分配变量(内存单元)或赋值给相应变量,2. 若超越,而在21474836482147483647之间,则可赋给 long int 变量。,1. 当常数(量)在 3276832767之间,则可赋给int, long int 变量。,4. 一个非负整数32768 则可赋给 unsigned int。,5. 一个常数后加 l,或L,表示长整数. 如123l. 主要用于函数调用时形、实参数传递。,3. 若int, short int 长度相同,则二者皆可赋值。,2.4 实型数据,2.4.1 实型常量,有二种表示形式 1.十进制形式 如: 0.126, 523.64等,2. 指数形式 对于

14、较大或较小的数,可用指数形式 0.0000126 1.26E 5 1260000 1.26E+6 或1.26E6 E , e 均可.,分为单精度型与双精度型. 分别为 float x, y, z; (单精度) double a, b, c; (双精度),一般地: 单精度占4字节内存单元; 双精度占8字节内存单元.,2.4.2 实型变量,注意: 不同机器对实型变量的有效数字长度的限制 如: pc机, 单精度一般为7位, 双精度15位,单精度数值: 10381038双精度数值: 1030810308,于是: float a; a=123456.789 则实际赋值a123456.7,2.5 字符型数

15、据,用一对单引号括起来的单个字符。 如 a , A , 二者不一样.,此外,以 开头后接一个字符或n个字符代表了一种特殊字符常量。 转义字符。 如 n 换行, r 回车,2.5.1 字符常量,其它如下表:,字符形式,n,t,v,b,r,f,ddd,xxh,功能,换行,横向跳格(即跳到下一个输出区),竖向跳格,退格,回车,走纸换页,反斜杠字符“ ”,单引号(撇号)字符,1到3位8进制数所代表的字符,1到2位16进制数所代表的字符,注意: 表示ASCII码字符,三位八进制,如 101 表示字母A,又: x 十六进制ASCII 字符 x 41 表示字母A,其定义方式为: char c1, c2; c

16、1= A ; c2= B ;字符变量只占一个字节单元。,2.5.2 字符变量,用来存放一个字符的变量.,一个字符存入一个字符变量。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。,由此: 字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。,2.5.3 字符数据的实际存放形式,例1: main ( ) char c1, c2; c1=97; c2=98; printf (%c %c, c1, c2) ,运行结果 a b,看如下几个例子:,例2: main ( ) char c1, c2; c1= a ; c2= b ; c1=c1 32; c2

17、=c2 32; printf (%c %c, c1, c2) ,运行结果 A B,例3: main ( ) int i; char c; i= a ; c=97; printf (%c, %d n, c, c); printf (%c, %d n, i, i); ,运行结果: a , 97 a , 97, 有的系统将一个字节的整型变量的最高位,作为符号。这时对0127之间的字符可输出正整数(ASCII)。但128255字符最高位为1, 则作为负数输出。, 由此最好用unsigned int 存放字符整数(ASCII)。,注:,用双引号括起来的字符串。 例: Good Morning! 注意A

18、与A是不同,字符串存放时,在最后加上/ 0 空字符。 于是:,Good Morning ! /0,2.5.4 字符串常量,A ,A /0,但A,A,注意:1. 字符串长度=实际字符个数+1,但最后0不输出. printf ( Good Morning! ),此处不写 /0。 自动加上。,2. 单个字符的字符串不能赋给字符变量。 例: char c; c= a ; 是错误的。,2.6 变量赋初值,C语言允许定义变量时赋予初值。 如: int i = 6; float x=8.35; char c =6;,*也可对某个变量赋初值: int a, b,c = 6;,*不可能将同初值的变量赋初值时写成

19、: int a=b=c=6; 只能: int a=6, b=6, c=6;,定义变量时赋初值实际上是在运行时执行一个赋初值语句: int a=6;相当于: int a; a=6;,2.7 类数值型数据间的 混合运算,C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b是允许的。,但有一个规则:先转换成同一类型,再计算。,double float,高低,图中“ ” 表示必定转换。如a + b,先转换为int。结果为 int。,转换方法:,long,unsigned,int char, short,即: 既使是同一种类型也按 转换。,图中“ ” : 表示低,

20、 高型数据运算时,均先转换为高型。,例: 10+ a+if d /e,其中: i int f float d double e long, 10+a: 转为int, 结果为int, if: 转为double, 结果为double, + : 转为double, d /e : 转为double, 转为double,则运算时:,2.8 算术运算符与 算术表达式,运算符: 运算的符号表示。 C语言有丰富的运算功能,先简述之,2.8.1. C运算符,1. 算术运算符 +, , , /, % , 等,3. 逻辑运算符 !, &, ,2. 关系运算符 , =, =, !=,4. 位运算符 , , , , &

21、.,5. 赋值运算符 = 等,6. 条件运算符 ? 等,7. 逗号运算符 ,8. 指针运算符 *, &,11. 分量运算符 , ,12. 下标运算符 ,13. 其它运算符 如函数的调用( ),9. 求字节数运算符 size of,10. 强制类型转换运算符 (类型),2.8.2 算术运算符和算术表达式,一、基本算术运算符,+ 加法 正值 3+6, +3, 减法 负值 6 4, 5, 乘法 38,/ 除法 8 / 5,% 求余 7 % 4 的值为3,注: 两个整型数据相除 (结果为整,一般向零靠拢)。 5/ 3 1,“ /” 中,有一个 float, 则结果为double型,使用时千万注意 in

22、t / int 出现数据丢失。,二、算术表达式及算术运算符的优先级与结合性,运算对象: 常量、变量、函数等,优先级: ( ), , /, %, +, ,结合性: 同一优先级, 自左向右,为左结合性,反之为右结合性。,例: a b / c 1.5 + ad e,当类型不同的数据进行运算时,按2.7介绍的类型转换。,算术表达式: 用算术运行运算符和括号将运算对象连接起来,且符合C语法规则的式子。,三、可利用强制类型转换运算符将一个算术表达式转换为所需类型,形式: (类型名) (表达式),例如: (double) a 将a转换为double,(int) (x+y) 将x+y转换为int,(float

23、) (5%3) 将5%3转换为float,注: 1. 括号不能省略。 如: intx 会理解为变量intx.,2. 转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。 float x;,又如: (int) (x+y) 若省略: (int)x+y会变成将x转成整型.,(int)x; 则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。,例: main ( ) float x; int i; x=3.6; i= (int) x; printf (x=%d, x, i); ,则: x=3.600000, i=3.,总结以上类型转换,有二种: 1. 强制,另: 强制类型转

24、换运算优先于算术运算符.,2. 系统自动,如: 若x为float, 则x%3不合法。 但可用(int)x%3来解决。(附录III介绍了优先级),四、自增,自减运算符,设有int i = 3;,+ + 自增1, 自减1,则: + +i, i+都会使i变为4,但有区别:,+i: 先使i值+1,再使用i值;,i+: 先使用i值,再使i值+1.,j= +i; j=4, i=4. (i=i+1; j=i;),j=i+; j=3, i=4. (j=i; i=i+1),同理: i, i ,均使i值1,但:,又如: printf (i=%dn, i+); 结果: i=3,若: printf (i=%dn, +

25、i); 结果: i=4, i: 先使i值1,再使用i值;,i : 先使用i值,再使i值1,i=3;,几点注意:1. +和 运算法只能用于变量,不得用于常量和表达式.,2. +, ,的结合性为从右至左,而一般算术运算符为从左至右。如:,如 5+ +, (a+b)+ +均为不合法.,i+ 和+ +为同一优先级.,i+相当于(i+),若 i=3, 则结果为3, i为4. +, 主要用于循环变量自增或自减。,1. 要慎用+、 运算符。,五、有关表达式使用中的问题说明,则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。,如: 表达式(i+)+(i+)+(i+) (i=3) 一般认为: 从左至

26、右: 3+4+5=12,i6.,但Turbo C. MSC 都是先取三个原值相加: i+i+i=9 i6,如果表达式数为: k=(+i)+(+i)+(+i),2. 在表达式中,有的运算符为一个字符,有的为两个字符。,3. 在函数调用时,如:,一般地: 自左至右尽可能多地将若干字符组成一个运算符。,例: i+j, 究竟理解为(i+)+j还是i+(+j)?,printf(%d, %d, i, i+);,若i=3, 若参数计算从左至右, 则输出 3, 3,若从右至左, 则输出4, 3,上述问题看似复杂,最好上机实践.,2.9 赋值运算符和 赋值表达式,符号 = 为赋值运算符。,2. 整型数据赋给实型

27、变量,数值不变,但按实数形式存放.,1. 将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,4. 将intlong int, 进行符号扩展。 即: 符号扩展, 低16位long 的低16位。,5. long int int 则高16位截断。,3. 字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,6. 将unsigned int 型long int高位补0。,原值传送,但数据大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越

28、界。,而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,7. 非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在 号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合运算符。,例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x%,一般形式: ,二、赋值表达式,例: x=10 为一赋值表达式 其中又可以是一个赋值表达式。,例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合性,于是

29、 ( ) 可省略, 即为:x=y=10;,例: a + = a =aa (设a12),又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6, a=10 a=(b=10)/ (c=2)b=10,c=2, a=5,进一步,还可用复合赋值运算符作下列运算:,步骤: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 264,2.10 逗号运算符和逗号表达式,一般形式: 表达式1, 表达式2,其计算规则: 先计算表达式1,再计算表达式2,最后值为表达式2的值。,例:a=35, a 4 则: 先计算3

30、5, a15, a 4=60,结果为60。,又如: (a=35, a 4), a+5,扩展形式: 表达式1, 表达2, ,表达式n,结果为20(作为逗号表达式的值), a+5a 即 20a., 3 5=15a, a 4=60 (此时a值仍未变),结果为表达式n的值,注意: x=(a=3, 63) 赋值表达式, x18;, x=a=3, 6 a 逗号表达式, x3.,逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。 如: printf (%d, %d, %d, a, b, c);,主讲教师:刘 丹,C 程序设计

31、,第三章 最简单的C程序设计,3.1 C语句概述,C语句全部为可执行语句,对应若干机器操作指命令,C程序由许多源文件组成。(分别编译,然后连接),每一个源文件由预编译命令和若干函数组成。,每一个函数由说明部分和语句部分组成。,其结构如图,除说明部分外,重要部分为语句部分。,C程序,源程序文件1,源程序文件i,源程序文件n,预编译命令,函数1,函数n,说明部分,执行部分(语句),C 语句分为五类,1. 控制语句改变语句的执行顺序,共有9种控制语句:, if ( ) else (条件), for ( ) (循环), while ( ) (循环), do while (循环), continue (

32、结束本次循环), switch (多分支选择), break (中止整个循环), goto (转移), return ( 函数返回),( )表示条件, 表示语句,2. 函数调用语句,3. 表达式语句,printf ();,表达式加; 如: i=i+1; i+; x+y; 其函数调用也可理解为表达式语句.,5. 复合语句,4. 空语句,; 任何事情都不做.,用 括起来的一系列语句。 如: z=x+y; t=z/100; printf (%f, t); ,3.2 程序的三种基本结构,从结构化程序设计角度出发,程序有三种结构:,顺序结构,选择结构,循环结构,1. 顺序结构,表示,先执行A, 再执行B

33、.,2. 选择结构,表示为,存在某条件P, 若P为真,则执行A, 否则执行B。,3. 循环结构,表示为,(1) 当型结构 当P条件成立时(T),反复执行A,直到P为“ 假”时才停止循环.,有两种结构:当型和直到型,(2) 直到型,先执行A, 再判断P,若为F,再执行A,如此反复,直到P为T.,另外:由选择结构可以派生出另一种基本结构多分支结构.,已证明: 上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。,3.3 赋值语句,由赋值表达式加分号;构成,与其它高级语言相比有以下不同点:,“ =”为一运算符,由此,构成一赋值表达式,可出现于表达式能出现的任何地方:,i

34、f ( (a=b)0) t=a;,3.4 数据输出,前面已论述: C语言本身无输入/ 出语句, 由函数实现,如printf.等。,一般:C语言提供了一些标准的输入/出函数系统函数。,形式: putchar (c );,功能: 向终端(一般为显示器)输出一个字符,其中c为 字符型或整型变量,注意: 用该函数时,须用预编译命令: #include stdio.h ,3.4.1 putchar 函数 字符输出函数,举例: #include stdio.h main( ) char a, b, c; a=B ; b=O ; c=Y; putchar(a); putchar(b); putchar (

35、C); ,结果: BOY,putchar(a); putchar( n ); putchar(b); putchar( n ); putchar(c); putchar( n );,*利用putchar还可输出其它转义字符,结果: B O Y,utchar( 101 ); 输出A,utchar( ); 输出,utchar( 015 ); 输出,*若将最后一行改为:,3.4.2 printf 函数格式输出函数,一、printf的一般形式,是C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。,rintf(格式控制序列,输出表列);,输出表列 用“ ,”号隔开的变量或表达式序列

36、,其变量的值按对应的格式控制符所指定的格式输出。,格式控制序列用双引号“ .”括起来的格式符序列。,格式控制序列由格式说明符和普通字符组成。,2. 普通字符 原样输出,1. 格式说明符: 由%接格式字符组成 如: %f, %d等,例: a=3; b=4; printf(a=%d, b=%d, a, b); ,结果: a=3,b=4,无论 a, b中位数多少, 均为上述形式:,a=123 b=45,二、格式字符,如直接用%d,则将出错。,不同类型的数据输出,用不同格式字符:,1. d格式符十进制整数输出。,(1) %d: 按数据的实际长度输出。,(2) %md: m表示输出字段宽度。若实际位数m

37、,左边补空格。,(3) %ld: 输出长整数,如要指定宽度, 则用%mld即可。,例: long a=1234567; printf( %ld, a);,2. o格式符 按八进制形式输出.,以1的补码形式,int a= 1;printf( %d, %o, a, a);,则输出结果: 1, 177777,注: 连符号位一起组成八进制数输出,特例: 1存于int单元,如以长整型输出,在%加l,也可指定宽度m, %mo,3. x格式符以十六进制形式输出整数.,例: int a= 1; printf(%x, %o, %d”, a, a, a),输出结果: ffff, 177777, 1,例: main

38、( ) unsigned int a=65535; int b= 2; printf (a=%d, %o,%x,%un, a, a, a,a); printf (b=%d, %o,%x,%un, b, b, b,b); ,a=1, 177777, ffff, 65535,a=65535,b= 2,4. u格式符无符号格式输出整数.,b=2, 177776, fffe, 65534,运行结果为:,5. c格式符输出一个字符.,注: 若有一整型变量,其值在0255之间,则可以字符形式输出., 一个字符型变量亦可以一个整型数据输出.,char c= a; printf(%c, c);,例: main

39、 ( ) char c=a; int i=97; printf (%c,%dn,c,c); printf (%c, %dn,i,i); ,运行结果为: a, 97 a, 97,也可以指定输出字符宽度,如果有,则输出:a, 即c变量输出占3列,前2列补空格.,print (%3c, c),6. s格式符用来输出一个字符串.,(1)%ms, 输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格。,允许一定的编辑即允许%ms, %ms, %m.ns, %m.ns四种形式, 每一形式的意义如下:,例: printf(%s, CHINA);,结果: CH

40、INA,(3) %m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。,(4) %ms,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果nm,则m自动取n值,即保证n个字符正常输出。,(2)%ms, 如果串长小于m,则在m列范围内,字符串向左靠,右补空格。,7. f格式符以小数形式输出单、双精度实数,有以下几种形式:,%m.nf, 指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。,%mn.f, 与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。,%f, 不指定字段宽度,由系统自动指定,使整数部分全部如数输出,

41、并输出6位小数。,%f %m.nf %m.nf,8. e格式符以指数形式输出单,双精度实数基本形式: %e,结果: 1.23456,共13列,6例,5例,可有%m.ne和%m.ne的形式,9. g格式符根据实数大小自动选择f格式,或e格式输出单双精度实数。,e+002,例: printf ( %e , 123.456),表3.1 printf格式字符总结,许多情况与具体机器或系统有关,最好机器上一试。,表3.2 附加格式说明字符,3.5 数据输入,系统提供了若干函数,以提供从标准输入设备(键盘)上输入数据.,3.5.1 getchar 函数,本节先介绍两个输入函数.,形式: getchar(

42、),功能: 从标准输入装置(键盘)上输入一个字符,要求: 有#include stdio.h预编译命令,例: #include stdio.h main ( ) char c; c=getchar ( ); putchar (c ); ,3.5.2 scanf函数,功能: 在标准输入装置(键盘)上按指定格式 输入各种类型的数据,地址表列变量的地址或字符串首地址。,形式: scanf(格式控制序列, 地址表列),格式控制序列同printf(.),例: main( ) int a, b, c; scanf( %d%d%d , ,运行,机器等待你输入: 3 4 5,结果 3, 4, 5,注意: 1.

43、scanf函数顺用地址量接受数据。,2. 输入数据的间隔为,Tab. 空格, 不能为“ ,”.,3. 允许在格式符中插入附加字符。格式字符及附加字符的定义如下表3.3和表3.4,表3.3 scanf格式字符,表3.4 scanf附加的格式说明字符,4. 对于输入unsigned型数据,不用%u,而用%d, %o, %x.,5. 指定数据长度时,系统自动截取。,则当输入123456时,scanf( %3d%3d , ,a12, b34,7. 输入数据不能规定精度.,6. 在%后加“ *”表示跳过相应的数据,则当输入为12 345 67,则a12 b67,scanf(%2d %*3d %2d, ,

44、scanf ( %7.2f , 是错误的,8. 在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。,例: scanf( %d, %d, ,则必须输入 21, 28,又如: scanf(a=%d, b=%d, c=%d, ,则输入: a=34, b=58, c=100,3.6 程序举例,例1: 输入三角形三边, 求三角形面积。,例2: 输入一个大写字母,要求系统改为小写字母输出。,例3. 当b24ac0时,求ax2+bx+c=0的两个根。,主讲教师:刘 丹,在C程序的三种结构中,分支结构是一重要结构,其中的P为条件,第四章 逻辑运算和判断选取控制,问题:条件如何表达?逻辑运算、关系运

45、算,4.1 关系运算符,关系运算比较运算, 如: a3为一比较运算,当a=5, a3成立。结果称为“ 真”, 否则, 如: a=1,a3不成立,为假。,上述表达式a3称为关系表达式。,4.1.1 关系运算符及其优先次序,1. , =为同一优先级, = =, !=等为同一优先级, 但前者高于后者。,2. 关系运算符优先级低于算术运算符。,C语言提供了六种关系运算符 = = = !=,优先级为:,3. 关系运算符优先级高于赋值运算符。,如下图:,举例: ca+b c(a+b),ab!=c (ab)!=c,a= =bc a= =(bc),a=bc a=(bc),4.1.2 关系表达式,关系表达式的结

46、果值规定为1或0.,如: ab, a+bb+c, (a=3)(b=5) , a b , (ab)(bc),完整的定义: 用关系运算符将两个表达式(算术、关系、逻辑、赋值、字符等表达式)连接起来的式子。,1 结果为真 (成立),0 结果为假 (不成立),如: 当a=3, b=2, c=1时,(ab)= =c 成立 1,b+ca 不成立 0,d=ab 则ab值为1, 所以d=1.,f=abc ab为1, abc为0,所以f=0.,4.2 逻辑运算符和逻辑 表达式,用逻辑运算符将关系表达式、逻辑表达式连接起来的式子逻辑表达式。,4.2.1 逻辑运算符及优先级,三种: & (与), (或) ! (非)

47、,其意义见真值表,a&b 当a, b均为1时,才为1,a b 当a, b中有一个为1时,才为1,!a 当a为1, !a为0,反之为1.,由此看到:和&为双目运算符. !为单目运算符。,优先级定义:,2. &和低于关系运算符。!高于算术运算符,1. !(非)优先于&(与).&优先于,即: !& ,例: !a&b xy & c (!a)&b) (xy)&c),4.2.2 逻辑表达式,1. 逻辑表达式的值与关系表达式值一样,真为1,假为0。,例: a=4 则 !a 值为0.此处只要a 0,为真.则!a值为0., a=4, b=5 a&b为1,前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运

48、算。, 4&0 2 为1.,总之,在逻辑运算中,非0值参加逻辑运算时被看成1处理., a=4, b=5 a b为1, a=4, b=5 !a b为1,2. 一个逻辑表达式中的逻辑运算符并不是一定全部执行.,一个实际的例子:判断年号是否为润年。,如: a&b&c. 则当a=0(假)时, b,c不需判断。当a=1,b=0,则不需判c.,又如: a b c. 当a=1时,b, c均不必判别。,润年的定义:, 能被4整除且又能被400整除。, 年号能被4整除但不能被100整除。,当(year%4!=0) (year%100= =0& year%400!=0) 为1时, year为非润年。,设用变量ye

49、ar表示年号,当(year%4= =0& year% 100 !=0) year%400= =0)为1时,year为润年,否则为非润年。,如果要判别非润年可在上述表达式前加非(!)运算符.,当!( (year%4= =0 & year%100!=0) year% 400= = 0) 为1时,year为非润年。,或者:,即:,则:,4.3 if 语句条件判断,4.3.1 if的三种形式,功能: 当表达式值非0时, 执行语句A,否则不执行语句A.,例如: if (xy) printf( %d, x),形式1 if(表达式)语句A,其流程图:,形式2 if(表达式)语句A else 语句B,功能:

50、表达式为非0,执行语句A 表达式为0,执行语句B,例: if(xy)printf(%d, x);else printf( %d, y);,形式3 if(表达式1)语句1,else if (表达式2) 语句2,else if (表达式3) 语句3, ,else if(表达式n) 语句n,else 语句n,流程:,表达1,表达2,表达3,表达n,语句1,语句2,语句3,语句n,语句n,语句1, 0,= 0,= 0, 0, 0, 0,如: if (3) prinft(o.k); if (a),1. 表达式可以是逻辑、关系,甚至是算术表达式。,2. 上述形式中的语句必须以分号结束,3. 上述形式中的语

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号