




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计技术,C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型,第一章 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.1 C程序的基本结构,C 语言的特点: C是一种高级计算机程序语言 C是一种面向过程的结构化程序语言 C语言简洁、紧凑,使用方便、灵活 C语言数据类型丰富 C语言运算符丰富 C语言程序可移植性好 C程序开发环境中包含了语言核心、与处理器和标准函数库三个部分 C语言本身没有提供用于程序中数据输入输出的语句,1.1.1 C源程序的组成成分,#include /*头文件声明*函数头 */ void main( ) /*定义主函数且无返回值*/ float ave ,x,y,z; /* 定义变量 */ scanf(“%f,%f,%f”, /*调用printf函数输出结果*/ ,说明: 1.程序由予处理命令和至少一个函数组成,但必须而且只有一个主函数, 函数名必须是main。 2. 函数由函数头和函数体组成。函数体总是从花括号“”开始。以反花括号“”结束。,3 函数体由语句组成。每一个分号“;”就代表一条语句的结束。 4 以/*开头到*/结束的部分叫注释行。即注解。不是语句,可以在程序中的任何位置,结尾不要分号“;”,不引起计算机任何动作。 5 语句由C语言规定的符号组成,结尾一定是分号“;” 不同的语句引起不同的计算机动作,是计算机执行程序的最小单位。 6 当程序由多个函数组成时,除主函数main外,其他的函数叫子函数。冠以名字后,就叫某某函数。 例1-1 C语言源程序的组成成分和基本结构,1.1.1 C源程序的组成成分,用C言符号书写的程序称为源程序 ,高级语言源程序必须被转为机器语言程序才能被执行。,1.1.1 C源程序的组成成分,1.1.2 C语言的基本元素,1C语言的字符集 小写英文字母 a b c z 大写英文字母 A B C Z 数字 0 1 2 3 9 特殊字符 + = - _ ( ) * : “ / ? 不可印出字符 空格 、换行、制表符等 2标识符 标识符是给程序中处理的数据对象(如变量、常量、函数、数据类型等)取的名字 .,1.1.2 C语言的基本元素,标识符取名规则 组成标识符的字符为字母、数字和下划线 标识符中第一个字符必须是字母或下划线 多数C编译系统在构成标识符时都要区分字母的大小写,即abc和Abc是不相同的标识符 构成标识符的字符个数(标识符长度)与所使用的环境相关 保留字 操作系统或编译系统或其他系统已经用了的名字 例如 double else enum extern float for goto if _Imaginary* inline*int long register restrict* 用户标识符 用户自己取的名字,1.1.2 C语言的基本元素,程序员(用户)在程序中自定义标识符时,除了避免使用保留字和必须遵守标识符的命名规则外,还需要注意以下两个方面:一是要将标识符取得既有意义,又便于阅读;二是要注意避免含义上或书写时引起混淆。例如 下面是一些合法用户自定义标识符的例子: a b1 file_name _buf 下面是不合法的用户自定义标识符例子及错误原因: 123abc /*不是以英文字母开头*/ float /*与系统保留字同名*/ up.to /*标识符中出现了非法字符“.”*/ zhang san /*标识符中间出现了非法字符空格*/,1.1.2 C语言的基本元素,3函数 函数是构成程序的基本模块,每个函数具有相对独立的功能 函数有三种:主函数(即main()函数)、C语言编译系统提供的标准库函数和用户自定义的函数 主函数是C程序执行的入口,即程序总是从主函数中的第一条可执行的语句开始执行;一般情况下也是程序执行的出口 标准库函数是语言处理系统提供的常用功能的处理程序代码,在程序中如要使用标准库函数,则需要在程序中合适的地方(调用标准库函数之前)用文件包含预处理语句将与所使用库函数相应的头文件包含到程序中来 如例前面例题中的“#include ” 用户自定义函数即程序员根据所设计应用程序的功能自己编写的函数,1.1.2 C语言的基本元素,4C程序书写的基本要点 C程序习惯上使用小写英文字母。为了清晰起见,在C程序中往往使用大写英文母来表示宏定义或其它具有特殊意义的标识符。 C程序中不强调程序行的概念。一行中可以有多条语句,一个语句也可以写在多行上,但语句与语句之间要用分号(;)分隔。 C程序为了增强程序的可读性,可以使用适量的空格、空行和适当的行间缩进结构。但要注意,程序中的变量名、函数名以及C语言本身使用的单词(如保留字、语句结构等),不能在其中插入空格。,第一章 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.2 C语言的基本数据类型,数据和数据类型 在C语言源程序中能直接书写的、需要被处理的符号只有数和字符两种,这种符号称为C语言的数据。 计算机程序只能处理已经存入计算机系统内存的数据,任何需要用计算机程序处理的信息都需要被转换为内存中的数据才能被处理。 计算机系统的内存是按字节编址的,在内存里存放一个数据所需要的内存字节数称为一个数据所需要的内存空间,程序中不同的数据在系统内存中所要求的存储空间大小也不一样,因而在程序设计中需要区分所处理数据的数据类型。,1.2 C语言的基本数据类型,C语言提供的数据类 : 数据类型,1.2 C语言的基本数据类型,常量和变量 C源程序中直接书写的数据称为常量,存放一个数据所需要的内存空间称为变量,内存空间中存放的数据内容称为变量值。 变量是由变量名(标识符)来区别的。变量值是通过引用变量名来引用的,是数据。所以,常量和变量在程序中表现的都是数据。 常量数据在源程序中给定后,在程序的整个执行过程中保持不变。而变量在程序的执行过程中是一个其值可以被程序修改的量。是一个变化的量。,1.2 .1 C语言的整型数据类型,整型量 1整型常量 C语言源程序能直接书写的整型常量可以有三种形式: 十进制整数。如888、-123、0等。 八进制整数。以0开头的整数是八进制整型常量,如0777、-011等。 十六进制整数。以0x开头的整数是十六进制整型常量,如0x123、0xff等。 在C语言中整型数据用机器的一个字长来存储,所以整型数据的表示范围与计算机系统的软硬件环境有关。在字长为16位计算机系统中,整型数据表示的范围为-3276832767(-215215-1);在字长为32位的计算机系统中,则表示的数据范围为-231231-1。,1.2 .1 C语言的整型数据类型,2整型变量 存放整型数据的内存空间称为整型变量,C语言提供了基本整型、短整型、长整型和无符号整型四种大小不同的单位空间来存放整形数据。,类型名 意 义 字节数 经度范围 short 短整型 2 -3276732768 int 基本整型 4 -21474836472147483648 long 长整型 4 -2147483647L2147483648L unsigned short 无符号短整型 2 065535 unsigned int 无符号基本整型 4 04294967295U Unsigned long 无符号长整型 4 04294967295UL,1.2 .1 C语言的整型数据类型,3.变量定义 整型变量定义的一般形式为: 类型名 ; 该语句的功能是:指定具有类型名定义的多个内存空间,取名为变量列表中的标识符(变量名),数量与变量列表中变量名的个数一致。 例如:int x1,x2; (定义变量x1,x2为整型变量) long x,y; (定义变量x,y为长整型变量) unsigned c,d;(定义变量c,d为无符号整型变量) 例1-2 整型变量的定义和输出示例。,1.2.2 C语言的实型数据类型,实型量 1实型常量 在C语言源程序中能直接书写的实型数,称为实型常量。实型数在C语言中又称为浮点数,实型常数有两种表示形式: 实数形式:实数形式由数字和小数点组成。 如:888.88,0.88等。 指数形式:数据由数字0 9、小数点和表示阶码的标志“e”或“E”组成,其组成形式一般为: 整数部分.小数部分E指数部分 指数形式对应于自然科学中的科学计数法,其中用字母“e”或“E”来表示幂的底,在“e”或“E”之后用整数表示数的指数。 如123e5表示123105,123e-5表示12310-5。,1.2.2 C语言的实型数据类型,在使用实型数的指数表示形式时应该注意下面两点: 指数部分只能是整数而不能用实数表示,如123E1.5是错误的表示方法。 字母“e”或“E”之前的尾数部分不能省略,如10-8不能只写为E-8,而应该写成为1E-8(或者1e-8). 2实型变量 C源程序文件中存放实型数据的数据对象称为实型变量。 C语言中的实型变量按其表示的数据范围不同和精度不同分为单精度型和双精度型,其类型名分别为float和double。,1.2.2 C语言的实型数据类型,3.变量定义 定义实型变量的一般形式为: 类型名 ; 功能意义与整形变量定义相同 例如:float x,y; (定义变量x,y为单精度实型变量) double z; (定义变量z为双精度实型变量) 例1-3 实型变量的定义和输出示例。,类型名 意 义 字节数 精度范围 float 单精度实型 4 1.175494e-0383.402823e+038 Double 双精度实型 8 2.225074e-3081.797693e+308,1.2.3 C语言的字符型数据类型,字符量 在C语言源程序中直接书写的、需要被处理的字符就是字符常量。同样,用于存放这个字符的内存空间就是字符变量。 1.字符常量 普通字符:普通字符是由单引号括起来的一个可打印字符,如a、?、A等。 转义字符:转义字符是由反斜杠开头的字符序列,此时反斜杠字符后面的字符或字符序列不表示自己本身的含义而转变为表示另外的特定意义。,1.2.3 C语言的字符型数据类型,2字符变量 字符类型变量用以存储和表示一个字符,占用一个字节。字符型变量的定义形式如下: char ; 例如:char ch; (定义变量ch为字符型变量) 在C语言中字符型变量和整型变量是兼容的,系统中存储的是对应字符的ASCII码值,因此在C语言中字符数据和整数之间可以通用,即字符型数据可以与整型数据一起参与运算,但在使用时要注意其表示的合理范围 (0255范围内的整数),1.2.3 C语言的字符型数据类型,例如,若有C语句序列:char ch; ch=A; ch=ch+1;,则执行该语句序列后ch的内容是字符B。 例1-4 字符变量的定义和输出示例。 3字符串常量 C语言中,字符串常量是用双引号括起来的由0个字符或若干个字符构成的字符序列,例如“This is a string constant”。其中,双引号只是作为定界符使用,并不是字符串中的字符。 存储字符串常量时分配一段连续的存储单元用于依次存放字符 串中的每一个字符,然后在字符串的最后一个字符后添加转义字符0表示字符串的结尾,所以其需要的空间长度是串中字符存储所需要的长度再加一个字节,1.2.3 C语言的字符型数据类型,4符号常量 在C语言中,除了可以具体的各种类型常量外,还可以可以用符号代替常量,用以代替常量的符号称为符号常量(或称为宏常量)。符号常量在使用之前也必须预先定义。其定义的格式为: #define 标识符 被替代的常量,例如: #define PI 3.1415926 #define EOF -1 #define precision 1e-8,1.2.4 变量的初始化,变量的初始化指的是为变量第一次赋值。 在C语言中变量初始化的方法有两种,一是在程序的执行过程中通过赋值运算符实现赋值;二是在定义变量的同时为变量赋初值。C语言中,定义变量的同时对其初始化的一般形式为: =; 例如 int a, x1=100; long b, x2=100L; float c, x3=100.30; double x4=100.5; char ch=A;,第一章 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.3 基本运算符和表达式,在完成数据存入内存后,需要对这些数据做相关的处理或运算,以得到我们所需要的结果。C语言提供了多种运算符号,通过由这些运算符组合成表达式和表达式语句对数据进行处理。这些运算符是C语言规定的。各个运算符有各自的意义。 1算术运算符 2关系运算符 3逻辑运算符 4赋值运算符 5条件运算符 6位运算符 7逗号运算符 8指针运算符 9. 其它运算符,1.3 基本运算符和表达式,一些运算符只需要一个运算对象(操作数),这种运算符称为单目运算符;另外一些运算符需要两个运算对象,这些运算符称为双目运算符;还有比较特殊的运算符需要三个运算对象,称这种运算符为三目运算符。 运算符的优先级和结合性 优先级表明计算顺序,计算的先后关系 结合性表明计值方向。左结合(从左到右)和右结合(从右到左)。,1.3.1 算术运算符和算术表达式,C语言提供了加,减、剩、除和求摸五种算术运算符,对应的符号分别是:+、-、*、/ 和%。这些运算符都需要两个运算对象,称为两目运算符。而且是从左到右的运算顺序,称为左结合性。除求摸运算符外,满足数据的正、负符号规则。例如:3+2结果为5,3*-结果为 15. 当两个整数相除时,得到的结果仍然是整数。既取整运算。例如:7/5结果为1,-7/5结果为-1,3/5结果为0. 求模运算就是求余数,参加求模运算的两个对象必须都是整型对象,运算结果的符号与第一个运算对象相同。例如:7%5结果为2,-7%5结果为-2,7%(-5)=2。,1.3.1 算术运算符和算术表达式,由算术运算符和括号将运算对象连接起来的、符合C语言语法规则的算术表达形式称为C语言的算术表达式。运算对象包括常量、变量、函数、表达式等,值得注意的是单个的常量、变量或函数名本身也是表达式。 如:a*b/c-1.5+a是一个合法的表达式。而表达式 a+b-2.3%6就不是一个合法的C语言表达式。 优先级高 ( ) 函数 +、- *、/、% +、- 优先级低 例1-5 算术运算符使用示例。,1.3.2 赋值运算符和赋值表达式,C语言规定符号“=”为赋值运算符,由“=”连接的表达式称为赋值表达式。赋值表达式的书写格式为赋值运算符左边只能是一个变量,右边是一个表达式,格式如下:变量名=表达式 其意义为:将赋值运算符右边的表达式的值存入左边变量名所指定的单位内存空间中,替换掉以前的值。或简述为将表达式的值赋给变量。 例如 a=10的意义是将整型数10赋给变量a作为其值; y=x+110的意义是先计算x+110的值,然后将它赋给变量y作为其值。,1.3.2 赋值运算符和赋值表达式,当赋值运算符两边的数据对象类型不一致时,在赋值时要进行数据类型的转换。转换的基本规则是以赋值运算符左边变量的数据类型为准。例如有如下程序段: int a; float x=10.5, y=10.6; a=x+y; 执行这段程序时,首先计算出算术表达式x+y的值为:21.1,然后将该值用截取法取整得到21后再赋值给左边的整型变量a,使得a的值为整数21。,1.3.2 赋值运算符和赋值表达式,C语言程序中,能执行操作运算的只有语句。表达式的功能只能在语句里才能被实现。而单独的表达式是不合法和不被执行的。 赋值语句由赋值表达式加上C语句结尾符号分号“;”构成,其一般形式为: ; 或 变量名=表达式; 例如:a=x+y是赋值表达式,而a=x+y;则是赋值语句 注意: 1. 赋值运算符的左边必须为变量,不能为常量或表达式。 2.赋值运算符的优先级低于逻辑运算符、关系运算符、算术 运算符。其结合性为从右至左(即:右结合性)。 3.在C语言中,赋值表达式可以作为一个对象出现在另外的表达式中。 例1-6 赋值运算符和赋值表达式使用示例。,1.3.3 自反运算符,复合赋值符:凡是双目运算符都可以与赋值运算符一起组成复合赋值符,其结合性为右结合性。这些复合赋值符共有10个,它们是: +=、-=、*=、/=、%=、=、&=、=、|= 自反运算符:赋值运算符“=”的左边加上算术运算符之一而构成的运算符,称为自反运算符。它有两种运算,即赋值和所加的算术运算。是一种“复合运算符”。 如果用符号OP表示某一双目运算符,则用自反运算符的构成表达式的一般书写形式为: OP= 其意义是: = OP () 注意 :当操作数2是单个变量或常数时,括住操作数2的括号可以省略;而当操作数2是一个表达式时,必须用括号将操作数2的括起来。,1.3.3 自反运算符,例如: a+=5 相当于 a=a+5 /*省略了括住第二个操作数的括号*/ x*=y+1 相当于 x=x*(y+1) /*不能省略括住第二个操作数的括号*/ x%=y-5 相当于 x=x%(y-5) /*不能省略括住第二个操作数的括号*/ 注意:自反运算符的结合性为右结合性,自反运算符 的优先级和赋值运算符一致。 例1-7 自反运算符使用示例。 例1-8 自反运算符的结合性示例。,1.3.4 自增、自减运算符,自增运算符”+”和自减运算符”“是两个单目运算符,它们都只需要一个运算对象,其功能是将运算对象的值增加或减少一个该对象的单位值。 自增运算符和自减运算符都只能作用于整型变量或者字符型变量,而不能作用于其它数据类型的变量。例如下面的语句序列存在着错误: float a=100; a+; /*试图对实型变量a施加自增运算*/ 自增运算符和自减运算符不能作用于常量数据或者表达式。例如下面的语句序列存在着错误: int a=100; -(a+100); /*试图对表达式a+100施加自减 运算*/ 300+; /*试图对整型常数300施加自增运算*/,1.3.4 自增、自减运算符,自增、自减运算符的前缀形式 前缀形式即自增、自减运算符(+、-)出现在变量的左侧,如:+i、 -i。自增、自减运算符的前缀形式对变量实施的运算是“先增/减值后引用”。 自增、自减运算符的后缀形式 后缀形式即自增、自减运算符(+、-)出现在变量的右侧,如:i+、 i-。自增、自减运算符的后缀形式对变量实施的运算是”先引用后增/减值”。 例1-9 自增、自减运算符使用示例。,1.3.5 逗号运算符和逗号表达式,逗号运算符是C语言中提供的一种特殊运算符。逗号运算符用于将两个以上的表达式连接成一个逗号表达式。逗号表达式的一般形式为: , 逗号运算符是C语言所有运算符中级别最低的运算符,其结合性为左结合性。逗号表达式在求值时,按从左到右的顺序分别计算各表达式的值,用最后一个表达式的值和数据类型来表示整个逗号表达式的值和数据类型。 例如,逗号表达式a=1,b=a-4,c=b+2;等价于以下3个有序语句:a=1;b=a-4;c=b+2; 例1-10 逗号运算符和逗号表达式使用示例。 需要注意的是,在C程序中并不是任何地方出现的逗号都是逗号运算符,逗号在许多地方也作为分隔符用以分隔若干个对象,,1.3.6 sizeof运算符,sizeof运算符是C语言特有的一个运算符,运算符使用形式为: sizeof() 其中,数据对象既可以是某个具体的变量名,也可以是某种数据类型的常量,还可以是某种数据类型的名字,甚至于还可以使一个合法的C表达式。 sizeof运算符的功能是返回其所测试的数据对象所占存储单元的字节数。 例1-11 sizeof运算符使用示例。 例1-12 sizeof运算符使用示例。,1.3.7 运算符优先级别和结合性规则,将表达式中的各种运算符运算的先后顺序规定为15个由低到高的优先级别,同时还为运算符规定了结合性。 在表达式求值时,若运算对象两边的运算符优先级不同,按优先级别从高到低运算。若运算对象两边的运算符优先级相同,则按其结合规则处理, 对于表达式而言同级运算并不是都遵从从左到右的原则。C运算符有两种结合性,即左结合性和右结合性。 运算符的优先级和结合性只有在表达式里才有实际意义,表明C语言表达式的计值规则。 例1-13 右结合性运算符使用示例。,第一章 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.4 不同类型数据混合运算及数据转换,不同数据类型隐式转换 隐式转换是系统的自动转换,数据类型转换的原则是向表达数据能力更强的方向转换。即当在表达式运算过程中出现了不同数据类型的数据进行混合运算时,系统先自动按图1.4所示的规则将参加运算的数据对象转换成同一类型的数据再进行运算。 例1-14 表达式混合运算中的 自动数据类型转换示例。,1.4 不同类型数据混合运算及数据转换,不同数据类型显式转换 在C程序设计中,如果有需要可以对数据进行显式类型转换。显式转换又称为强制类型转换。显式类型转换的一般形式是: (类型名)() 显式类型转换的功能是:在本次运算中,强迫表达式的值转换成指定的数据类型参加运算。注意,若被转换的对象是表达式,则需用括号将整个被转换对象括住;若被转换的对象是单个变量,则括号可以省略。例如,有如下语句序列: float x=2.5; int a=10, m, n; m=a+(int)x; n=a+(int)(x+1.8); 特别注意:类型转换只对标注强制转换这一次起作用,在程序的其余地方,变量还保留其原有的值。 例1-15 表达式混合运算中的强制数据类型转换示例。,第一章 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.5 C程序设计初步,1.5.1 算法基本概念及算法描述 算法是符合计算机特征的、处理实际问题的计算机操作步骤的描述。 1 算法的基本概念和算法的特征 (1)算法必须准确反映了应用问题的数学模型。 (2)算法的每一步最后都能用计算机高级语言描述。 (3)算法执行的步骤逻辑(即程序执行逻辑)应该与实际问题的处理逻辑一致。 例如,在计算机系统中实现任意两个数由大到小排序输出的算法设计如下: 第1步 算法开始 第2步 输入两数,取名 a和b 第3步 判断:如果ab,则先输出a然后再输出 b:;否则先输出b然后输出a; 第4步 算法结束,1.5.1 算法基本概念及算法描述,(1)数据的组织 根据所建立数学模型的需要,指定用于存放输入数据、中间处理结果和最终结果的内存空间的类型和个数。特别是在处理数据量大,数据关系复杂的时候,这点尤为重要。计算机科学技术范畴中的数据结构学科就专注于这类问题的研究。 (2)问题的数值计算方法 计算机高级程序设计语言提供了一些算术运算方法和常用函数计算功能。但是数学模型中有些数学公式,如定积分, 不能直接用计算机程序设计语言描述。在处理这类问题时,需要将这些问题转化为适合计算机语言描述的的数值计算方法。数值计算方法也是计算机科学技术的一个重要分支。,1.5.1 算法基本概念及算法描述,算法必须同时具有以下4个特征: (1)有穷性。一个算法必须能够在算法所涉及的每一种情况下,都能在执行有穷步操作之后结束。 (2)确定性。算法的每一步操作,其顺序和内容都必须精确地惟一确定,不能有任何的歧义性。 (3)可执行性。算法所描述的每一步操作都必须是可行的,即必须是可以付诸实施并能够具体实现的基本操作。 (4)输入、输出数据。必须有1个以上的输入和输出,1.5.1 算法基本概念及算法描述,2算法的描述方法,(1)顺序结构 (2)选择(分支)结构 (3)循环结构,2算法的描述方法,1.5.1 算法基本概念及算法描述,算法描述示例1:已知鸡兔同笼,总头数为H,总脚数为F,求鸡兔各有多少只? 问题分析 根据已知的条件,设鸡为X只,兔为Y只,可以列出如下关方程组: 解该方程组,有:,1.5.2 C语句概述,语句按其功能可以分为两大类:用于描述计算机操作运算的操作运算表达式语句和控制操作的执行顺序的程序流程控制语句。 表达式语句 赋值语句 赋值语句由赋值表达式接一个分号组成。 例如 y=x+1; 函数调用语句 函数调用语句由函数调用表达式后接一个分号组成。 例如 printf(“Hello,World!n”); 空语句 空语句只由一个分号组成,它不进行任何操作(或者称之为进行空操作)。,1.5.2 C语句概述,流程控制语句 条件语句 ifelse 循环语句 for语句、while语句、dowhile语句 提前结束本次循环语句 continue 循环或多分支终止语句 break 无条件转移语句 goto 返回语句 return 复合表达式语句 C语言允许把一组语句括在花括号之中构成一个语句块,称之为复合语句。例如 char ch; ch=getchar(); putchar(ch); ,1.5.3 C程序的输出最基本的输出函数,C语言中没有提供输入和输出语句,其所有的输入输出均通过调用标准库函数来实现。C语言中的I/O类标准库函数的声明包含在头文件stdio.h中,所以在C程序源文件中开始位置应该加上如下包含编译预处理命令: #include “stdio.h“或#include 1格式化输出函数printf C语言中的格式化标准输出函数为printf函数,函数调用的一般格式为: printf(“格式控制字符串”, 输出表列);,1.5.3 C程序的输出最基本的输出函数,函数的功能是:按“格式控制字符串”的要求向标准系统输出设备(显示器)输出一个或多个任意类型的数据。 其中的输出表列由一到若干个输出表达式组成,两个输出表达式项之间用逗号分隔。格式控制字符串则由普通字符和格式控制项组成。 格式控制字符串中的普通字符 在格式控制字符串中,普通字符在输出时照原样输出,所谓原样输出指的是在给定的位置输出给定的字符。例如对于输出函数调用语句:printf(“Result=%fn“,x+c+y);,格式控制字符串“Result=%fn“中的字符序列“Result=”和“n”都是普通字符,则在输出时结果由: 三个部分构成。,1.5.3 C程序的输出最基本的输出函数,格式控制字符串中的格式控制项 在格式化输出函数的格式控制字符串中,格式控制项与输出表列中的输出表项一一对应,用于规定或说明输出表项的输出格式。在格式控制项中,百分号(%)是格式控制项的引导符号,一个格式控制项以%开始到格式控制字符结束,中间含有若干个可选项。格式控制项的一般形式为: % - 0 * m.n l/h ,1.5.3 C程序的输出最基本的输出函数,1.5.3 C程序的输出最基本的输出函数,长度修正可选项(l/h) 长度修正项(l/h)只能选取字符l和字符h二者之一,用于指定对应的输出数据按长整型或双精度型输出还是按短型数据输出。当选用字母l(long)时,按长整型或双精度型输出;当选用字母h(short)时,按短型数据输出。 域宽可选项(m或m.n) 域宽可选项用于指定对应输出项所占的输出宽度。该可选项取单一整数时,说明输出数据的宽度. 例如%5d说明输出域宽为5,%5.2f说明输出域宽位5位,整数和小数部分各占2位。 例如printf(“%5dn”,88);的结果为: 88,即在输出的实际数据之前有3个空格字符。,1.5.3 C程序的输出最基本的输出函数,当输出数据是字符串并且域宽可选项取m.n格式时,m指定了输出数据占用的宽度,但此时的n却指定的是输出字符串数据中的前n个字符。例如: printf(“%10.5sn“,“abcdefg“); /*输出字符序列:abcde,前面有5个空格字符*/ printf(“%6.5sn“,“abcdefg“); /*输出字符序列:abcde,前面有1个空格字符*/ printf(“%.5sn“,“abcdefg“); /*输出字符序列:abcde,前面没有空格字符*/,1.5.3 C程序的输出最基本的输出函数,空位填零可选项(0) 空位填零可选项规定,当指定的输出宽度大于数据输出所需要的的实际宽度时,输出数据左边的空位不是用空格而是用数字0来填充。例如语句printf(“%05dn”,88);的输出结果为:00088。 星号可选项(*) 星号(*)可选项在控制项中的作用是指定由对应于该控制项的变量值来决定输出表列中其后面一个输出项的输出宽度。 例1-16 输出函数控制项中“*”可选项的使用示例。,1.5.3 C程序的输出最基本的输出函数,减号可选项(-) 格式控制项中的减号(-)可选项用于指定输出数据的对齐方向。当选用减号时,输出数据左对齐;当不用减号时,输出数据右对齐。 格式化输出函数printf的返回值 printf函数 输出的是变量值,但它本身还有一个函数值,既返回值。 printf函数是一个返回整型值的函数,该函数执行后得到的整数值表明了printf函数在执行时输出了多少个有效字符,下面的例程序说明了这个问题。 例1-17 格式化输出函数的返回值说明示例。,1.5.3 C程序的输出最基本的输出函数,2字符输出函数putchar 字符输出标准库函数putchar的调用形式: putchar(输出对象); 其中: 输出对象可以是字符常量(包括转义字符)、字符变以及整型常量、整型变量等可以转换为字符数据的对象。 函数的功能是将用输出对象表示的单个字符输出到标准输出设备(屏幕)上。 例如: putchar(A); /* 输出大写字母A */ putchar(n); /*换行,即执行控制字符所具有的控制功能*/ 例1-18 字符数据输出示例。,1.5.4 C程序的输入-最基本的输入函数,1格式化输入函数scanf C语言中的格式化标准输入函数为scanf,函数调用的一般格式为: scanf(“格式控制字符串”,地址表列); 函数的功能是:按“格式控制字符串”的格式要求,从标准系统输入设备(键盘)上输入一个或多个指定类型的数据到由地址列表指定始地址的内存单元中。 地址列表中的每一项为一个地址量,其形式是在一般变量之前加取地址运算符&。例如:设有变量x,则&x表示变量x的地址。,1.5.4 C程序的输入-最基本的输入函数,格式控制字符串中的普通字符 在格式控制字符串中,如果有普通字符存在,则在执行输入时需要照原样输入,即在指定的位置输入指定的字符。例如: scanf(“a=%d”, /*输入数据时,在输入a与b的两个值之间必须输入逗号字符*/ 格式控制字符串中的格式控制项 在格式化输入函数中,格式控制项与地址列表中的地址表项一一对应,用以指定对应项输入数据的输入格式。 输入数据的格式控制项一般形式为: % * m l/h ,1.5.4 C程序的输入-最基本的输入函数, 格式控制字符 格式控制字符用于规定对应数据项的输入格式,1.5.4 C程序的输入-最基本的输入函数,长度修正可选项(l/h) 长度修正项只能选取字符l和字符h两者之一,用于指定输入数据是按长整型或双精度型输入还是按短型数据输入。当选用字母l(long)时,按长整型或双精度型输入;当选用字母h(short)时,按短型数据输入。 域宽可选项(m) 域宽可选项(m)用于指定输入函数在输入流上应该截取多少个字符的宽度来对应输入数据项,注意在格式化输入函数中该可选项只能取单一整数。例如有下面语句序列: int a,b; scanf(“%3d%2d”, 若输入流(即从键盘上敲入的字符流)为:12345678,则系统会截取123作为变量a的值、截取45为变量b的值,如此后还有输入函数调用语句,则继续截取剩余的字符流(678),,1.5.4 C程序的输入-最基本的输入函数,星号可选项(*) 星号(*)可选项的作用是表示“虚读”,即系统从输入流上按指定格式读入一个数据但并不赋给任何变量。例如有下面语句序列: int a,b; scanf(“%3d%*2d%3d”, 若输入流(即从键盘上敲入的字符流)为:12345678,则系统会截取123作为变量a的值、截取45并将该数据放弃,然后截取678为变量b的值。,1.5.4 C程序的输入-最基本的输入函数,格式化输入函数中数据流的分隔问题 在格式化输入函数的使用中,严格按照格式控制字符规定的格式输入数据。数字间隔可以用空格或回车。 例如int a,b; scanf(“%d%d”, 若要求执行完格式化输入函数调用语句后变量a的值为10、变量b的值为20,则可以有两种方式输入数据: 方法1使用空格字符分隔两个输入数据 输入流为:10 20/*中间用于分隔的空格字符可以1至若干个*/ 输入流中的表示按键盘上的Enter键(下同) 方法2使用换行字符分隔两个数据数据 输入流为: 10 20,1.5.4 C程序的输入-最基本的输入函数,如果在格式控制字符串中的两个格式控制项之间插入了一个或若干个普通字符,在前面已经提到这些字符是格式控制字符串中的普通字符,严格按原样照输入。 例如有语句序列: int a,b; scanf(“%d,%d”,,输入流只能是: 10#20,1.5.4 C程序的输入-最基本的输入函数,关于输入流结束时的换行符问题 例1-19关于输入流结束换行符的引例。 scanf(“%d“, /*要求输入数据100*/,1.5.4 C程序的输入-最基本的输入函数,格式化输入函数scanf的返回值问题 格式化输入标准库函数scanf的功能是从键盘上接受数据,但本身是一个返回整型数的函数。其函数值为一个整型数据,该整型数据表明了scanf函数在输入流中正确取得数据的个数,可以通过这个返回值判断是否正确接收了全部的输入数据。 例1-20 格式化输入函数的返回值说明示例。 程序运行时的输入流若为:123,45,6789,则输出结果为: 正确接收的数据个输:3 a=123,b=45,c=6789,1.5.4 C程序的输入-最基本的输入函数,不同数据类型数据的混合输入问题 在数据的输入中,主要分为数值型数据和字符型数据,这些数据在混合输入的时候,由于换行符的原因,在某些输入流形式程序运行得不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版八年级道德与法治上册教学设计:1.1 我与社会
- 公正无私(教学设计)-中华传统文化五年级上册
- 一年级数学上册 八 10以内的加法和减法练习八(一)教学设计 苏教版
- 建筑材料报审表(完整版)
- 九年级化学下册 第11单元 盐 化肥 实验活动8 粗盐中难溶性杂质的去除教学设计 (新版)新人教版
- 2024四川九洲投资控股集团有限公司招聘数字化转型(法务)岗等岗位8人笔试参考题库附带答案详解
- 三年级数学下册 第九单元 探索乐园9.2 简单的逻辑推理教学设计 冀教版
- 电气二次回路培训
- 畜牧医学在线培训课件
- 大学生学生干部培训心得体会
- 海南省天一大联考2024-2025学年高三学业水平诊断(四)语文试题及答案
- 社会认知力测试题及答案
- 肉鸡供需合同协议网页
- 旅游合同签署委托协议
- “条令条例学习月”主题授课课件
- 海洋生态环境监测技术-全面剖析
- 2024年中国资源循环集团有限公司招聘考试真题
- 防性侵教育男生篇课件
- 隧道全断面开挖施工方案
- 新教科版小学1-6年级科学需做实验目录
- 球墨铸铁管安装施工方案(完整版)
评论
0/150
提交评论