C语言程序设计课件PPT课件_第1页
C语言程序设计课件PPT课件_第2页
C语言程序设计课件PPT课件_第3页
C语言程序设计课件PPT课件_第4页
C语言程序设计课件PPT课件_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

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

文档简介

1、24.06.2020,.,1,武汉理工大学计算机学院,授课教师:王红霞,C语言程序设计,24.06.2020,.,2,选用教材与参考书,主教科书 顾治华、陈天煌等 C语言程序设计 机械工业出版社 2007.2 参考教材 顾治华、陈天煌等C语言程序设计 实验指导 机械工业出版社 2007.2 参考书 谭浩强 C语言程序设计 清华大学出版社,24.06.2020,.,3,课程内容,第一章 C语言程序设计概述 第二章 算法及算法设计简介 第三章 数据描述与基本操作 第四章 选择结构程序设计 第五章 循环结构程序设计 第六章 数组与指针 第七章 函数与模块化程序设计方法,24.06.2020,.,4,

2、第一章 C语言程序设计基础,1.1 程序与程序设计 1.2 C语言简介 1.3 简单的C语言程序 1.4 C语言程序的上机步骤 1.5 C语言的基本词法 1.6 C语言程序的基本结构,24.06.2020,.,5,程序与计算机语言,程序是存放在计算机中的操作指令的集合。,用程序设计语言安排好的处理问题的步骤称为计算机程序,用程序设计语言编制一个能完成某项任务的计算机程序的过程叫做计算机程序设计。,程序设计=数据结构+算法+程序设计方法+编程语言,程序设计的关键:必须掌握一种程序设计语言。掌握程序设计的逻辑思维。,24.06.2020,.,6,程序设计过程,(1)问题的提出,要达到的要求; (2

3、)确定数据结构和所采用的算法; (3)编制程序; (4)调试程序; (5)整理并写出文档;,24.06.2020,.,7,C语言的特点,(1)语言简洁、紧凑,使用方便、灵活。C语言一共只有 32个关键字,主要用小写字母表示。,(2) 比其他高级语言更接近硬件,比低级语言更接近算法。 程序易编、易读、易查错、易修改,兼有高级语言和 低级语言的优点。,(3) 数据类型和运算符十分丰富,程序设计和算法描述更为 简单和方便。,(4) 语法结构十分简单,语句数目少,简单易学。,24.06.2020,.,8,(6) 它是一种模块化的程序设计语言,适合大型软件的研制 和调试。,(5) 它是一种结构化程序设计

4、语言,提供了完整的程序控制 语句(选择语句和循环语句),很适合结构化的程序设计方 法。,(7) 生成目标代码质量高,程序执行效率高。,(8) 用c语言写的程序可移植性好。,(9) 它提供了大量的库函数以供调用,简化了程序设计工作。,24.06.2020,.,9,C语言程序的结构,C语言是结构化的程序设计语言。 C语言是模块化的程序设计语言,程序是由函数构成的。一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数。因此,函数是C程序的基本单位。 一个函数由两部分组成: 函数的首部,函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。 函数体,即

5、函数首部下面的大括弧.内的部分。如果一个 函数内有多个括弧,则最外层的一对 为函数的范围。 函数体一般包括: 声明部分:在这部分中定义所用到的变量。 执行部分: 由若干个语句组成。,24.06.2020,.,10,(4) 一个C程序总是从main函数开始的,而不论main函数在整 个程序中的位置如何(main函数可以放在程序最前头,也可 以放在程序最后,或在一些函数之前,在另一些函数之后)。,(5) C程序书写格式自由,一行内可以写几个语句,一个语句 可以分写在多行上。,(6) 每个语句和数据定义的最后必须有一个分号。分号是C语 句的必要组成部分。分号不可少。,(7) C语言本身没有输入输出语

6、句。输入输出的操作是由库 函数scanf和printf等函数来完成的。,(8) 可以用/*/对C程序中的任何部分作注释。,24.06.2020,.,11,简单的C语言程序示例,例一 main( ) printf (“This is a C program.n”); ,本程序的作用是输出以下一行信息: This is a C program.,24.06.2020,.,12,例二 main( ) int a,b,sum; /*这是定义变量*/ a=123;b=456; /*以下3行为C语句*/ sum=a+b; printf(“sum is %dn”,sum); ,程序的运行结果: Sum is

7、 579,24.06.2020,.,13,例三,/* example1.3 输入两个数,求其中较大的数*/ #include int max(int x,int y) /* 被调用函数*/ int z; if (xy) z=x; else z=y; return(z); /* 将z的值返回,通过max带回调用处*/ main() /* 主函数*/ int a,b,c; scanf(“%d,%d”, ,运行结果: 4,6 max=6,24.06.2020,.,14,C程序的上机步骤,24.06.2020,.,15,C语言的基本词法标识符,定义:在程序中使用的变量名、函数名、标号等统称为 标识符。

8、除库函数的函数名由系统定义外,其余的都由用户自己定义。,命名规则:标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。,例如:以下标识符是合法的: a,x,x3,BOOK_1,sum5,_x7。 以下标识符是非法的: 3s,s*T,-3x,bowy-1,M.D.John,ab。,24.06.2020,.,16,(1)标准C不限制标识符的长度,但它受各种版本的C语言编 译系统限制,同时也受到具体机器的限制。Turbo C规定标识符的长度为32。一般情况下,标识符的长度不要超过8个字符。,(2)在标识符中,大小写是有区别的。例如SUM和sum

9、是两个 不同的标识符。变量名应尽量使用小写字母,以增加程序的可读性。,(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,做到“顾名思义”。 在C语言中,所有的变量都是先定义后应用,使用没有定义的变量名被认为是“非法”的。,在使用标识符时还必须注意以下几点:,24.06.2020,.,17,C语言的基本词法关键字,定义:关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应该与关键字相同。 分类:语言的关键字分为以下3类: (1)类型说明符 用于定义和说明变量、函数或其它数据结构的类型。如int,doubl

10、e,float,long,short,auto,signed,static,struct,unsigned,char,enum,extern,register和union等。,24.06.2020,.,18,(2)语句定义符 用于表示一个语句的功能。如条件语句的语句定义符if else,循环语句的语句定义符do,while,for等。,(3)预处理命令字 用于表示一个预处理命令,使用时前面要加“”。如include,define,ifdef,endif等。 关键字后必须有空格、圆括号、尖括号、双引号等分隔符,否则与其它字符一起组成新的标识符。,24.06.2020,.,19,C语言的基本词法其

11、它,运算符 语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。,分隔符 在语言中采用的分隔符有逗号和空格两种。逗号主要是用在类型说明和函数参数表中分隔各个变量。空格多用于语句各单词之间作间隔符。,常量 C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。,24.06.2020,.,20,语言的字符集,(1)字母 小写字母az共26个,大写字 母AZ共26个。 (2)数字09共10个。 (3)空格符、制表符、换行符等统称为空白符。 (4)标点和特殊字符,24.06.2020,.,21,C语言程序设计的基本结构

12、,(1)顺序结构,24.06.2020,.,22,(2)选择结构,或称分支结构,此结构中必包含一个判断框。根据给定的条件 P是否成立而选择执行A框或B框,24.06.2020,.,23,(3) 循环结构,它又称为重复结构,即反复执行某一部分 的操作。又两类循环结构:,(a) 当型(while型)循环结构,它的功能是判断当前给定 的条件p1成立时,执行A 框操作,执行完A后,再 判断条件p1是否成立,如 果仍然成立,再执行A框, 如此反复执行A框,直到 某一次p1条件不成立为止, 此时不执行A框,而从b点 脱离循环结构。,24.06.2020,.,24,(b)直到型(Until型)循环结构,它的

13、功能是先执行A框,然后判断给定的p2条 件是否成立,如果p2条件不成立,则再执行A, 然后再对p2条件作判断,如果p2条件仍然不成立,又执行A如此反复执行A,直到给定 的p2条件成立为止,此时不再执行A,从b点脱 离本循环结构。,24.06.2020,.,25,本章课堂练习,(1) 以下说法中正确的是( ). A) C语言程序总是从第一个函数开始执行 B) 在C语言程序中,要调用的函数必须在main()函数 中定义 C) C语言程序总是从main()函数开始执行 D) C语言程序中的main()函数必须放在程序的开始 部分,24.06.2020,.,26,解答:C 解释:C语言程序总是从mai

14、n()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须的。,24.06.2020,.,27,(2)以下叙述不正确的是 A)一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的基本组成单位是函数 D) 在C程序中,注释说明只能位于一条语句的后面,24.06.2020,.,28,解答:D 解释: 凡是用“/*”和“*/”括起来的文字,都是注释。其出现的位置可以任意。,24.06.20

15、20,.,29,(3)下列标识符中,合法的变量名有: A)a.b B)$888 C)A1 D) 3x56,24.06.2020,.,30,解答:C 解释:变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。,24.06.2020,.,31,第二章 算法及算法设计简介,2.1 算法的概念 2.2 算法的设计与表达 2.3 简单的算法实例 2.4 结构化程序设计方法简介,24.06.2020,.,32,算法的

16、概念,任何一个程序应包含的如下两方面的内容: (1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure). (2)对操作的描述。即操作步骤,也就是算法(algorithm)。,著名计算机科学家沃思(Nikiklaus Wirth)提出公式 数据结构算法程序,算法:是对解决某个问题的方法步骤的描述。,程序:从计算机角度来说,程序是用某种计算机能理解并执 行的计算机语言描述解决问题的方法和步骤。,24.06.2020,.,33,实际上,一个程序除了以上两个主要要素之外,还应当采用 结构化程序设计方法进行程序设计,并且用某一种计算机语 言表示。因此,可以

17、这样表示: 程序算法数据结构程序设计方法语言工具和环境 在这4个方面中,算法是灵魂,数据结构是加工对象,语言 是工具,编程需要采用合适的算法。算法是解决“做什么” 和“怎么做”的问题。,24.06.2020,.,34,算法的表示,1、用自然语言表示算法 采用汉语、英语或其它语言来描述解决问题的方法和步骤。 由于自然语言容易出现“歧义性”,且描述问题的文字冗长, 因此一般很少使用自然语言来描述算法。,24.06.2020,.,35,例1: 有50个学生 ,要求将他们之中成绩在80分以上者打印出来。用n表示学号,n1代表第一个学生学号,ni代表第i个学生学号。用g代表学生成绩, gi 代表第i个学

18、生成绩,算法可表示如下: S1:1i S2:读入学号ni和成绩gi S3: 如果gi 80 ,则打印 ni 和gi ,否则不打印 S4: i+1 i S5: 如果 i 50, 返回S2, 继续执行; 否则,算法结束。,24.06.2020,.,36,2、用流程图表示算法,(1)常用的流程图符号,24.06.2020,.,37,上例用流程图表示:,(1) 流程图表示算法的优点: 表示算法直观形象,比较清楚地显示出各个框之间 的逻辑关系。 简单,易于掌握。,流程图,24.06.2020,.,38,3、用NS图表示算法,1973年美国学者I.Nassi和B.Shneiderman提出了 一种新的流程

19、图形式。在这种流程图中,完全去掉 了带箭头的流程线。全部算法写在一个矩形框内, 在该框内还可以包含其他的从属于它的框。,这种流程图又称NS结构化流程图。,NS流程图用以下的流程图符号:,(1)顺序结构:,A,B,24.06.2020,.,39,(2)选择结构:,P,成立,不成立,A,B,(3)循环结构:,当p1成立,A,当型循环结构,直到p1成立,A,直到型循环结构,用以上3种NS流程图中的基本框,可以组成复杂的NS流程图,以表示算法,24.06.2020,.,40,上例用NS图表示:,用NS表示算法如图,24.06.2020,.,41,4、用伪码表示算法,伪代码是用介于自然语言和计算机语言之

20、间的文字和符号来 描述算法。它不用图形符号,因此书写方便,格式紧凑,也 比较好懂,便于向计算机语言算法(即程序)过渡。,例 有50个学生,要求将他们之中成绩在80分以上者打印出来。 用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生 学号。用g表示学生成绩,gi表示第i个学生成绩。,24.06.2020,.,42,BEGIN(算法开始) 1=i While ii END(算法结束),用伪代码表示算法如下:,24.06.2020,.,43,5、用计算机语言表示算法,设计算法的目的是为了实现算法。因此,不仅要考 虑如何设计一个算法,也要考虑如何实现一个算法。,我们的任务是用计算机解题,也

21、就是要用计算机实 现算法。计算机是无法识别流程图和伪代码的。只 有用计算机语言编写的程序才能被计算机执行(当 然还要经过编译成目标程序才能被计算机识别和执 行)。因此,在用流程图或伪代码描述出一个算法 后,还要将它转换成计算机语言程序。,24.06.2020,.,44,例: 有50个学生,要求将他们之中成绩在80分以上者打印出来。 用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生 学号。用g表示学生成绩,gi表示第i个学生成绩。,C语言程序如下: main( ) int g50,n50,i; for(i=0;i=80) printf(“%6d,%3dn”,ni,gi); ,24.0

22、6.2020,.,45,例2:对一个大于或等于3的正整数,判断它是不是一个素数。,方法:将 n (其中n 3) 作为被除数, 将2 到(n-1) 各个整数轮流作为除数,如果都不能被整除,则n为素数。,简单的算法实例,24.06.2020,.,46,算法表示如下: S1:输入n的值 S2:2 i ( i 作为除数) S3: n 被 i 除,得余数 r S4: 如果 r 等于 0 , 表示 n 能 被 i 整除,则打印 n “不是素数”,算法结束;否则执行S5 S5:i+1 i S6: 如果 i n-1, 返回S3;否则,打印 n “是素数”,算法结束。,24.06.2020,.,47,S1: 1

23、 sign S2: 1 sum S3: 2 deno S4: (-1)*sign sign S5: sign*(1/deno) term S6: sum+term sum S7: deno+1 deno S8: 若deno 100 返回S4;否则算法结束。,例3:求 1-1/2 + 1/3 1/4 + 1/99 1/100。,24.06.2020,.,48,结构化程序设计方法简介,1、三种基本结构回顾,(1)顺序结构,24.06.2020,.,49,(2)选择结构,或称分支结构,24.06.2020,.,50,(3) 循环结构,它又称为重复结构,即反复执行某一部分 的操作。又两类循环结构:,(

24、a) 当型(while型)循环结构,24.06.2020,.,51,(b)直到型(Until型)循环结构,24.06.2020,.,52,2、结构化程序,所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。,3、结构化程序设计方法,结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行。每个阶段的问题都控制在人们容易理解和处理的范围内。,24.06.2020,.,53,1 = i,i+1 =i,gi80,i50,结束,开始,打印ni,gi,Y,N,N,Y,读入ni和gi,24.06.2020,.,54,解答: ()用自然语言表示 ()用传统的流程图表示 ()NS

25、流程图 ()用伪代码表示等。,1、算法的表示形式主要有哪些?,课堂练习,24.06.2020,.,55,2、设计算法:A、B两人各有一桶油,现两人要将各自桶 内的油互换。,解答:必须借助另外一个空桶,并按如下算法进行: (用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M) 开始: S0:将A桶中的油倒入M桶中; S1:将B桶中的油倒入A桶中; S2:将M桶中的油倒入B桶中;,24.06.2020,.,56,3、设计算法写出求n!的算法,解答: S0:给出n的值; S1: 1=p; S2: 2=i; S3: p*i=p; S4: i+1=i; S5: 若i、=、!),逻辑运算符(!、 fl

26、oat f=5.0,g=10.0; double d=5.0,e=10.0;,则 n的结果是10 nm,nm,n*m,n/m,n%m的结果 分别为13、7、30、3、1 de,de,d*e,d/e的结果 分别为15.0,5.0,50.0,0.5 nmf*g/d的运算顺序相当于 (nm(f*g)/d),结果是3.0 nm*f*d的运算顺序相当于 (nm)*f)*d,结果是25.0,如果参加运算的两个数中有一个为浮点型,则结果是double型,2 增1减1运算符,(1)增1减1运算符的运算对象、运算规则与结果、 结合性如下表所示:,对象数,单 目,名称,运算符,运算规则,运算对象,运算结果,结合性

27、,增1(前缀),先加1 后使用,增1(后缀),减1(前缀),减1(后缀),先使用 后加1,先减1 后使用,先使用 后减1,整型、字 符型、指 针型变量 或数组 元素,同运算 对象的 类型,自 右 向 左,(2)增1减1运算符的优先级:, 增1减1运算符 优先于 双目基本算术运算符 增1减1运算符和单目运算符、同级别,结合性 是自右向左,注意:,若出现难以区分的若干个或组成运算符串时, C语言规定,自左向右取尽可能多的符号组成运算符。,例1:,ab 应理解为(a)b ab应理解为 (a)b,例2:增1减1运算符的使用,设变量定义如下:char c1b,c2B; (c1,c2可看成整型,其值分别为

28、98,66),则: c1 的值是99,运算后c1的值是c c1 的值是98,运算后c1的值是a c1c2的值是164,运算后c1的值是c,c2的值是B c1c2的值是32,运算后c1的值是a,c2的值是B,三.赋值运算符,1.赋值运算符,赋值运算符是双目运算符,赋值运算符的左边必须是变量, 右边是表达式。,(1) 赋值运算符的运算对象及有关规则如下表:,(2) 赋值运算符的优先级, 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 赋值运算符 赋值运算符的结合性是自右向左,(3) 赋值运算符的使用,设变量定义如下: char c1a,c2; int n165,n2,n3,n4,n

29、5,n6; float f13.0,f2;,则: c2n1运算后,c2的值是65,n1的值不变。 n2!c1运算后,n2的值是0,c1的值不变。 f2f10.001运算后,f2的值是3.001,f1的值不变。 n3c1n1|c1!n1运算后,n3的值是1,c1和n1 的值不变。 注:运算顺序相当于 n3(c1n1)|(c1!n1) n4n5n6(n1)运算后,n4,n5,n6的值 均是64,n1的值是64。,注意:上述表达式的值就等于赋值表达式中的最左边的变量值。,2 .算术自反赋值运算符,(1) 运算规则,对象数,名称,运算符,运算规则,运算对象,运算结果,结合性,双目,加赋值,减赋值,乘赋

30、值,除赋值,模赋值,*,/ =,%=,a+=b相当于 a=a+(b),a=b相当于 a=a(b),a*=b相当于 a=a*(b),a/=b相当于 a=a/(b),a%=b相当于 a=a%(b),数值型,数值型,自 右 向 左,整型,整型,(2)算术自反赋值运算符的优先级, 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 算术自反赋值运算符 算术自反赋值运算符和赋值运算符是同级别的,结合性是 自右向左,(3)算术自反赋值运算符的使用,设变量定义如下 int n1=10, n2=10, m1=10, m2=10, m3=10, m4=10;,则: n1n2,n1的值为20,n2的值

31、不变 n1n2,n1的值为0,n2的值不变 n1*n2,n1的值为100,n2的值不变 n1/n2, n1的值为1,n2的值不变 m1m2m3*m4/2 运算后, m1,m2,m3,m4的值依次是30,40,50,5。 运算顺序相当于m1(m2(m3*(m4/2),四.逗号运算符,逗号运算符是双目运算符,其运算对象是表达式。,1.逗号运算符,注意:由逗号运算符组成的式子也是表达式,其值等于最右边 的表达式的值,2.逗号运算符的优先级, 任何运算符 优先于 逗号运算符 逗号运算符的结合性是自左向右,3. 例题。设整型变量a,b为2,,则: ba3,cb4 运算结果:a不变,b为5,c为9,表达式

32、的值为9 da,ed,fe 运算结果:a为1,d为1,e为1,f为1,表达式的值为1,五.条件运算符,1.条件运算符,2.条件运算符的优先级, 其它运算符 优先于 条件运算符 优先于 赋值、算术自反赋值运算符 条件运算符的结合性是自右向左,3.例子,(1) 设整型变量a,b,c,d均为2 则ab?(c1):(d0); 结果a,b,d不变,c为1,表达式的值为1,(2) a13?(ba2):(ca3); 结果a,c不变,b为4,表达式值为4,(3) ab?(c0):(ab?(c1):(c1)); 结果a,b不变,c为0,表达式的值为0,1.长度运算符,六.长度运算符,2.长度运算符优先级, 和单

33、目算术运算符、单目逻辑运算符、增1减1运算符同级别,3.例子,设变量定义如下: int n; short s; unsigned long u3; float f; char c;,则 sizeof(n)的值是2 sizeof(s)的值是2 sizeof(long)的值是4 sizeof(unsigned int)的值是2 sizeof(u3)的值是4 sizeof(f)的值是4 sizeof(double)的值是8 sizeof(c)的值是1,注意:上述结果是Turbo C 2.0在微机上运行的结果。,24.06.2020,.,107,七 位运算 C语言中提供的位运算符: 、 、 (这是赋值

34、语句) a+ + (这是表达式) a+ +; (这是赋值语句,等价 与 a=a+1;),24.06.2020,.,117,3.5 输入输出在C语言中的实现,1.输入输出的概念 从计算机向外部输出设备(如显示屏、打印机、磁盘 等)输出数据称为“输出”,从外部向输入设备(如键盘、 磁盘、光盘、扫描仪等)输入数据称为“输入”。,2.C语言本身不提供输入输出语句,输入和输出操作是由 函数来实现的。在C标准函数库中提供了一些输入输出函 数,例如,printf函数和scanf函数。,24.06.2020,.,118,3.在使用C语言库函数时,要用预编译命令“include” 将有关的“头文件”包括到用户源

35、文件中。在调用标准 输入输出库函数时,文件开头应有以下预编译命令: # include 或# include “stdio.h”,4.允许在使用printf和scanf两个函数时可不加#include 命令。,24.06.2020,.,119,一、字符数据的输入输出,1.putchar函数(字符输出函数) 函数格式:putchar( C ) ; C可以是字符型变量或整型变量或常量 函数的功能:向终端输出一个字符,24.06.2020,.,120,2.程序实例 #include main( ) char a, b, c ; a=B; b=O; c=Y; putchar(a); putchar(b

36、); putchar(c); ,注意:该程序可以输出控制字符,如putchar(n) 输出一个换行符,也可以输出其他转义字符 如 putchar(101) (输出字符A) putchar() (输出单引号字符),运行结果: BOY,24.06.2020,.,121,3.getchar 函数(字符输入函数) 函数格式,getchar ( ) 函数的功能:从终端输入一个字符,函数的值就是 从输入设备得到的字符。,4.程序实例 #include main ( ) char c; c=getchar( ); putchar(c); 在运行时,如果从键盘输入字符a并按回车键,就会在 屏幕上看到输出的字符

37、a。 a (输入a后,按“回车”键,字符才送到内存) a (输出变量 c 的值a),24.06.2020,.,122,注意: (1)getchar( )只能接收一个字符,getchar函数收到 的字符可以赋给一个字符变量或整型变量。 (2)若在程序中调用getchar、putchar函数,则必须 在程序的开头部分加上“包含命令” #include 或 #include “stdio.h”,24.06.2020,.,123,二、格式输入与输出,(一)、printf 函数(格式输出函数),1.printf函数的一般格式为 printf(“格式控制字符串”,输出表列) 括弧内包括两部分: (1) “

38、格式控制字符串”是用双引号括起来的字符串,也称 “转换控制字符串”,它包括两种信息: 格式说明,由“”和格式字符组成,如%d, %f等。 它的作用是将输出的数据转换为指定的格式输出。格式 说明总是由“”字符开始的。 普通字符,即需要原样输出的字符。 (2)“输出表列”是需要输出的一些数据,可以是表达 式。,24.06.2020,.,124,下面是一个例子: printf(“%d %d ”, a,b );,格式说明 输出表列,printf(“a%d b=%d”,a,b);,格式说明 输出表列,24.06.2020,.,125,2.格式字符 常用的有以下几种格式字符:,(1)d 格式字符。用来输出

39、十进制整数。有以下 几种格式字符: d,按整型数据的实际长度输出。 md,m为指定的输出字段的宽度。如果数据 的位数小于m,则左端补以空格,若大于m,则按实 际位数输出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,则输出结果为 |_| 123,12345 ld,输出长整型数据。如 long a=135790; printf(“%ld”,a);,24.06.2020,.,126,对long型数据应当用ld格式输出。对长整型数据也可以 指定字段宽度,如将上面printf函数中的“ld”改为“8ld” 则输出为: |_| |_| 135790 (8列) 一个int型数

40、据可以用d或ld格式输出。,(2)O格式符,以八进制数形式输出整数。由于是将内存 单元中的各位的值(0或1)按八进制形式输出,因此输出 的数值不带符号,即将符号位也一起作为八进制数的一部 分输出。例如: int a= -1; printf(“%d,%o”,a,a);,24.06.2020,.,127,1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 输出为 1,177777 对长整型数(long型)可以用“lo”格式输出。 同样可以指定字段宽度,如printf(“8o ” ,a) 输出为|_| |_| 177777,1在内存单元中的存放形式(以补码形式存放)如下:,24.06.2

41、020,.,128,(3)x格式符,以十六进制数形式输出整数。同样 不会出现负的十六进制数。 例如 int a=1; Printf(“%x,%o,%d”,a,a,a);,输出结果为: ffff,177777,1,24.06.2020,.,129,(4)u格式符,用来输出unsigned型数据,即无符号数, 以十进制形式输出。,(5)C格式符,用来输出一个字符。 如: char c=a; printf(“%c”,c); 输出字符a,请注意:“c”中的 c是格式符,引号右边 的c是变量名,不要搞混。一个整数,只要它的值在0255 范围内,也可以用字符形式输出,在输出前,系统会将该 整数作为ASCI

42、I码转换成相应的字符;反之,一个字符数据 也可以用整数形式输出。,24.06.2020,.,130,(6)S格式符,用来输出一个字符串。有几种用法:,s,例如: printf(“%s”, “CHINA” ); 输出“CHINA”字符串(不包括双引号)。,ms,输出的字符率占m列,如字符串本身长度大 于m,则突破m的限制,将字符串全部输出。若串 长小于m,则左补空格。,24.06.2020,.,131,ms,如果串长小于m,则在m列范围内, 字符率向左靠,右补空格。,mns,输出占m列,但只取字符串中左端n个字 符。这n个字符输出在m列的右侧,左补空格。,mns,其中m、n含义同上,n个字符输出

43、在m 列范围的左侧,右补空格。如果nm,则m自动取 n值,即保证n个字符正常输出。,24.06.2020,.,132,(7)f格式符,用来输出实数(包括单、双精度),以 小数形式输出。有以下几种用法:,m.nf指定输出的数据共占m列,其中有n位小数。 如果数值长度小于m,则左端补空格。, -mnf与m.nf基本相同,只是使输出的数值 向左端靠,右端补空格。,f,不指定字段宽度,由系统自动指定,使整数 部分全部如数输出。并输出6位小数。应当注意,并非全 部数字都是有效数字。单精度实数的有效位数一般为7位。,24.06.2020,.,133,(1)字符数据的输出: main ( ) char c=

44、a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); ,运行结果为: a,97 a,97,3.例子,24.06.2020,.,134,(2) 字符串的输出 main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“CHINA”,”CHINA”); 输出如下: CHINA,|_| |_| |_| |_| |_| CH,CHIN,CHI |_| |_| 其中第3个输出项,格式说明为“%.4s”,即只指定n,没指定m, 自动使 m=n= 4,故占4列。,24.06.2020,.,13

45、5,(3)输出实数时的有效位数: main( ) float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); ,运行结果为: 333333.328125,24.06.2020,.,136,(4)输出实数时指定小数位数: main( ) float f=123.456; printf(“%f |_| |_| %10f |_| |_| %10.2f |_| |_| %.2f |_| |_| %-10.2fn”, f,f,f,f,f); ,运行结果为: 123.456001 |_| |_| 123.456001 |_| |_| |_| |_| |_| |_| 123.46 |_| |_| 123.46 |_| |_| 123.46 |_| |_| |_| |_|,24.06.2020,.,137,4.格式符小结,printf格式字符,24.06.2020,.,138,24.06.2020,.,139,printf的附加格式说明字符,24.06.2020,.,140,5.使用printf函数时,还需注意以下几点,(1)除了X,E,G外,其他格式字符必须用小写字母, 如d不能写成D。 (2)可以在printf函数中的“格式控制”字符串内包含“转 义字符”,如“n”, “ t”, “ b”,

温馨提示

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

评论

0/150

提交评论