




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 数据描述与基本操作数据描述与基本操作3.1 基本数据类型基本数据类型 3.2 3.2 常用的运算符和表达式常用的运算符和表达式3.3 3.3 表达式及赋值语句表达式及赋值语句3.4 3.4 基本输入输出操作的实现基本输入输出操作的实现3.5 3.5 顺序结构程序设计实例顺序结构程序设计实例概 述 使用高级语言编写程序,必须在程序中做好两件事:一是描述数据,二是描述数据的加工方法。前者是通过数据定义语句实现的,后者是通过若干执行语句,包括用各种运算符构成的表达式来实现的。本单元主要介绍C语言的基本数据类型和存储属性的说明方法,为后续单元的学习奠定一个基础。关于复杂的数据类型(如数组
2、、指针、结构型、共用型等)将在以后单元中介绍。3.1 C语言的数据类型 C语言具有十分丰富的数据类型。所谓数据类型是指数据的内在表现形式。具体的数据类型有以下若干种: 1.基本数据类型:整型、实型和字符型。 2.构造类型: 由若干个相关的基本数据类型数据组合在一起形 成的一种复杂的数据类型,如数组型、结构型和共用型。 3.指针型:一种简单的数据类型,它是用来表示内存地址的。 指针类型的数据可以表示基本类型数据的地址,它可以表 示结构类型数据的首地址和其中某个具体数据的地址。 4.枚举型:某数据在程序运行中,只取固定的几个值。我们可 以把这几个值列出来,以后这个数据只能取这几个值中的 某一个。
3、5. 空类型:没有任何具体值的数据类型。 C语言中的数据类型如下图所示: 数据类型基本类型整型字符型实型(浮点型)单精度型 双精度型 构造类型 数组类型 结构体类型 共用体类型 指针类型 枚举型 空类型 2022-3-236常量和变量常量和变量2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。常量常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。2022-3-237变量变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。2.变量的两个要素(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标
4、识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。2022-3-238变量有以下几个特征:变量名、变量值、变量的数据类型、变量的地址、变量的存储类别、变量的作用域及变量的生存期等。变量必须先定义后使用。定义变量格式如下:数据类型关键字 ;如int x,y,z;变量的初始化:变量赋初值的过程就是变量初始化过程。 整型数据整型数据整型常量:整型常量就是整常数,包括正整数和负整数及 0。其书写形式如下:(1)十进制整数。如十进制整数。如123,456,0。(2)八进制整数。以八进制整数。以0开头的是八进制数。如开头的是八进制数。如0123表示八进制
5、表示八进制数数123,即,即(123)8。(3)十六进制整数。以十六进制整数。以0 x开头的数是十六进制数。如开头的数是十六进制数。如0 x123,代表十六进制数,代表十六进制数,(123)16116216316256323291。 整型常量在一般微型机中占用2个字节,不管是 十进制、八进制或十六进制整数,它们的数值范 围都是十进制的3276832767。注意:注意: C语言还提供一种“长整型常量”。它们的数值范围 是十进制的21474836482147483647,在计算 机中占用四个字节,它们的书写方法是在数据的末 尾加一个大写字母“L”或小写字母“l”,如OL,038L,ox15L。20
6、22-3-2311 整型变量整型变量1.分类 根据占用内存字节数的不同,整型变量又分为类:(1)基本整型(类型关键字为int)。(2)短整型(类型关键字为short int)。(3)长整型(类型关键字为long int)。(4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。2.占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在16位操作系统中,一般用字节表示一个int型变量,且long型(字节)int型(字节)short型(字节)。
7、3.3.变量的作用范围变量的作用范围 变量可以在程序内的三个地方定义:在函数的内部,在函数的参数定义中或者在所有的函数外部。这样定义的变量分别称为局部变量,形式参数和全局变量。在不同地方定义的变量,其作用范围是不一样的。局部变量和形式参数只能在函数内使用,全局变量的作用范围是整个程序。在同一层次的某一类型的变量,不能与其它类型的变量或者函数同名。 2022-3-2313 实型数据实型数据 实型常量实型常量 .表示形式实型常量即实数,在语言中又称浮点数,其值有两种表达形式: (1)一般形式的实数,它是由整数、小数点、小数三部分组 成。 其中数据部分或小数部分可以省略。数的正负用前 面的“”(可以
8、省略)号或“”号来区分。例如,12.345, 1.2345,47.0,.234,47等都是实型常量。(2)指数形式的实数,它是由尾数、小写字母e或大写字母E、 指数三部分组成,尾数部分可以是十进制整型常量或一般 形式的实数,指数部分是十进制的短整型常量(可以带E负 号)例如, 12.3e2,1.2e-3,47.0e2,.234e-3等都是实 型常量。. .关于类型关于类型 实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。注意: 实型常量在一般的微机中是占用4个字节的,不管是一般形式还是指数形式,它们的数值范围都是10 10 有效数字
9、7位。例如,1.23456789和1.234567是相同的,因为实型常量的有效数字是7位,所以1.23456789中的后两位是无效的。38382022-3-2316实型变量实型变量语言的实型变量,分为两种: (1)单精度型。类型关键字为float,一般占字节 (位)、提供位有效数字。 (2)双精度型。类型关键字为double,一般占个字节、提供1516位有效数字。字符型数据字符型数据A、把单个字符用一对单引号括起来表示字符常量。 如a,d,w,?等都是字符常量。B、用该字符的ASCII码值表示字符常量。C、转义字符:反斜杠开头后跟规定的单个字符或数字,并用一对单引号括起来表示字符常量。如下:一
10、一字符常量字符常量1.字符常量是ASCII码字符集里的一个字符,包括字母(大、小写有区别)、数字和标点符号以及特殊字符等,均为半角字符。2.字符常量表示形式: 字符形式 含 义 ASC n换行,将当前位置移到下一行开头 10 t水平制表(跳到下一个tab位置) 9 b退格,将当前位置移到前一列 8 r回车,将当前位置移到本行开头 13 f换页, 将当前位置移到下页开头 12 反斜杠字符“” 92 单引号(撇号)字符 39 “双引号字符 34 ddd1到3位8进制数所代表的字符 xhh1到2位16进制数所代表的字符 2022-3-2319例1:字符与整数的转化#include stdio.hvo
11、id main() int i; char n; n=97; i=b; printf(n=%cn,n); printf(i=%dn,i); printf(i=%cn,i);程序的输出为: n=a i=98 i=b2022-3-2320例2 字符参与整数运算 #include stdio.hvoid main() char n; n=a; n=n-65; printf(n=%dn,n);程序的输出结果为: n=322022-3-2321例例3 3 字母的大小写转换#include stdio.hvoid main() char n,i; n=a; i=B; n=n-32; i=i+32; pri
12、ntf(n=%cn,n); printf(i=%cn,i); 程序的输出为 n=A i=b 二 字符串常量 字符串就是用两个双引号(“)号后括住的若干个字符, 例如,“abc”,“123456”,“aBbB”都是字符串。 转义符可以出现在字符串中,例如,“ABC”, “101102x43x44”等都是字符串,分别表示“ABCD”、 “ABCD”两个字符串。 一个字符串中所有的字符的个数称为该字符串的长度, 其中每个转义字符只当做一个字符。例如,“ABC”的长 度为5。注意注意!a与“a”的区别。 C语言规定:每个字符串在内存中占用的字符数等于字符 串的长度1。其中最后一个字符存放的字符称为“空
13、字符” 其值为0,书写时常用转义字符“0”来表示。在C语言中称 为字符串结束标志。关于变量的补充内容 1. 变量: 变量是指在程序运行过程中其值可以发生变化的量。 2. 变量的取名规则为:以字母、下划线“_”开头,后跟若干 个字母、下划线、数字。一般约定,用户使用的变量名采用 以字母开头,C语言内部使用的变量名以下划线开头。例如, abc,a_1,age_1等都是合法的变量名,而3a,age则是非 法的变量名。 当程序运行时,每个变量都要占用若干个连续的字节,所占用的字节数由变量的数据类型确定。其中第1个字节的地址称为变量的地址。C语言规定,程序中变量的地址是用 “&变量名”来表示的。
14、 3.变量的数据类型及其定义 (1) 变量可以是任何一种数据类型,具有某种数据类型的 变量就叫做该类型变量。(2) 每个变量在使用前必须定义,说明其数据类型。(3) 定义变量数据类型的语句格式如下:数据类型符数据类型符变量变量1,变量,变量2.; 数据类型数据类型 数据类型符数据类型符占用字节数占用字节数 数据范围数据范围 整型整型 int 2(或或4)同短整型同短整型(或长整型或长整型) 短整型短整型 short 23276832767 长整型长整型 long 4-21474836482147483647无符号整型无符号整型unsigned int 2(或或4)同无符号短整型同无符号短整型(
15、或长整型或长整型)无符号短整型无符号短整型unsigned short 2 065535无符号长整型无符号长整型unsigned long 4 04294967295单精度实型单精度实型 float 4 10 10双精度实型双精度实型 double 8 10 10 字符型字符型 char 1 128127基本数据类型符及含义如下表所示:基本数据类型符及含义如下表所示:38383083084.变量的存储类型及定义 我们把变量存放在何处称为变量的存储类型。用户可以通我们把变量存放在何处称为变量的存储类型。用户可以通过说明变量的存储类型来选择变量的具体存储地点。过说明变量的存储类型来选择变量的具体存
16、储地点。定义变量的存储类型的语句格式如下: 存储类型符存储类型符数据类型符数据类型符变量变量1,变量,变量2; 存储类型 存储类型符 存储地点 自动型 auto 内存堆栈区 寄存器型 register Cpu的通用寄存器 静态型 static 内存数据区 外部参照型 extern 存储类型符及其含义如下表所示: 存储类型符表 (1)自动型 自动型又称堆栈型,自动型变量是分配在内存的堆栈区, 堆栈区内存在程序运行中是重复使用的。当某个函数中定义 了自动型变量,C语言就在堆栈区给该变量分配字节用于存 放变量的值;当退出该函数时,C语言要求释放该变量,即 从堆栈区中收回分配给该变量的字节,以便重新分
17、配给其它 自动型变量。 当定义某个或某些变量时,省略了存储类型符,系统将 默认为自动型变量 。 寄存器型变量是分配在CPU的通用寄存器中。C程 序中允许定义的寄存器型变量一般以2个左右为宜。若 定义的数量超过所提供的寄存器数目,编译系统自动 将超出的变量设为自动型变量。 寄存器型变量只能定义为int,char和指针型变量。 (2)寄存器型 (3)静态型 静态型变量是分配在内存的数据区中,它们在程序开始运行时就分配了固定的字节,在程序运行过程中不释放,只有程序运行结束后,才释放所占用的内存。 (4)外部参照型 外部参照型变量是专用于多个编辑单位之间传递数据用的,当编译单位甲中要使用在编译单位乙中
18、定义的变量,则编译单位甲就要说明该变量是外部参照型,以便C语言编译系统在编译单位甲之外的其它编译单位中寻找该变量的定义。将某个变量说明为其它编译单位定义的变量的方法就是将它说明为“外部参照型”,被说明成外部参照型的变量的存储类型和数据类型都由定义该变量的那个编译单位来说明。 5.变量的初始化变量的初始化(1)在定义变量的同时给变量赋予初始值就称为变量的初始化。(2)变量赋初值的语句格式如下: 存储类型符 数据类型符 变量名1初值1,变量名2初值2,(3)变量的初始化和变量的存储类型有很大关系,进行初始化 时要注意以下几点: 外部参照型变量不允许初始化,其它存储类型的变量可以 进行初始化。 自动
19、型变量和寄存器变量如果进行初始化,则每次进入所 定义的函数或复合语句都随着重新定义而重新初始化,自 动型变量和寄存器型变量如果不进行初始化,变量值将不 确定。 静态型变量如果进行初始化,只有第一次执行定义 语句时随着分配内存赋予初值,当退出所定义的函 数或复合语句时,将保留其当时值。再次进入所定 义的函数或复合语句时,将不重新定义,也不进行 初始化。此时,该变量值是上次离开时的值。静态 型变量如果不进行初始化,C语言编译系统将自动 为其赋予“零值”,对数值型变量赋0,对字符型变 量赋空字符。6.变量的生存期和作用域 (1) 内部变量:在函数(或某个复合语句)内定义的变量。 (2) 外部变量:在
20、函数外定义的变量。 (3) 变量生存期:变量从开始分配内存单元(或寄存器) 到分配的内存单元(或寄存器)被收回的期间称为 “变量的生存期”。 (4) 全局变量:生存期覆盖了定义点到整个程序结束的变量。 (5) 局部变量:生存期只覆盖某个函数(或某个复合语句) 的变量。 (6) 作用域:在变量的生存期中,我们把变量可以使用的程 序区域称为变量的作用域。 变量的生存期和作用域之间的关系如下表所示: 变量允许的存储类型生成期作用域外部变量省略(无存储类型)静态型(static)全局变量定义点到程序结束内部变量省略自动型(auto)寄存器型(register)静态型(static)局部变量全局变量定义
21、该变量的函数或复合语句内部注意!注意! 外部变量是不能重名的。 被说明为auto或register存储型的内部变量在不同 的函数或复合语句中是可以重名的。 被说明为static存储型的内部变量在不同的函数或 复合语句中是可以重名的。3.2运算符运算符 1概述概述2算术运算符算术运算符3赋值运算符赋值运算符4逗号运算符逗号运算符5条件运算符条件运算符6长度运算符长度运算符7位运算符位运算符8关系运算符关系运算符-下章介绍下章介绍9逻辑运算符逻辑运算符下章介绍下章介绍一一.概述概述用来表示各种运算的符号称为运算符。 运算符必须有运算对象,运算对象是一个的,则称为 单目运算;运算对象是两个的,则称为
22、双目运算双目运算;运算对 象是三个的,则称为三目运算三目运算。例如,数值运算中经常用到的、*、/等。 每个运算符都代表对运算对象的某种运算,都有自己 特定的运算规则。每个运算符运算的对象都规定了数据类型, 同时运算结果也有确定的数据类型。 当表达式中出现多个运算符,计算表达式值时,就有谁 先算,谁后算的问题,我们把这个问题称为运算符的优先级。 计算表达式值时,优先级高的运算要先进行运算。 同级别的运算符有左结合和右结合之分。C的运算符十分丰富,有13类,30多种,其分类如下: C语言运算符基本运算符算术运算符基本算术运算符(、*、/、)增1减1运算符 (、)关系运算符(、=、!)逻辑运算符(!
23、、&、!)赋值运算符基本赋值运算符()算术自反赋值运算符(、*、/、)逗号运算符(,)条件运算符(?:)数据长度运算符(sige of)位运算符位逻辑运算符(、&、|、)位位移运算符(、,.)指针运算符(&,*,)注意!少数运算符号有双重意义,主要有以下几种: (1)“”号,在算术运算中即表示单目的取正运算, 又可表示双目的加法运算。(2)“”号,在算术运算中即表示单目的取负运算, 又可表示双目的减法运算(3)“*”号,在算术运算中即表示双目的乘法运算, 在指针运算中表示指针变量指向的变量。(4)“&”号,在位逻辑运算中表示双目“与”运算, 在指针运算中表示取地
24、址的运算。二二.算术运算符算术运算符1.基本算术运算符 基本算术运算符的运算对象、运算规则与结果、结合性如表所示 :对象数 运算符 名称运算对象运算结果结合性单 目双 目正负整 型 或实 型整 型 或实 型自右向左自左向右 * /加减乘除整除取余整型整数算术运算符的优先级规定如下: 单目基本算术运算符 优先于 双目基本算术运算符 *、/、 优先于 、 同级单目基本算术运算符的结合性是自右向左 同级双目基本算术运算符的结合性是自左向右 例1.基本算术运算符的使用 设变量定义如下: int n=10, m=3; float f=5.0,g=10.0; double d=5.0,e=10.0;则 n
25、的结果是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 2 增1减1运算符(1)1减1运算符的运算对象、运算规则与结果、 结合性如下表所示: 对象数单目名称运算符 运算规则 运算对象运算结果 结合性增1(前缀)先加1后使用增1(后缀)减1(前缀)减1(后缀)先使用后加1先减1后使用先使用后减1整型、字符型、指针型变量或数组元素同运算对象的类型自右向左(2)
26、减1运算符的优先级: 增1减1运算符 优先于 双目基本算术运算符 增1减1运算符和单目运算符、同级别,结合性 是自右向左 注意:注意: 若出现难以区分的若干个或组成运算符串时,若出现难以区分的若干个或组成运算符串时,C语言规定,自左向右取尽可能多的符号组成运算符。语言规定,自左向右取尽可能多的符号组成运算符。例1:ab 应理解为(a)b ab应理解为 (a)b 例2:增1减1运算符的使用 设变量定义如下:charc1b,c2B; (c1,c2可看成整型,其值分别为98,66) 则: c1 的值是99,运算后c1的值是c c1 的值是98,运算后c1的值是a c1c2的值是164,运算后c1的值
27、是c,c2的值是B c1c2的值是32,运算后c1的值是a,c2的值是B 三三.赋值运算符赋值运算符1.赋值运算符 赋值运算符是双目运算符,赋值运算符的左边必须是变量,右边是表达式。 (1) 赋值运算符的运算对象及有关规则如下表: 对象数 名称 运算符 运算规则 运算结果 结合性 双目赋值 将表达式的值赋予变量 表达式的 类型自右向左(2) 赋值运算符的优先级 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 赋值运算符 赋值运算符的结合性是自右向左 (3) 赋值运算符的使用 设变量定义如下: char c1a,c2; int n165,n2,n3,n4,n5,n6; float
28、 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) 运算规则 对象数 名称 运算符运算规则运算对象 运算结果结合性双目加赋值减赋值乘赋值除赋值模赋值*/ =%=a+=b
29、相当于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)算术自反赋值运算符的使用 设变量定义如下 intn1=10,n2=10,m1=10,m2=10,m3=10,m4=10;则: n1n2,n1的值为20,n2的值不变 n1n2,n1的值为0,n2的值不变 n1*n2,n1的值为100,n2的值不变 n1/n2
30、, n1的值为1,n2de值不变 m1m2m3*m4/2 运算后, m1,m2,m3,m4的值依次是30,40,50,5。 运算顺序相当于m1(m2(m3*(m4/2) 四四.逗号运算符逗号运算符逗号运算符是双目运算符,其运算对象是表达式。逗号运算符是双目运算符,其运算对象是表达式。 1.逗号运算符 对象数 名称 运算符 运算规则运算对象 结合性 双目逗号 ,依次计算前、后表达式 表达式自左向右注意:由逗号运算符组成的式子也是表达式,其值等于最右边 的表达式的值 2.逗号运算符的优先级 任何运算符 优先于 逗号运算符 逗号运算符的结合性是自右向左 3. 例题。设整型变量a,b为2, 则: ba
31、3,cb4 运算结果:a不变,b为5,c为9,表达式的值为9 da,ed,fe 运算结果:a为1,d为1,e为1,f为1,表达式的值为1 五五.条件运算符条件运算符1.条件运算符 对象数 名称 运算符 运算规则运算对象 运算结果 结合性 三目条件 ?:对e1?e2:e3e1为真,获得e2e1为假,获得e3 表达式 e2(e3)的类型 自右 向左 2.条件运算符的优先级 其它运算符 优先于 条件运算符 优先于 赋值、算术自反赋值运算符 条件运算符的结合性是自右向左 3.例子 (1) 设整型变量a,b,c,d均为2 则ab?(c1):(d0); 结果a,b,d不变,c为1,表达式的值为1 (2)
32、a13?(ba2):(ca3); 结果a,c不变,b为4,表达式值为4 (3) ab?(c0):(ab?(c1):(c1)); 结果a,b不变,c为0,表达式的值为0 注:运算顺序相当于(ab)?(c0):(ab)?(c1):(c=1) 1.长度运算符 六六.长度运算符长度运算符对象数 名称 运算符 运算规则运算对象 运算结果 结合性 单目长度sizeof测试数据类型所占用的字节数类型说明符或变量 整型 无2.长度运算符优先级 和单目算术运算符、单目逻辑运算符、增1减1运算符同级别 同级运算符的结合性是自右向左的 3.例子 设变量定义如下: int n; short s; unsigned l
33、ong 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 注意注意:上述结果是:上述结果是TurboC2.0在微机上运行的结果。在微机上运行的结果。 2022-3-2360七七 位运算位运算C语言中提供的位运算符: 、 、 & 、 、1.1.按位取反运算符按位取反运算符形式: A功能:把A的各位都取反,(即0变1,1变0)例如:i
34、nt A=179A0 0 000 0 0 010110011A1 1 111 1 1 1010011002022-3-23612.按位与运算符按位与运算符&形式:A&B功能:对A的各位与B的对应位进行比较,如果两者都为1, A&B对应位上的值为1,否则为0。例如:int A=179(二进制0000000010110011) int B=169(二进制0000000010101001)A0 0 0 0 00 0 0 10 11 0 0 1 1B0 0 0 0 00 0 0 10 10 1 0 0 1A&B 0 0 0 0 00 0 0 10 10 0 0 0 12
35、022-3-23623.按位或运算符按位或运算符|形式:A|B功能:对A的各位与B的对应位进行比较,如果两者中有一个 为1,A|B对应位上的值为1,否则为0。例如:int A=179(二进制0000000010110011) int B=169(二进制0000000010101001)A00 00 0 00 0 1 0 11 00 1 1B00 00 0 00 0 1 0 10 10 0 1A|B 00 00 0 00 0 1 0 11 10 1 12022-3-23634.按位异或运算符按位异或运算符形式:AB功能:对A的各位与B的对应位进行比较,如果两者不同, AB对应位上的值为1,否则为
36、0。例如:int A=179(二进制0000000010110011) int B=169(二进制0000000010101001)A0 0 0 000 0 0 1 0 1 10011B0 0 0 000 0 0 1 0 101001AB 0 0 0 000 0 0 0 0 0110102022-3-23645.左移运算符左移运算符形式:An(其中其中n为一个大于为一个大于0的整型表达式)的整型表达式)功能:把A的值向左移动n位,右边空出的n位用0填补。 当左移时移走的高位中全都是0时,相当于对A作n 次乘 以2的运算。例如:int A=27(二进制0000000000011011)A0 0
37、0 0 0 0 0 0 0 0011011A形式:Ann(其中其中n为一个大于为一个大于0的整型表达式)的整型表达式)功能:把A的值向右移动n位,左边空出的n位用0填补。 相当于对A作n 次除以2的运算。例如:int A=179(二进制0000000010110011)A0 0 0 0 0 0 0 0 1 0110011A3 0 0 0 0 0 0 0 0 0 00101103.3 表达式 用运算符将运算对象连接形成的式子就是表达式。 1.表达式的定义2.C2.C语言的表达式非常丰富,也有人称语言的表达式非常丰富,也有人称C C语言语言为表达式语言。为表达式语言。C语言使用的基本表达式有:语言
38、使用的基本表达式有:赋值表达式,如:赋值表达式,如:a=3算数表达式,如:算数表达式,如:3+4*2关系表达式,如:关系表达式,如:32逻辑表达式,如:逻辑表达式,如:35&a=b条件表达式,如:条件表达式,如:ab?a:b逗号表达式,如:逗号表达式,如:a=3,b=4,c=53.4 赋值语句赋值语句 1.构成规则: (1) 变量表达式; (2) 变量 赋值运算符 表达式 分号2022-3-23692.注意区分赋值语句和赋值表达式的区别: 例如 a=b+2 (这是赋值表达式) a=b+2; (这是赋值语句) a+ (这是表达式) a+; (这是赋值语句,等价 与 a=a+1;)2022
39、-3-23703.5 输入输出在输入输出在C语言中的实现语言中的实现 1.输入输出的概念 从计算机向外部输出设备(如显示屏、打印机、磁盘等)输出数据称为“输出输出”,从外部向输入设备(如键盘、磁盘、光盘、扫描仪等)输入数据称为“输入”。2.C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。2022-3-23713.在使用C语言库函数时,要用预编译命令“include”将有关的“头文件头文件”包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令: #include 或#include
40、“stdio.h” 4.允许在使用printf和scanf两个函数时可不加#include命令。2022-3-2372一、字符数据的输入输出1.putchar函数(字符输出函数) 函数格式:putchar( C ) ; C可以是字符型变量或整型变量或常量 函数的功能:向终端输出一个字符2022-3-23732.程序实例 #includemain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c); 注意:该程序可以输出控制字符,如putchar(n) 输出一个换行符,也可以输出其他转义字符 如 putchar(101) (输出字符A)
41、 putchar() (输出单引号字符)运行结果: BOY2022-3-23743.getchar 函数(字符输入函数) 函数格式,getchar ( ) 函数的功能:从终端输入一个字符,函数的值就是从输入设备得到的字符。4.程序实例 #includemain()charc;c=getchar();putchar(c);在运行时,如果从键盘输入字符a并按回车键,就会在屏幕上看到输出的字符a。a (输入a后,按“回车”键,字符才送到内存)a (输出变量 c 的值a)2022-3-2375注意: (1)getchar( )只能接收一个字符,getchar函数收到的字符可以赋给一个字符变量或整型变量
42、。 (2)若在程序中调用getchar、putchar函数,则必须在程序的开头部分加上“包含命令” #include或或#include“stdio.h”2022-3-2376二、格式输入与输出二、格式输入与输出(一)、printf函数(格式输出函数)1.printf函数的一般格式为 printf(格式控制,输出表列) 括弧内包括两部分: (1) “格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息: 格式说明,由“”和格式字符组成,如%d, %f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“”字符开始的。 普通字符,即需要原样输出的字符。 (2)“输
43、出表列”是需要输出的一些数据,可以是表达式。2022-3-2377下面是一个例子: printf(“%d %d ”, a,b ); 格式说明 输出表列 printf(“a%d b=%d”,a,b); 格式说明 输出表列2022-3-23782.格式字符 常用的有以下几种格式字符:(1)d格式字符。用来输出十进制整数。有以下几种格式字符: d,按整型数据的实际长度输出。 md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,则输出结果为 |_| 123,12345 ld,输出长
44、整型数据。如 long a=135790; printf(“%ld”,a);2022-3-2379对long型数据应当用ld格式输出。对长整型数据也可以指定字段宽度,如将上面printf函数中的“ld”改为“8ld”则输出为: |_| |_| 135790 (8列)一个int型数据可以用d或ld格式输出。(2)O格式符,以八进制数形式输出整数。由于是将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出。例如: int a= -1; printf(“%d,%o”,a,a);2022-3-2380 1 1 1 1 1 1 1 1 1 1
45、 1 1 1 1 1 1输出为 1,177777对长整型数(long型)可以用“lo”格式输出。同样可以指定字段宽度,如printf(“8o ” ,a)输出为|_| |_| 1777771在内存单元中的存放形式(以补码形式存放)如下:2022-3-2381(3)x格式符,以十六进制数形式输出整数。同样不会出现负的十六进制数。例如int a=1;Printf(“%x,%o,%d”,a,a,a);输出结果为: ffff,177777,12022-3-2382(4)u格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。(5)C格式符,用来输出一个字符。 如: charc=a;pri
46、ntf(“%c”,c); 输出字符a,请注意:“c”中的 c是格式符,引号右边的c是变量名,不要搞混。一个整数,只要它的值在0255范围内,也可以用字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,一个字符数据也可以用整数形式输出。 2022-3-2383(6)S格式符,用来输出一个字符串。有几种用法: s,例如:printf(“%s”,“CHINA”);输出“CHINA”字符串(不包括双引号)。 ms,输出的字符率占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若串 长小于m,则左补空格。 2022-3-2384ms,如果串长小于m,则在m列范围
47、内, 字符率向左靠,右补空格。 mns,输出占m列,但只取字符串中左端n个字 符。这n个字符输出在m列的右侧,左补空格。 mns,其中m、n含义同上,n个字符输出在m 列范围的左侧,右补空格。如果nm,则m自动取n值,即保证n个字符正常输出。2022-3-2385(7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法: m.nf指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。 -mnf与m.nf基本相同,只是使输出的数值向左端靠,右端补空格。 f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出。并输出6位小数。应当注意,并非全部数字都是
48、有效数字。单精度实数的有效位数一般为7位。2022-3-23863.例子(1)无符号数据的输出 main( )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,65535b=-2,177776,fffe,655342022-3-2387(2)字符数据的输出:main ( ) char c=a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i);运行
49、结果为:a,97a,972022-3-2388(3) 字符串的输出main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“CHINA”,”CHINA”);输出如下: CHINA,|_|_|_|_|_|CH,CHIN,CHI|_|_|其中第3个输出项,格式说明为“%.4s”,即只指定n,没指定m,自动使 m=n=4,故占4列。2022-3-2389(4)输出实数时的有效位数: main( ) float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); 运行结果为: 333333.328
50、1252022-3-2390(5)输出实数时指定小数位数: main()floatf=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|_|_|_|_|2022-3-23914.格式符小结格式符小结格式字符 说 明 d以带符号的十进制形式输出整数(正数不输出符号) o以八进制无符号形式输出整数(不输出前导符0) x,X以十六进制无符号形式输出整
51、数(不输出前导0 x),用x则输出十六进制数的af时以小写形式输出。用X时,则以大写字母输出。 u以无符号十进制形式输出整数 c以字符形式输出,只输出一个字符printf格式字符格式字符2022-3-2392格式字符说明 s输出字符串 f以小数形式输出单、双精度数,隐含输出6位小数。用e时指数以“e”表示(如.2e+02),用E时指数以“E”表示(如1.2E+02) e,E以指数形式输出实数,数字部分小数位数为6位,如用“E”,则输出时,指数以大写表示 g,G选用f或e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示2022-3-2393字符说明字母l
52、用长整型整数,可加在格式符d、o、x、u前面m(代表一个正整数)数据最小宽度n (代表一个正整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数输出的数字或字符在域内向左靠printf的附加格式说明字符的附加格式说明字符2022-3-23945.使用printf函数时,还需注意以下几点(1)除了X,E,G外,其他格式字符必须用小写字母, 如d不能写成D。(2)可以在printf函数中的“格式控制”字符串内包含“转 义字符”,如“n”,“t”,“b”,“r”,“f”,“377”等。(3)上面介绍的d、o、x、u、c、s、I、e、g等字符, 如用在“”后面就作为格式符号。一个格式说明以 “
53、”开头,以上述9个格式字符之一为结束,中间可 以插入附加格式字符(也称修饰符)。例如:2022-3-2395printf(“ c=%cf=%fs=%s”,c,f,s);格式说明第一个格式说明为“c”而不包括其后的f,第二个格式说明为“f”,不包括其后的S,第三个格式说明为“s”。其他的字符为原样输出的普通字符。(4)如果想输出字符“”,则应该在“格式控制格式控制”字符串中用连续两个表示,如 printf (“%f%”,1.0/3); 输出:0.333333%2022-3-2396(二)、Scanf 函数(格式输入函数)1.一般形式scanf(格式控制,地址表列) “格式控制”的含义同 prin
54、tf函数; “地址表列”是由若干个地址组成的表列, 可以是变量的地址,或字符串的首地址。2022-3-23972.例子 用scanf函数输入数据 main( ) int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(“%d,%d,%dn”,a,b,c); 运行时按以下方法输入a、b、c的值:3|_|4|_|5 3,4,5&a,&b,&c中的“&”是“地址运算符地址运算符”,&a指a在内存中的地址。2022-3-2398说明: “ ddd”表示按十进制整数形式输入数据。输入数据时,在两个数据之间以一
55、个或多个空格间隔,也可以用回车键、跳格健tab。 用“ddd”,格式输入数据时,不能用逗号作两个数据间的分隔符。 3.格式说明 与printf函数中的格式说明类似,以开始,以一个格式字符结束,中间可以插入附加字符。2022-3-2399格式字符 说 明 d,i用来输入有符号的十进制整数 u用来输入无符号的十进制整数 o用来输入无符号的八进制整数 x,X用来输入无符号的十六进制整数(大小 写作用相同) c用来输入单个字符 s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束符0作为其最后一个字符 f用来输入实数,可以用小数形式和指数形式输入
56、 e,E,g,G与f作用相同,e与f,g可以互相替换(大小写作用相同)Scanf格式字符格式字符2022-3-23100字符 说 明 l用于输入长整型数据(可用%ld,%lo,%lx)以及double型数据(用%lf或le) h用于输入短整型数据(可用%hd,%ho,%hx)域宽域宽指定输入数据所占宽度(列数),域宽应为正整数 *表示本输入项在读入后不赋值给相应的变量Scanf的附加格式说明字符2022-3-23101说明:(1)对unsigned型变量所需的数据, 可以用u,d或o,x格式输入。 (2)可以指定植入数据所占列数, 系统自动按它截取所需数据。 scanf(“%3d%3d”,&a,&b); 输入123456 系统自动将123赋组a,456 赋给b。 此方法也可用于字符型: scanf(“%3c”,&ch); (3)如果在后有一个“.”附加说明符, 表示跳过它指定的列数。2022-3-231025.使用scanf函数时应注意的问题(1) scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。(2)如果在“格式控制”字符率中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。例如 scanf(”d,d”,&a,&am
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏异常处理与故障排查考核试卷
- 民间非营利组织新旧会计制度有关衔接问题的处理规定2025
- 3.20国际幸福日幸福其实并不遥远幸福可以很简单课件
- 四川省内江市东兴区2025届小升初常考易错数学检测卷含解析
- 湘潭理工学院《新媒体产品设计与项目管理》2023-2024学年第二学期期末试卷
- 雅安市重点中学2024-2025学年初三5月联合调研数学试题试卷含解析
- 江西省2024-2025学年高三1月物理试题含解析
- 辽宁特殊教育师范高等专科学校《心理咨询技术与实务》2023-2024学年第二学期期末试卷
- 台州科技职业学院《管理会计应用指引》2023-2024学年第二学期期末试卷
- 西安航空职业技术学院《生物多样性》2023-2024学年第二学期期末试卷
- 山东节制闸工程施工组织设计
- 中药化学试题及答案
- 2024春期国开电大本科《现代汉语专题》在线形考(任务1至6)试题及答案
- HJ 1235-2021 入河(海)排污口命名与编码规则-PDF解密
- 公路消防知识培训内容
- JTG F80-1-2004 公路工程质量检验评定标准 第一册 土建工程
- 《1984》读书分享课件
- 肺动脉高压的传统治疗
- 园林植物识别-草本花卉的识别
- 班组长怎样抓好生产管理
- 【湘少版】(三起)三年级英语下册(全册)配套练习
评论
0/150
提交评论