


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章数据描述与根本操作教学目的:程序设计是对数据进行不同的操作来解决实际问题的,通过该章的学习,使学生掌握程序中所用的数据类型有哪些?对这些数据的操作有哪些?各种操作对不同的数据类 型运算后的结果是什么?为编程序中用到常量、变量、函数、表达式时打下一个好的根底, 能用表达式表示要解决的问题。重点与难点:变量定义,各种运算符的操作结果, 输入与输出语句的合理使用,各种表达式值的判断,用表达式处理具体问题。数据与操作是构成程序的两个要素。 程序中所用的数据和对数据的操作是编程序的主要内容,掌握了数据和对数据的根本操作,是编程序的根底,特别是求表达式的值,对程序执行结果和程序流程起着决定的作用。2
2、.1数据类型数据是程序的必要组成局部,也是程序处理的对象。程序中使用“数据类型的概念,主要是数据的存储形式和数据所参加的运算不同,程序中所用到的数据和变量都要归属于某一类型。c语言中数据类型介绍:1根本类型整型、实型、字符型2构造类型数组、结构体、共用体、文件3指针类型 4空类型数值的定点表示与浮点表示形式 浮点数:看n的不同形式3.14159 X 1003.14159e00.314159 X 1010.314159e+1-131.4159 X 1031.4159e-10. 314159+1同一个n可用不同的形式表示,主要是小数点的位置在变化, 即一个实数可分“尾数和阶码两局部来表示,称为浮点
3、数。即 是实数在内存中的存储形式。12、- 20, 10称为定点数,在计算机中的存储形式按字节用二进制形式存储。00 00 00 00 00 00 10 10左图为10的16位存储形式字符型数据的表示和存储形式如:'A' , 9 为字符型数据,在内存中以 ASCII码代码存放字符的 ASCII代码可查阅附录1 ,例'a'的ASCII码为97,那么存储形式为:011 00001与存放整数97样,即字符型的数据在 ASCII码允许在范围内与整型数相同。以下程序运行结果可说明问题:mai n()char ch;ch= ' a';printf(“%c ,
4、ch,ch);输出结果为:97,a即字符型数据和整型数在一定范围内是通用的。2.1.3 数据的存储空间长度与取值范围C 语言中不同的数据类型分配不同的长度 ( 以字节为单位 1字节存 8位二进制 ) 的存储空 间。分配如下:1 字节 字符型 (char) 2 字节 整型 (int)4 字节长整型 (long)单精度型 (float )8 字节双精度型 (double)由于存储字节不同,所以取值范围就不同:int - 32768 32767long- 21474836482147483647float和 double 取值范围更大。2.1.4 带符号的数据类型与无符号的数据类型 计算机内存中的正
5、负数在存储时是通过最高位来表示的,如 :( 以 8 位为例 ) 01101011表示正数 10710100111 表示负数(补码) 89 即负数在内存中以负数的补码形式存放。正数的补码就是该数本身化为二进制数。 如何求负数的补码:先求该数的绝对值,化为二进制数;按位取反 (1 变0, 0变1 ) ;再加 1;如|89|=89 89=( 01011001 ) 2取反后等于 10100110加1 后变为 10100111 为补码。 有符号整型数的取值范围:两字节十六位二进制数最大数: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=32767最小数: 1 0 0 0 0 0 0 0
6、 0 0 0 0 0 0 0 0= -32768 (为负数的存储形式) 大家计算一下为什么是 -32768 ?无符号整型数的取值范围: 对于无符号数来说, 高位不再来表示整数的符号位,1 6位的二进制数全部用来存放整数,因此无符号数不会是负数。这时:最大数: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=65535(不再代表 -1 ,而是 65535)最小数: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=0程序举例:main()main()char ch;int a=-1;ch=0362;/* 八进制数 */printf("%d,%un"
7、;,a,a) ;printf("%d n",ch);输出结果为: -14-1, 655352.2 常量和变量不同的数据类型既可以以常量形式出现, 也可以以变量形式出现。 常量在程序执行期 间不发生变化、具有固定值。变量那么其值可发生变化,其实变量对应的是内存中的某一 存储单元。2.2.1 直接常量和符号常量 直接常量就是程序中直接书写的常数:12 整型常量 12.0,13.56 实型常量 's','D', 'A' 字符型常量符号常量在程序中用名字代表的常量,需要由编译预处理和说明语句定义。例: #define PI 3.141
8、5926#define M 100PI与M就是符号常量。const float N 356; 说明语句N是符号常量。在程序的其它语句中用到PI , M N它的值就是对应的常数2.2.2 直接常量的书写格式整型常数 十进制、八进制、十六进制 0 开头 八进制 0x 0X 开头 十六进制0254089 0x1FF 20af12与12L加L为长整型,大小相同,但存储所占空间不同实型常量 小数形式和指数形式 34.5 .345 1e2 1.5e-3e-3 1e-0.5字符常量 用单引号括起来的字符 'A', 'W', '' 代表字符 , '
9、9; 不正确转义字符 以 开头后跟一个字符代表控制字符 'n' 表示回车换行 't'表示跳格'b' 表示退格 'ddd'表示3位8进制数所对应的字符'xhh' 表示2位16进制数所对应的字符 字符串常量 用双引号括起来的多个字符 "hello","12345","A" 与'A'值相同,存储形式不同,前者2字节,后1字节。2.2.3 变量和对变量的赋值数据被存储在一定的存储空间中, 数据的加工就是在它们所在的存储区与运算器之间传 送过程中实现
10、的。在高级语言程序中,数据连同存储空间被抽象为变量。变量有名字标识, 即变量名, 用字母等来表示, 它代表某个存储空和所存储的数据,存储空间的数据就是变量的值。赋值运算就是从运算器向变量所对应的存储单元传送数据。用“=表示赋值操作。C 语言中的“=符号称为赋值运算,由赋值运算符组成的表达式称为赋值表达式, 形式如下:变量名 =赋值表达式赋值号的左边必须是变量名, 即代表一个存储单元或是代表某个存储单元的表达式; 赋值号 右边必须是C语言中合法的表达式。它的作用是把右边表达式的值计算出来后赋给左边的变 量,即放入存储单元。假设定义了 int a,b 那么a=10 b=a都是合法的赋值表达式。假设
11、一个变量经过了屡次赋值,那么 最后一次才是它的值。赋值语句的考前须知:1. 和数学中的“等于号不是等同关系。2. 赋值运算的执行方向同右向左,执行为先计算再赋值。3. 赋值号连接的式子称为赋值表达式,如 :a=3+5, 赋值表达式的值等于赋值后左边变量中的值。可写成连续赋值表达式:b=a=3=5d=c=b=a=3+54. n=n+1数学式子无意义,但在程序中那么有用的,是把n的值增加1再放到n中,程序中可用来计数。2.2.4 变量的声明变量声明的意义C 程序中用到的变量都要声明它们属于哪一种类型。 即要明确指定变量的类型。 为什么 呢?不同变量所占存储单元大小不同。不同数据类型对应不同的取值范
12、围。不同数据类型对应一组允许的操作运算。int 整型 float 单精度double 双精度 char 字符型2.2.5 标识符标识符是给程序中处理的实体变量、常量、函数、数组、结构体、文件等起名字的。 标识符定义的规那么如下:由字母、数字及下划线组成,且第一个字符必须是字母或下划线。area ,PI ,_int, a_array,s1234,P101p都是合法的标识符;456P、cade-y、w.w、a&b都是不合法的标识符;C 语言中规定,大写字母和小写母是两个不同的标识符,因此page与Page, pl与P1都是不同的标识符。对标识符的长度 含字母、 数字和下划线的个数不同的系统
13、也有不同规定, 一般规定 只识别前 8个,即前 8个字符相同就被认为是同一个标识符如: abcdefgh1 与 abcdefgh2 认 为是同一个变量名。关键字是C语言中规定的一批专用标识符,它们在程序中在专门的用处,不能用作它用,也就是用户再不能对它们重新定义。这些关键字如下:case if for int double等。预定义标识符这种标识符在语言中也有规定,它是库函数名或预编译处理命令等。如: printf,define,scanf 等。这类标识符允许用户另作它用,但将失去系统规定的原意,鉴于这种原因,建议用户不要把这些预定义标识符另作它用。主要是各种函数名数学、字符、文件函数。用户标
14、识符:由用户根据需要定义的标识符。 一般用来给变量、函数、 数组或文件命名,是用户编程 的关键类似与数学中列方程解应用题时:设XX是x; XX是y。用户应遵守标识符命名的规那么, 尽量不要和关键字和预定义标识符相同, 还应做到“见 名知义, 增加程序的可读性, 如果用户定义的标识符与关键字相同, 编译时会给出错误信 息;如果和预定义标识符相同, 系统不报错, 只是预定义标识符失去原来的含义, 代之以用 户确定的含义,也可能引起程序运行时的错误。2.3 运算符与表达式运算是对数据的加工,根本运算符是用简洁的符号记述,参加运算的对象称为操作数。 表达式描术了对哪些数据,以什么顺序以及施以什么样的操
15、作,由运算符与运算量组成。C语言中提供了丰富的运算符,能构成多种表达式, 掌握了 C语言中的表达式,及表达式值的计算方法是必需的。C 语言中的运算有 13种:算术运算符 :+ ,-,*,/,%,+,-关系运算符 :>,<,= =,>=,<=,!=逻辑运算符 :! ,&&, |位运算符:<<,» ,|,人,&赋值运算符 : = 条件运算符 :? :逗号运算符 : ,指针运算符 : &,*求字节数运算符 :sizeof 强制类型转换运算符 : 类型说明符 分量运算符 : . ->下标运算符 学习运算符应注意以下几点
16、:运算符的功能是什么?与运算量的关系 个数、类型 。运算的优先级 多种运算组成的表达式 。 结合方向。如: 3*5/6 与 a=3>5结果类型,两个一同类型的数据参加运算后产生结果的数据类型是什么?如: 3/2 与3/2.0 的结果就不同。2.3.1 算术运算与算术表达式根本算术运算符在C语言中的算术运算有+、-、*、/、%分别代表加、减、乘、除、求余运算。其中求 余运算的两个数必须是整型数,余数的符号与被除数相同。如:13%-3,结果为 2;-19%4结果为 -3由于 + 、 -号的特殊性,可作单目运算。但必须出现在左边。双目运算时,数据类型一致,才能进行运算,所得类型与运算数的类型一
17、致,如1/2 结果为0;而1.0/2.0 结果为0.5,如数据类型不一致 ,系统会自动进行转换 ,转换见附录二。 所有实型数运算均为以双精度型方式进行,假设是单精度那么在尾数补0,转换为双精度型。运算符的优先级在C语言中,常量、变量、函数调用及按C语言语法规那么用运算符把运算数连接起来的式子都 是合法的表达式。但凡表达式都 有一个值,即运算结果。算术运算符的优选级:、 +、 - 、 * 、 / 、 %、+、 -单目双目同级同级同级高低算术运算符和括号的结合性和四那么混合运算法那么根本一致。 算术运算符中只有单目运算 “-和“+的结合性是从右到左,其余都是从左到右。如: 5+1 /2 结果为3;
18、 5+1/2结果为5; 5*-2结果为-10;等价于 5*-2的值。书中附录三给出了 C语言运算符优先级和结合方向。算术表达式用算术运算符和括号将运算量操作数连接起来符合C语法的表达式称为算术表达式。 运算对象可以是:常量、变量、函数等。如:x*y/a+b a+b*h/2复合的赋值表达式在赋值运算符之前加上其它运算就构成了复合赋值运算符,C语言中规定了 10复合运算符,与算术有关是 +=、 -=、 *=、 /= 、 %=有5种,它的运算优先级与赋值运算同级。 它们代表的赋值表达式是什么形式呢?n+=1代表n=n+1n-=m+3代表n=n-m+3n*=m+3代表n=n*(m+3)n/=m+3代表
19、n=n/(m+3)n%=(m+3) 代表 n=n%(m+3)举例:已有变量 a, 其值为 9 计算表达式 a+=a-=a+a 的值。由赋值运算与复合赋值运算同级, 运算从右到左,所以 :a+a 值为 18 a-=18 值为 -9 a+=-9 值为 -18自加、自减运算1 、自加运算符 (+) 、和自减运算符 (-) 的运算结果是使运算对象的值增1和减 1,如 :i+相等于 i=i+1,i-相等于 i=i-1 ,其实是一种赋值运算。2 、+、 - 是单目运算,运算对象可以是整型和实型变量,不能是常量和表达式,如: +3、 (j+i)- 是不正确的,3、自加、 自减运算可作为前缀运算行, 也可作为
20、后缀运算符, 所以: +i 、-i 、 i+ 、 i- 都是正确的。自加和自减运算对变量本身来说都是加1和减 1,但对表达式来说值是不同的。假设i=5,那么+i的值为6;i的值为6; 假设i=4,那么-i的值为3;i的值为3;假设i=5,那么i+的值为5;i的值为6; 假设i=4,那么i-的值为4;i的值为3;4、 +和 - 运算结合方向是“自右向左-i+ 相等于 -(i+)5、不要在一个表达式中对一个变量重复使用自加、自减运算,由于编译系统不同,可 能结果也不同。赋值类运算符的副作用及限制C语言允许在表达式中使用一个以上的赋值类运算符,但这种灵活性会给程序的理解困 难,也会引起副作用:1费解
21、、易于误解c=b*=a+2;容易理解为 b*=a,c=a+2x=i+j ;是 i+(+j) 还是 (i+)+j 应为 (i+)+j2不定解j=3; i=(k=j+1)+(j=5);执行以上语句,不同的系统得到的结果不同。关系运算符和关系表达式C 语言的关系表达式和逻辑表达式,其运算结果会得到一个逻辑值。逻辑值只有两个, 在其它高级语言中用“真、“假来表示。在C语言中没有专门的“逻辑值,而是用非零值来表示“真,用零表示“假。因此,对任意一个表达式,假设它的值为0时,就代表一个“假值,只要它的值是非零,无论是正数和负数,都代表一个“真值。关系运算是一种比拟运算, 即将两个运算量进行比拟, 判断它们
22、的大小相等不等的关系。 关系运算符; <,<=,>,>=,=,!= ;在两个字符组成的关系运算符中间不能加空格。关系运算符是双目运算符, 具有自左向左的结合性。 运算的优先级前四种同级, 后两种 同级, 前四种高于后两种。如果一个表达式中既有算术运算、 关系运算和赋值运算,那么优先 级次序是:算术运算;关系运算;赋值运算。关系表达式及关系表达式的值 由关系运算符与运算量组成的表达式称为关系表达式。 关系运算符两边的运算对象可是C语言中任意合法的表达式。如:a+b<c+d (a+b)<(c+d)a=x>y a=(x>y)判别式 b 2-4ac &g
23、t; 0 的C语言关系表达式为 b*b-4*a*c>=0关系运算的结果得一个整数值0或者1,在C语言中没有专门的逻辑值,而用0代表真,1代表假。分析:x 5,13关系表达式 5<x<13 当 x=3或x=6时的值当关系运算符两边的类型不一致时,一边是整型,另一边是实型,系统要自动把不整型转换为实型,然后进行比拟转换规那么见附录二。假设两个数x和y都是实数,在进行相等的 比拟时,由于内存中的实数表示有误差,不可能精确相等,这将导致关系表达式x= =y的值总为0,即在程序设计时应尽量防止两个实型进行相等的关系运算。逻辑运算符和逻辑表达式当表示一些比拟复杂的关系时,只有关系表达式是
24、不行的。如:要表示x a,b。三角形任意两边之和大于第三边。坐标x,y在单位圆内,且在第一象限。这些条件只用关系运算是不能表达的。C语言中提供了三种逻辑运算,可以表示这些复杂的条件。逻辑运算符为:!、&&、II。x a,b表示为:x>=a&&x<=ba,b,c为三角形的三条边,能组成三角形表示为:a+b>c&&b+c>a&&a+c>bx,y在单位圆内且在第一象限表示为:x*x+y*y<1 &&x>0&&y>0逻辑运算的优先次序为!、&&
25、、|。假设一个表达式中有前面介绍的所有运算算术、赋值、关系、逻辑,它们之间的运算优先次序从高到低为:!、算术运算、关系运算、&& |、赋值逻辑表达式的值由逻辑运算符和运算对象组成的表达式称为逻辑表达式,运算对象可以是C语言中任意合法的表达式,它们的值是什么呢?和关系表达式值一样,逻辑表达式值运算的结果只有真1假0值。x a,b当 x=2; a=1;b=4 x>=a&&x<=b值为 1真当 x=-2; a=1;b=4 x>=a&&x<=b值为 0假a,b,c为三角形的三条边当 a=3;b=4;c=5 a+b>c&
26、;&b+c>a&&a+c>b 值为 1 真当 a=2;b=1;c=3 a+b>c&&b+c>a&&a+c>b 值为 0假当x=2,a=1;b=4 x<a|x>b 的值为假当x=-2,a=1;b=4 x<a|x>b 的值为真逻辑表达式的值可以通过以下运算规那么表中查到:AB!AA&&BA|B00100100010110111011逻辑表达式考前须知数学式子和逻辑表达式, 如数学式子0<x<10如写成0<x<10虽然没错误,但是不能表示 x所满足条件
27、,因为不管x是什么值,它的值永远是真值1为什么?。应用0<x&&x<10表示。 注意是编程序,不是写数学式子 在由&&和 |组成的逻辑表达式中,在特定情况下会出现短路现象一旦可以确定逻辑表达式的真、假值 ) ,例如有如下逻辑表达式: a+&&b+假设a的值为0,此时的逻辑表达式的值已确定为假 0,就不对b进行求值而跳过,这时 a的值发 生了变化(0变成1),而b的值不发生变化 。假设a的值不是0,此时逻辑表达式的值还需通过 b 的值来确定,不管逻辑表达式的值是真假,a、b的值都要发生了变化。又如下逻辑表达式:a+|b+假设a的值为1,
28、此时的逻辑表达式的值已确定为真1,就不对b进行求值而跳过, 这时a的值发生了变化(1变成2),而b的值不发生变化 。假设a的值是0,此时逻辑表达式的值还需通过b的值来确定,不管逻辑表达式的值是真假,a、b的值都要发生了变化。关系表达式和逻辑表达式练习题:1. 假设 a=4, 那么 !a 的值是什么?2. 假设a=4;b=5,那么a&&b的值是什么?3. a,b的值同前,那么a|b的值是什么?4. a,b的值同前,那么!a|b的值是什么?5. 4&&0|2 的值是什么?关系表达式和逻辑表达式举例:6. 5>3&&2|8<4-!0 的值是
29、什么?7. 假设a=3,b=4,c=5;以下逻辑表达式的值是什么?a+b>c&&b= =c a|b+c&&b-c!(a>b)&&!c|1 !(x=a)&&(y=b)&&0!(a+b)+c-1&&b+c/28. 表示条件10<x<100或x<0的C语言表达式是什么?9. 判断x能被2整除的关系表达式是什么?10. 分别判断x是偶数或是奇数的关系表达式是什么?11. 判断某年是否是闰年的逻辑表达式是什么? (能被4整除,但不能被 100整;能被 4整除, 又能被 400整除
30、 )条件运算及条件表达式C 语言中还提供了一种特殊的运算条件运算符,由此构成的表达式也可形成简单的选 择结构, 这种选择结构以表达式的形式内嵌在允许出现表达式的地方,使得可根据不同的条件使用不同的表达式。(类似于Excel中的IF()函数) 条件运算符: ? :是唯一的一个三目运算符,要求三个对象。由条件运算符构成的条件表达式:表达式 1? 表达式 2 : 表达式 3 条件运算及条件表达式条件表达式的运算功能:表达式 1 的值为非 0时,求出表达式 2的值,此时表达式 2的值就是整个条件表达式的值; 假设表达式 1的值为 0时,求出表达式 3的值,此时表达式 3的值就是整个条件表达式的值。例如
31、:x=5,y=10,那么max=x>y?x:y的值max等于多少? 条件运算的优先级优于赋值运算,但低于逻辑、关系、算术运算。y=x>10?100:200;printf(“ abs(x)=%nd,x>0 ?(-1 )*x:x)( 输出 x 的绝对值 )程序举例:用条件表达式 , 求三个数中的最大和最小数并输出。main() int a,b,c,max,min;scanf("%d%d%d",&a,&b,&c); max=a>b?a:b;min=a<b?a:b; max=max>c?max:c;min=min<c
32、?min:c; printf("max=%d,min=%dn",max,min); 逗号运算和逗号表达式“,是C语言提供的一种特殊运算符,用逗号连起来的式子称为逗号表达式,一般 形式为:表达式1,表达式2,,表达式 N说明:1 、逗号运算结合从左到右,先计算表达式 1的值,最后计算表达式 N的值,最后一个 表达式的值是整个表达式的值。如 : (i=3,i+,+i,i+5) 执行后, i 的值为 5,整个表达 式的值为 102 、在所有运算符中,逗号运算符优先最低。2.4 不同类型数据间的转换2.4.1 几个概念C语言允许数值从一种类型转换成另一种类型(同一类型但占字节数不同
33、、定点与浮点、有符号与无符号 )提示与降格 ( 所占字节数的变在与变小 ) 符号位扩展与零扩展 (字节数变高位补什么 ) 最高位失去符号功能与最高位变为符号位截去小数与四舍五入丧失精度结果不确定与截去高位(例 2.11 )2.4.2 不同类型的隐式转换 隐式转换的发生:运算时、赋值时、输出时、函数返回值时。一般算术转换。2*1.0 结果为 2.0赋值转换。 int a=13.789 a 的值为 13输出转换。x=45; printf("%d%x%on",x,x,x);2.4.3 不同类型的显式转换 提供强制类型转换,形式为:( 类型说明符 ) 表达式例如:char ch;i
34、nt a;double c; ch=(char)48.5;a=(int)35.9; 四舍五入c=(double)100;提高精度2.5数据的输入输出对数据的一种重要操作是输入与输出。没有输出的程序是没有用的;没有输入的程序 缺乏灵活性。C语言中的输入输出由函数实现,它包含在头文件stdio.h中,在使用输入输出时最好在编译预处理命令中包含。2.5.1 printf 函数一个完整的程序应该由三局部组成:输入、处理、输出。输出局部把数据从计算机内部送到外部设备,如:在屏幕上显示或打印在纸上。 printf 函数的一般形式该函数是C语言提供的标准输出函数,它的作用是在终端设备上按指定格式进行输出。p
35、rintf函数的使用格式(语法规那么)如下:printf(格式控制串,输出项表)在它的后面加上“;号就构成了输出语句。格式控制必须用双引号括起来。 例如:prin tf("a=%d,b=%dn",a,b); "a=%d,b=%dn"为格式控制字符串、a,b 是输出项表。printf函数的一般调用形式完整的格式为:% - 0 m.n l或 h 格式字符(d,f,x,o,c,u,p )t y t y 厂匕指定输出类型|输出长度修正指定输出域宽和精度指定空位补0指定左边对齐输出格式说明起始符 格式控制符的作用:1. 为各输出项提供格式转换说明:将要输出的数据转
36、换为指定的格式输出,总是由 开始,紧跟其后的是格式描述符。当输出项为int类型时,系统规定用d作为格式描述符,其形式为d假设输出为float或double 时,用f或e作为格式描述符,其形式为%f或 %e char类型时用c作为格式描述符,其形式为%c>2. 提供原样输出文字或字符不在格式字符中间夹的字符原样输出。如:"a=%d,b=%d"希望输出玄=和匕=字符。输出项表中的输出项应用逗号分开,输出项可以是合法的常量、变量、表达式。格式转换说明应与输出项的个数相同,格式描述也要与输出项类型匹配。请分析程序的输出结果:#i nclude "stdio.h&qu
37、ot;main ()int i=2518;float a=3.1415;prin tf("i=%d,a=%f,a*10=%en",i,a,a*10);printf函数常用格式说明:每个格式都必须用“ '开头,以一个格式字符结束,在它们中间可以根据需要加上“宽度说明(其实是正整数)、“长度修饰、“左对齐、“前导零符号、“八进制前加0、“十六进制前加Ox等。在和格式符中夹上不同的字符,就能实现上述功能。1. 格式字符 :d 整型数, c 字符型 ,f 实型数 ,o 八进制数 ,x 十六进制数 ,p 变量地址 ,u 无符号 数,% 输出 %自己。2. 长度修饰符 :长度修
38、饰符在 %和格字符之间 , 长整型用 l(long);h 用于短整型 ( short )或无符号整型数 的输出。3. 输出数据所占的宽度当使用%d %c %f、%e格式说明时,可用以下二种方法人为控制输出数据所占的宽 度。(1) 在%与格式字符之间插入一个整数来指定输出宽度,宽度不够不影响数据输出,如果 比实际宽度大补空格。分析以下程序的运行结果。main () printf("0123456789n");printf("%dn",42); printf("%5dn",42);printf("%fn",123.54
39、); printf("%12fn",123.54);printf("%en",123.54); printf("%gn",123.5);printf("%8gn",123.5);(2) 对于float或double类型可用“整数1.整数2形式在指定宽度的同时指定小数位,整数1用以指定整个宽度 , 整数2称为精度 ,即小数位 ,不同的格式字符地不同含义 :e,E或f指定输出数据所占的小数位,当输出数据的小数多于指定的宽度时,要截去多余的小数位 , 并作四舍五入的处理 , 少于指定宽度时 , 最右边补 0当输出数 据宽
40、度大于整数 1时, 小数局部作同样处理 , 整数局部不变。也可用“ . 整数2的形式来指定小数位的输出。这时输出数据的宽度由系统决定。%.0表示不输出小数点和小数局部。对于g或G用来指定输出的有效数字。 对于整数:用来指定必须输出的数的个数,假设输出数据少于整数2指定的个数,在数字前加 0,多于整数 2时,按实际宽度输出。对于字符串,用来指定最多输出的字符个数。输出的实际精度并不取决于域宽和小数位宽度,而是取决于数据在计算机中存储的精度,通常float7位double15位或16位有效数字,格式中和域宽不能改变数据的精度。分析程序执行结果main () printf("0123456
41、789n");printf("%.5dn",42);printf("%.0dn",42);printf("%8.3fn",123.55);printf("%8.1fn",123.55);printf("%8.0fn",123.55); printf("%gn",123.56789); printf("%.5sn","abcdefg");4. 输出数据左对齐:输出时如果不加说明, 数据的输出结果都是以右边对齐, 假设要控制左边对
42、齐, 就需在宽 度定义前加一个“ - 号来控制。查看程序执行结果:#include "stdio.h" main()clrscr();printf("%6d#n",123); printf("%-6d#n",123);printf("%14.8lf#n",1.3455); printf("%-14.8lf#n",1.3455);getchar();5. 使输出的数字前总是带有+或-号:可在 %和格式字符之间(或指定宽度前)加上一个“ +中与来实现。查看程序执行结 果:#include "
43、;stdio.h" main()clrscr(); printf("%+d,%+dn",10,-10); getchar();6. 在输出的数据前加上前导0:可在指定宽度前加上 0,使数据前的空格由 0填充。查看程序执行结果: #include "stdio.h"main()clrscr();printf("%6dn",12); printf("%06dn",12);printf("%10.5fn",3.1415); printf("%014.5fn",3.1415
44、);getchar();7. 在输出的 8进制前添加 0 ,在输出的 16进制前添加 0x:通常由o和x控制按8进制和16进制整数形式输出时,数据前没0和Ox,如果需要输出的前面加上0和 Ox只需在格式字符o和x之间加上“ #即可。查看程序执行结果: #include "stdio.h" main()clrscr(); printf("%o,%#o,%x,%#xn",10,10,10,10);getchar();在调用printf函数进行输出时需注意:1. 在格式控制串中,格式说明与输出项从左到右在类型上必须一一对应匹配,否那么将 导致数据不能正确输出,
45、系统并不报错。输出long型应使用“ ld。2. 格式说明和输出项个数应该相同,如说明个数少,多余项不输出,说明个数多,多 余输出不定值。#i nclude "stdio.h"#in elude "ctype.h"mai n()int c1,c2,c3,d1,d2,d3;clrscr();sca nf("%d%d%d",&c1,&c2,&c3);prin tf("%d,%dn",c1,c2,c3);sca nf("%d%d%d", &d1, &d2, &a
46、mp;d3);prin tf("%d,%d,%dn",d1,d2);3. 在格式串中除了合法的格式说明外可包括任何的合法的字符串,输出时“原样照印。4. 输出%那么在格式说明中用连续两个即可。5. 在输出语句中改变输出变量的值如:i=5;pri ntf("%d,%dn ,i,i+)的输出结果将无法判断。6. pri ntf函数返回的值通常是本次调时函数输出字符的个数。2.5.2sca nf 函数一般调用形式如下:scanf(格式控制,输入项表)在该数函后加上“;就构成了输入语句。例如:scanf( %d %d ",&a,&b);该语句的作
47、用是通过键盘给a和b输入整型数,%d%是格式控制串,& a,&b是输入项,表示a和b的存储地址。格式控制串的作用是指定输入时的数据转换格式,即格式转换说明。由嘶始,其后是格式描述符。输入项表中的各项用逗号分开, 各输入项只能是合法地址表达式,即在输入变量前加上“ &,&是C语言中求地址运算。也就是说输入项必须是某个存储单元的地址。格式说明根本组成如下:每个格式说明都必须用 开始,以一个格式字符结束。允许使用的输入格式字符和功能 如下所示:d整型数,ld长整型数,c字符型,f 单精度数,If 双精度数,o八进制数,x十六进制数,s字符串。这些格式字符只允许用小写字
48、母。 输入格式符说明: 输入long型在d之间加上I;输入double型在和f(e)之间也必须加I。(2) 格式说明的类型与输入项的类型应一一对应。类型不一致,系统不给出错信息,但 得不到正确的数据。(3) 在格式说明符前可用一个正整数指定输入数所占宽度, 但不能对实型数指定小数位。(4) 格式说明和输入项的个数应该相同。假设格式说明个数少于输入项个数,该函数结束 输入, 多余项并没有从终端接受新的数据。 假设格式说明个数多于输入项个数, 该函数同样结 束输入。(5) 当输入的数据个数少于输入项时,程序等待输入,直到满中为止,当输入的数据个 数多于输入项时,多余数据并不消失,而是留作下一个输入
49、操作的输入数据。(6) scanf 函数在调用结束后返回一个函数值,其值等于输入值的输入项的个数。 通过 scanf 函数从键盘输入数据:当调用 scanf 函数从键盘输入数据时,最一定要按回车键,该函数行能接受从键盘输入 的数据。1. 输入数值数据:从键盘输入数据时,输入的数据间用间隔字符(空格,Tab键或回车键)隔开,间隔数量不限。如人为指定宽度,也可用此方法输入。例: a,b,c 为整型变量,有以下输入语句:scanf(" %d%d%"d,&a,&b,&c); 要求给 a,b,c 分别赋 10,20,30 那么数据的输入形式为 间隔符10间隔符
50、20间隔符30CR间隔符为以上介绍的。2. 指定输入数据所占的宽度:一般编译系统可要求用户像未指定宽度一样输入数据。3. 跳过输入数据方法:在格式符前加上一个“ * ,该数没接受例如:int a1,a2,a3;scanf( %d%*d%d%d ,&a1,&a2,&a3);输入数据为 10 20 30 40CR 那么 a1,a2,a3 的值为 10,30,404. 输入数据少于 scanf 函数要求输入的数据 这时将等待输入,直到满足为止。 当程序运行时:黑屏幕回不到蓝屏幕,有可能是数据的数量缺乏。5. 输入数据多于 scanf 函数要求输入的数据: 多余数据将留在缓冲作
51、为下一次输入操作的输入数据。在调试程序时, 可采用输完所有的数据再回车。 这时当程序输出不正确时, 修改完程序, 再次运行程序时,可以不重新输入数据 ,用右光标健把上次输入的数据重新显示出来作为 程序的输入数据。通过 scanf 函数从键盘输入数据6. 在格式控制中插入其它字符应该首先明确: scanf 函数中的格式控制串是为输入数据用的,其中的字符不能显示在 屏幕上,因此想在屏幕上输出字符串来提示输入,应该另外使用printf 函数。程序举例(在scanf函数的格式中插入其它字符):此时在输入时,应按一一对应的位置原样输入这些字符。#include "stdio.h"main() int a1,a2,a3;clrscr();scanf("Input a1,a2,a3:%d%d%d",&a1,&a2,&a3);printf("%d,%d,%d",a1,a2,a3);程序举例(用printf语句来显示输入提示):此时只需输入seanf函数中输入项所对应的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南昆明市黄冈实验学校2024-2025学年高二下数学期末达标测试试题含解析
- 浙江省杭州八中2025年高二下数学期末学业水平测试模拟试题含解析
- 新疆乌鲁木齐市2024-2025学年化学高二第二学期期末达标检测模拟试题含解析
- 新疆哈密市十五中2025年高二化学第二学期期末质量跟踪监视试题含解析
- 云南省宾川县第四高级中学2025届高二下物理期末统考模拟试题含解析
- 浙江省温州树人中学2025年高二化学第二学期期末达标测试试题含解析
- 旅游产业借款合同模板:含旅游服务收入担保条款
- 车辆抵押权质押合同范本
- 城市道路两侧广告牌拆除与交通组织优化合同
- 生态环保草坪围栏设计与施工合同
- 2025届河南省青桐鸣5月全真模拟卷·高考考前适应性考试-生物试题(含答案)
- 办公软件MS Office应用试题及答案
- 2025年“铸牢中华民族共同体意识”知识竞赛题库及答案
- 2024年湖南出版中南传媒招聘笔试真题
- 合肥市2025届高三年级5月教学质量检测(合肥三模)生物试题+答案
- 7 什么比猎豹的速度更快 第二课时 课件
- 重大活动保供电工作流程
- 《颈椎超声》课件
- 食品委托加工管理制度
- 宪法考试考试题及答案
- 办公楼安全培训
评论
0/150
提交评论