谭浩强C语言程序设计实用教案_第1页
谭浩强C语言程序设计实用教案_第2页
谭浩强C语言程序设计实用教案_第3页
谭浩强C语言程序设计实用教案_第4页
谭浩强C语言程序设计实用教案_第5页
已阅读5页,还剩324页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章第二章第三章第四章第五章第六章第七章第1页/共329页第一页,共329页。第一章第一章 C C语言概述语言概述(i sh)(i sh) C语言 既可作为(zuwi)系统软件的程序设计语言,又可作为(zuwi)应用软件的程序设计语言。 尤其是当今计算机应用极为广泛,软件的设计、编写质量要求高,经常与硬件(yn jin)部分打交道,如:界面设计等,所以用C语言编写是最理想的。因而C语言也是当前计算机语言中用得最广泛的语言之一。第2页/共329页第二页,共329页。 1.1 C 1.1 C语言出现(chxin)(chxin)的历史背景一、操作系统一、操作系统(co zu x (co zu x

2、t n )t n ) 的 设 计 语 言的 设 计 语 言O.S. 操作系统,为用户使用计算机提供一个操作环境(hunjng):系统命令、语言编程等。如:DOS. UNIX以前:O. S .软件用汇编指令编写。汇编语言:一种二进制指令代码的符号表示,既繁琐,又易出错,可读性差。改进:用C语言编写,既提高了程序的可读性,又可与硬件打交道。第3页/共329页第三页,共329页。二、发展二、发展(fzhn)(fzhn)过程过程 1960年出现(chxin)了Algol60语言,但该语言主要面向问题,与硬件较远,故英国剑桥大学推出了CPL(Combined Programming Language)

3、1967年,Matin Richards对CPL进行(jnxng)改进、简化、推出了BCPL (Basic Combined Programming Language) 1970年,美国贝尔实验室Ken Thomson 以BCPL为基础,再次简化推出了B语言,并写了第一个UNIX系统。第4页/共329页第四页,共329页。 美国贝尔实验室D.M. Ritchie 在B语言基础上设计出了C语言,并用其将UNIX系统全部改写(gixi)并实现。 经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而(cng r)使C语言广泛应用,各种机器皆可使用。 1978年,美国Brain W.Ker

4、nighan与Dennis. M. Ritchie 联合(linh)出版一书The C Programming Language成为 ANSI C之基础。第5页/共329页第五页,共329页。 1983年,美国标准化协会(xihu)(ANSI) 制定了ANSI C。 ANSI C 为基础(jch): 不同机器有不同版本,尤其是函数(hnsh)均应参考相应的机器。第6页/共329页第六页,共329页。 1.2 C语言的特点(tdin) 只有(zhyu)通过学习,方可理解C之特点,先简叙之:1. 简洁、紧凑(jncu)、方便、灵活 32个关键字,9种控制语句, 主要用小写字母,压缩一切不必要成分2

5、. 运算符丰富 除了最基本的、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。第7页/共329页第七页,共329页。3. 数据结构丰富 除基本类型(lixng)外, 有指针, 结构体、共同体等类型(lixng)。4. 具有结构化的控制语句(yj) 模块完整,控制中的语句(yj)可完整化。5. 语法(yf)严格,但有灵活性 如:数据类型可相互通用:整型、字符型通用。第8页/共329页第八页,共329页。6. 可与机器硬件打交道,直接访问可与机器硬件打交道,直接访问(fngwn)内存内存地址,具有地址,具有“ 高高”、“ 低低”级语言之功能。级语言之功能。7. 生成(sh

6、n chn)目标代码质量高,执行效率高。8. 可移植性优于汇编语言(hu bin y yn)。第9页/共329页第九页,共329页。1.3 简单(jindn)的C程序介绍 为了更好、更快地掌握C程序(chngx),我们先看几个C语言程序(chngx):例1. main( ) printf (This is a c programn); 第10页/共329页第十页,共329页。例2. main ( ) /*求两个数之和*/ int a, b, sum; /*这是定义(dngy)变量*/ a=123; b=456; sum=a+b; printf(sum is %dn, sum); 第11页/共3

7、29页第十一页,共329页。例3.main( ) /* 主函数*/ int a, b, c; /*定义变量*/ scanf(%d, %d, &a, &b); /*输入变量a和b的值*/ c=max(a, b);/*调用(dioyng)max函数,将得到的值赋给c*/ printf(max=%d,c;) /*输出c的值*/ 第12页/共329页第十二页,共329页。 int max (x, y) int x, y; /*对形参x、y作类型定义(dngy)*/ int z; /*max函用到的变量z,也要加以定义(dngy)*/ z=y; if (xy) z=x; return (

8、z); /*将z的值返回,通过max带回调用处*/ 第13页/共329页第十三页,共329页。通过分析,初步看到:通过分析,初步看到:1. C程序全部由一个一个的函数程序全部由一个一个的函数(hnsh)构成。至构成。至少有一个主函数少有一个主函数(hnsh)main ( ), 其它函数其它函数(hnsh)可被主函数可被主函数(hnsh)调用或相互调用。其调用或相互调用。其它函数它函数(hnsh)可为可为C 函数函数(hnsh)库中函数库中函数(hnsh),也可为自己编的函数也可为自己编的函数(hnsh)。上述(shngsh)特点称为程序的模块化.第14页/共329页第十四页,共329页。2.

9、函数的构成(guchng): 函数说明+函数体 函数(hnsh)体: 变量定义与执行语句 可允许(ynx)空函数: dump ( ) 函数说明包括:函数名、类型、属性、参数等第15页/共329页第十五页,共329页。3. 函数的执行一定从main ( )开始。尽管(jn gun)main ( )函数位置可自由。4. 书写(shxi)自由,一个语句可多行,一行可多个语句。5. 每一条(y tio)语句必须有一个分号;6. C语言的输入 / 出均以函数形式出现。scanf( ), printf( ).7. 可用/ /对C语言加注释第16页/共329页第十六页,共329页。第17页/共329页第十七

10、页,共329页。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式2.1. 数据类型 著名计算机科学家沃思提出(t ch): 程序数据结构算法第18页/共329页第十八页,共329页。 所以,存放数据(shj)的方式直接反映了一种语言的数据(shj)表达能力。 数据(shj)的存储方式又称之为:数据(shj)类型。 举 一个例子:以考生各科成绩及总分排队问题为列。 成绩的存放 以数组形式 排队方法(fngf) 算法第19页/共329页第十九页,共329页。前面(qin mian)已述. C数据类型丰富,分为:基本(jbn)类型构造类型指针(zhzhn)类型空类型整型字符型实型单精度

11、双精度数组结构体共用体数据有常量、变量之分,均为其中一种类型。本章先学习基本类型。枚举第20页/共329页第二十页,共329页。2.2 常量(chngling)与变量2.2.1 常量(chngling)和符号常量(chngling)常量(chngling) 程序运行过程中不能被改变的量。一般的数据显式写法均表示常量。 如程序中: 20 整型常量 15.8 实型常量 a 字符常量第21页/共329页第二十一页,共329页。例: #define PRICE 30 main ( ) int num, total; num=10; total=num*PRICE; printf(total=%d,to

12、tal); 还可用一个符号(fho)表示一个常量 符号(fho)常量第22页/共329页第二十二页,共329页。符号常量(一般(ybn)用大写,以区分变量)再如: =3.1415629 #define PAI 3.1415629 #define PRICE 30第23页/共329页第二十三页,共329页。2.2.2变量(binling) 程序执行中可以(ky)改变的量称为变量。变量包括变量名和变量值。变量名 用标识符命名(mng mng),对应一定数量的内存存贮单元,其单元数视变量类型而定。标识符 由字母、数字、下划线组成且由字母或下划线开头的字符串。第24页/共329页第二十四页,共329页

13、。 标识符可用来命名变量及作为常量名、函数名、类型(lixng)名、文件名等,一个程序内不得有重复名。 如: _sum, sum, student_name, price等 习惯上,变量名、函数名等用小写字母表示(biosh)。常量名用大写字母表示(biosh)(以增加可读性)。 另: 需注意标识符长度,视不同系统而定。 设允许8个字符。 则: student_ name student_ number为同一(tngy)名字。第25页/共329页第二十五页,共329页。C语言中, 变量须先定义(dngy),后使用 如: int student student=30; 则若写成student=3

14、0, 则未定义(dngy), 编译时指出其错。 一旦变量被定义,即可在编译时为其分配相应数量(shling)的单元。 一旦(ydn)变量被定义, 其类型便确定。则可检查其运算的合法性。如: a % b 表示a整除以b的余,则a,b必须为整型量。第26页/共329页第二十六页,共329页。2.3.1 整型常量(chngling)整型常量(chngling) 整型常数C语言提供了三种形式 十进制 如: 256, 308, 120等第27页/共329页第二十七页,共329页。 八进制 以数字0开头表示(biosh)的整数 例:0235, 0146 012等. 0235=28238515710 014

15、618248610210 012(182)1010十六进制(sh li jn zh) 以0 x开头的整型数 如: 0 x16, 0 x28第28页/共329页第二十八页,共329页。2.3.2 整型变量(binling)一、分类:一、分类: 分为四种分为四种(s zhn):基本型、短整型、长整型、:基本型、短整型、长整型、无符号型无符号型 2.短整型: 用short int或 short定义(dngy) 3.长整型: 用long 或 long int 定义 1.基本型: 用int定义第29页/共329页第二十九页,共329页。 4.无符号(fho)型: 不存放符号(fho),则不带符号(fho

16、)数. 又分无符号(fho)整型,无符号(fho)短整型, 无符号(fho)长整型。 上述各种类型所占内存单元数及取值范围视不同(b tn)机器而不同(b tn)。详见P13。第30页/共329页第三十页,共329页。二、定义方法二、定义方法 整型变量分别以下列方式整型变量分别以下列方式(fngsh)定义定义2. 短整型 short int 或 short a, b, c;3. 长整型 long int 或 long a, b, c;1. 基本(jbn)整型: int a, b, c;第31页/共329页第三十一页,共329页。4. 无符号(fho)型 unsigned a, b, c; un

17、signed short a, b, c; unsigned long a, b, c;例: main ( ) int a, b, c, d; /*指定a, b, c, d为整型变量(binling)*/ unsignd u; /*指定u为无符号整型变量(binling)*/ a=12; b= 24; u=10;第32页/共329页第三十二页,共329页。 c=a+u; d=b+u; printf(a+u=%d, b+u=%dn,c,d); 由此看到: 不同类型的整型数据可进行算术运算。 但有一定(ydng)规则,见2.7.运行(ynxng)结果为 a+u=22, b+u= 14第33页/共3

18、29页第三十三页,共329页。三、关于三、关于(guny)整型常量整型常量 程序中出现的整型常数程序中出现的整型常数, 系统按以下规则系统按以下规则分配变量分配变量(内存单元内存单元)或赋值给相应变量或赋值给相应变量 2. 若超越(choyu),而在21474836482147483647之间,则可赋给 long int 变量。 1. 当常数(chngsh)(量)在 3276832767之间,则可赋给int, long int 变量。第34页/共329页第三十四页,共329页。4. 一个(y )非负整数, =, =, !=第56页/共329页第五十六页,共329页。4. 位运算符 , , ,

19、, &.5. 赋值运算符 = 等6. 条件(tiojin)运算符 ? 等7. 逗号(duho)运算符 ,8. 指针(zhzhn)运算符 *, &第57页/共329页第五十七页,共329页。11. 分量(fn ling)运算符 , ,12. 下标(xi bio)运算符 13. 其它运算符 如函数(hnsh)的调用( )9. 求字节数运算符 size of 10. 强制类型转换运算符 (类型) 第58页/共329页第五十八页,共329页。 2.8.2 算术(sunsh)运算符和算术(sunsh)表达式一、基本(jbn)算术运算符+ 加法(jif) 正值 3+6, +3 减法 负值

20、6 4, 5 乘法 38/ 除法 8 / 5% 求余 7 % 4 的值为3第59页/共329页第五十九页,共329页。注: 两个整型数据相除 (结果为整,一般(ybn)向零靠拢)。 5/ 3 1“ /” 中,有一个 float, 则结果(ji gu)为double型,使用时千万注意 int / int 出现数据丢失。第60页/共329页第六十页,共329页。二、算术(sunsh)表达式及算术(sunsh)运算符的优先级与结合性运算对象(duxing): 常量、变量、函数等优先级: ( ), , /, %, +, 结合性: 同一(tngy)优先级, 自左向右,为左结合性,反之为右结合性。例: a

21、 b / c 1.5 + ad e 当类型不同的数据进行运算时,按2.7介绍的类型转换。 算术表达式: 用算术运行运算符和括号将运算对象连接起来,且符合C语法规则的式子。第61页/共329页第六十一页,共329页。三、可利用强制类型转换运算符将一个算术(sunsh)表达式转换为所需类型形式(xngsh): (类型名) (表达式)例如(lr): (double) a 将a转换为double(int) (x+y) 将x+y转换为int(float) (5%3) 将5%3转换为float第62页/共329页第六十二页,共329页。注: 1. 括号(kuho)不能省略。 如: intx 会理解为变量i

22、ntx. 2. 转换后的类型数据由系统分配一个(y )中间变量存放,而原变量类型不变。 float x; 又如: (int) (x+y) 若省略(shngl): (int)x+y会变成将x转成整型. (int)x; 则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。第63页/共329页第六十三页,共329页。例: main ( ) float x; int i; x=3.6; i= (int) x; printf (x=%d, x, i); 则: x=3.600000, i=3.第64页/共329页第六十四页,共329页。总结(zngji)以上类型转换,有二种: 1. 强制

23、另: 强制(qingzh)类型转换运算优先于算术运算符.2. 系统(xtng)自动如: 若x为float, 则x%3不合法。 但可用(int)x%3来解决。(附录III介绍了优先级)第65页/共329页第六十五页,共329页。四、自增,自减运算符设有int i = 3;+ + 自增1 自减1则: + +i, i+都会使i变为4,但有区别(qbi):+i: 先使i值+1,再使用(shyng)i值;i+: 先使用(shyng)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)第66页/共329页第六十六页,共32

24、9页。同理: i, i ,均使i值1,但: 又如: printf (i=%dn, i+); 结果(ji gu): i=3若: printf (i=%dn, +i); 结果(ji gu): i=4 i: 先使i值1,再使用(shyng)i值;i : 先使用i值,再使i值1i=3;第67页/共329页第六十七页,共329页。几点注意:1. +和 运算法只能(zh nn)用于变量,不得用于常量和表达式.2. +, ,的结合(jih)性为从右至左,而一般算术运算符为从左至右。如:如 5+ +, (a+b)+ +均为不合法(hf).i+ 和+ +为同一优先级.i+相当于(i+)若 i=3, 则结果为3,

25、 i为4. +, 主要用于循环变量自增或自减。第68页/共329页第六十八页,共329页。1. 要慎用+、 运算符。五、有关表达式使用(shyng)中的问题说明则:先对i进行(jnxng)3次自加,为6,然后三个i相加为18,而i为6。如: 表达式(i+)+(i+)+(i+) (i=3) 一般(ybn)认为: 从左至右: 3+4+5=12,i6.但Turbo C. MSC 都是先取三个原值相加: i+i+i=9 i6如果表达式数为: k=(+i)+(+i)+(+i)第69页/共329页第六十九页,共329页。2. 在表达式中,有的运算符为一个(y )字符,有的为两个字符。3. 在函数调用时,如

26、:一般地: 自左至右尽可能多地将若干字符(z f)组成一个运算符。例: i+j, 究竟理解(lji)为(i+)+j还是i+(+j)?printf(%d, %d, i, i+);若i=3, 若参数计算从左至右, 则输出 3, 3若从右至左, 则输出4, 3上述问题看似复杂,最好上机实践.第70页/共329页第七十页,共329页。2.9 赋值运算符和 赋值表达式符号(fho) = 为赋值运算符。2. 整型数据赋给实型变量,数值不变,但按实数形式(xngsh)存放. 1. 将实型数据(shj)(无论单,双精度)赋给整型变量时,舍弃小数.赋值时,两边类型若不一致,则按以下规则转换:第71页/共329页

27、第七十一页,共329页。4. 将intlong int, 进行(jnxng)符号扩展。 即: 符号扩展, 低16位long 的低16位。5. long int int 则高16位截断(ji dun)。3. 字符型数据(shj)赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)字符无符号整型变量,则存入低8位,高8位补零。第72页/共329页第七十二页,共329页。6. 将unsigned int 型long int高位(o wi)补0。原值传送,但数据(shj)大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越界。而位数相同(xin t

28、n)部分赋值 unsigned int int unsigned long long unsigned short short第73页/共329页第七十三页,共329页。7. 非unsigned 型长度相同(xin tn)的unsigned型数据,原样传送(包括符号位) 一、复合赋值运算符:在 号之前加一个(y )其它运算符。C语言规定:凡是二目运算符均可构成(guchng)复合运算符。例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x% 第74页/共329页第七十四页,共329页。一般形式(xngsh): 二、赋值表达式例: x=10 为

29、一赋值表达式 其中又可以(ky)是一个赋值表达式。例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合(jih)性,于是 ( ) 可省略, 即为:x=y=10;第75页/共329页第七十五页,共329页。例: 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进一步,还可用复合(fh)赋值运算符作下列运算:步骤(bzhu): aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132)

30、 = 264第76页/共329页第七十六页,共329页。2.10 2.10 逗号逗号(duho)(duho)运运算符和逗号算符和逗号(duho)(duho)表达式表达式 一般(ybn)形式: 表达式1, 表达式2其计算(j sun)规则: 先计算(j sun)表达式1,再计算(j sun)表达式2,最后值为表达式2的值。例:a=35, a 4 则: 先计算3 5, a15, a 4=60,结果为60。第77页/共329页第七十七页,共329页。又如: (a=35, a 4), a+5 扩展(kuzhn)形式: 表达式1, 表达2, ,表达式n,结果为20(作为(zuwi)逗号表达式的值) a+

31、5a 即 20a. 3 5=15a a 4=60 (此时(c sh)a值仍未变)结果为表达式n的值 第78页/共329页第七十八页,共329页。注意(zh y): x=(a=3, 63) 赋值表达式, x18; x=a=3, 6 a 逗号(duho)表达式, x3. 逗号表达式主要用于某些语句中需一次计算多个表达式值的情况(qngkung)。如在循环语句中。 函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。 如: printf (%d, %d, %d, a, b, c);第79页/共329页第七十九页,共329页。第80页/共329页第八十页,共329页。第三章第三章 最简单最简单(

32、jindn)(jindn)的的C C程序程序设计设计3.1 C语句(yj)概述 C语句全部为可执行语句,对应若干(rugn)机器操作指命令C程序由许多源文件组成。(分别编译,然后连接)每一个源文件由预编译命令和若干函数组成。每一个函数由说明部分和语句部分组成。第81页/共329页第八十一页,共329页。其结构(jigu)如图除说明部分外,重要(zhngyo)部分为语句部分。C 程 序(chngx)源程序文件1源程序文件i源程序文件n预编译命令函 数1函 数 n说 明 部 分执行部分(语句)第82页/共329页第八十二页,共329页。C C 语句语句(yj)(yj)分分为五类为五类1. 控制语句

33、改变语句的执行(zhxng)顺序共有9种控制(kngzh)语句: if ( ) else (条件) for ( ) (循环) while ( ) (循环) do while (循环)第83页/共329页第八十三页,共329页。 continue (结束(jish)本次循环) switch (多分支(fnzh)选择) break (中止(zhngzh)整个循环) goto (转移) return ( 函数返回)( )表示条件, 表示语句第84页/共329页第八十四页,共329页。2. 函数调用语句(yj)3. 表达式语句(yj)printf ();表达式加; 如: i=i+1; i+; x+y;

34、 其函数调用也可理解(lji)为表达式语句.第85页/共329页第八十五页,共329页。5. 复合(fh)语句4. 空语句 ; 任何(rnh)事情都不做.用 括起来(q li)的一系列语句。 如: z=x+y; t=z/100; printf (%f, t); 第86页/共329页第八十六页,共329页。 从结构化程序设计角度(jiod)出发,程序有三种结构:顺序(shnx)结构选择结构循环结构第87页/共329页第八十七页,共329页。1. 顺序(shnx)结构表示(biosh)ABAB先执行(zhxng)A, 再执行(zhxng)B.第88页/共329页第八十八页,共329页。2. 选择(

35、xunz)结构表示(biosh)为ABPTFB TPFA存在某条件(tiojin)P, 若P为真,则执行A, 否则执行B。第89页/共329页第八十九页,共329页。3. 循环(xnhun)结构表示(biosh)为PFTAAP为T(1) 当型结构 当P条件成立时(T),反复执行A,直到P为“ 假”时才停止(tngzh)循环.有两种结构:当型和直到型第90页/共329页第九十页,共329页。(2) 直到(zhdo)型APFTA直到P为真 先执行A, 再判断(pndun)P,若为F,再执行A,如此反复,直到P为T.第91页/共329页第九十一页,共329页。 另外:由选择结构可以派生出另一种基本(

36、jbn)结构多分支结构.KK=K1A1A2AiAnK=K2K=Ki 已证明: 上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言(yyn)都具备上述三种结构。第92页/共329页第九十二页,共329页。 由赋值表达式加分号;构成,与其它高级语言(yyn)相比有以下不同点:“ =”为一运算符,由此,构成一赋值表达式,可出现(chxin)于表达式能出现(chxin)的任何地方:if ( (a=b)0) t=a;第93页/共329页第九十三页,共329页。 前面(qin mian)已论述: C语言本身无输入/ 出语句, 由函数实现,如printf.等。 一般:C语言提供了一些(yxi)标

37、准的输入/出函数系统函数。第94页/共329页第九十四页,共329页。形式(xngsh): putchar (c );功能: 向终端(一般为显示器)输出一个字符(z f),其中c为 字符(z f)型或整型变量注意: 用该函数(hnsh)时,须用预编译命令: #include stdio.h 3.4.1 putchar 函数 字符输出函数第95页/共329页第九十五页,共329页。举例(j l): #include stdio.h main( ) char a, b, c; a=B ; b=O ; c=Y; putchar(a); putchar(b); putchar ( C); 结果(ji

38、gu): BOY第96页/共329页第九十六页,共329页。 putchar(a); putchar( n ); putchar(b); putchar( n ); putchar(c); putchar( n );*利用putchar还可输出(shch)其它转义字符结果(ji gu): B O Y putchar( 101 ); 输出(shch)Aputchar( ); 输出putchar( 015 ); 输出*若将最后一行改为:第97页/共329页第九十七页,共329页。3.4.2 printf 函数格式(g shi)输出函数一、printf的一般(ybn)形式 是C语言中使用得最多的一种

39、输出函数,它可一次按格式输出多个(du )不同类型的数据。printf(格式控制序列,输出表列);输出表列 用“ ,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。第98页/共329页第九十八页,共329页。格式(g shi)控制序列用双引号“ .”括起来的格式(g shi)符序列。格式控制(kngzh)序列由格式说明符和普通字符组成。2. 普通字符(z f) 原样输出1. 格式说明符: 由%接格式字符组成 如: %f, %d等第99页/共329页第九十九页,共329页。例: a=3; b=4; printf(a=%d, b=%d, a, b); 结果(ji gu):

40、 a=3,b=4无论 a, b中位数多少, 均为上述(shngsh)形式:a=123 b=45第100页/共329页第一百页,共329页。二、格式(g shi)字符 如直接(zhji)用%d,则将出错。不同类型的数据输出(shch),用不同格式字符:1. d格式符十进制整数输出。(1) %d: 按数据的实际长度输出。(2) %md: m表示输出字段宽度。若实际位数m,则m自动取n值,即保证n个字符正常输出。(2)%ms, 如果串长小于m,则在m列范围(fnwi)内,字符串向左靠,右补空格。第109页/共329页第一百零九页,共329页。7. f格式符以小数形式输出(shch)单、双精度实数,有

41、以下几种形式: %m.nf, 指定输出的数据共占m列,其中有n位小数。如果值长度(chngd)小于m,则左端补空格。 %mn.f, 与%m.nf基本相同,只是使输出(shch)的数值向左端靠,右端补空格。 %f, 不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。%f %m.nf %m.nf第110页/共329页第一百一十页,共329页。8. e格式符以指数形式输出单,双精度实数(shsh)基本形式: %e结果(ji gu): 1.23456共13列6例5例可有%m.ne和%m.ne的形式(xngsh)9. g格式符根据实数大小自动选择f格式,或e格式输出单双精度实数。e

42、+002例: printf ( %e , 123.456)第111页/共329页第一百一十一页,共329页。表3.1 printf格式(g shi)字符总结格式字符d以带符号的十进制形式输出整数(正数不输出符号)oxucsfeg以8进制无符号形式输出整数(不输出前导符0)。以16进制无符号形式输出整数(不输出前导符0 x)。以无符号10进制形式输出整数。以字符形式输出,只输出一个字符。说明输出字符串。以小数形式输出单、双精度数,隐含输出6位小数。以标准形式输出单、双精度数,数字部分小数位数为6位。选用f或%e格式中输出宽度较短的一种格式,不输出无意义的0。第112页/共329页第一百一十二页,

43、共329页。 许多情况(qngkung)与具体机器或系统有关,最好机器上一试。表3.2 附加格式说明(shumng)字符字符说明用于长整型整型,可加在格式符d、o、x、u前面。数据最小宽度对实数,表示输出n位小数; 对字符串,表示截取的字符个数。输出的数字或字符在域内向左靠。m(代表一个正整数).n(代表一个正整数)字母1第113页/共329页第一百一十三页,共329页。 系统提供(tgng)了若干函数,以提供(tgng)从标准输入设备(键盘)上输入数据.3.5.1 getchar 函数(hnsh)本节先介绍两个输入函数.形式: getchar( )功能: 从标准输入装置(键盘)上输入一个字符

44、要求: 有#include stdio.h预编译命令第114页/共329页第一百一十四页,共329页。例: #include stdio.h main ( ) char c; c=getchar ( ); putchar (c ); 第115页/共329页第一百一十五页,共329页。3.5.2 scanf函数函数(hnsh)功能(gngnng): 在标准输入装置(键盘)上按指定格式 输入各种类型的数据地址(dzh)表列变量的地址(dzh)或字符串首地址(dzh)。形式: scanf(格式控制序列, 地址表列)格式控制序列同printf(.)第116页/共329页第一百一十六页,共329页。例:

45、 main( ) int a, b, c; scanf( %d%d%d , &a, &b, &c); prinft( %d,%d,%dn, a, b, c); 运行,机器等待(dngdi)你输入: 3 4 5 结果(ji gu) 3, 4, 5第117页/共329页第一百一十七页,共329页。注意: 1.scanf函数顺用地址(dzh)量接受数据。2. 输入数据的间隔(jin g)为 ,Tab. 空格, 不能为“ ,”.3. 允许在格式符中插入附加字符。格式字符及附加字符的定义(dngy)如下表3.3和表3.4第118页/共329页第一百一十八页,共329页。表3.3

46、scanf格式(g shi)字符格式字符d用来输入十进制整数。oxcsfe用来输入八进制整数。用来输入十六进制整数。用来输入单个字符。说明用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志 0作为其最后一个字符。用来输入实数,可以用小数形式或指数形式输入。以f作用相同,e与f可以互相替换。第119页/共329页第一百一十九页,共329页。表3.4 scanf附加的格式(g shi)说明字符字符说明用于输入长整型数据(可用ld, %lo, %lx), 以及double型数据(用%lf或%le)。用于输入短整型数据(可用%hd, %ho,

47、 %hx)。指定输入数据所占宽度(列数)。表示本输入项在读入后不赋给相应的变量。h域宽(为一正整数)*l第120页/共329页第一百二十页,共329页。4. 对于输入(shr)unsigned型数据,不用%u,而用%d, %o, %x.5. 指定数据长度(chngd)时,系统自动截取。则当输入(shr)123456时, scanf( %3d%3d , &a, &b);a12, b34第121页/共329页第一百二十一页,共329页。7. 输入(shr)数据不能规定精度. 6. 在%后加“ *”表示跳过相应(xingyng)的数据则当输入(shr)为12 345 67则a12 b

48、67scanf(%2d %*3d %2d, &a, &b);scanf ( %7.2f , &a);是错误的第122页/共329页第一百二十二页,共329页。8. 在格式控制中除格式说明符外若还有其它(qt)字符,则应按顺序原样输入。例: scanf( %d, %d, &a, &b);则必须(bx)输入 21, 28又如: scanf(a=%d, b=%d, c=%d, &a, &b, &c);则输入(shr): a=34, b=58, c=100第123页/共329页第一百二十三页,共329页。例1: 输入(shr)三角形三边,

49、 求三角形面积。例2: 输入(shr)一个大写字母,要求系统改为小写字母输出。例3. 当b24ac0时,求ax2+bx+c=0的两个根。第124页/共329页第一百二十四页,共329页。第125页/共329页第一百二十五页,共329页。 在C程序的三种结构中,分支结构是一重要结构,其中(qzhng)的P为条件问题:条件如何表达(biod)?逻辑运算、关系运算第126页/共329页第一百二十六页,共329页。 关系运算比较(bjio)运算, 如: a3为一比较(bjio)运算,当a=5, a3成立。结果称为“ 真”, 否则, 如: a=1,a3不成立,为假。上述(shngsh)表达式a3称为关系

50、表达式。第127页/共329页第一百二十七页,共329页。4.1.1 关系运算符及其优先(yuxin)次序1. , , =为同一(tngy)优先级, = =, !=等为同一(tngy)优先级, 但前者高于后者。2. 关系(gun x)运算符优先级低于算术运算符。C语言提供了六种关系运算符 = = = !=优先级为:第128页/共329页第一百二十八页,共329页。3. 关系(gun x)运算符优先级高于赋值运算符。如下(rxi)图:算术运算符赋值运算符关系运算符高低举例(j l): ca+b c(a+b)ab!=c (ab)!=ca= =bc a= =(bc a=(bc)第129页/共329页

51、第一百二十九页,共329页。4.1.2 关系(gun x)表达式关系表达式的结果(ji gu)值规定为1或0.如: ab, a+bb+c, (a=3)(b=5) , a b , (ab)(bb)= =c 成立(chngl) 1b+cb 则ab值为1, 所以(suy)d=1. f=abc ab为1, abc为0,所以f=0.第131页/共329页第一百三十一页,共329页。 用逻辑(lu j)运算符将关系表达式、逻辑(lu j)表达式连接起来的式子逻辑(lu j)表达式。第132页/共329页第一百三十二页,共329页。4.2.1 逻辑(lu j)运算符及优先级 a b !a !b a&

52、b a b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假三种(sn zhn): & (与), (或) ! (非)其意义(yy)见真值表第133页/共329页第一百三十三页,共329页。a&b 当a, b均为1时,才为1a b 当a, b中有一个(y )为1时,才为1!a 当a为1, !a为0,反之(fnzh)为1.由此看到:和&为双目运算符. !为单目运算符。第134页/共329页第一百三十四页,共329页。优先级定义(dngy):2. &和低于关系(gun x)运算符。!高于算术运算符1. !(非)优先(yux

53、in)于&(与).&优先(yuxin)于即: !& 例: !a&b xy & c (!a)&b) (xy)&c)第135页/共329页第一百三十五页,共329页。4.2.2 逻辑(lu j)表达式 1. 逻辑表达式的值与关系(gun x)表达式值一样,真为1,假为0。例: a=4 则 !a 值为0.此处只要(zhyo)a 0,为真.则!a值为0. a=4, b=5 a&b为1 前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运算。第136页/共329页第一百三十六页,共329页。 4&0 2 为1. 总之(zngz

54、h),在逻辑运算中,非0值参加逻辑运算时被看成1处理. a=4, b=5 a b为1 a=4, b=5 !a b为1第137页/共329页第一百三十七页,共329页。2. 一个逻辑表达式中的逻辑运算符并不是一定(ydng)全部执行. 一个实际的例子:判断(pndun)年号是否为润年。如: a&b&c. 则当a=0(假)时, b,c不需判断(pndun)。当a=1,b=0,则不需判c.又如: a b c. 当a=1时,b, c均不必判别。润年的定义: 能被4整除且又能被400整除。 年号能被4整除但不能被100整除。第138页/共329页第一百三十八页,共329页。 当(year

55、%4!=0) (year%100= =0& year%400!=0) 为1时, year为非润年。设用变量(binling)year表示年号 当(year%4= =0& year% 100 !=0) year%400= =0)为1时,year为润年,否则(fuz)为非润年。如果要判别(pnbi)非润年可在上述表达式前加非(!)运算符. 当!( (year%4= =0 & year%100!=0) year% 400= = 0) 为1时,year为非润年。或者:即:则:第139页/共329页第一百三十九页,共329页。4.3.1 if4.3.1 if的三种的三种(sn z

56、hn)(sn zhn)形式形式 功能: 当表达式值非0时, 执行语句(yj)A,否则不执行语句(yj)A.表达式语句A00例如: if (xy) printf( %d, x)形式1 if(表达式)语句A其流程图:第140页/共329页第一百四十页,共329页。形式(xngsh)2 if(表达式)语句A else 语句B功能(gngnng): 表达式为非0,执行语句A 表达式为0,执行语句B表达式语句A语句B 0= 0例: if(xy)printf(%d, x);else printf( %d, y);第141页/共329页第一百四十一页,共329页。形式(xngsh)3 if(表达式1)语句1

57、 else if (表达式2) 语句(yj)2else if (表达式3) 语句(yj)3 else if(表达式n) 语句nelse 语句n第142页/共329页第一百四十二页,共329页。流程(lichng):表达(biod)1表达(biod)2表达3表达n语句1语句2语句3语句n语句n语句1 0= 0= 0 0 0 0第143页/共329页第一百四十三页,共329页。如: if (3) prinft(o.k); if (a) 1. 表达式可以是逻辑、关系,甚至(shnzh)是算术表达式。 2. 上述形式中的语句必须(bx)以分号结束 3. 上述形式(xngsh)中的语句可以是由 括起来的

58、复合语句。此时,在 外可以不用分号.注意的问题:第144页/共329页第一百四十四页,共329页。main ( ) float a, b, t; scabf (%f, %f, &a, &b); if (ab) t=a; a=b; b=t; printf (%5.2f, %5.2f, a, b);例4.1 输入两个实数(shsh),按代数值由小到大次序输出这两个数。第145页/共329页第一百四十五页,共329页。 3.6, 3.2 3.20, 3.60运行情况(qngkung)如下:第146页/共329页第一百四十六页,共329页。例4.2 输入(shr)三个数,按大小顺序输出

59、。 main ( ) float a, b, c,t; scanf(%f,%f,%f, &a, &b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t;第147页/共329页第一百四十七页,共329页。 if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c);运行情况(qngkung)如下:3,7,1 1.00, 3.00, 7.00第148页/共329页第一百四十八页,共329页。4.3.2. if语句(yj)的嵌套if (表达式1)内嵌ifelse内嵌注

60、意: else与最近(zujn)的if 配对.一般(ybn)形式 在上述形式的if语句中, 又可以是if语句称为嵌套。if (表达式2) 语句1if (表达式3) 语句3else 语句2else 语句4第149页/共329页第一百四十九页,共329页。例: if ( )if ( ) 语句(yj)2else 语句(yj)3if ( ) if ( ) 语句(yj)1 else 所以(suy):必要时加 .if ( ) 语句1else第150页/共329页第一百五十页,共329页。例4.3 有一函数(hnsh)y=1 (x0)编一程序,输入(shr)一个x值,输出y值。有以下几种写法(xif),请判断哪些是正确的?程序1: main ( ) int x, y; scanf(d, &x);第151页/共329页第一百五十一页,共329页。 if (x=0) if (x0) y=1; else y=0; else y= 1;第152页/共329页第一百五十二页,共329页。程序(chngx)3: 将上述if语句改

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论