第二章顺序结构程序设计_第1页
第二章顺序结构程序设计_第2页
第二章顺序结构程序设计_第3页
第二章顺序结构程序设计_第4页
第二章顺序结构程序设计_第5页
已阅读5页,还剩189页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章

顺序结构程序设计内容简介程序结构分为顺序结构、选择结构和循环结构三种。用这三种基本结构可以实现任何复杂的算法。顺序结构是三种基本程序结构中最简单的一种。它是按照程序代码书写的先后顺序来执行的,程序自始至终只沿着一个方向执行。语句A语句B语句C顺序结构流程图内容简介顺序结构由于程序流程过于单一,所以不能实现复杂的算法,一般只用于编写一些不需要对流程进行控制的简单程序。本章将重点介绍整型、实型和字符型三大基本数据类型的使用方法。2.1C语言源程序结构C语言源程序结构:1.一个C语言源程序可以由一个或多个源文件组成。

2.每个源文件可由一个或多个函数组成,函数是构成C源程序的基本单位。

2.1C语言源程序结构3.

main函数可以位于源程序的任何位置。但是,不管main函数位于源程序的开头、中间,还是末尾,程序是都从main函数开始执行,并且在main函数中结束,即main函数是整个程序的入口和出口。课堂练习1、C源程序的基本单位是___________。2、一个C源程序应至少包括一个___________函数。3、在一个C源程序中,注释部分两侧的分界符分别为_______和_______。4、一个C程序的执行是从_______开始的,到_______结束的。5、C语言规定:在一个源程序中,main函数的位置()。A.必须在最开始B.必须在系统调用的库函数后面

C.可以任意D.必须在最后课堂练习

2.2最简单的C程序【例2.1】在屏幕上输出“IloveCprogramm.”voidmain(){printf("IloveCprogramm.");}运行程序2.2最简单的C程序【例2.2】在屏幕上输出圣诞树的图案。运行程序数据类型C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int2.3整型数据整型数据是不包含小数部分的数值型数据,分为整型常量和整型变量两种。常量:在整个程序运行期间其值都不会发生变化变量:在程序运行期间其值会发生改变2.3.1整型常量常量分为字面常量和符号常量。字面常量可以直接看出其数值符号常量则是用一个标识符代表一个数值

字面整型常量(整常数)十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xffmain(){printf(“%d\n”,123);}main(){printf(“%d\n”,0123);}main(){printf(“%d\n”,0x123);}2.3.1整型常量2.3.1整型常量(2)符号常量的定义格式:#define标识符数值如:#defineN10N表示符号常量名,代表数值10。例符号常量举例#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}运行结果:total=3002.3.1整型常量符号常量使用注意事项:①定义符号常量这一行属于预处理命令,不是C语句,末尾不加分号。②符号常量名通常用大写字母表示。2.3.2整型变量分类整型变量分为三大类:基本整型、短整型和长整型。根据有无符号位,每一大类整型数据又可以分为有符号和无符号两种类型。因此,C语言整型变量分为六种类型。2.3.2整型变量分类整型变量类型长度取值范围有符号基本整型2字节-32768~32767(-215~215-1)无符号基本整型2字节0~65535(0~216-1)有符号短整型2字节-32768~32767(-215~215-1)无符号短整型2字节0~65535(0~216-1)有符号长整型4字节-231~231-1无符号长整型4字节0~232-12.3.2整型变量分类对于整型常量,如果其值在-32768~32767之间,则认为它是int类型,如果超出这个范围,但在-231~231-1之间,则认为是长整型。整型常量后面加上字母u或U,则认为是unsignedint型。如,-3u是无符号整型常量。整型常量后面加上l或L,则认为是长整型。如,0L是长整型常量。2.3.3整型变量定义变量的两个要素(1)变量名

每个变量都必须有变量名,变量名实际上是一个符号地址。在对程序进行编译连接时系统会给每个变量名分配一个内存地址。(2)变量值

在程序运行过程中,变量值存储在内存中,系统通过变量名来引用变量的值。2.3.3整型变量定义变量名2000H34a变量值内存地址inta;a=34;2.3.3整型变量定义有符号基本整型:[signed]int变量名;无符号基本整型:unsigned[int]变量名;有符号短整型:[signed]short[int]变量名;无符号短整型:

unsignedshort[int]变量名;有符号长整型:[signed]long[int]变量名;无符号长整型:

unsignedlong[int]变量名;方括号“[]”括起来的是可选项,在定义变量时可以省略。2.3.3整型变量定义如:inti;unsignedintu;shortk;unsignedshorts;longm;unsignedlongn;2.3.3整型变量定义变量名命名规则:(1)以字母或下划线开头(2)只能由字母、数字和下划线组成(3)不能用C语言关键字作标识符2.3.3整型变量定义32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2.3.3整型变量定义例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b2.3.3整型变量定义定义变量注意事项:所有的变量都要先定义后使用变量名严格区分大小写字母变量名通常用小写字母表示课堂练习1.以下字符列中,能作为C程序自定义标识符的是()A.num(10)B.file_bakC.breakD.class+22.下列字符列中,不是C语言提供的合法关键字是()A.switchB.beginC.caseD.default2.3.4整型变量赋值在C语言中,赋值运算符是“=”,其作用是将一个数据赋给一个变量。如:inta;a=3;2.3.4整型变量赋值也可以在定义变量的同时给变量赋初值,这种赋值方法称为变量的初始化。如:intb=2;2.3.4整型变量赋值inta,b,c;a=b=c=5;表示定义了a、b、c三个变量,并使a,b,c的值都为5。注意:不能写成inta=b=c=5;否则在编译程序时会报错,提示变量b和c没有定义。2.3.4整型变量赋值关于变量赋值操作的注意事项:(1)C语言在运行程序时才对变量进行赋值操作,在编译阶段系统只负责给变量分配存储空间。(2)定义变量后如果没有对变量进行赋值操作,则其值是不确定的。2.3.4整型变量赋值(3)对整型变量赋以小数时,只保留整数部分,小数部分被直接舍弃掉,不作四舍五入。如:inta=1.8;a中实际存储的值为1。2.3.4整型变量赋值(4)对整型变量进行赋值时要注意不能超出变量的取值范围。如果所赋的值超出范围,则不能得到正确的结果。如,int类型的取值范围是-32768~32767,如果将32768赋给int类型的变量,则其得到的实际值为-32768,这种现象称为数据溢出。2.3.4整型变量赋值以int类型为例,如果对其赋的值超过32767但又小于或等于65536,则其实际得到的值为这个数减去65536的差。如:inta=32768;,则a中实际存储的值为32768与65536的差,即-32768如:intb=65530;,则b中实际存储的值为65530与65536的差,即-62.3.4整型变量赋值如果对int类型的变量赋的值小于-32768但又大于或等于-65536,则其实际得到的值为这个数加上65536的和。如:intb=-65510;,则b中实际存储的值为-65510和65536的和,即26。2.3.4整型变量赋值对于unsignedint类型的变量,其允许的取值范围是0~65535,如果赋的值超过65535,则将该数值除以65536,得到的余数即实际存储的值。如果赋的值是大于-65536的负整数,则将这个负整数加上65536,得到的和即实际存储的值。如:unsignedintb=-1;,则b中实际存储的值为-1与65536的和,即65535。2.3.4整型变量赋值不同类型的整型变量可以相互赋值,但实际存储的数值仍然由变量的取值范围来决定。如:unsignedintb=65535;inta=b;则a中实际存储的值为65535与65536的差,即-1。课堂练习

以下程序段运行结果是()inti=010,j=10.5,k=65535;

printf(“%d,%d,%d\n”,i,j,k);A)10,11,65535B)8,10,0C)8,10,-1D)16,10,-32767C整型数据的输入通过scanf函数来实现。2.3.5整型数据输入scanf函数的格式:scanf(“格式控制字符串”,地址表列);格式控制串由格式字符(简称格式符)和普通字符组成。变量地址的表示方法为:&变量名不同类型的数据类型对应的格式字符也不同int类型的格式符为“%d”unsignedint类型的格式符为“%u”longint的格式符为“%ld”2.3.5整型数据输入如:inta;unsignedb;longintc;其输入数据的格式分别为:scanf("%d",&a);scanf("%u",&b);scanf("%ld",&c);2.3.5整型数据输入2.3.5整型数据输入(1)“%d%d”表示按十进制整数形式输入两个整数。输入数据时,在两个数据之间要以一个或多个空格、回车键、tab键间隔。

整型数据输入注意事项:如:intm,n;scanf(“%d%d”,&m,&n);2.3.5整型数据输入以下输入方法均为合法:①34(1个空格)②34(多个空格)③3(回车健)

4④3(tab键)42.3.5整型数据输入scanf(“%d,%d”,&a,&b);(2)“格式控制字符串”中的普通字符要原样输入。正确输入方法:3,4scanf(“a=%d,b=%d”,&a,&b);正确输入方法:a=3,b=42.3.5整型数据输入如:scanf(“%5d%5d”,&a,&b);(3)可以规定输入数据的宽度。输入:123456763则:a为12345,b为6763课堂练习

1、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()A.

INPUTx、y、z;B.scanf("%d%d%d",&x,&y,&z);C.scanf("%d%d%d",x,y,z);D.read("%d%d%d",&x,&y,&z);B2、若想通过以下输入语句使a中存放整数1234,b中存放整数5,则输入数据的形式应该是

_______

inta,b;scanf(“a=%d□b=%d”,&a,&b);课堂练习a=1234b=52.3.6整型数据输出整型数据通过printf函数向屏幕输出。printf函数调用形式:

printf(格式控制串,输出列表);2.3.6整型数据输出输出整型数据的格式符:(1)%d:用于输出有符号基本整型数据,即int类型数据,输出数据的范围为-32768~32767。如:inta=12,b=-10;printf(“a=%d,b=%d\n”,a,b);输出结果为:a=12,b=-102.3.6整型数据输出(2)%u:用于输出无符号基本整型类型数据,即unsignedint类型数据,输出数据的范围为0~65535。如:unsignedinta=65535;intb=-3;printf(“a=%u\n”,a);printf(“b=%u\n”,b);输出结果:a=65535b=655332.3.6整型数据输出(3)%ld:用于输出长整型数据,输出范围为-231~231-1。

对于long型数据,当整型数据的范围超出-32768~32767时,必须用%ld格式输出,否则会出错。2.3.6整型数据输出(4)%o:将基本整型数据的二进制补码转换成八进制形式输出,输出的八进制数范围为0~177777如:

inta=-1;printf(“%d,%o”a,a);

输出:-1,1777772.3.6整型数据输出(5)%x、%X:将基本整型数据的二进制补码转换成十六进制数输出,输出的十六进制数范围为0~ffff(或FFFF)。如:inta=-1;printf(“%x”,a);输出结果为:ffff2.3.6整型数据输出(6)%md和%-md:按照m列的宽度输出int型数据(负号也占一列)。如果输出数据的实际宽度不足m位,则用空格补齐m位。%md要在数据左边补空格,%-md要在数据右边补空格。如果输出数据的宽度超过m位,则按实际长度输出。2.3.6整型数据输出如:printf(“%5d,%-5d,%3d”,12,13,12345);

输出结果为:□□□12,13□□□,123452.3.6整型数据输出printf函数使用注意事项(1)格式控制串中的普通字符要原样输出。如:inta=1,b=2;printf("a=%d,b=%d",a,b);输出结果为:a=1,b=22.3.6整型数据输出(2)在为整数选择输出格式符时要防止数据溢出。如:printf("%d,%u",65535,65536);输出结果为:-1,02.3.6整型数据输出(3)八进制和十六进制格式不会输出负整数。如:printf("%o,%x",-1,-1);输出结果为:177777,ffff课堂练习main(){unsigneda=65534;printf(“%d,%u,%o,%x\n”,a,a,a,a);}运行的结果是

。A.-32768,65534,177776,ffff

B.-2,65534,177776,fffeC.-1,65534,-77777,-7fff

D.-2,65534,-77777,-7fffB2.3.7整型数据运算整型数据常用的运算有加、减、乘、除、模、自增、自减、复合赋值运算等。2.3.7整型数据运算(1)加、减、乘法运算C语言的加、减、乘法运算规则和数学中的加、减、乘法规则一样。要特别注意乘法的运算符为“*”,且C语言中乘法运算符不能省略。如,数学表达式y=2x、c=ab、z=xy应该写成y=2*x、c=a*b、z=x*y。2.3.7整型数据运算(2)除法运算除法运算符为“/”,运算规则如下:当被除数和除数都是整数时,商为整数,如果不能被整除,则结果只保留商的整数部分,小数部分直接被舍弃掉,不作四舍五入处理。

如:10/2的商为5,185/100的商为1,1/3的商为02.3.7整型数据运算当被除数和除数中有一个为实数时,则商为实数。

如:124.5/10的商为12.452/5.0的商为0.41.2/4.8的商为0.252.3.7整型数据运算(3)模运算模运算即求余运算,运算结果为被除数除以除数的余数。模运算符为“%”。模运算要求被除数和除数都必须是整型数据,否则将报语法错误。如:12%5的值为2,5%8的值为5,15%2.5是错误的。课堂练习

inti=12,j=5,m,n,q;m=i%10;n=j%i;q=i%j; m,n,q分别为多少?2.3.7整型数据运算(4)自增、自减运算自增、自减运算的功能是使变量的值增加或减少1,其运算符为++、--

。如,对于整型变量i,i++和++i相当于i=i+1,

i--和--i相当于i=i-1。2.3.7整型数据运算i++、i--称为后缀形式,++i、--i称为前缀形式。i++、i--表示先使用i的原值进行运算,之后i的值再加1或减1。++i、--i表示先将i的值加1或减1,再用i的新值参与运算。2.3.7整型数据运算如:inti=1,j;执行j=i++;之后,j的值为1,i的值为2。执行过程:先用i的原值对j做赋值操作,之后,i再加1变成2。2.3.7整型数据运算如:inti=1,j;若执行j=++i;,则j的值变成2,i的值也变成2。执行过程:先将i的值加1变成2后,再将i的新值2赋给j。2.3.7整型数据运算如:inti=1,j;执行printf(“%d”,i++);

输出结果为1,i的值变成2。执行printf("%d",++i);

输出结果为2,i的值也是2。2.3.7整型数据运算++、--运算注意事项:①C语言函数参数按从右往左的顺序求值如:inti=1;printf("%d,%d",i++,++i);

运行结果为:2,22.3.7整型数据运算如:inti=1,j;若执行printf(“%d”,(i++)+(i++));,则输出结果为3。若执行j=(i++)+(i++);,则j的值为2。因为赋值语句对于所有后缀形式的++、--运算都用其原值计算,算完之后i再连续做自增或自减运算。2.3.7整型数据运算如:inti=1,j;若执行语句printf(“%d”,++i+(++i));

则输出结果为5。若执行赋值语句j=(++i)+(++i);

则j的值为6。

因为在赋值语句中所有前缀形式的++、--运算都用其自增或自减过后的新值进行计算。第74页③++、--运算符只能用于变量,不能用于常量或表达式,5++、++(a+b)等都是非法的。④++和--的结合方向为“自右向左”,-i++相当于-(i++)。i+++j++相当地(i++)+(j++)3.3.6整型数据计算规则如:i=3,则printf(“%d,-i++”);相当于先将3加上负号输出-3,再对i加1,使i变成4。2.3.7整型数据运算例i=3;k=++i;i=3;k=i++;i=3;printf(“%d”,++i);i=3;printf(“%d”,i++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,i=4//k=3,i=4//4//3//c=20,a=4//c=15,a=4课堂练习1、以下程序的输出结果是()

main()

{inta=12,b=12;

printf(“%d%d\n”,--a+b,++b);

} A、2313

B、2413

C、2412

D、2312B第77页课堂练习2、请写出以下程序输出结果。main(){intx=6,y;printf("x=%d\n",x); y=++x; printf("x=%d,y=%d\n",x,y);y=x--; printf("x=%d,y=%d\n",x,y);}

程序运行结果:x=6x=7,y=7x=6,y=72.3.7整型数据运算(5)复合赋值运算复合赋值运算是将赋值运算与其他运算相结合的运算。算术运算和赋值运算相结合是最常用的复合赋值运算,如,+=,-=,/=,*=,%=。2.3.7整型数据运算a=a+3;

可以写成

a+=3;a=a-3;可以写成a-=3;a=a*3;可以写成a*=3;a=a/(b+3);

可以写成a/=(b+3);或a/=b+3;a=a%(b*c+3);可以写成a%=(b*c+3);或a%=b*c+3;注意:复合赋值运算符优先级别低于算术运算符2.3.7整型数据运算如:intx=2;x+=x-=x*x;执行复合赋值运算后x的值为多少?课堂练习1.假定有以下变量定义:intk=7,x=12;则能使值为3的表达式是()

A、x%=(k%=5)

B、x%=(k-k%5)C、x%=k-k%5

D、(x%=k)-(k%=5)D课堂练习2.若有定义:inta=010,b=1,c=2;,顺序执行下列语句后,变量c中的值是

。 c=(a-=(b+5)); c=(a%11)+(b=1);3课堂练习3.下列程序的运行结果是

。main(){intx=6,y,z;x*=18+1;printf("%d,",x--);x+=y=z=11;printf("%d",x);}113,1242.3.8整型数据编程【例2.3】输入两个整数,求这两个整数的和、差、积、商和模并输出计算结果。问题分析2.3.8整型数据编程程序代码voidmain(){inta,b;printf("Pleaseinputtwointigernumbers:");scanf("%d,%d",&a,&b);printf("\n%d+%d=%d",a,b,a+b);

printf("\n%d-%d=%d",a,b,a-b);printf("\n%d*%d=%d",a,b,a*b);printf("\n%d/%d=%d",a,b,a/b);printf(“\n%d%%%d=%d”,a,b,a%b);}运行程序2.3.8整型数据编程【例2.4】输入一个三位整数并输出其逆序数,如输入345,则输出543。解题思路:先分离一个整数的百位、十位和个位数字,再将个位数乘上100、十位数乘上10,并将这两个乘积与百位数相加,即得到这个整数的逆序数。解题关键在于分离百位、十位和个位数字。2.3.8整型数据编程分离百位数只要将三位整数除以100即可。因为根据除法运算规则,被除数和除数都是整数,商只截取整数部分,如,345/100的结果为3,正好是百位数。求个位数只要将数据除以10并取其余数即可。如,345%10的结果为5,即个位数。2.3.8整型数据编程分离十位数可以采取哪些方法?方法1:将数据对100求余,再将余数除以10,取商的整数部分;方法2:将数据除以10得到的商再对10求余,取其余数;方法3:将数据减去百位数乘100的积,得到的差再除以10,取商的整数部分。2.3.8整型数据编程如:intnum=123,bai,shi,ge;bai=num/100;/*分离出百位数*/shi=num%100/10;/*分离出十位数*/ge=num%10;/*分离出个位数*/2.3.8整型数据编程程序代码voidmain(){intnumber1,bai,shi,ge,number2;printf("Pleaseinputanumber(100~999):");scanf("%d",&number1);bai=number1/100;shi=number1%100/10;ge=number1%10;number2=ge*100+shi*10+bai;printf("number2is%d.",number2);}运行程序2.3.8整型数据编程【例2.5】输入两个整数a,b,并交换这两个整数的值。解题思路:常用方法:一种是中间变量法,另一种是和差法2.3.8整型数据编程方法一(中间变量法):定义一个中间变量t,先将a的值保存在t中,再将b的值赋给a,最后将t中保存的a的原值赋给b,即t=a;a=b;b=t;。如,a=3,b=5,执行t=a;后,t的值为3,再执行a=b;,a的值为5,最后执行b=t;,b的值变成3。这样就实现了a、b两个值的交换。2.3.8整型数据编程方法二(和差法):先将a和b的和赋给a,再将这个和减去b的差赋给b,最后将这个和减去b的差赋给a。即执行语句:a=a+b;b=a-b;a=a-b;如,a=3,b=5,执行a=a+b;后,a的值为8,再执行b=a-b;,b为3,最后执行a=a-b;,a的值变为8减3的差,即5。该方法的缺陷为两数的和可能会溢出。2.3.8整型数据编程程序代码voidmain(){inta,b,t;printf("Inputtwonumbersplease:");scanf("a=%d,b=%d",&a,&b);t=a;a=b;b=t;printf("a=%d,b=%d",a,b);}运行程序2.3.8整型数据编程【例2.6】任意输入一个五位整数,将其转换成密码。加密算法为:将每位数字加上5后再除以10所得的余数做为新的数字,再将第2位和第4位进行交换,即千位数和十位数进行交换,最终得到的数据即密码。请同学们利用课余时间自学请编程实现以下功能:输入一个三位数,分离出其每位数字后,再求这三个数字的平方和。如123,三位数字平方和为1+4+9=14。课堂练习2.4实型数据实型数据也称为实数或浮点数。实型数据包括实型常量和实型变量。2.4.1实型常量实型常量有两种表示形式:(1)十进制小数形式如:0.123,.123,123.,123.0,1.0都是十进制小数,小数点不可缺少。(2)指数形式如1.23e3或1.23E3都表示1.23×103注意:指数形式字母e(或E)前面必须有数字,且e后面的指数必须为整数。一个实数可以有多种指数表示形式,但只有一种规范化指数形式。规范化指数形式的特点:在字母e(或E)之前的小数部分中,小数点前面有且只有一位非零数字。如2.345e2,1.234E5都是规范化的指数形式。一个实数在用指数形式输出时,是按规范化指数形式输出的。2.4.1实型常量2.4.2实型变量实型变量分为单精度实型、双精度实型和长双精度实型三类。2.4.2实型变量类型长度有效数字位数值范围单精度(float型)32位6~7位10-37~10+38双精度(double型)64位15~16位10-307~10+308长双精度型(longdouble型)128位18~19位10-4931~10+4932C语言对实型常量默认采用双精度进行存储和运算。2.4.2实型变量实型变量定义:floatf1;doublef2;longdoublef3;2.4.3实型变量赋值

floatx,y;doublez;x=1.5;y=1.23456789123;/*前7位是准确的*/z=1.234567891234567;/*前16位是准确的*/2.4.4实型数据输入scanf("格式控制字符串",地址表列);“%f”格式符用于输入float类型的实数“%lf”格式符用于输入double类型的实数2.4.4实型数据输入实型数据输入注意事项:(1)“%f%f”、“%lf%lf”与“%d%d”类似,两个实数之间可以用空格、TAB键、回车键间隔。(2)格式符之外的普通字符要原样输入。2.4.4实型数据输入(3)输入时可以规定实数的宽度,但不能规定输入数据的精度,即小数的位数。如:floatm,n;scanf(“%7f%7f”,&m,&n);合法scanf(“%7.2f”,&m);不合法2.4.4实型数据输入(4)要选择和变量类型一致的格式符进行数据输入,否则将不能得到正确结果。整型变量用%d格式符,float型变量用%f格式符,double型变量用%lf格式符输入数据,不要混用。2.4.4实型数据输入如:floatg;scanf("%lf",&g);输入123.234后将g输出得到的结果是错误的。课堂练习1、下列说法正确的是()。A.输入项可以是一个实型常量,如scanf("%f",4.8);B.只有格式控制,没有输入项也能进行正确输入,如scanf("a=%d,b=%d");C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%5.3f",&f); D.当输入数据时,必须指明变量的地址,如 scanf("%f",&f);D课堂练习2、已有定义:floata1,a2;数据的输入格式为:

4.5233.52根据定义和数据的输入格式,正确的输入语句为()A.scanf("%f%f",&a1,&a2); B.scanf("%f,%f",a1,a2);C.scanf("%4.3f,%3.2f",&a1,&a2); D.scanf("%4.3f%3.2f",a1,a2);A2.4.5实型数据输出printf("格式控制字符串",输出列表);①%f:整数部分全部输出,小数部分输出6位。②%lf:输出双精度实数。单精度实数的有效位数一般为7位,双精度为16位,用%f或%lf格式输出时,小数都占6位。2.4.5实型数据输出③%m.nf:指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格(%-m.nf右端补空格)。如果实际长度超过m,则按实际长度输出。注意:小数点占一位。2.4.5实型数据输出如:main(){floatf=123.456;printf(“%f,%10f,%10.2f,%.2f,%-10.2f\n”,f,f,f,f,f);}2.4.5实型数据的输出④%e以指数形式输出实数⑤%m.ne和%-m.nen指拟输出数据的小数位数。2.4.5实型数据输出如:printf(“%e,%e,%e”,12345.678,0.12345,-123.456);输出结果为:1.23457e+04,1.23450e-01,-1.23456e+02课堂练习1.以下程序运行结果是

。(■表示空格)main(){floata=3.1415926;printf(“%f,%7f,%7.3,%-7.3f\n”,a,a,a,a);}A.3.1415926,3.141593,3.142,3.142 B.3.1415926,3.14159,3.142■■,■■3.142C.3.141593,3.141593,■■3.142,3.142■■ D.3.141593,3.14159,■■3.142,3.142■■C课堂练习2、以下程序运行结果是

。main(){printf(“x=%.2f\n”,10/3*10.0);}A.33.333333 B.33.33C.x=33.33D.x=30.00D2.4.6实型数据编程【例2.7】已知一个三角形的三条边长分别为a,b,c,利用海伦公式:p=(a+b+c)/2,

s=

求三角形面积。问题分析求平方根函数为sqrt(),使用格式为:sqrt(表达式),表达式可以为变量或常量表达式.2.4.6实型数据编程使用sqrt()函数时,必须在main函数之前加“#include<math.h>”。使用求整数绝对值函数abs()、求实数绝对值函数fabs()、求幂函数pow()时也要加“#include<math.h>”。2.4.6实型数据编程程序代码#include<math.h>voidmain(){floata,b,c,p,s;printf("\nPleaseinputthreenumbers:\n");scanf("%f,%f,%f",&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("s=%.2f",s);}运行程序2.4.6实型数据编程【例2.8】输入一个圆的半径,求其面积和周长,计算结果保留2位小数。问题分析本题要用到常量π,为使用方便,可以定义一个符号常量,让它的值为π的值,这样当要修改π的精度时,只要修改该符号常量所对应的值就可以做到一改全改。2.4.6实型数据编程程序代码#definePI3.14159voidmain(){floatr,s,l;printf("inputr:\n");scanf("r=%f",&r);s=PI*r*r;l=2*PI*r;printf("r=%f,s=%.2f,l=%.2f",r,s,l);}运行程序2.4.6实型数据编程【例2.9】编写一个程序,将华氏温度转换为摄氏温度,转换公式为:摄氏温度

=5/9×

(华氏温度

-32)问题分析本题不难,但容易忽视C语言除法运算的特点:当除号两边都是整数时,运算结果为整数。因此在表示公式时,不能直接写成5/9*(f-32),而应该写成5.0/9*(f-32)或5/9.0*(f-32)。2.4.6实型数据编程

程序代码voidmain(){floatc,f;printf("inputf:\n");scanf("f=%f",&f);c=5.0/9*(f-32);printf("f=%f,c=%.2f",f,c);}运行程序2.5字符型数据字符型数据主要指ASCII码(美国标准信息交换码)字符。标准的ASCII码表有128个字符(详见附录),扩展的ASCII码字符集有256个字符。字符型数据分为字符常量和字符变量。2.5.1字符常量字符常量分为普通字符和转义字符两种。(1)普通字符普通字符常量是用单引号括起来的单个字符,如:

'a

',

'$

',

'b

','c'等都是字符常量。字符常量要区分大小写字母,如:'a'和'A'是两个不同的字符常量。2.5.1字符常量(2)转义字符转义字符由一对单引号、反斜杠,再加上被转义的字符或字符序列构成。转义字符所代表的含义不是反斜杠后面的字符本身所表示的含义,而是其他特殊含义。如:

'

\n'代表的含义并不是字符'n',而是表示换行操作。2.5.1字符常量常用的转义字符:①'\n

'表示换行②'\r'表示回车,但不换行③'\b'表示退一格④'\\

'表示反斜杠⑤'\

''

表示单引号⑥'

\"'

表示双引号2.5.1字符常量⑦

'\t'表示跳到下一个制表位。每个制表位包含8列,第一个制表位是1~8列,第二个制表位是9~16列,第三个制表位为17~24列,以此类推。如,printf("abc\tdef");,表示输出“abc”三个字符之后,光标跳到第9列,从第9列起再输出“def”,输出结果为“abc□□□□□def”2.5.1字符常量⑧

'\ddd'表示1到3位八进制数所代表的ASCII码值所对应的字符,d的取值范围为0~7。如,'

\123'表示的十进制ASCII码值为1×82+2×81+3×80=83,表示的字符是'

S

'。'\7'代表的是ASCII码值为7的字符,'\67'代表的是ASCII码值为6×81+7×80=55的阿拉伯数字字符'7

'

'\018'、'\79'等都是非法的转义字符。2.5.1字符常量⑨'\xhh'表示1到2位十六进制数所代表的ASCII码值所对应的字符。其中,x是十六进制的标志,h代表一个十六进制数字。h的取值范围是0~9、a~f(或A~F),a相当于十进制数10,b相当于11,以此类推,f相当于15。如,'\xa2'表示的是ASCII码值为 10×161+2×160=162的字符。2.5.1字符常量⑩'\0'表示的是ASCII码值为0的字符,它是一个空字符,不代表任何含义,在屏幕上也无法输出。注意区分'\0'与'0':

'0'是一个普通的阿拉伯数字字符,它的ASCII码为48,可以在屏幕上输出一个“0”字符。课堂练习以下程序输出结果为

main(){clrscr();printf("■■ab■c\tde\rf\n");printf("hijk\tL\bM\n");}运行结果:f■ab■c■■dehijk■■■■M2.5.2字符串常量字符串常量是指用一对双引号括起来的多个字符序列,如:"LiMing"、"Hello"。字符串常量在机器内存储时,系统会自动在其末尾加一个字符串结束标志

'\0',即空字符。字符串结束标志不会在屏幕上输出,但在内存中要占用一个字节的存储空间。2.5.2字符串常量字符串的长度是指该字符串中第一个空字符之前所有字符的个数,又称作有效字符个数,不包括双引号。2.5.2字符串常量如:字符串“HelloWorld”的长度为11但在内存中要占用12个字节的存储空间,因为空字符也要占一个字节。2.5.2字符串常量字符串常量和字符常量的区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。

如:'a'是字符常量,而"a"是字符串常量。(2)字符常量只能包含一个字符,而字符串常量可以包含多个字符。2.5.2字符串常量(3)字符常量只占一个字节的内存空间,而字符串常量占用的字节数等于其长度再加上1,因为字符串结束标记空字符('\0')也要占用一个字节的存储空间。如:字符常量'a'在内存中占一个字节,而字符串常量"a"在内存中占两个字节。2.5.2字符串常量求字符串长度注意事项:(1)求字符串长度要注意的是遇到第一个空字符时,字符串就已经结束,其后面的字符不能记入长度如:字符串"abcd\0edfgdg"的长度为4,因为第一个空字符'\0'前面只有4个字符。2.5.2字符串常量(2)当字符串常量中包含转义字符'\ddd'时,求字符串的长度时要特别注意d必须是介于0~7之间的数字,因为'\ddd'表示的是由1到3个0~7之间的数字所构成的八进制数。2.5.2字符串常量如:字符串"abcdef\1ghijkl"、"abcdef\12ghijkl"、"abcdef\127ghijkl"的长度均为13,其中,'\1'、

'\12'、'\127'都算1个字符。但是字符串"abcdef\18ghijkl"的长度为14,因为8>7,所以18不能构成一个八进制数,所以只能将'\1'和'8'当作两个字符看待。2.5.2字符串常量字符串常量的输出方法:(1)printf(字符串常量);

如:printf("helloworld!");(2)puts(字符串常量);

如:puts("helloworld!");2.5.2字符串常量(3)printf("%s",字符串常量);“%s”是输出字符串的格式符。

如:printf("%s","helloworld!");2.5.2字符串常量(4)printf("%ms",字符串常量);按指定长度m输出字符串,如果字符串长度大于m,则将字符串全部输出,若小于m,则左补空格(%-ms右补空格)。2.5.2字符串常量(5)printf("%m.ns",字符串常量);"%m.ns"表示截取字符串左边n个字符,并按照m列的宽度显示出来。如果n<m,则在字符串左边补空格,反之则按实际长度输出。如:printf("%10.5s","helloworld!");输出:□□□□□hello2.5.2字符串常量(6)printf("%-m.ns",字符串常量);功能与"%m.ns"类似,不同的是当n<m时,在字符串右边补空格2.5.3字符变量定义字符变量在内存中占一个字节的存储空间,其中存放的是字符所对应的ASCII码,是一个整数。字符变量分为有符号和无符号两种。2.5.3字符变量定义有符号的字符变量定义格式为:[signed]char变量名;signed可以省略。如:chara;charb,c;2.5.3字符变量定义无符号的字符变量定义格式为:unsignedchar变量名;如:unsignedchard;2.5.4字符变量赋值字符变量可以用普通字符、转义字符或ASCII码值(即整数)给其赋值。如:charc1;对于c1可以有以下几种赋值形式:c1='a';c1='\123';c1=56;2.5.4字符变量赋值字符变量和整型变量可以通用。字符变量可以用整型数据对其赋值,也可以用整数形式将其输出。整型变量也可以用字符型数据对其赋值,也可以用字符形式输出。2.5.5字符数据输入

为字符变量输入数据主要有两种方式:

scanf函数和getchar函数。2.5.5字符数据输入1.scanf函数scanf函数输入字符数据的格式符为“%c”。如:chara;scanf("%c",&a);2.5.5字符数据输入scanf函数也可以按指定宽度来接收字符。如:chara,b;scanf("%3c%3c",&a,&b);如果从键盘上输入“abcdef”,则变量a中存放的字符是'a',变量b中存放的字符则是'd'。2.5.5字符数据输入输入字符注意事项:输入字符时空格、回车和TAB键都会被当作有效字符予以接收。2.5.5字符数据输入如:chara,b,c;scanf("%c%c%c",&a,&b,&c);如果输入的数据是“A□B□C”(□表示空格),则变量a中存放的是'A',而变量b中存放的字符则是空格,变量c中存放的则是'B'。2.5.5字符数据输入2.getchar函数getchar函数用于从键盘输入一个字符。getchar()是一个无参数的函数,使用时括号里面必须是空的。如:

charc;c=getchar();2.5.6字符数据输出字符数据输出也有两种方法:

printf函数和putchar函数。2.5.6字符数据输出1.printf函数printf函数输出字符的格式符为“%c”如:chara='b';printf("a=%c",a);

输出结果为:a=bprintf("%c",'A');

输出结果为:Aprintf("%c",97);

输出结果为:a

2.5.6字符数据输出字符型数据也可以用整数形式输出。如:printf("%d",'A');表示输出大写字母'A'的ASCII码值652.5.6字符数据输出2.putchar函数putchar函数的功能是向屏幕或其他输出设备输出一个字符。使用的格式为:putchar(变量名、常量或表达式);2.5.6字符数据输出如:charc='E';putchar(c);/*输出变量c中存放的字符'E'*/putchar('a');/*输出小写字母'a'*/putchar(65);/*输出ASCII码值为65的字符'A'*/putchar(97);/*输出ASCII码值为97的字符'a'*/2.5.6字符数据输出使用getchar和putchar函数注意事项:(1)在使用getchar()和putchar()函数时,要在main函数之前加“#include<stdio.h>”(2)getchar和putchar函数一次只能输入或输出一个字符,并且不能控制输出的格式。课堂练习1、已知字母A的ASCII码为65。以下程序运行后的输出结果是()main(){chara,b;a='A'+'5'-'3';b=a+'6'-'2';printf("%d%c\n",a,b);}A.66D B.CF C.67GD.C101C课堂练习2、以下程序的输出结果是()main(){charc1='6',c2='0';printf("%c,%c,%d,%d\n",c1,c2,c1-c2,c1+c2);}A.因输出格式不合法,输出出错信息 B.6,0,6,102 C.6,0,7,6 D.6,0,5,7B课堂练习3、字符串常量“abc123\01de\n”的长度是()

A.10 B.4 C.6 D.114、ch为字符型变量,以下赋值语句错误的是()

A.ch='\';B.ch=62+3;C.ch='a';D.ch='\xaa';AA课堂练习5、定义c为字符型变量,则下列语句中正确的是()

A)c='97';B)c="97";C)c=97;D)c="a";

6、以下程序运行后的输出结果是()

main()

{charm;

m='B'+32;printf("%c\n",m);

}Cb2.5.7字符数据编程【例2.10】任意输入一个大写的英文字母,将其转换成小写字母并输出。问题分析:一对大小写字母的ASCII码值相差32,小写字母比大写字母大32。因此,要将大写字母转换成小写字母,只要将其ASCII码值加上32即可。2.5.7字符数据编程程序代码#include<stdio.h>voidmain(){charc;c=getchar();c+=32;putchar(c);}运行程序该程序可以简化成一句话:#include<stdio.h>voidmain(){putchar(getchar()+32);}2.6各种数据类型混合运算整型、实型、字符型数据间可以进行混合运算。例如,7+1.5*'A'-28。在进行运算时,不同类型的数据要先转换成同—类型,然后进行运算。转换的方法有两种:一种是自动转换,另一种是强制转换。2.6.1自动类型转换在C语言中,有两种情况下会发生自动类型转换,一种是不同数据类型之间的混合运算,另一种是赋值运算符两边的数据类型不同时。不同数据类型进行混合运算时,由编译系统自动完成类型转换。2.6.1自动类型转换横向箭头表示必须进行的转换。即char和short必须转换成int,float必须转换成double,然后才能参与运算。自动类型转换规则纵向箭头表示数据类型的转换方向,但不是转换步骤。如,int类型和long型数据作运算,则将int类型的数据转换成long型后再作计算。2.6.1自动类型转换如:charch;inti;floatx;doublez;表达式ch*i+(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论