第2章 数据类型运算符和表达式1_第1页
第2章 数据类型运算符和表达式1_第2页
第2章 数据类型运算符和表达式1_第3页
第2章 数据类型运算符和表达式1_第4页
第2章 数据类型运算符和表达式1_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

第2章数据类型、运算符与表达式C语言大学实用教程12.1一个简单的C程序例子了解了C语言的基本特性及其应用以后,接下来就来看看C语言程序是什么样子。一个C语言程序可以是非常简单的,也可以是特别复杂的,这取决于程序所要实现的功能。我们先来认识一个最为简单的C程序。【例1】最简单的C程序。/*ThisisthefirstCprogram*/#include<stdio.h>voidmain(){printf(“TheisaCprogram!\n");}注释信息预处理命令无返回值无参数、无返回值的主函数主函数名函数开始内部函数名参数回车换行符函数调用函数体语句结束标志函数结束运行结果:TheisaCprogram!在C程序中,注释由“/*”开始,由“*/”结束,可以实现多行注释。在C++程序中也可使用“//”进行单行注释。例如://注释信息

C语言的预处理命令都是以“#”号开头。stdio.h是一个头文件

C程序中允许插入若干行空行,它不影响程序的功能,同注释一样。为了程序的易读性,在编写C程序时,根据需要可插入一定的空行

main是主函数名,一个C语言程序有且仅有一个main函数。C程序执行时就是从main函数开始,具体讲就是从“{”开始,到“}”结束。

printf是C语言的内部函数名,因为它后面跟着(),其功能是将“TheisaCprogram!\n”显示在计算机的屏幕上(双引号和\n不显示)

C语言规定:语句以分号结束

C语言程序的函数由两部分构成:一部分定义变量(变量代表数据),称为声明部分;另一部分代表操作,由C语句构成,称为执行部分。在C程序中,要求函数的声明部分在前面,执行在后面,它们的顺序不能颠倒,也不能交叉。但在C++程序中,声明部分和执行部分可以相互交叉,没有严格的界限,当然执行部分中所使用的变量只要在其之前进行定义即可。//C语言程序voidmain(){inta;a=10;intb;b=a+20;}变量定义放到了执行部分之后。

//C++语言程序voidmain(){inta;a=10;intb;b=a+20;}只要执行部分所使用的变量在前面已经定义

//C或C++语言程序voidmain(){inta;a=10;b=a+20;intb;}变量定义放到了执行部分之后。

再次强调:在C语言程序中,变量必须先定义,后使用,顺序不能颠倒!!!

3【例2】计算输入的两个整数的和。/*ThisisthesecondCprogram*/#include<stdio.h>voidmain(){intx,y,z;scanf("%d%d",&x,&y);z=x+y;printf("thesumoftwointegeris%d\n",z);}数据类型名定义的变量名,以“,”分隔调用内部函数,接受键盘输入数据带有三个参数,以“,”分隔。&表示取变量的地址。调用内部函数,输出计算的和数求和的值给Z假设输入:1020↙

运行结果:thesumoftwointegeris3042.2C程序常见符号分类

C语言中变量和函数都有自己的名字,它们都必须是合法的标识符。

标识符就是一个名字,C语言规定标识符只能由字母、数字和下划线三种字符构成,并且第一个字符必须是字母或下划线。

C语言是大小写敏感的语言,因此hello和Hello是不同的标识符。

C语言中有一些特别的标识符,它们的用途已经事先规定好了,程序员不能再将它们另做它用。这些特别的标识符被称为关键字(也称保留字)。到目前为止,我们见过的关键字有void、int、main、if、else、return。以后随着学习的深入,我们将会遇到越来越多的关键字(C语言关键字可参考附录B)。5C运算符简介

C的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(><==>=<=!=)(3)逻辑运算符(!&&||)(4)位运算符(<<>>~|∧&)(5)赋值运算符(=及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,)(8)指针运算符(*和&)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)分量运算符(.->)(12)下标运算符([])(13)其他(如函数调用运算符())关键字(Keyword)又称为保留字,C语言中预先规定的具有固定含义的一些单词标识符(Identifier)系统预定义标识符用户自定义标识符运算符(Operator)34种,详见附录2

分隔符(Separator)空格、回车/换行、逗号等其它符号大花括号“{”和“}”通常用于标识函数体或者一个语句块“/*”和“*/”是程序注释所需的定界符数据(Data)变量(Variable)常量(Constant)2.3数据类型(DataType)数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类从基本数据类型到抽象数据类型无数据类型基本数据类型构造数据类型抽象数据类型

数据类型(DataType)数据类型基本类型构造类型指针类型空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型2.3.3数据类型修饰符shortshortint,短整数,一般2个字节长。通常简写为shortlonglongint,长整数,一般是4个字节长。通常简写为longlongdouble,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)整数类型的有关数据:

类型类型说明符长度数的范围基本型int2字节-32768~32767

短整型short2字节-215~215-1

长整型long4字节-231~231-1

无符号整型unsigned2字节0~65535

无符号短整型unsignedshort2字节0~65535

无符号长整型unsignedlong4字节0~(232-1)共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)

注意:括号表示其中的内容是可选的.2.3.4标识符命名

变量名函数名由英文字母、数字和下划线组成,大小写敏感不可以是数字开头直观,见名知意,便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性variablenamevariable_nameVariableName,variableName不允许使用关键字作为标识符的名字

int,float,for,while,if等某些功能的变量采用习惯命名如:for语句所采用的循环变量习惯用i,j,kWindows风格UNIX风格标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线C语言的关键字不能用作变量名大小写敏感长度:有效长度为32个字符。随系统而异,但至少前8个字符有效命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性

见名知意不宜混淆如l与I,o与0

在TC2.0及BC3.1中,变量名(标识符)的有效长度为1~32个字符,缺省值为32,但在VC中其长度可达到255例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b

.字符非法

数字3不可作首字符

#字符非法

char是关键字

>字符非法

$不可作首字符

2.4常量常量:在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:整型100,125,-100,0实型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串‘a’,‘ab’,‘1232’符号常量:用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。常量定义:程序运行时其值不能改变的量(即常数)

常量的分类

:直接常量(值常量)

整型常量:

10、15、-10、-30

实型常量:

12.5、30.0、-1.5

字符常量:

‘A’、‘b’、‘c’

字符串常量:

“sum”、“A”、“123”符号常量

用标识符来代表常量。 其定义格式为:

#define符号常量常量

#defineNUM20#definePI3.1415926

#include<stdio.h>#definePRICE30voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}

运行结果:total=300

行尾不能有分号

define前面一定要有#

符号常量名最好使用大写符号常量名最好有意义

常数(Constant)整型常数18、-31长整型常量123l、123L、123456l、123456L无符号型常量123u、123U浮点常数十进制小数形式123.45、456.78指数形式1e-2、4.5e3单精度实型常量123.45f、456.78F、1e-2f、4.5e3F长双精度型常量123.45l、456.78L、1e-2l、4.5e3L八进制与十六进制常数以数字“0”开始的整型常数是八进制数022、-037010和10大小不一样因为八进制并不常用,所以此种表示法比较少见以“0x”或者“0X”开始的整型常数是十六进制A~F和a~f用来表示十进制的10~15十六进制的形式比较常用,尤其在进行位一级的控制的时候0x12、-0x1F,-0x1f实型数据提供的有效数字位数float型数据提供7位有效数字double型数据提供16位有效数字使用不当导致舍入误差#include<stdio.h>main(){

floata;

doubleb; a=123456.789e4; b=123456.789e4;

printf("%f\n%f\n",a,b);}字符型数据和字符串常量

字符型常量

定义:用单引号括起来的单个普通字符或转义字符.

如‘a’‘A’‘?’‘\n’‘\101’

字符常量的值:该字符的ASCII码值如‘A’——65,‘a’——97,‘0’——48,‘\n’——10

转义字符:反斜线后面跟一个字符或一个代码值表示<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65例:转义字符举例

#include<stdio.h>voidmain(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Visual\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Visual‘C’例:voidmain(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥字符串常量

定义:用双引号(“”)括起来的字符序列

存储:每个字符串尾自动加一个‘\0’作为字符串结束标志例1:字符串“HELLO”在内存中0x480x450x4C0x4C0x4F0低地址高地址‘H’‘E’‘L’‘L’‘O’‘\0’字符串结束标志例2:空串“”\0

字符常量与字符串常量不同0x41

0x41\0例‘A’“A”例:charch;ch=“A”;例:charch;ch=‘A’;字符串(String)常数用双引号括住的由0个或多个字符组成的字符序列"Iamastring"""表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用’\0’表示字符串的结束除注释外,是唯一可以出现中文的地方"x"和’x’是不同的<string.h>里定义了一系列专门的字符串处理函数宏常量宏常量也称符号常量一般采用大写字母表示#define标识符字符串不是语句,而是一种编译预处理命令宏替换(MacroSubstitulition)#include<stdio.h>#definePI3.14159#defineR5.3main(){

printf("area=%f\n",PI*R*R);

printf("circumference=%f\n",2*PI*R);}枚举(Enumeration)常量用途:如果一个变量只有几种可能的值,就可以定义成枚举类型枚举类型的定义

enum

枚举类型名{取值表};例:enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};枚举变量的定义----与结构体变量定义类似间接定义:enumweekdayswork;

直接定义:enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat}work;

说明:(1)枚举型仅适应于取值有限的数据。例:1周7天,1年12个月。(2)取值表中的值称为枚举元素,其含义由程序解释。例:不是因为写成“Sun”就自动代表“星期天”。事实上,

枚举元素用什么表示都可以。(3)枚举元素按常量处理,它们的值是定义时的顺序号(从0开始),所以枚举元素可以进行比较,比较规则是:序号大者为大!例:上例中的Sun的值为0、Mon的值为1、……、Sat的值为6,所以Mon>Sun,Sat最大。(4)枚举元素的值也是可以人为改变的:在定义时由程序指定。例:如果enumweekdays{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};则Sun=7,Mon=1,从Tue=2开始,依次增1。

注意:不同的枚举元素不可以指定相同的值(5)一个整数不能直接赋值给枚举变量例:workday=2;(非法,因为类型不同)改写成:workday=(enumweekday)2;

变量的定义:在程序运行过程中,其值可以被改变的量称为变量。例:inti;floatf;charc;变量的两个要素:(1)变量名。每个变量都必须有一个名字──变量名。一个变量名对应于一定的内存单元。变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。对变量的所有操作实际是对相应内存单元的操作。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。例:inta=3;变量名a对应于地址1002;

1002

1003存储单元3变量值2.5变量变量定义:程序运行时其值可以被改变的量

变量的两要素:变量名、变量值变量的定义格式:变量的初始化:定义时赋初始值变量的使用:先定义,后赋值变量定义位置:一般放在函数开头[存储类型]数据类型变量名1[,变量名2,…,变量名n];intx,y,z;floatradius,length,area;

charch;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;

intx=y=z=1;编译程序根据变量定义为其分配指定字节的内存单元地址shortinta=1,b=-3,c;abc2字节2字节2字节地址地址内存…...…...1-3随机数例1:

intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain

例2:

floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}Const类型修饰符用const修饰定义的变量为常量constfloatpi=3.1425926;

常量只能在定义时赋值,然后不能再改变其值常数、const常量、宏常量和枚举常量,都可以用来表示一个永远不会改变的数前者不建议直接使用,而用后三者代替基本数据类型int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数整型变量的定义int变量名[,变量名2,……,变量名n];int必须小写至少一个空格必须为合法的标识符以逗号,分隔以分号;结尾定义时可以赋初值,方法:在变量名后面增加“=数值”

例:

inta;intx,y,z;intm=2,y=-3;

当程序中定义了一个变量时,计算机会为这个变量分配一个相应大小的内存单元。因此,这个变量是有值的,它的值就是对应内存单元的值。如果定义时没有赋初值,则这个值程序员是无法预知的。

整型变量的分类

修饰符控制变量是否有符号:signed(有符号)和unsigned(无符号)控制整型变量的值域范围:short(短)和long(长)。

有符号基本型(int)

inta=-2;//定义一个有符号整型变量a,并赋初值-2

占一个机器字大小的内存单元。TC或BC3.1下,变量占2个字节(16位)的内存单元;VC6.0下,变量占4个字节(32位)的内存单元。

如果定义变量时,不指定signed,也不指定unsigned,则默认为signed(有符号)

1111111011111111低地址高地址低字节高字节符号位变量a占用的内存单元(2字节)有符号整型变量在内存中的实际存放形式(假设在BC3.1下)

无符号基本型(unsignedint或unsigned)

unsignedinta=2;//定义一个无符号整型变量a,并赋初值2

unsigneda=2;

占用的内存单元字节数同int类型。与inta=2;等价。

unsignedinta=-2;//定义一个无符号整型变量a,并赋初值-2

unsigneda=-2;1111111011111111无符号整型变量在内存中的实际存放形式(假设在BC3.1下)

低字节高字节低地址高地址数据位变量a占用的内存单元(2字节)其值为:65534!注意:对于有符号数也好还是无符号数也好,其实在计算机内存中表示是不加区分的,都是以其补码形式表示,只是我们怎样看待最高二进制位的问题,如果把最高位当成符号位看待,则为有符号数,如果把最高位当成数据位看待,则变为无符号数。例如:unsignedinta=-2;

printf(“%d”,a);------有符号输出,则为-2printf(“%u”,a);------无符号输出,则为65534有符号短整型(shortint或short)

shortinta=2;//定义一个有符号短整型变量a,并赋初值2

shorta=2;

占用的内存单元为2个字节,无论是TC、BC,还是VC。无符号短整型(unsignedshortint或unsignedshort)

unsignedshortinta=2;//定义一个无符号短整型变量a,并赋初值2

unsignedshorta=2;

占用的内存单元字节数同short类型。在TC2.0和BC3.1下,unsignedshort类型与unsignedint类型是等价的

。有符号长整型(longint或long)

longinta=234567;//定义一个有符号长整型变量a,并赋初值234567

longa=234567;

占用的内存单元为4个字节,无论是TC、BC,还是VC。无符号长整型(unsignedlongint或unsignedlong)

unsignedlonginta=2;//定义一个无符号长整型变量a,并赋初值2

unsignedlonga=2;

占用的内存单元字节数同long类型。在VC中long与int类型基本相同,均占四个字节的内存单元;但在TC或BC中,long类型与int类型只是所占字节不同外(long占4字节,int占2字节),其它数据处理方法是一样的。

【例】各种整型变量的定义

#include<stdio.h>#defineSUM65535voidmain(){inta,b=20;

unsignedintc=0xff;longD;a=SUM;D=301;printf("a=%d\n",a);

printf("b=%d\n",b);

printf("c=%d\n",c);

printf(“D=%d\n”,D);}//文件包含,头文件说明

//定义符号常量SUM,值为65535

//定义两个int型变量a和b,b赋初值20

//定义无符号整型变量c,并赋初值0xff

//定义长整型变量D

//对a赋值为SUM,这时a的值是65535

//对D赋值为301

//以有符号十进制形式("%d")显示a的值

//以有符号十进制形式(“%d”)显示b的值

//以有符号十进制形式("%d")显示c的值

//以有符号十进制形式("%d")显示D的值

变量定义部分语句执行部分在BC3.1下运行结果:

a=-1b=20c=255D=301在VC6.0下运行结果:

a=65535b=20c=255D=301对于16位的有符号整型变量a来说,因65535在内存中的形式为1111111111111111,最高位为1表示负,则其所对应的十进制数就为-1。使用变量要注意不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现场演示程序在TurboC2.0和VisualC下的运行结果注意!#include<stdio.h>main(){

printf("DatatypeNumberofbytes\n");

printf("---------------------------------\n");

printf("char%d\n",sizeof(char));

printf("int%d\n",sizeof(int));

printf("shortint%d\n",sizeof(short));

printf("longint%d\n",sizeof(long));

printf("float%d\n",sizeof(float));

printf("double%d\n",sizeof(double));}变量声明使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数 charesc='a'; inti=1; intsum=0; floateps=1.0e-5;数据在内存中的存储格式整型实型字符型阶码符号阶码的数值尾数符号尾数的数值阶码j尾数S字符型变量字符型数据类型符是char(字符character)在内存中占1个字节(8位)字符变量存放字符ASCII码

char与int数据间可进行算术运算存在有符号和无符号之分。默认情况下为有符号例:

charch;unsignedcharC='B';例:

a=‘D’;//a=68;

x=‘A’+5;//x=65+5;

s=‘!’+‘G’//s=33+71;

没有字符串变量,用字符数组存放字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意:

一个字符数据既可以以字符形式输出,也可以以整数形式输出。char型与int型之间的关系小写字母转换为大写字母#include<stdio.h>main(){

charch='b';

ch='b'-32;

printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){

charch='b';

ch='b'-('a'-'A')

;

printf("%c,%d\n",ch,ch);}实型数据

实型常量(实数或浮点数)

十进制小数形式:由数字0~9和小数点组成

.

如:0.0,5.6,-5.指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成.

其一般形式为:aEn

其中:a为十进制数,n为十进制整数,都不可缺少。其可表示为a×10n合法的实数表示:

2.1E5表示2.1×105,3.7E-2表示3.7×10-2。

非法的实数表示:

345(无小数点)

,E7(阶码标志E之前无数字)

-5(无阶码标志)

,50.-E3(负号位置不对)

实型变量

单精度实型(float)

floatf=3.14,g;

这种定义的变量在内存中占4个字节(32位)的存储单元。双精度实型(double)

doublex,y;

这种定义的变量在内存中占8个字节(64位)的存储单元。

长双精度实型(longdouble)

longdoublex,y;

在TC或BC下,这种定义的变量在内存中占10个字节(80位)的存储单元;在VC下则占8个字节(64位)。

注意:三种实数类型中,其精度是

float<double≦longdouble;longfloat实际上就是double,因此,没有longfloat类型;所有的实型常量按照double类型处理。实型数据

实型数据的精度

类型精确表示的数字个数

float

7~8

double

16~17

longdouble

17~18#include<stdio.h>voidmain(){floata;//定义float型变量adoubleb,c;//定义double型变量b和ca=123.456789;//对变量a赋值为123.456789b=a;//将变量a赋给变量bc=123.456789;//对变量c赋值为123.456789printf("a=%fb=%lfc=%lf\n",a,b,c);}abc123.456787123.456787123.456789a=123.456787b=123.456787c=123.456789

float型变量最多只能精确表示8个数字,因此显示a的值时,只能有效显示前面8个数字即123.45678,最后追加一位数字7是随机的

C运算符简介

C的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(><==>=<=!=)(3)逻辑运算符(!&&||)(4)位运算符(<<>>~|∧&)(5)赋值运算符(=及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,)(8)指针运算符(*和&)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)分量运算符(.->)(12)下标运算符([])(13)其他(如函数调用运算符())运算符的优先级和结合性详见附录D算术运算符+,-,*,/加、减、乘、除运算四则混合运算中,先算乘除,后算加减,

按从左向右的顺序计算,左结合%求余运算两个整数相除仍为整数,余数的符号取决于被除数的符号。常用的标准数学函数函数名功能函数名功能sqrt(x)计算x的平方根,x应大于等于0exp(x)计算ex的值fabs(x)计算x的绝对值pow(x,y)计算xy的值log(x)计算lnx的值sin(x)计算sinx的值,x为弧度值log10(x)计算lgx的值cos(x)计算cosx的值,x为弧度值在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。C规定了各种运算符的结合方向(结合性)

算术运算符的结合方向为“自左至右”,即先左后右。关系运算符>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于关系运算符运算出的结果为0和非00,表示假,即该关系不成立非0,表示真,即该关系成立绝大多数编译器,关系运算得到的非0结果为1,但是不要利用这个1>,>=,<,<=的优先级别相同,却高于==,!=(优先级别相同)a=3,b=2,c=1a>b>c的比较?逻辑运算符逻辑运算也被称为布尔(Boolean)运算&&与运算(a>b&&b>c);a大于b,并且b大于c||或运算(a>b||b>c);a大于b,或者b大于c!求反(!a);如果a是0,结果非0;如果a是非0,结果是0并不改变a的值实例ch是英文大写字母(ch>='A')&&(ch<='Z')判断某一年year是否是闰年的条件是满足下列两个条件之一:能被4整除,但不能被100整除;能被400整除;((year%4==0)&&(year%100!=0))||(year%400==0)增一和减一运算符n++,n--,++n,--n++让参与运算的变量加1,--让参与运算的变量减1作为后缀运算符时,先取n的值,然后加/减1作为前缀运算符时,先加/减1,然后取n的值m=n++;

等价于m=n;n++;m=++n;

等价于n++;m=n;例如:①j=++i;

i的值先变成4,再赋给j,j的值均为4②j=i++;先将i的值3赋给j,j的值为3,然后i变为4增一和减一运算符良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果注意:

(1)自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式,

(2)++和--的结合方向是“自右至左”。类型转换在进行赋值操作时,会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用字符串与数值类型之间的转换inti="123"这样用是不行地atof(),atoi(),atol()把字符串转为double,int和long定义在stdlib.h中sprintf()可以用来把各种类型的数值转为字符串定义在stdio.h中自动类型转换同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种long

double>double>float>long>int>short>char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告)类型强转(Casting)消除从大到小的警告l=(long)i;可以通过“(类型)表达式”的方式把表达式的值转为任意类型强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将#include<stdio.h>main(){

intm=5;

printf("m/2=%d\n",m/2);

printf("(float)(m/2)=%f\n",(float)(m/2));

printf("(float)m/2=%f\n",(float)m/2);

printf("m=%d\n",m);}位操作运算符&按位与运算|按位或运算^按位异或运算<<按位左移运算>>按位右移运算~按位求反赋值运算符下面两个语句是等价的i=i+2;i+=2;+、-、*、/、%、<<、>>、&、^、|运算符都可以按此种方式处理这种形式看起来更直观,而且执行效率一般也能更高一些一般形式为:

<变量><赋值运算符><表达式>赋值表达式也可以包含复合的赋值运算符。

如:a+=a-=a*a分析:此赋值表达式的求解步骤如下∶①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132。②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。如:printf("%d",a=b);分析:如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个语句中完成了赋值和输出双重功能。赋值过程中的类型转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。①将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中.

②将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中

如:

将23赋给float变量f,即执行f=23,先将23转换成23.00000,再存储在f中。将23赋给double型变量d,即执行d=23,系统将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到变量d中。

③将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。

如:floatf;doubled=123.456789e100;f=d;

就出现溢出的错误。

如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储④字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此将字符数据(8个二进位)放到整型变量存储单元的低8位中。⑤将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:inti=289;charc=′a′;c=i;c的值为33,如果用“%c”输出c,将得到字符“!”!的ASCII码为33。

赋值情况:

将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中:如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。⑦将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。赋值运算符两侧的数据类型不一致时,赋值运算符右端的表达式计算结果要转换为赋值运算符左端变量的类型。注意:表达式的值是否超过变量所属类型的取值范围。

实型数据整型变量取整数部分,但注意范围(1)实型变量整型数据以浮点形式存储(2)double数据float变量取7位有效数字,但注意范围(3)double变量float数据有效位数扩展char数据整型变量字符数据送到整型变量低8位但注意符号

温馨提示

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

评论

0/150

提交评论