谭浩强C语言全书word版课件_第1页
谭浩强C语言全书word版课件_第2页
谭浩强C语言全书word版课件_第3页
谭浩强C语言全书word版课件_第4页
谭浩强C语言全书word版课件_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

第2章数据类型、运算符和表达式

退出2.1 常用的进位制2.2 数与字符在计算机内存中的表示方法2.3 常量2.4 变量2.5 常用运算符与表达式2.6 基本输入输出操作的实现数据与类型 一个简单程序的功能是接收输入数据、用某种方式处理数据,产生特定的数据作为结果输出。C语言把程序处理的数据分成一些集合。属于同一集合(类型)的数据具有相同的性质:取值范围+所进行的操作。C语言能够用不同方法处理不同的数据类型。 例:计算银行存款利息、按字母表排列名单。 C的基本类型包括字符型、整数类型、实数类型、枚举型。程序中处理的每个数据都属于某个基本数据类型基本类型都有固定的表示方式,并确定了可能表示的数据范围及所能进行的操作(运算)C规定了这些类型的名字(类型名)。2.1数据类型

程序中要对各种各样的数据进行描述和操作,用到的数据都必须指明其类型。数据类型的作用:指出了应为数据分配的存储空间的大小规定了数据所能进行的操作

数据类型基本类型

构造类型

整型

(int)实型

字符型(char)枚举(enum)单精度型(float)双精度型(double)

数组结构型(struct)联合体(union)数据与类型空类型(void)指针长整型longint(占用32位的内存单元):-2147483648~2147483647表示:123456789l

123LVC++中基本型和长整型占用字节数一样。无符号型(没有一位的符号位)unsignedint:取值范围:0~4294967295,即0~232-1unsigedlong:

表示:123u123456789ul2.3 常量(字面量、常数)1.整型常量的3种表示形式

在C语言中,使用的整常数有八进制、十六进制和十进制三种。例如:十进制整数:2001、-18、0八进制整数:02001、-017十六进制整数:0X2001、0XAB122.3 常量(字面量、常数)2.2数与字符在计算机内存中的表示2.2.1机器数和真值1.机器数 在计算机中,只有“0”和“1”两种数码。数的正、负符号,也必须使用“0”和“1”。 用“0”表示正,“1”表示负,其余位仍然表示数值。如果一个整数在内存中占用16位,整数+10的二进制形式为1010,其在内存中的存储情况如图所示:00000000000010102.2数与字符在计算机内存中的表示例如16位无符号数的最大值是:(1111111111111111)2,也就是65535。2.2.2原码、反码和补码1.原码整数X的原码是指:其数符位0表示正,1表示负,其数值部分是X的绝对值的二进制表示。例如:[+1]原=00000001,[+127]原=01111111[-1]原=10000001,[-127]原=111111112.2数与字符在计算机内存中的表示3.补码整数X的补码是指:对于正数,与原码相同;对于负数,数符位为1,其数值部分是对应的反码加1。例如:[+1]补=00000001,[+127]补=01111111[-1]补=11111111,[-127]补=100000012.2数与字符在计算机内存中的表示2.2.4ASCII码 在计算机中,字符的使用占有很大的比重,字符包括各种文字、数字、符号和控制符。在计算机内部,它们也都要用二进制来表示。对字符的编码方法很多,使用最普遍的是美国标准信息交换码(AmericanStandardCodeforInformationInterchange),简称ASCII码,见附录A。实数只采用十进制,有以下两种形式:十进制小数形式:由数码0~9和小数点组成。 例如:0.0.255.7890.13300.267.8230指数形式:2002.168e0

2.002168e3注意:e前面不能没有数字;e后面的数字必须为整数,也不能加圆括号。如:1E(-3)、E-5、1e2.1都是错误的。2.3.1实型常量2.3.3

字符常量字符类型的数据主要用于程序的输入和输出。类型名为:char字符常量的表示形式:用单引号括起来的一个字符。 例如:'a''b''=''+''?’’3’字符常量的特点:字符常量只能用单引号括起来,不能用双引号或其它括号。字符常量只能是单个字符,不能是字符串。特殊规定:字符常量的值是一个整数(字符常量的值就是该字符的ASCII码值见P27)例如:48+'0'2.3.3字符常量

字符型数据与整型数据的关系【例2.5】写出下列程序的运行结果。#include<stdio.h>voidmain(){ inti,j; i=65; j=i+1; printf("%c,%c\n",i,j); /*以字符形式输出*/printf("%d,%d\n",i,j); /*以整数形式输出*/} 运行结果如下:A,B65,662.3.3字符常量

数字字符和数不同:例如:1和'1'字符类型的数据也不是标识符:例如:x和'x’转义字符:一种特殊的字符常量。以反斜线“\”开头,后跟一个或几个字符,用来表示那些无法写出的字符。(见P27)

换行符’\n’ 双引号’\”’ 单引号’\’’ 反斜号’\\’‘\044’和‘\x40’表示字符‘$’和‘@’,均是转义字符,反斜线字符起着特殊的作用:不同于字符原有的意义,故称“转义”字符。字符串常量:由一对双引号括起的字符序列。 例如:"Computer"及"program-1"。程序主要用于输入、输出。例如:printf("World,hello!\n");字符串常量与字符常量之间主要有以下区别:引用符号不同:字符常量由单引号括起来,字符串常量由双引号括起来。容量不同:字符常量只能是单个字符,字符串常量则可以含一个或多个字符。字符串结束的标志:字符"\0"(ASCII码为0)。 例如,字符串"CHINA"的长度是6个字符。2.3.4字符串常量2.3.5符号常量补例1(bch2_11.c):求半径为2cm的圆的周长和面积#include<stdio.h>main(){printf("circle=%f\narea=%f\n",2*3.14*2,3.14*2*2);}问题:要求提高3.14精度解决方法:用一个标识符(符号名)来表示的常量称为符号常量。符号常量在使用之前必须先定义,其一般形式为:

#define常量名常量值(注意:常量名用大写)例如: #definePI3.14159262.3.5符号常量修改后的程序清单(bch2_12.c)#include<stdio.h>#definePI3.1415926main(){printf("circle=%f\narea=%f\n",2*PI*2,PI*2*2);} 编译时将main函数体中的所有符号常量PI全部用3.1415926代替,作用是便于程序阅读和修改。使用符号常量的优点: 一个常量改变时,能做到“一改全改”2.4变量变量:在程序运行过程中其值可以改变的量。2.4.1整型变量2.4.2实型变量2.4.3字符变量退出2.4变量

上节中的例题,只能计算半径为2cm的圆的周长和面积,如果要计算不同半径的圆的周长和面积则需修改程序。如何使程序具有通用性?(即:对不同的数据实现同样的计算)变量的含义:计算机程序中处理的所有数据,都必须存储在计算机内存单元中,并应能从内存中取回。每个内存都有惟一的地址,数据是按地址存取。451216522548存储器地址2.4变量对变量的基本操作有两个:将数据存入变量中(赋值)取得变量里当时保存的值(取值)变量具有保持值的性质,即:如果给某变量赋了一个值,此后取该值时,每次得到的总是这个值,直到再次给它赋值。由于赋值操作,在程序执行过程中,一个变量在各个时刻所保存的值可能不同。2.4变量变量的三要素:数据类型、存储值、在存储器中的位置(变量名表示)。每种类型的变量只能保存一种固定类型的值。可分为整型变量、实型变量、字符变量、数组变量、指针变量、结构变量、联合变量等。2.4变量变量的命名 在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。每一个变量都应该有一个名字,命名规则为(见名知义):1、以字母或下划线开始,只能跟字母、数字和下划线。2、不能是关键字。变量的定义形式:数据类型变量名字intk,n,sum;/*只能保存int值*/doublex,y,z; /*只能保存double值*/knsum补例:dch2_13.c显示变量地址与所占存储器字节数。#include<stdio.h>intmain(){

intnum=22;

shortintnum1=10; printf(“num=%dnum的地址是:%d\n.",num,&num); printf("\n计算机使用%d字节存储\n",sizeof(int));printf("num1=%dnum1的地址是:%d\n",num1,&num1); printf("\n计算机使用%d字节存储\n",sizeof(shortint)); return0;}2.4.2整型变量在书写变量声明时,应注意以下几点:允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以分号;结尾。变量说明必须放在变量使用之前,通常放在函数体的开头部分。可在说明变类型的同时给变量赋初值。格式为:类型说明符变量名1=初值1,变量名2=初值2,...;

2.4.2整型变量2.4.1整型变量整型变量:只能保存整型值的变量。整型变量的分类(按照分配的内存单元) 整型变量可分为以下几类:基本型(类型说明符为int) 在内存中占2个字节(C++中占4个字节),其取值为基本整常数(-32768~32767)。短整型(shortint):(占2个字节)长整型(类型说明符为longint或long) 在内存中占4个字节,其取值为长整常数(-231~231-1)。无符号型(类型说明符为unsigned)。 无符号型又可与上述三种类型匹配而构成:无符号基本型、无符号短整型及无符号长整型。(1)无符号基本型(0~65535)类型说明符为unsignedint或unsigned。(2)无符号长整型(0~232-1):类型说明符为unsignedlong

(3)无符号长整型(0~65535) 类型说明符为unsignedshort

2.4.1整型变量整型变量的定义 变量说明的一般形式为:

类型说明符变量名1,变量名2,...;例如:inta,b,c; /*a,b,c为整型变量)*/longx,y; /*x,y为长整型变量*/unsignedp,q;/*p,q为无符号整型变量*/2.4.2整型变量例如: int i=10; int limit=MAXLINE+1;/*MAXLINE是符号常量*/ int j,k=10; int lower=0,upper=100,step=20;例2.8~2.9(p21)整型变量赋值的注意事项:给变量赋值时,一定要注意它的取值范围。P322.4.2整型变量1、printf函数 printf()函数是有格式的输出函数,能够对任意类型的内部数值按照指定格式的字符形式显示。printf函数调用的一般形式:printf(“格式控制字符串",输出项序列)功能:输出程序运行的结果(任意类型的数据)例:printf(“%f,%f",

2*PI*2,PI*2*2);

说明:printf函数是一个标准库函数,在使用时有两个参数:格式控制字符串及输出项序列:⑴格式控制字符串包括两部分:按照原样不动输出的普通字符和用于格式转化说明符。

2.6.2带格式数据的输入与输出格式转化说明符:以%开始并用一个转换字符结束,决定输出项的类型及位置;格式转化说明符见表2-8%c显示一个字符,%d显示一个整数,%f显示一个实数除格式转化说明符以外的字符原样输出printf(“格式控制字符串",输出项序列)例:printf("circle=%f\narea=%f\n",2*PI*2,PI*2*2);若格式控制串里没有出现%,则printf语句里无输出项序列,输出的内容为格式控制字符串本身。printf("World,hello!\n");2.6.2有格式的输出2.4变量补例1(bch2_1.c):求圆的周长和面积#include<stdio.h>#definePI3.1416fmain(){

floatr,c,area; /*定义r、c、area变量*/ printf("r=");

r=2.;

/*给r赋值*/

c=2*PI*r; /*给变量c赋值*/ area=PI*r*r;

/*给变量area赋值*/ printf("circle=%f\narea=%f\n",c,area);}2rcareac=2*PI*r;area=PI*r*r;例2.7:写出下列程序的运行结果

main() {

inta=1;

intb=-1;

unsignedc,d; c=a; d=b;/*d是无符号型,符号位作为数值*/ printf("%d,%d,%d,%u,%d,%u\n",a,b,c,c,d,d); }2.4.2整型变量运行结果:1,-1,1,1,-1,4294967295补充:整型数在内存中的存放形式 数据在内存中是以二进制形式存放的。数的正、负符号,也必须使用“0”和“1”。 用“0”表示正,“1”表示负,其余位仍然表示数值。如果定义一个整数变量i:inti;i=10;如果整数在内存中占用16位,整数+10的二进制形式为1010,其在内存中的存储情况如图所示(原码):实际上,数值是以补码的形式表示的。正整数的补码和该数的原码相同。0000000000001010补充:整型数在内存中的存放形式负数的补码:将该数的绝对值的二进制形式,按位取反再加1.例如:-10的补码是:1111111111110101000000000000101010的原码取反1111111111110110再加1即-10的补码例2.8:写出下列程序的运行结果main(){shortinta,b;unsignedshorti,j; /*unsignedlongi,j;*/a=32767;b=a+1;

/*b=32768产生溢出*/i=65535;j=i+1; /*j=65536产生溢出*/printf("a=%d,b=%d,i=%u,j=%u\n",a,b,i,j);}注意:不同种类的整型变量的取值范围!(见课本P32页)2.4.2整型变量(P30)运行结果:32767,-32768,65535,0b,j产生溢出错。例2.8:写出下列程序的运行结果main(){inta,c;unsingedb;a=30;b=20;c=a+b;

/*不同种类的整型变量可以进行运算*/

printf("a+b=%d",c);}运行结果:a+b=502.4.2整型变量2.4.2实型变量分类和大小(见课本P32页) 实型变量就是只能保存实数值的变量。分为单精度实数、双精度实数和长双精度实型三种。其说明格式分别为(注意取值范围,见表2-4):单精度:float变量名1,变量名2,...;

双精度:double变量名1,变量名2,...;长双精度:longdouble

变量名1,变量名2,...;实型变量的定义与整型变量一致例2.10~2.11补例:dch2_11.c不同类型的变量所占的字节数2.4.2实型变量补例(ch2_8b.c)#include<stdio.h>main(){ floata; a=3.141592612f; printf("a=%f\n",a);}运行结果为:a=3.141593分析:a是float类型,有效数字为6~7位。例2.9(ch2_10.c):写出下列程序的运行结果main(){

floatx1,x2,x3;

doubley1,y2;

x1=1.234567899e8f;/*单精度:有效数字为6~7位*/

x2=1234567.899e2f;/*单精度:有效数字为6~7位*/ x3=x1+1;

/*单精度:有效数字为6~7位*/printf(“x1=%f\nx2=%f\nx3=%f\n",x1,x2,x3); y1=1.234567899e8;/*教材错,双精度:有效数字为15~16位*/ y2=y1+1;

/*双精度:有效数字为15~16位*/ printf("y1=%f\ny2=%f\n",y1,y2);

}2.4.2实型变量运行结果:x1=123456792.000000x2=123456792.000000x3=123456792.000000y1=123456789.900000y2=123456790.900000问题:x1与y1相等,但

x3与y2为何不同?例2.10(ch2_11.c):写出下列程序的运行结果#include<stdio.h>voidmain(){floatx1,x2,x3,x4; doubley1,z1,z2,z3; x1=1234.567899f; x2=99876.54321f;

x3=x1*x2;

x4=1234.567899f*99876.54321f; printf("x3=%f\nx4=%f\n",x3,x4);

y1=1234.567899*99876.54321; printf("y1=%f\n",y1); z1=1234.567899; z2=99876.54321;

z3=z1*z2; printf("z3=%f\n",z3);}2.4.2实型变量X4与y1、z3的类型不同,则精度不同。2.4.3字符型变量字符变量:用来存放字符常量。只能保存单个字符。说明格式为:char变量名1,变量名2,...;

例如:chara,b;字符变量的值是该变量所代表的ASCII码例如:对字符变量a,b赋予'x'和'y'值:

a='x';b='y';实际上是在a,b两个单元内存放字符x、y的ASCII码

a

b0111100001111001 所以也可以把字符型变量看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。以下两个语句的意义相同:

charch=65

/*65是字符A的ASCII码*/charch='A' 在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。整型变量为二字节,字符变量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。【例2.12】(见课本)【例2.13】(见课本)【例2.14】(见课本)2.4.3字符变量字符型数据赋给整型变量时,字符只占一个字节,整型变量为2个字节,将字符数据8位放到整型变量低8位中。

2.4.2整型变量例2.11(ch2_12.c):写出下列程序的运行结果#include<stdio.h>voidmain(){

charc1,c2; c1='A'; /*A*/ c2=c1+1; /*B*/ printf("%c,%c\n",c1,c2); /*以字符形式输出*/printf("%d,%d\n",c1,c2); /*以整数形式输出*/}2.4.3字符变量运行结果:A,B65,66例2.5:写出下列程序的运行结果main(){

inti,j; i=65; j=i+1;/*j=66*/ printf("%c,%c\n",i,j); /*以字符形式输出*/ printf("%d,%d\n",i,j); /*以整数形式输出*/}2.3.3字符常量例2.12(ch2_13.c):写出下列程序的运行结果#include<stdio.h>main() {

inti;

charc;

c=0x41; i='B'; printf("%c,%d\n",c,i);/*c以字符形式输出,i以数值形式输出*/}2.4.3字符变量运行结果:A,662.5常用运算符和表达式2.5.1算术运算符2.5.2自增自减运算符2.5.3表达式2.5.4逻辑运算2.5.5条件运算符和条件表达式退出

运算符的种类(P35)

C程序里,描述计算的最基本结构是表达式,表达式由被运算的对象和表示运算的特殊符号,按照一定的规则构成。1.算术运算符 用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余%(或称模运算)。它们是双目运算符,使用时需要两个运算量参与运算。2.关系运算符用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。3.逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4.自增、自减运算符包括++与--。*5.位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。6.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

运算符的种类7.条件运算符

这是一个三目运算符,用于条件求值(?:)。8.逗号运算符用于把若干表达式组合成一个表达式(,)。9.指针运算符用于取内容(*)和取地址(&)二种运算。10.求字节数运算符用于计算数据类型所占的字节数(sizeof)。11.特殊运算符有括号(),下标[]等。

运算符的种类2.5.1算术运算符1.加法运算符“+”

加法运算符为双目运算符,即有两个运算对象参与运算。如x+y,5+6等。2.减法运算符“-”作为减法运算符时为双目运算符,如x-y,6-5等。作为负值运算符时为单目运算,如-y,-8等。3.乘法运算符“*”双目运算,如x*y,5*6等。4.除法运算符“/”

除法运算符与参与运算量的数据类型有关。具体地说,分为以下两类:

其一:参与运算量均为整型时,结果也为整型,舍去小数。(例:7/4结果为1,17/3结果为5)其二:如果运算量中有一个是实型,则结果为双精度实型。(例4.0/2,结果为2.0)应该特别注意运算的规则,按原来的数学运算规则去推断,可能出现一些意想不到的错误结果。2.5.1算术运算符5.求余运算符(模运算符)“%”

求余数:参与运算的量必须均为整型。求余运算的结果的符号与被除数相同,其值等于两数相除后的余数。对于求余运算,应该从其结果的符号和值两方面来理解。例: 24%2=0 17%3=2 15%4=3 15%(-7)=1 (-15)%7=-12.5.1算术运算符6.不同数值类型间的混合运算(P40)

整型、单精度型、双精度型等不同数值类型的数据可以进行混合运算。因为字符型数据可以看作整型,故整型、实型(包括单精度型与双精度型)及字符型之间可进行混合运算。

但是,在运算时,不同类型数据必须转换为同一类型数据。其转换规律是:自动转换(由系统自动进行,无须干预),就高不就低(把低级类型转换为高级类型,再进行运算)。转换等级(P38图2-9)如下:

低级──────────→高级字符型<整型<单精度型<双精度型2.5.1算术运算符 例如:2+3*4.5

式中2、3被转换为double类型的值,得到的结果为double类型2、算术表达式

算术表达式:由算术运算符(和括号)将运算对象连接起来的式子。运算对象包括:常量、变量、函数等。例如:x*y/z+2002.168-15%(-7)+'A'优先级:先*、/、%,再+、-,同一优先级的运算符“自左至右”——“左结合”。例见课本P39页.2.5.1算术运算符2.5.3强制类型转换运算符依据表达式的运算结果可以把它分为整型、实型及字符型等。根据编程的要求(运算符要求、函数调用),也可以实行强制转换。强制类型转换格式为:(类型名)(表达式)功能:使用此格式可以把表达式的值强制转换为(类型名)所规定的类型, (类型名)可以:char,int,float,double等。

【例】

((int)(x+y))%3 注意:n和x的类型并未改变!补例BCH2_2.C:#include<stdio.h>main(){

floatx;

inti; x=3.6f; i=(int)x;/*将单精度型转换为整型*/ printf("x=%f,i=%d\n",x,i);}运行结果: x=3.600000,i=3

2.5.3强制类型转换运算符例:将复杂的表达式写成C语言表达式:标准数学函数的使用方法将在附录C

1/(1+1/x)sqrt(10+sqrt(y))(log10(x)-log(y))/4fabs(y)/(2*x+4*pow(y,x))2.5.1算术运算符注意:表达式的结果不能超出类型的最大取值范围(溢出)简单赋值,其一般形式为: 变量=表达式功能:计算表达式的值(数据)赋予左边的变量。注意:赋值运算符“=”与代数中的等号的含义不同。“=”右边的表达式首先被计算,必须把变量直接列在等号的左边。例:length=25 width=17.5/*width被赋值17.5*/赋值表达式:由“=”连接的式子称为赋值表达式。赋值表达式的值就是被赋值的变量的值。例:printf(“z=%d\n”,z=2+5);完成赋值、输出双重功能 2.5.2赋值运算符和赋值表达式例如:z=x+y(x、y必须先赋值)w=sin(a)+sin(b)

问题:x+y=z对吗?一个变量一次只能存储一个数值。例:length=3.7 length=6.28对变量进行新的赋值,则新值将覆盖原有的值。2.5.2赋值运算符和赋值表达式def

未赋值前000变量赋值过程执行e=d770执行f=d+e7714执行d=77007执行d=d+187141

赋值转换 如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:实型赋予整型,舍去小数部分;(例:i=3.56的结果为i=3)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0);例f=23的结果为=23.00000字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0;整型赋予字符型,只把低八位赋予字符量。2.5.2赋值运算符和赋值表达式复合赋值运算符在赋值符=之前加上其它运算符(双目),构成复合的运算。语法格式: 变量双目运算符=表达式 等价于:

变量=变量二元运算符表达式例如:x+=3 等价于 x=x+3

x%=3 等价于 x=x%3

x*=y+8 等价于 x=x*(y+8)x=x+3不是方程式,而是一个用两步计算的表达式:1、计算x+3的值 2、将计算结果存储在变量x中2.5.2赋值运算符和赋值表达式如果“=”右边是包含若干项的表达式,则相当于它有括号。连续赋值也可以采用连续赋值的方法,其格式为:

变量1=变量2=变量3=......变量n=表达式 功能:计算表达式的值,并赋给这一系列变量。注意:赋值运算符按照"自右而左"的结合顺序.例z=y=x=8;

2.5.2赋值运算符和赋值表达式 例: z=y=x=8复合赋值运算符88例: x=(y=12)*(z=8);81296赋值表达式也可以包含复合赋值运算符例:x=2,求x+=x-=x*(y=11)x=x+(

x-=x*(y=11))⑴x-=x*(y=11) x=-20⑵x=x+(-20) x=-40补充: a的初值为12,求a+=a-=a*aa=a+(a-=a*a)①a-=a*aa=a-a*a=-132②a+=-132a=a-132=-264lx27.c补充:赋值语句 赋值表达式加上“;”构成,程序中的计算功能主要由赋值语句完成。例:s=2*3.14*r;赋值表达式与赋值语句的区别:赋值表达式可以包括在其他表达式中,例如:x-=x*(y=11)补例:dch3_2.c2.5.2赋值运算符和赋值表达式变量在程序里的一个主要用途是:保存计算的中间结果和最终结果。补例1(bch2_1.c):计算圆的周长和面积。例(CH2_40):已知三角形的三条边分别是3、5、7,求这个三角形的面积。编程思路:将三角形的三条边的长度分别用变量a,b,c保存; 1、求s=(a+b+c)/2 2、area= 3、计算中反复使用S2.5.2赋值运算符和赋值表达式#include<stdio.h>#include<math.h>/*程序中用到了标准函数sqrt()*/main(){

doubles,area; s=(3+5+10)/2.0;

/*用于保存中间结果*/

area=sqrt(s*(s-3)*(s-5)*(s-7));/*用于保存最终结果*/

printf("area:%f\n",area);}练习:编程计算一个矩形面积。P3例ch1_2、ch1_32.5.2赋值运算符和赋值表达式2.5.2赋值运算符和赋值表达式#include<stdio.h>main(){ intsum; sum=1+1/2+1/3+1/4+1/5; printf("Thesumis%d\n",sum);}2.5.2赋值运算符和赋值表达式#include<stdio.h>main(){ doublesum; sum=1.0+1.0/2.0+1.0/3.0+1.0/4.0+1.0/5.0; printf("Thesumis%f\n",sum);}几个问题变量的初始化:声明变量时,给变量指定初值。

例:doubles=(3+5+7)/2.0;

double

x1=37.5;变量的属性:变量的名字:提供了程序里访问变量的途径变量的类型:规定了变量的使用方式,存储的值及可能使用的各种操作变量的存储位置:内存中的位置变量的值:2.5.2赋值运算符和赋值表达式x137.5变量名变量类型double变量值2.5.4 自增自减运算符自增运算符为“++”,其作用是把变量的值增加1。自减运算符为“--”,其作用是使变量值减少1。自增自减运算符均为单目运算,只需要一个运算量。它可有以下几种形式:++ii自增1后再参与其它运算。简单地说,先加后用。--ii自减1后再参与其它运算。简单地说,先减后用。i++i先参与运算后,i的值再自增1。简单地说,先用后加。i--i先参与运算后,i的值再自减1。简单地说,先用后减。例:k=++n;相当于两个语句:n=n+1;k=n; k=n++;相当于两个语句:k=n;n=n+1;例:i的初值为3,则j=++i;i的值为4j的值为4, j=i++,j的值为3,i的值变为4

例: i=3; printf("%d",++i); /*输出"4"*/ printf("%d",i++); /*输出"3"*/

在使用自增自减运算符时应注意以下几点:只能用于变量,不能用于常量。因为常量的值不能改变。所以不能使用如:10++、8--、--6。对于多个变量的运行结果,也不能使用。 例如:(x+y+z)++是不能使用的,2.5.4自增自减运算符2.5.4自增自减运算符自增自减运算符具有“自右向左”结合的特性。【例】--i++相当--(i++),若i的初值为3,则--(i++),结果为2,i的值为3

2.5.5逗号运算符和逗号表达式逗号运算符:由逗号把两个表达式连接起来,相当于一个表达式(运算级别最低)。其一般形式为:

表达式1,表达式2功能:自左而右依次计算表达式的值,整个逗号表达式的值为表达式2的值.【例】(见课本)x=2*8,x*10;/*先*,再=,再,*/逗号表达式的一般形式为:表达式1,表达式2,......表达式n整个逗号表达式的最终值等于表达式n的值。【例】(见课本)z=(x=10,10+20);

则z=30补充:数学库函数C语言提供了标准数学库函数供程序使用。见p331附录C:C.3.注意:1、程序中使用了数学库函数,则必须包含:

#include<math.h>2、除abs(x)函数外,其他函数要求参数必须为float或double类型,函数值为double类型。3、函数调用格式:

函数名(传递到函数的数据) 例:sqrt(4.0)补例:dch3_5.cP39表2-64、函数本身可以作为表达式的一部分: 例:x=3.0*sqrt(5*33-13.91)/5 sqrt(

pow(fabs(x),y))不同的运算有不同的优先级:表达式的优先规则为(见课本P38页):

(1)函数计算最优先(2)其次类型转换(3)自增(++)、自减(--)与取反(-)次之(4)先乘除,后加减(5)有括号先算括号内不同运算的优先级4、关于表达式求值时应注意几个问题:表达式中各类数据的数据类型要一致,若不一致则需要转换,(注意默认转换的规律或者采用强制转换);计算表达式时的优先级的问题;结合性的问题,是“左结合”还是“右结合”;不同运算的优先级2.6基本输入输出操作

2.6.1字符的输入输出函数2.6.2printf函数2.6.3scanf函数退出2.6.1字符的输入和输出 输入、输出是对计算机主机而言的。输出:从计算机向输出设备(显示器、打印机)输出数据;输入:从输入设备(键盘、鼠标)向计算机输入数据; 输入输出是程序最基本的功能,也是程序中最重要的组成部分。C语言中的输入/输出都是由库函数完成的,因此程序的开头需加上#include<stdio.h>一、用getchar()函数输入一个字符一般形式为:getchar();

功能:从键盘上输入一个字符,并作为结果值返回。使用方法有以下两种:把函数得到的字符代码值赋给一个字符或整型变量;把函数得到的字符代码值直接作为表达式的一部分,不赋给变量。2.6.1字符的输入和输出【补例BCH2_3.C】#include"stdio.h"main(){

charc;

c=getchar();

/*赋给变量*/

putchar(c);}

运行时,键盘输入字符a则输出为a。使用getchar函数还应注意几个问题:getchar函数只能接受单个字符,输入数字也按字符处理。输入多个字符时,则只接收第一个字符;使用函数前必须在程序开头使用以下语句:

#include<stdio.h>二、用putchar函数输出一个字符在屏幕上显示一个字符,其格式为:putchar('字符')

或者putchar(变量)

变量可以是整型或字符型。这里所说的一个字符也可以是一个转义符号。【例bch2_4.c】2.6.1字符的输入和输出#include<stdio.h>main(){ charc; putchar('A');/*在显示器上显示字符A*/ putchar('\n');/*换行*/ c=65; putchar(c);/*把整数变量c的内容作为一个字符显示在屏幕上*/ putchar('\t');/*水平跳格,跳到下一个Tab位置*/ putchar('\'');/*输出单引号字符'*/}2.6.1字符的输入和输出1、输出任意类型的数据printf函数printf函数调用的一般形式:printf(“格式控制字符串",输出项序列)printf函数是一个标准库函数,在使用时它可以带两个参数:输出格式控制字符串及输出项序列:其中格式控制字符串必须用引号(")括起来若格式控制串里没有出现%,则printf语句里无输出项序列,输出的内容为格式控制字符串本身。例:printf("World,hello!\n");2.6.2有格式的输入和输出转换格式说明:由“%”和格式字符组成,在%后面的各种格式字符,用于指定输出位置、格式、类型、、长度、小数位数等(见课本P45页表2-7)。转换格式说明的个数、类型与输出项的个数、类型相匹配。例如:printf("%d,%d",a,b);

/*以十进制形式输出整型变量a,b*/2.6.2有格式的输入和输出非转换格式说明符 普通字符,即需要原样输出的字符。例:printf("a=%db=%d",a,b);若a=3,b=4,则输出为:a=3︼b=4注意格式控制符和各输出项在数量和类型上必须一一对应。如果输出“%”字符,则应该在“格式控制”字符串中用连续两个%表示注意:在字符%和格式字符中间可以添加指定的输出域宽和精度。使用以下格式来指定输出宽度:m.n

2.6.2有格式的输入和输出若输出的结果是实数,则m指定该数的总位数(包括小数点),n指定该数的小数位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。-结果左对齐 +结果右对齐 1、d格式符:输出十进制整数%d按实际长度(或指定输出长度(%md))整数例:printf("%4d,%4d",a,b)

若a=123,b=12345,则输出结果为: ︼123,12345%ld:输出长整型数据

P46例2.22

2.6.2有格式的输入和输出2.6.2有格式的输入和输出补例(ch2_23.c):写出下列程序的运行结果#include<stdio.h>main(){ longx=65538; printf("%ld\n%d\n",x,x);}运行结果: 65538

2(出现溢出错误,原因是格式字符与输出项类型不一致)2.6.2有格式的输入和输出例2.22(ch2_24.c):写出下列程序的运行结果#include<stdio.h>main(){ intx=123; printf("%6d\n%06d\n%-6d\n%2d",x,x,x,x);}运行结果:2、c格式符:用来输出一个字符。例:charc='a';

printf("%c",c);注意:一个值在0~255范围内的整数,可以用字符形式输出(转换成相应的ASCII字符,反之,一个字符数据也可以用整数形式输出.

2.6.2有格式的输入和输出补例:main(){

charc='a';inti=97;

printf("%c,%d\n",c,c);printf("%c,%d\n",i,i);}2.6.2有格式的输入和输出运行结果为:a,97a,973、s格式符:用来输出一个字符串。方法:%s、%ms、%-ms、%m.ns、%-m.ns说明:m:规定输出位数,

n:从左截取n个字符输出

-:输出左对齐补例:printf("%s","CHINA");补例ch2_45:main(){ printf("%3s,%7.2s,%.4s,%5.3s\n","CHINA","CHINA","CHINA","CHINA");}例2.20(ch2_21.c)2.6.2有格式的输入和输出输出如下:CHINA,︼︼︼︼︼CH,CHIN,︼︼CHI4、f格式符:用于输出实数,以小数形式输出。方法:%f、%m.nf、%-m.nf注意:不指定宽度时,系统自动指定:单精度实数的有效位数为6~7位,双精度为16位。例2.23(ch2_25.c)#include<stdio.h>main(){ floatx=12.345; printf("%.2f\n%.2s\n",x,"abcde");}2.6.2有格式的输入和输出结果:12.35ab5、e格式符:按标准化指数形式输出(5位小数,指数部分5位)。例:printf("%e",123.456);例2.25(ch2_22.c):写出下列程序的运行结果#include<stdio.h>main(){ floatx=12.3456789; doubley=1234567891234.123456789; printf("%f\n%f\n%e\n%g\n",x,y,y,y);}2.6.2有格式的输入和输出运行结果:12.3456791234567891234.1235401.23457e+121.23457e+126、g格式符:用来输出实数:根据数值的大小,自动选f格式或e格式(不输出无意义的零)。例如:printf("%f%e%g",f,f,f);若f=123.468,则输出如下: 123.468000︼︼1.234680e+002︼︼123.468

2.6.2有格式的输入和输出可以在字符d,o,x,u前面加字母l来指定不同的输出精度。对于整数而言,h表示按短整型量输出,l表示按长整型量输出。对于实数而言,l表示按double形式输出。例2.19(ch2_20.c):写出下列程序的运行结果#include<stdio.h>main(){ intx=-1; printf("%%d:%d\n%%u:%u\n%%o:%o\n%%x:%x\n",x,x,x,x);}%%表示输出%,作无符号数输出时,符号位当作数值位;

2.6.2有格式的输入和输出2.

scanf函数例(CH2_40):已知三角形的三条边分别是3、5、7,求这个三角形的面积。#include<stdio.h>#include<math.h>main(){

doubles,area; s=(3+5+10)/2.0;

/*用于保存中间结果*/

area=sqrt(s*(s-3)*(s-5)*(s-7));/*用于保存最终结果*/

printf("area:%f\n",area);}问题:如果要计算其他三角形的面积?,则需要修改程序。scanf函数称为格式输入函数,用于给正在运行的程序输入数据。

scanf函数将上例程序进行修改如下(ch2—40a.c)

#include<stdio.h>#include<math.h>main(){ floata,b,c;

doubles,area; printf(“a,b,c=”);

scanf(“%f%f%f”,&a,&b,&c);

/*从键盘给变量a,b,c赋值*/ s=(a+b+c)/2.0;

/*用于保存中间结果*/

area=sqrt(s*(s-3)*(s-5)*(s-7));/*用于保存最终结果*/

printf("area:%f\n",area);}

scanf函数scanf函数的一般形式格式:scanf(“格式控制字符串”,参数地址表);

功能:从键盘读取数据,并将数据存储到给定的地址(赋给指定变量)。(1)格式控制字符串包括两部分:格式转换符:指出输入的数据类型(P48表2-8);分隔符:输入时要输入与它们相同的字符;例如:scanf(“%d%d”,&i,&j);/*按十进制整数的形式输入数据,存入i,j内存地址单元*/注意:scanf()函数要求提供变量的地址。例如:&i,&j格式控制字符串 格式转换符:%d、%ld、%c、%s、%f、%lf分隔符:除格式转换符外的字符,输入时要输入与它们相同的字符。没有分隔符时:每输入一个数据就按一下<回车>或空格。例:见课本P48页,2.26~2.29使用scanf函数的注意事项不能在scanf函数实现精度控制。例:scanf("%4.2d",&x);scanf中只能使用变量地址,不能使用变量名;例如:scanf("%d",x);╳

scanf函数例2.24(ch2_26.c):写出下列程序的运行结果#include<stdio.h>main(){ intx,y,z; scanf("%d,%d%d",&x,&y,&z); printf("x=%d\ny=%d\nz=%d\n",x,y,z);}运行结果:

scanf函数1,23x=1y=2z=3例2.25(ch2_27.c):写出下列程序的运行结果(P49)#include<stdio.h>main(){ charc; charstr[10]; scanf("%c,%s",&c,str);/*str为数组变量的起始地址*/ printf("%c%s\n",c,str);}运行结果:

scanf函数a,bcdefgabcd

温馨提示

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

评论

0/150

提交评论