C语言课件-基本的程序语句.ppt
第第第第2 2章章章章 基本的基本的基本的基本的程序程序程序程序语句语句语句语句著名计算机科学家沃思提出:程序数据结构算法程序数据结构算法一个程序包括以下两方面内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。(2)对操作的描述。即操作步骤,也就是算法。例如:学生各科成绩及总分排队问题。(1)成绩的存放 以数组形式(2)排队方法 算法在此,存放数据的方式直接反映了一种程序语言的数据表达能力。C语言的数据结构是以数据类型形式出现的。C语言的数据类型可分为:基本数据类型、构造数据类型、指针数据类型、空类型。2.1数据类型及取值范围数据类型及取值范围基本数据类型整型字符型(char)实型空类型(void)有符号整型(int)有符号长整型(long int)有符号短整型(short int)无符号整型(unsigned int)无符号长整型(unsigned long int)无符号短整型(unsigned short int)单精度(float)双精度(double)标识符就是一个名字,用于标志某个事物,由字母、数字、下划线组成且由字母或下划线开头的字符串。标识符可用来命名变量及作为常量名、函数名、类型名、标号和其他各种用户定义的对象命名。一个程序内不得有重复名,不允许使用与C语言系统关键字(保留字)相同的标识符。如如:_sum,sum,stu_name,price30等为合法的标识符。2.2标识符、变量和常量标识符、变量和常量2.2.1 2.2.1 标识符标识符下面的标识符是不合法的:Number-of-moves(含有非法字符-)piece flag(含有非法字符空格)5_6_7(数字开头)在定义标识符时应注意以下几点:1.为了增加可读性,应尽量见名知意。如:sum,area,day,name等等2.对标识符的命名应常用取简、专用取繁。3.应尽量避免使用容易混淆的字符。例如:O(大写字母)o(小写字母)0(数字)I(大写字母)l(小写字母)1(数字)Z(大写字母)z(小写字母)2(数字)C语言关键字列表 autobreakcasechar constcontinuedefaultdo doubleelseenumextern floatforgotoif intlongregisterreturn shortsignedsizeofstatic structswitchtypedefunion unsignedvoidvolatilewhile1C语言区分大小写语言区分大小写如:Price 和 price,系统会认为是两个不同的标识符。2标识符的长度一般不超过标识符的长度一般不超过8个字符个字符具体情况视不同系统而定。设允许8个字符。则:student_ namestudent_ number为同一名字。注意:注意:2.2.2 2.2.2 变量和常量变量和常量变量程序执行过程中可以不断改变其值的一种量。变量包括变量名变量名和变量值变量值。变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。一、变量一、变量C语言中,(1)(1)变量须先定义变量须先定义变量须先定义变量须先定义,后使用后使用后使用后使用如:int student student=30;则若写成student=30,则未定义,编译时指出其错。可以在说明变量时赋初值如int i=9;错误 int a=b=c=9;正确 int a=9,b=9,c=9;(2)(2)一一一一旦旦旦旦变变变变量量量量被被被被定定定定义义义义,即即即即可可可可在在在在编编编编译译译译时时时时为为为为其其其其分分分分配配配配相相相相应数量的单元。应数量的单元。应数量的单元。应数量的单元。(3)(3)一一一一旦旦旦旦变变变变量量量量被被被被定定定定义义义义,其其其其类类类类型型型型便便便便确确确确定定定定。则则则则可可可可检检检检查查查查其运算的合法性。其运算的合法性。其运算的合法性。其运算的合法性。如:a%b 表示a整除以b的余,则a,b必须为整型量。变量的一般描述方法:类型关键字 变量名1,变量名2,变量名n;基本数据类型所占字节数及其取值范围基本数据类型所占字节数及其取值范围(假定机器的假定机器的CPU的字长为的字长为16位位)常量常量 程序运行过程中不能被改变的量。一般的数据显式写法均表示常量。一个数:20 整型常量 15.8 实型常量一个字符a 字符型常量 2 字符型常量一个字符串 “fdjfk252”字符串常量如:二、常二、常 量量1.1.整型常量整型常量整型常量就是整型常数。C语言提供了三种形式语言提供了三种形式:(1)十进制十进制如:256,308,120等一般形式一般形式 +其中:为0至9的数码之一;方括号中的内容可有可无。如果有多位数字,第一个数字不能为0。(2)八进制八进制以数字0开头表示的整数如:0235,0146,012等.一般形式一般形式 +其中:为数码0;为0至7的数码之一;方括号中的内容可有可无。0235=28238515710014618248610210012(182)1010(3)十六进制十六进制以0 x开头的整型数如:0 x16,0 x1280 x16=1166221001281162216829610一般形式一般形式 +其中:为数码0 x或0X;为0至9、a至f、A至F;方括号中的内容可有可无。八进制整数和十六进制的整数的数制符是必需的 以上3种整型常量的表示形式均可冠以正号或负号 在整型常量的尾部加上字母l或L时,则为长整型常量 一个整型常量也可由它的值确定它的类型注意:注意:2.2.实型常量实型常量实型常量就是实数。(1)浮点记数法浮点记数法(十进制形式十进制形式):一个实数的表示包括数字和小数点。如:0.126,523.64等(2)科学记数法科学记数法(指数形式指数形式):一个实数的表示包括整数部分、小数点、小数部分和指数部分。如:12.57e-04、16e-3、1E15。12 .57 e04指数部分小数部分整数部分小数点3.3.字符常量字符常量字符常量字符常量是用一对单引号括起来的单个字符。如 a,A,二者不一样。注意:数字3和字符3的区别,前者为整型常量,占2个字节;后者为字符常量,占1个字节,3的值为51。由于C语言中的字符常量是按整数值存放的,因此,字符常量可以像整数一样在程序中参与运算。A+4 结果为:69 4.4.字符串常量字符串常量字符串常量是用一对双引号括起来的若干个字符。如:“Good Morning!”,”128.7369”字符串存放时,在最后加上“0 空字符。于是:G o o dM ornin g!0注意:字符常量A和字符串常量“A”是不一样的。“A”A 0 但AA1.字符串长度=实际字符个数+1,但最后0不输出.printf(Good Morning!)此处不写 0,自动加上。2.单个字符的字符串不能赋给字符变量。例例:char c;c=a;是错误的。注意:注意:转转义义字字符符:以“”开头后接一个字符或n个字符代表了一种特殊字符常量。5.5.转义字符转义字符字符形式ntvbrf dddxxh功能换行横向跳格(即跳到下一个输出区)竖向跳格退格回车走纸换页反斜杠字符“”单引号(撇号)字符1到3位8进制数所代表的字符1到2位16进制数所代表的字符特殊字符常量符号常量就是用一个名字来代表一个常量。符号常量就是用一个名字来代表一个常量。(1)利用宏定义”#define”定义符号常量如:#define PRICE 30#define PI 3.1415926(2)利用”const”来定义如:const float BT=0.001const int SUM=1006.6.符号常量符号常量例:#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);符号常量(一般用大写,以区分变量)符号常量的用处:提高可读性,降低输入错误的可能性,保证一致性.数组是一种具有相同数据类型的变量的集合。一维数组的定义格式:数据类型数组名 数组大小;如:int a6;数组名:a 6个元素:a0,a1,a2,a3,a4,a5。2.3 一维简单数组一维简单数组运算符:运算的符号表示。C语言有丰富的运算功能,先简述之。1.算术运算符 +,/,%,等2.关系运算符 ,=,=,!=3.逻辑运算符 !,&,4.位运算符 ,&5.赋值运算符 =等6.条件运算符?等7.逗号运算符 ,2.42.4 基本运算符、表达式及运算优先级基本运算符、表达式及运算优先级基本运算符、表达式及运算优先级基本运算符、表达式及运算优先级8.指针运算符 *,&9.求字节数运算符 sizeof10.强制类型转换运算符 (类型)11.分量运算符 ,12.下标运算符 13.其它运算符 如函数的调用()2.4.1 2.4.1 算术运算符算术运算符1.基本的算术运算符基本的算术运算符+加法,正值如:3+6,+3减法,负值如:6 4,5乘法如:38/除法如:8/5%求余如:7%4 的值为3(1)两个整型数据相除两个整型数据相除(结果取整结果取整)。5/3 1使用时千万注意 int/int 可能会出现数据丢失。(2)“/”中中,有一个有一个 float,则结果为则结果为double型。型。注:注:2.自增、自减运算符自增、自减运算符+自增1 自减1+i:先使i值+1,再使用i值;i+:先使用i值,再使i值+1.如:(1)i=5;j=+i;(2)i=5;j=i+;结果不同(1)j=6,i=6 (2)j=5,i=6自增运算符(+)和自减运算符()只能作用于变量注意:注意:(1)要慎用要慎用+、运算符。运算符。有关表达式使用中的问题说明有关表达式使用中的问题说明 对于表达式(i+)+(i+)+(i+);我们可能会认为应从左至右:3+4+5=12#includemain()int i=3,j;j=(i+)+(i+)+(i+);printf(i=%d,j=%dn,i,j);实际运行结果:实际运行结果:i=6,j=9例例:先对i进行3次自加,结果i的值为6,然后三个i值相加为18。i+i+i=9 然后再把6赋给i值如果表达式j=(i+)+(i+)+(i+);改为:j=(+i)+(+i)+(+i);则运行结果:则运行结果:i=6,j=18这是因为运算时是先取i的原值:3(2)在表达式中在表达式中,有的运算符为一个字符有的运算符为一个字符,有的为两个字符。有的为两个字符。一般地:自左至右尽可能多地将若干字符组成一个运算符。如:i+j,究竟理解为(i+)+j还是i+(+j)?#includemain()int i=3,j=3,m;m=i+j;printf(i=%d,j=%d,m=%dn,i,j,m);运行结果:i=4,j=3,m=6对语句m=i+j;系统理解为m=(i+)+j;例例:请注意:请注意:不能有这样的语句:m=i+j;系统不理解成m=(i+)+(+j)因为+运算符的结合方向从右至左。但可以但可以写成m=i+(+j);另外也不能不能写成:m=i+(+(+j);(3)在函数调用时要注意参数的计算顺序在函数调用时要注意参数的计算顺序,printf(i=%d,i+=%dn,i,i+);int i=3;int j=3;printf(j+=%d,j=%d,j,j+);输出结果输出结果:i=4,i+=3j+=4,j=3这是因为:参数的计算顺序从右到左。如:3.算术表达式算术表达式算算术术表表达达式式:用算术运行运算符和括号将运算对象连接起来,且符合C语法规则的式子。运算对象运算对象:常量、变量、函数等优先级优先级:(),/,%,+,结结合合性性:同一优先级,自左向右,为左结合性,反之为右结合性。例例:a b/c 1.5+ad e;类数值型数据间的混合运算:C语言允许双精度、单精度、整型及字符数据之间混合运算。如:10+a+1.58765.1234 b是允许的。但有一个规则:先转换成同一类型,再计算。(1)(1)(2)(2)(3)(4)(5)(6)(6)double float高低 图中“”表示必定转换。如a+b,先转换为int。结果为 int。转换方法:longunsignedint char,short即:既使是同一种类型也按 转换。图中“”:表示低,高型数据运算时,均先转换为高型。例:10+a+if d/e其中:i int f float d double e long(1)10+a:转为int,结果为int(2)if:转为double,结果为double(3)(1)+(2):转为double(4)d/e:转为double(5)(3)-(4)转为double则运算时则运算时:2.4.2 关系运算符和关系表达式关系运算符和关系表达式关系运算就是比较运算,如:a3为一比较运算,若 a=5,则 a3成 立。结 果 为“真”,否则,若 a=1,则a3不成立,结果为假。上述表达式:a3 称为关系表达式。一、关系运算符及其优先次序关系运算符及其优先次序1.、=为为同同一一优优先先级级,=、!=为为同同一优先级一优先级,但前者高于后者。但前者高于后者。2.关系运算符优先级低于算术运算符。关系运算符优先级低于算术运算符。C语言提供了六种关系运算符 =!=优先级为:3.关系运算符优先级高于赋值运算符。关系运算符优先级高于赋值运算符。如下图:算术运算符 (+、-、*、/、%)赋值运算符 (=)关系运算符高低举例:ca+b c(a+b)ab!=c (ab)!=ca=bc a=(bc a=(bc)、=、!=二、二、关系表达式关系表达式关系表达式的结果值规定为1或0.如:ab,a+bb+c,(a=3)(b=5),a b,(ab)(bb)=c 成立 1b+cb 则ab值为1,所以d=1.f=abc ab为1,abc为0,所以f=0.在使用关系运算符时,应注意以下几点:在使用关系运算符时,应注意以下几点:1.数数学学中中在在判判别别x是是否否在在区区间间a,b时时,习习惯惯写写成成a x b。在C语言中不能写成a=x=b,而应写成 a=x&x=b&是逻辑运算符(下一节介绍)2.在判定两个浮点数是否相等时,由于存储上的误差在判定两个浮点数是否相等时,由于存储上的误差,可能会得到错误的结果。可能会得到错误的结果。如:1.0/15.0*3.0*5.0=1.0数学中为恒等式 1.0/15.0*3.0*5.0=1.0 C语言中结果可能为假 应改为下面的形式:fabs(1.0/15.0*3.0*5.0)y&c (!a)&b)(xy)&c)!高&低二、二、逻辑表达式逻辑表达式 1.逻逻辑辑表表达达式式的的值值与与关关系系表表达达式式值值一一样样,真真为为1,假为假为0。例:(1)a=4 则!a 值为0.此处只要a 0,为真.则!a值为0.(2)a=4,b=5 a&b为1 前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运算。(5)4&0 2 为1.总之,在逻辑运算中,非0值参加逻辑运算时被看成1处理.(3)a=4,b=5 a b为1(4)a=4,b=5!a b为12.一个逻辑表达式中的逻辑运算符并不是一定一个逻辑表达式中的逻辑运算符并不是一定全部执行全部执行.如:a&b&c.则当a=0(假)时,b,c不需判断。当a=1,b=0,则不需判c.又如:a b c.当a=1时,b,c均不必判别。例如:判断年号是否为闰年。闰年必须满足下列条件中的任意一个:(2)年号能被400整除。(1)年号能被4整除但不能被100整除。设用变量year表示年号 当(year%4=0&year%100!=0)year%400=0)为1时,year为闰年,否则为非闰年。则:当(year%4!=0)(year%100=0&year%400!=0)为1时,year为非润年。如果要判别非闰年可在上述表达式前加非(!)运算符.当!(year%4=0&year%100!=0)year%400=0)为1时,year为非闰年。或者:即:应用应用例一金陵就是南京设a表示金陵,b表示南京即 a=b例二前天下雨并且打雷设m表示前天下雨,b表示前天打雷即 m&n例三a大于b,或者c不大于0即 ab !(c0)或者 ab c=0共有共有6个,分别如下:个,分别如下:1.作用:按位取反如如:a=10011010则:a=011001012.作用:按位左移如如:a=10011010则:a作用:按位右移如:如:a=10011010,b=01010011则:a2=11100110 (a为有符号数)4.&作用:按位与(1&1=1,1&0=0,0&0=0)如:如:a=10011010则:a&b=00010010b=01010011b2=00010100 (b为无符号数)5.|作用:按位或(1|1=1,1|0=1,0|0=0)6.作用:按位异或(11=0,10=1,00=0)如如:a=10011010则:ab=11001001b=01010011如如:a=10011010则:a|b=11011011b=01010011 位运算符分为两类位运算符分为两类位运算符分为两类位运算符分为两类:1.只有一个变量参与运算:,2.有两个变量参与运算:&,|,位运算时,通常采用的是八进制或十六进制数。位运算时,通常采用的是八进制或十六进制数。位运算时,通常采用的是八进制或十六进制数。位运算时,通常采用的是八进制或十六进制数。2.4.5 2.4.5 条件运算符条件运算符问题:当判断条件不论是“真”是“假”,均给同一变量赋值时,能否简化语句书写?条件运算符为?:三目运算符。C语言提供以下的条件运算符:功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。一般形式表达式1?表达式2:表达式3 max=ab?a:b;当ab.max a.否则maxb注:1.条件运算符优先于赋值运算符.例:max=(ab?a:b)可去掉()2.条件运算符低于关系运算符和算术运算符。例:max=ab?a:b+1 max=ab?a:(b+1)并不是 max=(ab?a:b)+1 3.条件运算符结合性为从右至左.如:ab?a:cd?c:d 相当于 ab?a:(cd?c:d)4.条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if,而if(ab)printf(%d,a);else printf(%d,b)不可用条件表达式代替但可表示为:printf(%d,ab?a:b);5.表达式1、表达式2、表达式3可类型不同。main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%c,ch)例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。运行结果如下:A a符号=为赋值运算符。2.整整整整型型型型数数数数据据据据赋赋赋赋给给给给实实实实型型型型变变变变量量量量,数数数数值值值值不不不不变变变变,但但但但按按按按实实实实数数数数形式存放形式存放形式存放形式存放.1.1.将将将将实实实实型型型型数数数数据据据据(无无无无论论论论单单单单,双双双双精精精精度度度度)赋赋赋赋给给给给整整整整型型型型变变变变量量量量时时时时,舍弃小数舍弃小数舍弃小数舍弃小数.赋值时,两边类型若不一致,则按以下规则转换:2.4.6 2.4.6 赋值运算符和赋值表达式赋值运算符和赋值表达式4.将将将将intintlong int,long int,进行符号扩展。进行符号扩展。进行符号扩展。进行符号扩展。即:符号扩展,低16位long 的低16位。5.long int long int int int 则高则高则高则高1616位截断。位截断。位截断。位截断。3.字符型数据赋给整型变量时字符型数据赋给整型变量时字符型数据赋给整型变量时字符型数据赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)字符无符号整型变量,则存入低8位,高8位补零。6.将将将将unsigned int unsigned int 型型型型long intlong int高位补高位补高位补高位补0 0。而位数相同部分赋值 unsigned int int unsigned long long unsigned short short原值传送,但数据大小不能超值。如:unsigned int a=32768;int b;b=a;则b的值超出范围,系统赋予它一个另外的值。a与b的取值对应关系:a:03276765535 b:032767 3276817.非非非非unsigned unsigned 型型型型长长长长度度度度相相相相同同同同的的的的unsignedunsigned型型型型数数数数据据据据,原原原原样传送样传送样传送样传送(包括符号位包括符号位包括符号位包括符号位)一一、复复合合赋赋值值运运算算符符:在在 号号之之前前加加一一个个其其它运算符。它运算符。C语言规定:凡是二目运算符均可构成复合运算符。例:a+=3;相当于 a=a+3 x=y+8;相当于 x=x(y+8)x%=3;相当于x=x%3 一般形式一般形式:二、赋值表达式二、赋值表达式例:x=10 为一赋值表达式 其中又可以是一个赋值表达式。例:x=(y=10)相当于 y=10;x=y 由于赋值号为右结合性,于是()可省略,即为:x=y=10;例: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进一步,还可用复合赋值运算符作下列运算:步骤:aa144.a =a a a=a a a=12 144=132 a+=132 a=a+(132)=2642.4.7 2.4.7 强制类型转换运算符强制类型转换运算符形式:(类型名)(表达式)可利用强制类型转换运算符将一个算术表达式转换为所需类型例如:(double)a 将a转换为double(int)(x+y)将x+y转换为int(float)(5%3)将5%3转换为float注:1.括号不能省略括号不能省略括号不能省略括号不能省略。否则:intx 会理解为变量intx.又如:(int)(x+y)若省略:(int)x+y会变成只将x转成整型.2.转换后的类型数据由系统分配一个中间变量转换后的类型数据由系统分配一个中间变量转换后的类型数据由系统分配一个中间变量转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变存放,而原变量类型不变存放,而原变量类型不变存放,而原变量类型不变。若有:float x;则:(int)x;x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。例例:#includemain()float x,y;int m,n;x=3.6;m=36;n=x;y=m;printf(x=%f,y=%f,m=%d,n=%dn,x,y,m,n);运行结果运行结果:x=3.600000,y=36.000000,m=36,n=3且:强制类型转换运算优先于算术运算符.小结:小结:小结:小结:有二种方法进行数据类型转换:1.强制2.系统自动如:若x为float,则x%3不合法。但可用(int)x%3来解决 一般形式一般形式:表达式表达式1 1,表达式表达式2 2其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。例:a=35,a 4则:先计算3 5,a15,a 4=60,结果为60。2.4.8 2.4.8 逗号运算符和逗号表达式逗号运算符和逗号表达式又如:(a=35,a 4),a+5 扩展形式:扩展形式:表达式表达式1,表达表达2,表达式表达式n,结果为20(作为逗号表达式的值)(3)a+5a 即 20a.(1)3 5=15a(2)a 4=60 (此时a值仍未变)结果为表达式n的值 (1)x=(a=3,63)赋值表达式,x的值18;(2)x=a=3,6 a 逗号表达式,x的值3.逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);注意:注意:一.表达式语句printf(“a=%dn”,a);表达式加上一个分号(;).如:i=i+1;i+;x+y;其函数调用也可理解为表达式语句.2.4.9 C2.4.9 C语言基本语句结构语言基本语句结构空语句空语句 ;任何事情都不做.二.复合语句用 括起来的一系列语句。如:z=x+y;t=z/100;printf(%f,t);三三.控制语句控制语句改变语句的执行顺序改变语句的执行顺序共有共有5种控制语句种控制语句:(1)if()else (条件)(2)switch ()(多分支)(4)while()(循环)(5)do while (循环)(3)for()(循环)()表示条件,表示语句(1)continue ;(结束本次循环)(2)break ;(中止整个循环或switch结构)(3)goto 标号 ;(转移)(4)return ;(函数返回)四、转向控制语句四、转向控制语句:2.5 C2.5 C语言的基本输入输出函数简介语言的基本输入输出函数简介 前面已论述:C语言本身无输入/输出语句,由函数实现,如printf等。一般:C语言提供了一些标准的输入/输出函数系统函数。2.5.1 printf 函数函数格式输出函数格式输出函数一、一、printf的一般形式的一般形式 C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。printf(格式控制序列,输出表列);输出表列 用“,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。格式控制序列用双引号“.”括起来的格式符序列。格式控制序列由格式说明符和普通字符组成。2.普通字符普通字符 原样输出1.格式说明符格式说明符:由%接格式字符组成 如:%f,%d等例:a=3;b=4;printf(a=%d,b=%d,a,b);结果:a=3,b=4无论 a,b中位数多少,均为上述形式:如:a=123,b=45二、格式字符二、格式字符不同类型的数据输出,用不同格式字符:1.1.d d格式符格式符十进制整数输出。十进制整数输出。(1)%d:按数据的实际长度输出。(2)%md:m表示输出字段宽度。若实际位数m,则m自动取n值,即保证n个字符正常输出。(2)%ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格。7.7.f f格式符格式符以小数形式输出单、双精度实数,以小数形式输出单、双精度实数,有以下几种形式有以下几种形式:%m.nf,指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。%mn.f,与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。%f%m.nf%m.nf8.8.e e格式符格式符以指数形式输出单以指数形式输出单,双精度实数双精度实数基本形式基本形式:%e:%e结果:1.23456可有%m.ne和%m.ne的形式9.g格式符根据实数大小自动选择f格式,或e格式输出单双精度实数。e+02例:printf(%e,123.456)printf格式字符总结格式字符总结格式字符d以带符号的十进制形式输出整数(正数不输出符号)oxucsfeg以8进制无符号形式输出整数(不输出前导符o)。以16进制无符号形式输出整数(不输出前导符0 x)。以无符号10进制形式输出整数。以字符形式输出,只输出一个字符。说明输出字符串。以小数形式输出单、双精度数,隐含输出6位小数。以标准形式输出单、双精度数,数字部分小数位数为6位。选用f或%e格式中输出宽度较短的一种格式,不输出无意义的0。许多情况与具体机器或系统有关,最好机器上一试。表表2.5.1 附加格式说明字符附加格式说明字符字符说明用于长整型整型,可加在格式符d、o、x、u前面。数据最大宽度对实数,表示输出n位小数;对字符串,表示截取的字符个数。输出的数字或字符在域内向左靠。m(代表一个正整数).n(代表一个正整数)字母12.5.2 scanf函数函数功能:在标准输入装置(键盘)上按指定格式 输入各种类型的数据地址表列 变量的地址或字符串首地址。形式:scanf(格式控制序列,地址表列)格式控制序列同printf(.)用&(变量名)表示取的地址如:&a,&b等等。例:main()int a,b,c;printf(please input 3 number:n)scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%dn,a,b,c);运行,机器等待你输入:please input 3 number:3 4 53,4,5 1.scanf函数用地址量接受数据。函数用地址量接受数据。2.输入数据的间隔为输入数据的间隔为,Tab,空格空格,不能为不能为“,”.3.允许在格式符中插入附加字符。格式字符允许在格式符中插入附加字符。格式字符及附加字符的定义如下表及附加字符的定义如下表.注意注意注意注意scanf格式字符格式字符格式字符d用来输入十进制整数。oxcsfe用来输入八进制整数。用来输入十六进制整数。用来输入单个字符。说明用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志 0作为其最后一个字符。用来输入实数,可以用小数形式或指数形式输入。和f作用相同,e与f可以互相替换。scanf附加的格式说明字符附加的格式说明字符字符说明用于输入长整型数据(可用ld,%lo,%lx),以及double型数据(用%lf或%le)用于输入短整型数据(可用%hd,%ho,%hx)表示本输入项在读入后不赋给相应的变量h域宽(为一正整数)*l指定输入数据所占宽度(列数)4.对于输入对于输入unsigned型数据型数据,不用不用%u,而用而用%d,%o,%x.5.指定数据长度时指定数据长度时,系统自动截取。系统自动截取。scanf(%3d%3d,&a,&b);例如:int a,bprintf(a=%d,b=%d,a,b)则当输入123456789 后显示:a=123,b=4567.输入数据不能规定精度输入数据不能规定精度.6.在在%后加后加“*”表示跳过相应的数据表示跳过相应的数据则当输入为12 345 67则a12 b67scanf(%2d%*3d%2d,&a,&b);scanf(%7.2f,&a);是错误的8.在格式控制中除格式说明符外若还有其它字符在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。则应按顺序原样输入。例:scanf(%d,%d,&a,&b);则必须输入 21,28又如:scanf(a=%d,b=%d,c=%d,&a,&b,&c);则输入:a=34,b=58,c=100提示提示:输入格式要求比较严格,稍有疏忽,输入格式要求比较严格,稍有疏忽,就会出错。就会出错。例:int a,bscanf(%d,%d,&a,&b);printf(a=%d,b=%d,a,b);则结果显示:a=12345,b=23266(或其他不定的数)显然b的结果是错误的。若输入:12345(或12345 23456)应输入:12345,23456形式:putchar(c);功能:向终端(一般为显示器)输出一个字符,其中c为 字符型或整型变量用该函数时,须用预编译命令:#include stdio.h 2.5.3 putchar 函数函数 字符输出函数字符输出函数注意注意注意注意举例:结果:BOY#include stdio.hmain()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);*利用putchar还可输出其它转义字符结果:B O Y putchar(101);输出Aputchar();输出putchar(015);输出*若将最后一行改为:3.5.4 getchar 函数函数形式:getchar()功能:从标准输入装置(键盘)上输入一个字符要求:有#include stdio.h预编译命令例:#include stdio.h main()char c;printf(”please input a char:n)c=getchar();putchar(c);程序举例程序举例例1:输入三角形三边,求三角形面积。程序如下:程序如下:程序如下:程序如下:#include#include main()float a,b,c,s,area;printf(Please input three sides length:n);scanf(%f,%f,%f,&a,&b,&c);if(a+b)c&abs(a-b)c)/*三角形构成条件*/s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(The area of triangle is%5.2f,area);elseprintf(Error sides!);1、不同类型的变量有不同的取值范围。2、要注意正确的使用运算符来达到不同的目的。3、输入、输出功能是通过调用系统函数完成的。4、熟练掌握程序上机调试、运行。本章小结:本章小结: