配色: 字号:
第3章顺序程序设计
2022-05-20 | 阅:  转:  |  分享 
  
3第章最简单的C程序设计——顺序程序设计顺序程序设计举例N-S流程图【例3.2】有人用温度计测量出用华氏法表示的温度(如64°F),今要求
把它转换为以摄氏法表示的温度(如17.8℃)。输入f的值输出c的值?#includeintmain(){ f
loatf,c;//定义f和c为单精度浮点型变量 f=64.0;//指定f的值 c=(5.0/9)(f-32);//利用公式计
算c的值 printf("f=%f\nc=%f\n",f,c); //输出c的值 return0;}N-S流程图顺序程序设计
举例【例3.2】计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为r1;(2)一年期定期,年利率为r2;(
3)存两次半年定期,年利率为r3。请分别计算出一年后按3种方法所得到的本息和。输入p0,r1,r2,r3的值输出p1,p2,p3?
#includeintmain(){ floatp0=1000,r1=0.0036,r2=0.022
5,r3=0.0198,p1,p2,p3; //定义变量 p1=p0(1+r1);//计算活期本息和 p2=p0(1+
r2);//计算一年定期本息和 p3=p0(1+r3/2)(1+r3/2); //计算存两次半年定期的本息和 printf("
p1=%f\np2=%f\np3=%f\n",p1,p2,p3); //输出结果 return0;}在定义实型变量的同时,对
部分变量赋予初值在输出p1,p2和p3的值之后,用\n使输出换行在计算机高级语言中,数据的两种表现形式:常量变量AB常量1整型常
量.…………………………………………1000,12345,0,-3452实型常量.…………………………………………小数形式12
3.456;指数形式12.34e3,-34.8E-233字符常量.…………………………………………普通字符’a’,’Z’,’#’
;转义字符’\n’,’\012’,’\h1B’4字符串常量.…………………………………………“123”,”boy”5符号常量.…
………………………………………#definePI3.1416//注意行末没有分号转义字符变量变量代表一个有名字的、具
有特定属性的一个存储单元。变量用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。变量
名a变量值3存储单元常变量Constinta=3定义a为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变常变量与
常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名
字的不变量。有名字就便于在程序中被引用。#definePi3.1415926 //定义符号常量constfloatpi=3
.1415926; //定义常变量符号常量Pi和常变量pi都代表3.1415926,在程序中都能使用。但二者性质不同:定义符号常
量用#define指令,它是预编译指令,它只是用符号常量代表一个字符串,在预编译时仅进行字符替换,在预编译后,符号常量就不存在了(
全置换成3.1415926了),对符号常量的名字是不分配存储单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。从使用的
角度看,常变量具有符号常量的优点,而且使用更方便。有了常变量以后,可以不必多用符号常量。说明:有些编译系统还未实现C99的功能
,因此不能使用常变量。标识符标识符就是一个对象的名字。用于标识变量、符号常量、函数、数组、类型等标识符只能由字母、数字和下划线
3种字符组成,且第1个字符必须为字母或下划线注意变量名中区分大小写字母不能使用关键字作为变量名变量的名字应该尽量反映变量在程序中的
作用与含义C语言中的关键字Autobreakcasecharconstcontinuedefaultdodoubleelseenu
mexternfloatforgotoifintlongregisterreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoidvolatilewhile数据类型所谓类型,就是对数据分配
存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。计算机中带符号整型数的表示
:补码正整数的补码就是此数的二进制形式,5的补码:0000000000000101负整数的补码是①将此数绝对值的二进制形式;②除最
高位符号位外其他数取反;③加1。-5的补码:1000000000000101111111111111101001111111111
11011整型数据整型数据类型缺省形式的整型数据类型字节数取值范围[signed]intint4-2147483648~2147
483647(-231~231-1)unsigned[int]Unsigned40~4294967295(0~232-1)[si
gned]short[int]short2-32768~32767(-215~215-1)unsignedshort[in
t]unsignedshort20~65535(0~216-1)[signed]long[int]long4-2147483
648~2147483647(-231~231-1)unsignedlong[int]unsignedlong40~4294
967295(0~232-1)[signed]longlong[int]longlong8-922337203685477
5808~9223372036854775807(-263~263-1)unsignedlonglong[int]unsig
nedlonglong80~18446744073709551615(0~264-1)说明:C标准没有具体规定各种类型数据所
占用存储单元的长度,只要求sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(longl
ong),具体由各编译系统自行决定的。sizeof是测量类型或变量长度的运算符。整型数据(1)只有整型(包括字符型)数据可以加s
igned或unsigned修饰符,实型数据不能加。(2)对无符号整型数据用“%u”格式输出。%u表示用无符号十进制数的格式输出
。如:在将一个变量定义为无符号整型后,不应向它赋予一个负值,否则会得到错误的结果。如:unsignedshortprice=
50; //定义price为无符号短整型变量printf("%u\n",price);//指定用无符号十进制数的格式输出unsig
nedshortprice=-1; //不能把一个负整数存储在无符号变量中printf("%d\n",price);字符型
数据ASCII字符集包括:字母:大写英文字母A~Z,小写英文字母a~z数字:0~9专门符号:29个,包括!"#&
''()+,-./:;<=>?[\]^_`{|
}~空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(formfeed)不能显示的字符:空(null)字符(
以''\0''表示)、警告(以''\a''表示)、退格(以''\b''表示)、回车(以''\r''表示)等ASCII码表注意字符′1′和整数1是不
同的概念。字符′1′只是代表一个形状为′1′的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节。而整数1是以整
数存储方式(二进制补码方式)存储的,占2个或4个字节。整数运算1+1等于整数2,而字符′1′+′1′并不等于整数2或字符′2′。0
01100010000000000000001字符变量字符变量是用类型符char定义字符变量。charc=''?''; //定义c为
字符型变量并使初值为字符′?′。′?′的ASCII代码是63,系统把整数63赋给变量c。printf("%d%c\n",c,c)
; //用“%d”格式输出十进制整数63,用“%c”格式输出字符′?′浮点型数据3.14159=3.14159100=0.314
159101=314.15910-2由于小数点位置可以浮动,所以实数的指数形式称为浮点数。浮点数类型包括float(单精度浮点
型)、double(双精度浮点型)、longdouble(长双精度浮点型)。注意由于用二进制形式表示一个实数以及存储单元的长度是
有限的,因此不可能得到完全精确的值,只能存储成有限的精确度。小数部分占的位(bit)数愈多,数的有效数字愈多,精度也就愈高。指数部
分占的位数愈多,则能表示的数值范围愈大。+.3141591数符 小数部分指数+ .314159 101 3.14159实
型数据类型字节数有效数字数值范围(绝对值)float460以及1.210-38~3.41038double8150以及2.3
10-308~1.710308longdouble8150以及2.310-308~1.71030816190以及3.41
0-4932~1.1104932常量的类型''n''——字符常量23——整型常量3.14159——浮点型常量从常量的表示形式即可以判
定其类型。不带小数点的数值是整型常量,但应注意其有效范围。在一个整数的末尾加大写字母L或小写字母l,表示它是长整型(longin
t)。凡以小数形式或指数形式出现的实数均是浮点型常量,在内存中都以指数形式存储。C编译系统把浮点型常量都按双精度处理,分配8个字节
。常量、变量与类型floata=3.14159; //3.14159为双精度浮点常量,分配8个字节;a为float变量,分配4个
字节编译时系统会发出警告(warning:truncationfrom′constdouble′to′float′),提
醒用户注意这种转换可能损失精度一般不影响结果的正确性,但会影响结果的精度。可以在常量的末尾加专用字符,强制指定常量的类型:floa
ta=3.14159f; //把此3.14159按单精度浮点常量处理,编译时不出现“警告”longdoublea=1.
23L; //把此1.23作为longdouble型处理类型是变量的一个重要的属性。变量是具体存在的实体,占用存储单元,可以存放
数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。inta;a=3; //正确。对整型变量a赋值int
=3; //错误。不能对类型赋值运算符和表达式运算符1算术运算符 +-/%++--41028126下标
运算符 []位运算符 <<>>~|^&关系运算符 ><==>=<=!=强制类型转换运算符 (
类型)条件运算符 ?:指针运算符 &71331159逗号运算符 ,求字节数运算符 sizeof逻辑运算符 !&&|
|其他 如函数调用运算符()成员运算符 .->赋值运算符 =及其扩展赋值运算符常用的算数运算符运算符含义举例结果+正号运算符(
单目运算符)+aa的值-负号运算符(单目运算符)-aa的算术负值乘法运算符aba和b的乘积/除法运算符a/ba除以b的商%求余
运算符a%ba除以b的余数+加法运算符a+ba和b的和-减法运算符a-ba和b的差两个实数相除的结果是双精度实数,两个整数相除的结
果为整数%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数自增(++)自减(--)运算符++i,--i 在使用i之前,
先使i的值加/减1i++,i-- 在使用i之后,使i的值加/减1++i是先执行i=i+1,再使用i的值;而i++是先使用i的值
,再执行i=i+1。inti=3,j;j=++i; //i的值先变成4,再赋给j,j的值为4inti=3;printf(“%
d”,++i); //输出4inti=3,j;j=i++; //先将i的值3赋给j,j的值为3,然后i变为4inti=3;p
rintf(“%d”,i++); //输出3建议谨慎使用++和--运算符,只用最简单的形式,即i++,i--,且把它们作为单独的表
达式。算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子称为C算术表达式
。运算对象包括常量、变量、函数等。C语言规定了运算符的优先级(例如先乘除后加减),还规定了运算符的结合性。在表达式求值时,先按运算
符的优先级别顺序执行,当在一个运算对象两侧的运算符的优先级别相同时,则按规定的“结合方向”处理。C语言规定了各种运算符的结合方向(
结合性),“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。相反“自右至左的结合方向”称为“右结合性”。不
同类型数据间的混合运算如果一个运算符两侧的数据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、字符
型数据间可以进行混合运算。规律为:+、-、、/运算的两个数中有一个数为float或double型,结果是double型,因为系
统将所有float型数据都先转换为double型,然后进行运算。如果int型与float或double型数据进行运算,先把int型
和float型数据转换为double型,然后进行运算,结果是double型。字符(char)型数据与整型数据进行运算,就是把字符的
ASCII代码与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算
。不同类型数据间的混合运算程序分析inti=3,j;floatf=2.5;doubled=7.5;printf("%lf",
10+''a''+if-d/3);10+''a''+if-d/3①进行10+′a′的运算,′a′的值是整数97,运算结果为107。②
由于“”比“+”优先级高,先进行if的运算。先将i与f都转成double型,运算结果为7.5,double型。③整数107
与if的积相加。先将整数107转换成双精度数,相加结果为114.5,double型。④进行d/3的运算,先将3转换成doubl
e型,d/3结果为2.5,double型。⑤将10+′a′+if的结果114.5与d/3的商2.5相减,结果为112.0,do
uble型。不同类型数据间的混合运算【例3.3】给定一个大写字母,要求用小写字母输出。解题思路:字符数据以ASCII码存储在内
存中,形式与整数的存储形式相同。所以字符型数据和其他算术型数据之间可以互相赋值和运算。大小写字母之间的关系是:同一个字母,用小写
表示的字符的ASCII代码比用大写表示的字符的ASCII代码大32。#includeintmain(){ c
harc1,c2; c1=''A'';//将字符′A′的ASCII代码放到c1变量中 c2=c1+32;//得到字符′a′的ASCI
I代码,放在c2变量中 printf("%c\n",c2); //输出c2的值,是一个字符 printf("%d\n",c2);
//输出c2的值,是字符′a′的ASCII代码 return0;} 存储(ASCII码)"%c" "%d" 输出格式符a
97 显示结果01100001一个字符数据既可以以字符形式输出,也可以以整数形式输出。在运算时不必用户干预,系统自动进行
的类型转换。强制类型转换类型转换当自动类型转换不能实现目的时,可以用强制类型转换。自动类型转换强制类型转换运算符(类型名)(表达式
)(double)a 将a转换成double型(int)(x+y) 将x+y的值转换成int型(float)(5%3) 将5
%3的值转换成float型(int)x+y 只将x转换成整型,然后与y相加inta;floatx,y;doubleb;a=
(int)x进行强制类型运算(int)x后得到一个int类型的临时值,它的值等于x的整数部分,把它赋给a,注意x的值和类型都未变化
,仍为float型。该临时值在赋值后就不再存在了。C语句C程序结构表达式语句函数调用语句空语句控制语句复合语句C语句①i
f()…else…(条件语句)②for()…(循环语句)③while()…(循环语句)④do…while()(循环语句)⑤
continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦switch(多分支选择语句)⑧ret
urn(从函数返回语句)⑨goto(转向语句,在结构化程序中基本不用goto语句)()表示括号中是一个判别条件…表示内嵌的语句表
达式语句函数调用语句空语句控制语句复合语句C语句函数调用语句由一个函数调用加一个分号构成。其中printf("Thisis
aCstatement.")是一个函数调用,加一个分号成为一个语句。printf("ThisisaCstatemen
t.");函数调用语句表达式语句空语句复合语句控制语句C语句表达式语句由一个表达式加一个分号构成,最典型的是由赋值表达式构成
一个赋值语句。例如:a=3是一个赋值表达式,而a=3;是一个赋值语句。表达式语句函数调用语句空语句复合语句控制语句C语句;只
有一个分号的语句即为空语句。可以用来作为流程的转向点(流程从程序其他地方转到此语句处);也可用来作为循环语句中的循环体(循环体是空
语句,表示循环体什么也不做)。空语句表达式语句函数调用语句复合语句控制语句C语句可以用{}把一些语句和声明括起来成为复合语句(
又称语句块)。复合语句常用在if语句或循环中,此时程序需要连续执行一组语句。 复合语句中最后一个语句末尾的分号不能忽略不写。{ f
loatpi=3.14159,r=2.5,area;//定义变量 area=pirr; printf("area=%f
",area);}表达式语句函数调用语句空语句注意复合语句控制语句C语句赋值语句【例3.4】给出三角形的三边长,求三角形面积。
?#include#includeintmain(){ doublea,b,c,s,
area;//定义各变量,均为double型 a=3.67;//对边长a赋值 b=5.43;//对边长b赋值 c=6.21;
//对边长c赋值 s=(a+b+c)/2;//计算s area=sqrt(s(s-a)(s-b)(s-c)); //计算
area printf("a=%f\tb=%f\t%f\n",a,b,c); //输出三边a,b,c的值 printf("a
rea=%f\n",area);//输出面积area的值 return0;}sqrt函数是求平方根的函数。由于要调用数学函数库
中的函数,必须在程序的开头加一条#include指令,把头文件“math.h”包含到程序中来。转移字符′\t′用来调整输出的位置,
使输出的数据清晰、整齐、美观为提高精度,变量都定义为双精度类型赋值运算符“=”“=”的作用是将一个数据赋给一个变量。例如:a=3的
作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。复合赋值运算符在赋值符=之前加上
其他运算符,可以构成复合的运算符。凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。有关算术运算的复合赋值运算符有+=,
-=,=,/=,%=。注意如果赋值符右边是包含若干项的表达式,则相当于它有括号。例如,x%=y+3等价于x=x%(y+3),切勿
错写为x=x%y+3。a+=3 等价于a=a+3x=y+8 等价于x=x(y+8)x%=3 等价于x=x%3赋值表达式:
变量赋值运算符表达式赋值表达式的作用是将一个表达式的值赋给一个变量,因此赋值表达式具有计算和赋值的双重功能。对赋值表达式求
解的过程是:①求赋值运算符右侧的“表达式”的值,②赋给赋值运算符左侧的变量。既然是一个表达式,就应该有一个值,表达式的值等于赋值
后左侧变量的值。赋值运算符左侧应该是一个可修改值的“左值”(leftvalue,简写为lvalue)。能出现在赋值运算符右侧的表
达式称为“右值”(rightvalue,简写为rvalue)。注意并不是任何形式的数据都可以作为左值的,左值应当为存储空间并可以
被赋值。变量可以作为左值,而算术表达式a+b就不能作为左值,常量也不能作为左值。赋值表达式:变量赋值运算符表达式a=(
b=5)括号内的b=5是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”,就是执行b=5和a=b两个赋值表达式。因此a的
值等于5,整个赋值表达式的值也等于5。赋值运算符按照“自右而左”的结合顺序,因此,(b=5)外面的括号可以不要,即a=(b=5)和
a=b=5等价,都是先求b=5的值(得5),然后再赋给a。赋值表达式使得赋值操作不仅可以出现在赋值语句中,而且可以出现在其他语句中
(如输出语句、循环语句等)如:printf("%d",a=b);如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一
个printf函数中完成了赋值和输出双重功能。a=b=c=5 表达式值为5,a,b,c值均为5a=5+(c=6) 表达式值为1
1,a值为11,c值为6a=(b=4)+(c=6) 表达式值为10,a值为10,b等于4,c等于6a=(b=10)/(c=2)
表达式值为5,a等于5,b等于10,c等于2a=(b=34) 表达式值为12,a,b值均为12赋值过程中的类型转换如果赋值运算
符两侧的类型一致,则直接进行赋值。inti;i=234; //直接将整数234存入变量i的存储单元中如果赋值运算符两侧的类型不一
致,但都是基本类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,转换的规则是:将浮点型数据(包括单、双精度)赋给整型变量
时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量。将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。将一个
double型数据赋给float变量时,先将双精度数转换为单精度,即只取6~7位有效数字,存储到float型变量的4个字节中。应注
意双精度数值的大小不能超出float型变量的数值范围;将一个float型数据赋给double型变量时,数值不变,在内存中以8个字节
存储,有效位数扩展到15位。字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。将一个占字节多的整型数据赋给一个占字节少
的整型变量或字符变量时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)。赋值表达式和赋值语句C语言的赋值语句属于表达式语
句,由一个赋值表达式加一个分号组成。在一个表达式中可以包含另一个表达式。if((a=b)>0)max=a;/先进行赋值运算(将
b的值赋给a),然后判断a是否大于0,如大于0,执行max=a。请注意,在if语句中的a=b不是赋值语句,而是赋值表达式。/注意
区分赋值表达式和赋值语句。赋值表达式的末尾没有分号,而赋值语句的末尾必须有分号。在一个表达式中可以包含一个或多个赋值表达式,但绝不
能包含赋值语句。变量赋初值可以用赋值语句对变量赋值,也可以在定义变量时对变量赋以初值。inta=3;//指定a为整型变量,初值为
3;相当于inta;a=3;floatf=3.56; //指定f为浮点型变量,初值为3.56charc=′a′; //指定
c为字符变量,初值为′a′inta,b,c=5; //指定a,b,c为整型变量,但只对c初始化,c的初值为5; //相当于int
a,b,c;c=5;对几个变量赋予同一个初值:inta=3,b=3,c=3;inta=b=c=3; //可以先定义,再用赋
值语句,即inta,b,c;a=b=c=3;数据的输入输出输入输出举例【例3.5】求ax2+bx+c=0方程的根。a,b,c由
键盘输入,设b2-4ac>0。?#include#include //程序中要调用求平方根函数
sqrtintmain(){ doublea,b,c,disc,x1,x2,p,q;//disc用来存放判别式(bb-4a
c)的值 scanf("%lf%lf%lf",&a,&b,&c);//输入双精度型变量的值要用格式声明″%lf″ disc=bb
-4ac; p=-b/(2.0a); q=sqrt(disc)/(2.0a); x1=p+q;x2=p-q;//求出方程的
两个根 printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); //输出方程的两个根 return0;}在p
rintf函数中,在格式符f的前面加了“7.2”,表示在输出x1和x2时,指定数据占7列,其中小数占2列。优点:①可以根据实际需要
来输出小数的位数;②如果输出多个数据,可使输出数据整齐美观。scanf函数用于输入a,b,c的值。函数中括号内变量a,b,c的前面
,要用地址符&。&a表示变量a在内存中的地址。双引号内用%lf格式声明,表示输入的是双精度型实数。格式声明为“%lf%lf%lf”
,要求输入3个双精度实数。程序运行时,输入“132”,两个数之间用空格分开。输入的虽是整数,但由于指定用%lf格式输入,因此系
统会先把这3个整数转换成实数1.0,3.0,2.0,然后赋给变量a,b,c。有关输入输出的概念231C语言本身不提供输入输出语句输
入输出是以计算机主机为主体而言的要在程序文件的开头用预处理指令#include把有关头文件放在本程序中#includeo.h>输出输入和输出操作是由C标准函数库中的函数来实现的。优点:简化编译系统简化增强通用性和可移植性#include指令说明三种
形式:#include"c:\cpp\include\myfile.h"?#include"myfile.h“??#in
clude??按指定路径查找文件?源程序文件所在目录?C编译系统指定的include目录输入printf函
数用来向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。printf("i=%d,c=%c\n",i,c)prin
tf(格式控制,输出表列)普通字符格式声明格式控制 输出列表(1)“格式控制”是用双引号括起来的一个字符串,称为格式控制字符
串,简称格式字符串。包括:①格式声明。格式声明由“%”和格式字符组成。作用是将输出的数据转换为指定的格式后输出。②普通字符。
普通字符即需要在输出时原样输出的字符。(2)输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。printf函数——格
式声明格式字符说明d,i以带符号的十进制形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前导符0)x,X
以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出u以无符号
十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单、双精度数,隐含输出6位小数e,E以指数形式输出实
数,用e时指数以“e”表示(如1.2e+02),用E时指数以“E”表示(如1.2E+02)g,G选用%f或%e格式中输出宽度较短的
一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示%附加字符格式字符(1)printf函数输出时,务
必注意输出对象的类型应与上述格式说明匹配,否则将会出现错误。(2)除了X,E,G外,其他格式字符必须用小写字母,如%d不能写成%
D。(3)可以在printf函数中的格式控制字符串内包含转义字符,如\n,\t,\b,\r,\f和\377等。(4)一个格式声
明以“%”开头,以格式字符之一为结束,中间可以插入附加格式字符(也称修饰符)。(5)如果想输出字符“%”,应该在“格式控制字符串
”中用连续两个“%”表示,如:printf(″%f%%\n″,1.0/3);附加字符说明l长整型整数,可加在格式符d、o、
x、u前面)m(代表一个正整数)数据最小宽度n(代表一个正整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数-输出的数字
或字符在域内向左靠printf函数举例【例3.6】用%f输出实数,只能得到6位小数。#includeintm
ain(){ doublea=1.0; printf("%f\n",a/3); return0;}注意在用%f输出时要注意数据
本身能提供的有效数字,如float型数据的存储单元只能保证6位有效数字。double型数据能保证15位有效数字。#include
intmain(){ doublea=1.0; printf("%20.15f\n",a/3); retur
n0;}一个双精度数只能保证15位有效数字的精确度,即使指定小数位数为50(如用%55.50f),也不能保证输出的50位都是有效
的数字。虽然a是双精度型,a/3的结果也是双精度型,但是用%f格式声明只能输出6位小数。scanf函数用来输入数据。scanf("
a=%f,b=%f,c=%f",&a,&b,&c);scanf(格式控制,地址表列)普通字符格式声明格式控制地址列表(
1)“格式控制”是用双引号括起来的一个字符串,含义同printf函数。包括:①格式声明。以%开始,以一个格式字符结束,中间可
以插入附加的字符。②普通字符。(2)地址表列是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。scanf函数——
格式声明格式字符说明d,i输入有符号的十进制整数u输入无符号的十进制整数o输入无符号的八进制整数x,X输入无符号的十六进制
整数(大小写作用相同)c输入单个字符s输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符
串以串结束标志′\0′作为其最后一个字符f输入实数,可以用小数形式或指数形式输入e,E,g,G与f作用相同,e与f、g可以互相替换
(大小写作用相同)%附加字符格式字符(1)scanf函数中的格式控制后面应当是变量地址,而不是变量名。应与上述格式说明匹
配,否则将会出现错误。(2)如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的
字符。(3)在用“%c”格式声明输入字符时,空格字符和“转义字符”中的字符都作为有效字符输入。(4)在输入数值数据时,如输入空格
、回车、Tab键或遇非法字符(不属于数值的字符),认为该数据结束。附加字符说明l输入长整型数据(可用%ld,%lo,%lx
,%lu)以及double型数据(用%lf或%le)h输入短整型数据(可用%hd,%ho,%hx)域宽指定输入数据所占宽度(列数)
,域宽应为正整数本输入项在读入后不赋给相应的变量字符函数getcharputchar输入输出putchar函数用putch
ar函数既可以输出可显示字符,也可以输出控制字符和转义字符。putchar(c)中的c可以是字符常量、整型常量、字符变量或整型变量
(其值在字符的ASCII代码范围内)。从计算机向显示器输出一个字符。putchar(c)【例3.8】先后输出BOY三个字符。解题思
路:定义3个字符变量,分别赋以初值′B′,′O′,′Y′,然后用putchar函数输出这3个字符变量的值。#include<
stdio.h>intmain(){ chara=''B'',b=''O'',c=''Y''; //定义3个字符变量并初始化 putcha
r(a);//向显示器输出字符B putchar(b);//向显示器输出字符O putchar(c);//向显示器输出字符Y pu
tchar(''\n'');//向显示器输出一个换行符 return0;}#includeintmain()
{ inta=66,b=79,c=89; putchar(a); putchar(b); putchar(c); putc
har(''\n''); return0;}getchar函数向计算机输入一个字符。getchar()【例3.9】从键盘输入BO
Y3个字符,然后把它们输出到屏幕。函数没有参数。函数的值就是从输入设备得到的字符。只能接收一个字符。如果想输入多个字符就要用多个
函数。不仅可以从输入设备获得一个可显示的字符,而且可以获得控制字符。用getchar函数得到的字符可以赋给一个字符变量或整型变量,
也可以作为表达式的一部分。如,putchar(getchar());将接收到的字符输出。解题思路:用3个getchar函数先后
从键盘向计算机输入BOY3个字符,然后用putchar函数输出。#includeintmain(){ chara,b,c; //定义字符变量a,b,c a=getchar(); //从键盘输入一个字符,送给字符变量a b=getchar(); //从键盘输入一个字符,送给字符变量b c=getchar(); //从键盘输入一个字符,送给字符变量c putchar(a); //将变量a的值输出 putchar(b); //将变量b的值输出 putchar(c); //将变量c的值输出 putchar(''\n'');//换行 return0;}getchar函数【例3.10】改写例3.3程序,使之可以适用于任何大写字母。从键盘输入一个大写字母,在显示屏上显示对应的小写字母。解题思路:用getchar函数从键盘读入一个大写字母,把它转换为小写字母,然后用putchar函数输出该小写字母。#includeintmain(){ charc1,c2; c1=getchar(); //从键盘读入一个大写字母,赋给字符变量c1 c2=c1+32; //得到对应的小写字母的ASCII代码,放在字符变量c2中 printf("大写字母:%c\n小写字母:%c\n",c1,c2); //输出c1,c2的值 return0;}#includeintmain(){ charc1,c2; c1=getchar(); //从键盘读入一个大写字母,赋给字符变量c1 c2=c1+32; //求对应小写字母的ASCII代码,放在字符变量c2中 putchar(c2); //输出c2的值,是一个字符 putchar(''\n''); return0;}用printf函数输出指数形式:由于在计算机输入或输出时无法表示上角或下角,故规定以字母e或E代表以10为底的指数。但应注意:e或E之前必须有数字,且e或E后面必须为整数。如不能写成e4,12e2.5。普通字符:用单撇号括起来的一个字符。转义字符:C语言还允许用一种特殊形式的字符常量,就是以字符“\”开头的字符序列。这是一种在屏幕上无法显示的“控制字符”。字符串常量:用双引号把若干个字符括起来,字符串常量是双引号中的全部字符(但不包括双引号本身)。符号常量:用#define指令,指定用一个符号名称代表一个常量。误差与溢出
献花(0)
+1
(本文系太好学原创)