浙江科技学院教信系计算机基础教学网站wwwGoitNet_第1页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第2页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第3页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第4页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第1讲C语言基础要求:(1)

C程序的组成(2)C语言的标识符是如何定义的。(3)

C语言有哪些基本数据类型?各种基本数据类型的常量和变量是如何定义的?(4)

C语言有几种类型的表达式?各种类型表达式是如何求值的?(5)在C语言混合运算的表达式中,各种运算符的优先级和结合性。一、C程序的组成C程序函数组成由若干函数说明部分函数体函数类型说明函数名函数形参形参类型说明变量定义部分执行部分

intsum(x,y)intx,y;{intz;z=x+y;

retrunz;}

intsum(intx,inty){intz;z=x+y;retrunz;}例如:等价(函数首部)1

C程序中必有且仅有一个main()函数,程序从main()开始执行,并且在main()中结束。main()函数可以放在任何位置。

2

每一个说明,每一个语句都必须以分号“;”结尾。但预处理命令,函数头和花括号“}”之后不能加分号。

3

C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。在TC++中,注释符以“//”开始,到本行结束。例如:

inta,b;//定义2个整型变量

1.数据的描述(数据结构)一个程序应包括两个方面的内容: 2.操作的描述(即操作步骤、算法)数据是操作的对象,操作的结果又会改变数据的状况。数据结构与算法的结合才成为一个程序。

C语言提供的数据结构是以数据类型形式出现的,C的数据类型有:C的数据类型

基本型(int)

整型短整型(shortint)

长整型(longint)

无符号型(unsignedint)

基本类型实型(浮点型)单精度(float)

双精度(double)

字符型(char)

枚举型(enum)

数组类型(type[])

构造类型结构体类型(struct)

共用体类型(union)

指针类型(type*)

空类型(void)

C语言的基本符号1.基本符号:

⑴26个英文字母

包括大写和小写,C中大小写字母被认为是两个不同的字符。

⑵数字

0~9。

⑶特殊符号:如

①初等量表达式操作符:(),[],.,→;

②一元操作符:*,&,-,!,~,+

+,--,sizeof();③二元操作符:+,-,*,/,%,>>,<<,>,<,>=,<=,==,!=,&,^,|,&&,||;④赋值组合操作符:=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=;⑤逗号操作符:,;2.标识符

用来表示变量名、符号常量名、函数名、数组名、类型名、文件名等的有效字符序列。

⑴标识符的组成:

由字母、数字、下划线(-)组成,且第一个字符必须是字母或下划线。注意:C语言中大、小写字母被认为是两个不同的字符:sum和SUM。

例sum,_total,lotus_1,A1,B123为合法的标识符。 而M.John,1A,$3.33不合法。

⑵标识符字符序列长度ANSIC无规定。一般取前8位,例:

student_number,student_name

不能区分

stu_number,stu_name能区分⑶标识符分类:(分3类)

①关键字:32个,一般用小写字母。

◆数据类型关键字(12个):char,double,enum,float,int,long,short,signed,struct,union,unsigned,void

控制语句关键字(12个):break,case,continue,default,do,else,for,goto,if,return,switch,while

存储类型关键字(4个):auto,extern,register,static

◆其它关键字(4个):const,sizeof,typedef,volatile②预定义标识符:

如printf(),scanf(),define,include….③用户定义的标识符 一般应选用有一定含义的字符串,以便于程序阅读。

选择题:以下选项中,均是不合法的用户标识符是()。

A)A B)float C)b-a D)_123 P_0 1a0 go# temp do _A int INT 3.2常量与变量常量常量——在程序运行过程中其值不能被改变的量。常量有不同的类型,如-3,4.6,‘a’,“as”

分别为不同类型。常量一般从其字面形式即可判别类型,这种常量称为字面常量或直接常量。

十进制常量长整型常量(后缀加l(不是数字1))

八进制常量(0开头常数)

十六进制常量(0x开头常数)实型常量

单个字符常量

字符串常量

算术常量字符常量整型常量符号常量常量1.

直接常量如12、0、-3整型,45l长整型4.6、-1.23实型‘a’、‘\101’、‘D’字符型“abc”、“1024”字符串(字符数组)2.符号常量格式

#define标识符常数如#definePRICE30习惯上符号常量名用大写,变量名用小写,以示区别。使用符号常量的好处是:①含义清楚。②在需要改变一个常量时能做到“一改全改”。注意:符号常量不能再被赋值.要避免产生岐义(宏定义)变量变量——其值可以改变的量称为变量。一个变量应该

①有一个名字——变量名,用合法的标识符表示

②在内存占据一定的存储单元,在该内存单元中存放变量的值。应注意区分变量名和变量值这两个不同的概念: 变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。3变量值存储单元a变量名C语言中,要求对所有用到的变量作强制定义,即先定义后使用,这样可以:确保程序中变量名的正确。一个变量一经定义,在编译时就可以为其分配相应的存储单元。由于每个变量都有一个类型,因此在编译时可以检查该变量所进行的运算是否合法。注意1.变量名和变量值是不同的。如:x=3.14变量名x

变量值3.142.变量名由字母、数字、下划线组成,由字母、下划线开头3.大写字母和小写字母是不同的,一般用小写字母如:sum和SUM是两个变量名4.变量名应“见名知意”如:sum、count、total5.变量应“先定义,后使用”,未定义的不得使用6.每一变量有一确定类型如:int,float,char7.尽量避免用容易混淆的字符如:o和0,l和1,z和2整型数据整型常量的表示法

即整常数,C语言中有以下三种表示形式: 1.十进制:如1230-456 2.八进制:以0开头的数即认为是八进制数。 如0123

即八进制的123,相当于十进制的83 3.十六进制:以0x或0X开头的数即认为是十六进制数。 如

0x123

即十六进制的123,相当于十进制的291。

选择题:以下选项中,均是合法的整型常量的选项是()。

A)160 B)-0xcdf C)-01 D)-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x补充数制转换1.十进制→八进制(二、十六进制)

整数转换:除8取余例如(175)10=(257)817521288余数75读数:2572.八进制(二、十六进制)→十进制

整数转换:(11001)2--->1*24+1*23+0*22

+0*21+1*20

=16+8+0+0+1=(25)101.整型数椐在内存中存放形式

数椐在内存中是以二进制形式存放的,每一个整型变量在内存中占两个字节。如定义一个整型变量i:inti=10;10的二进制表示为1010,内存中的存储形式为:

0000000000001010 实际上,在计算机中数值是以补码表示的。一个正数的补码和其原码相同,负数的补码为其绝对值的二进制形式按位取反再加1。

例如,若i=-10;二进制表示为:000000000000101010的原码111111111111010110的反码1111111111110110-10的补码补充

原码、反码、补码的概念

原码

存储单元的最高位为符号位,其0为正,1为负,值为二进制补码

补码=反码+1反码

代码的0变为1,1变为0注意

正数的原码、反码、补码是一样的例(-10)10

1000000000001010---原码求反

1111111111110101---反码

+11--------------------------------

1111111111110110---补码2.整型变量的分类可以根据数值的范围将整型变量定义为基本整型、短整型或长整型。

⑴基本型:以int

表示,变量的值范围为-32768~32767。

⑵短整型:以shortint

或short

表示

⑶长整型:以longint

或long表示 为了充分利用变量的表数范围,可以不设符号位,而用全部二进位存放数据,只存放不带符号的整数,即定义无符号型。可以有无符号整型(unsignedint)、无符号短整型(unsignedshort)、无符号长整型(unsignedlong)。

归纳起来,可以使用以下6类整型变量:

int unsignedint short[int] unsignedshort[int] long[int] unsignedlong[int] C标准并没有具体规定以上各类数据所占内存字节数,只要求long型数据长度不短于int

型,short型不长于int

型。

例1整型变量的定义和使用

main(){inta,b,c,d;/*定义整型变量*/

unsignedintu;/*定义无符号整型变量

*/

a=12;b=-24;u=10;c=a+u;d=b+u;printf("a+u=%d,b+u=%d\n",c,d);}运行结果:a+u=22,b+u=-14可以看到:不同种类的整型数据可以进行算术运算.3.整型变量的定义(强制类型定义):

inta,b;-------------a,b定义为整型

unsignedshortc,d;------c,d定义为无符号短整型

longe,f;------------e,f定义为长整型变量定义一般放在函数的开头部分的声明部分。4.整型数据的溢出

例2

整型数据的溢出

main() {inta,b;a=32767;b=a+1;printf("%d,%d",a,b); }a:011111111111111132767b:1000000000000000-32768运行结果:32767,-32768一个整型变量只能容纳-32768~32767(-215~215-1)

范围内的数,无法表示大于32767的数,遇此情况就发生“溢出”。(教材P43表)

实型数据实型常量的表示法

C语言中的实数又称浮点数,有两种表示形式:1.十进制数形式:由数字和小数点组成(必须有小数点)。 如0.123.123123.0.0…2.指数形式:由数字、字母E(或e)和小数点组成,且E后面必须是整数,E前面必须要有数字。 如123e31.23e6123.4E2

规范化的指数形式:在字母e或E之前的小数部分中,小数点左边有且只有一位非零数字。 如1.23e选择题:以下选项中,均是不合法的实型常量的选项是()。

A)160. B)123 C)-.18 D)-e3 0.12 2e4.2 123e4 .234 e3 .e5 0.0 1e3实型变量1.实型数据在内存中的存放形式

一个实型数据一般在内存中占用四个字节(32位),按照指数形式存储。 例如,3.14159按照“+0.314159e1”形式存储。 在4个字节中,究竟用多少位来表示小数部分、多少位来表示指数部分,标准C并无具体规定,完全由各编译系统自定。小数部分占的位数越多,数的有效数字越多,精度越高。指数部分占的位数越多,则能表示的数值范围越大。 单精度float型(32bit,6~7位有效数字)

2.实型变量的分类 双精度double型(64bit,15~16位有效数字)

3.实型变量的定义:每个实型变量也必须在使用之前定义例如floatx,y;-----------定义x和y为单精度型变量

doublez;-----------定义z为双精度型变量

单精度与双精度只是数据的有效位数不同.。4.实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生误差(四舍五入)。例3

main(){floata,b;a=123456.789e5;b=a+20;printf("%f",b);}

运行结果:

12345678848.000000这是因为一个实型变量只能保证7位数字有效。

注意:应避免将一个很大的数和一个很小的数相加或相减。

a:12345678900b:12345678920?一、

字符常量

C的字符常量是指用单引号括起来的一个字符,如'a','A','$'等,除上述字符常量之外,C中还允许一种特殊字符常量,即以"\"开头的字符序列,称为"转义字符",意思是将“\”后面的字符转变成另外的意义。

\n换行

\t水平制表(跳到下一个tab位)(一个tab位占8列)\v竖向跳格(相当于换行)\b退格,将当前位置移到前一列

\r回车(到行首,不换行)\f走纸换页,将当前位置移到下页开头

\\字符“\”

\'字符“'”\ddd1~3位八进制数所代表的字符如‘\074’‘\74’'\4'\xhh1~2位十六进制数所代表的字符如'\x74'

'\x4'

字符型数据单引号例A(65)10=(101)8'\101'='A’P374

换行符(10)10=(12)8'\012'='\n’选择题:以下选项中,均是不合法的转义字符的选项是()。

A)'\''' B)'\1011' C)'\011' D)'\abc' '\\' '\' '\f' '\101' '\xf' '\a' '\}' 'x1f'选择题:以下选项中,正确的字符常量是()。

A)"c" B)'\\'' C)'\085' D)'W'三、

字符数据在内存中的存储形式及其使用方法 将一个字符常量存到一个字符变量中去,并不是把该字符本身放入内存单元之中,而是将该字符的相应的ASCII码AmericannationalStandardCodeforInformationInterchange(美国国家信息交换标准代码)。存放到存储单元之中。例如:charc1,c2; c1='a'; c2='b';二、

字符变量字符变量用来存放字符常量(只能放一个字符,而不是字符串)。字符变量的定义:

charc1,c2;——定义c1,c2为字符变量内存中存放的不是'a'和'b',而是'a'和'b'的ASCII码97和98由于字符数据以ASCII码存储,因此与整数有相同的形式,因此C语言中的字符型数据和整型数据之间可以通用。

例.

charc1,c2; c1='a';与

c2='b';

对c1、c2分别赋值,结果相同。

至于是输出字符还是整数取决于"格式控制符"。%d:十进制整型%c:字符型charc1,c2;c1=97;c2=98;大小写字母转换。

main(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c",c1,c2);}从ASCII码表中可以看到,每一个小写字母比它相应的大写字母的ASCII大32。因此有:小写字母-32==大写字母运行结果:

AB四、

字符串常量

字符串常量:是一对双引号

""括起来的字符序列。 如: "Howdoyoudo." "$123.45"字符串常量与字符常量:字符常量是一个字符,字符串常量是一对双引号括起来的字符序列。C规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统椐此判断字符串是否结束。C规定以字符'\0'作为字符串结束标志。'\0'是系统自动加上的,在写字符串时不必加'\0'。

"a"与'a'的区别:字符串"a"实际上包含2个字符:'a'和'\0',占2个字节;'a'占1个字节。

注意:不要混淆字符常量与字符串常量!

字符串常量不能赋给一个字符变量。 如: c="a";是非法的,而应该是c='a';C语言中的字符串用字符型数组来存放。选择题:以下选项中,均是正确的数值常量或字符常量的是()。

A)0.0 B)"a" C)'3' D)+001 0f 3.9E-205 011 0xabcd 8.9e 1e1 0xFF00 2e2 '&' '\''' 0a 50.选择题:下面不正确的字符串常量是()。

A)'abc' B)"12'12'' C)"0" D)""练习题选择题:"\1212\’12"的字符串长度为()。

A)3 B) 6

C)5D)编译出错选择题:"\12\’12"的字符串长度为

()。

A)3 B) 4C)7D)5练习题变量赋初值程序中常常需要对一些变量预先设定初始值,C语言中规定,可以在定义变量的同时使变量初始化。 如inti=3; floatx=2.5;

变量赋初值相当于变量定义与变量赋值两部分。 如:inti=3;相当于 inti; i=3;也可以使被定义的变量的一部分赋初值。 如:inta,b,c=5;(只对c赋初值5) 如果对几个变量赋以同一个值,不能写成

inta=b=c=3;

而应写成inta=3,b=3,c=3;变量初始化一般是在程序运行、执行本函数时赋予初值的。而定义是在编译时执行的.各数据类型之间的混合运算高 double<--------float

即float必须先转换成double ↑

以提高精度(即使两个数同为float

long

型也必须转换为double后进行运算) ↑

unsigned ↑低 int<-------char,short

字符、短整型必须转换成整型int注注意:这里只是指出数据类别级别的高低,而不是说必须一级一级转换。例如:int与double运算,则int直接转换成double,然后运算,而不必经过unsigned和long这两级。整型、实型(单精度、双精度)可以混合运算,而字符型数据与整型通用,因此,整型、实型(单精度、双精度)、字符型数据之间可以混合运算。 例如:10+'a'+12.3*'b'是合法的在运算时先将各种类型化成同一类型,然后进行运算,类型转换的规则是:算术运算符和算术表达式1.基本算术运算符

分两类:一元和二元运算符:一元有

:-(负号)、++、--; 例如-x,x++,x--二元有:

+、-、*、/、%(模运算符,求余运算符);

例如:x+y;x-y;x*y;x/y; x%y(表示两个整数求余数,如7%4的值为3)注意二点: ⑴两个整数相除,结果为整型,舍去小数部分。如果其中一个为实型,则结果为double。如果其中之一为负数,则舍入的方向是不定的,依机器而定。多数机器采取“向零取整”。 如5/3=1,3/5=0,-5/3=-1⑵%运算符只适用于整数。

5%3=2,3%5=3,8%4=0-7%4=-3,7%(-4)=3注意:求模运算中,结果值的符号与第一个数(即被求模的数)符号相同.C的算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。这里运算对象包括:常量、变量、函数等。如:a*b/c+1+12.3*'a'是一个合法的算术表达式优先级:-,++,-- *,/,% +,-算术运算符的结合方向(结合性)是自左至右(左结合,C语言中还有右结合)如:a-b*c -与*之间先*后-

a-b+c -与+同级,则先-后+

如果一个运算符两边的数据类型不同,则按前面的法则进行转换,然后运算。2.算术表达式和运算符的优先级与结合性3.强制类型转换可以用一个强制类型转换运算符将一个表达式的值转换成所需要的类型。一般形式:(类型名)(表达式)

如: (double)a 将a的值转换成double型

(int)(x+y) 将(x+y)的值转换成int

型比较与(int)x+y有何不同? (float)(5%3)

注意:强制类型转换只是将表达式的值转换成所需的类型,而原来的变量类型并没有变化。因此有两种方法进行类型转换:(1)自动转换(按级别高低)

(2)强制转换(用强制类型转换运算符)例:

强制类型转换。

1.main(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d",x,i);}运行结果:

x=3.600000,i=33.main(){floatx;inti,j;x=3.6;i=5;j=(int)x%i;printf("j=%d",j);}2.main(){intx,y;longz;x=400;y=200;z=(long)x*y;printf(“z=%ld\n",z);}运行结果:

j=3运行结果:z=80000如果写成z=x*y结果如何(是int型14464)4.自增运算符(

++)、自减运算符(--)自增、自减的作用是使变量的值增1、减1。++i、--i:在使用i之前使i的值先增加1(或减少1),即先变化i后得到新的i值,再使用该新的i进行运算。

i++、i--:在使用i之后再使i的值增加1(或减少1),即先使用原来的i进行运算,运算结束后再变化原来的i,得到新的i值。 例如:n=3; n=3;m=n++; m=++n;

结果是

m为3,n为4;

m为4,n为4注意:⑴自增、自减运算符只能用于变量,不能用于常量或表达式。++(i+1)

是错误的。⑵自增、自减运算符是自右至左结合的(不同于算术运算符)。 如:-i++表示–(i++),而不是(-i)++,而(-i)++也是不合法的。 若i=3;printf("%d",-i++);先取出i的值3,输出-i的值-3,然后i增值为4。赋值运算符和赋值表达式1.赋值运算符赋值号“=”就是赋值运算符。它的作用是将一个数据赋给一个变量,也可以将一个表达式的值赋给一个变量。 如:x=1; c=a+b;

注意:左边必须是变量a++=5;a+1=5;都是错误的。2.类型转换当赋值号两边类型不一致,但都是数值型或字符型时,赋值时要进行类型转换。不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。A.float--->int

实型赋给整型,舍去小数

i=3.56--->i=3不“四舍五入”B.int--->float

数值不变,以浮点数形式储存,补足0

f=23--->f=23.00000(有效数字7位)#include<stdio.h>voidmain(){inty;doubled=3.4,x;x=(y=d/2.0)/2;printf("(%0.2f,%d)",x,y);getch();}程序运行结果:A.(0.00,1)B.(0.85,1.7)C.(0.50,1)D.以上都不对例题赋值运算符和赋值表达式例: *=: a*=3; → a=a*3; /=: x/=y+3; →x=x/(y+3); %=:a%=3; → a=a%3; 3.复合的赋值运算符

在赋值运算符之前加上其它运算符可以构成复合运算符。如:在=之前加上+,则构成+=。

a+=3相当于a=a+3

含义是:a+=表达式相当于a=a+表达式如果表达式是由多项构成,则相当于有括号,即a=a+(表达式)

凡是二元(二目)运算符都可以与“=”一起组成赋值运算。C语言中规定可以用10种复合赋值运算符:

+=-=*=/=%=<<=>>=&=^=|=4.赋值表达式什么是赋值表达式?由(单一或复合)赋值运算符将一个变量和一个表达式连接起来的式子。一般形式: <变量><赋值号><表达式>

赋值表达式的求解过程是:

先对运算符右侧的表达式求值,再将该值赋给运算符左边的变量。赋值表达式的值:就是被赋值的变量的值。如:a=5的值是5。这里<表达式>既可以是一个普通的表达式,也可以是一个赋值表达式。 如:a=(b=5)即表示b=5和a=5

由于赋值运算符是自右至左结合,因此a=(b=5)等价于a=b=5

例:

a=(b=4)+(c=6) → c=6,b=4,a=10 a=(b=10)/(c=2) → c=2,b=10,a=5

例:有表达式a+=a-=a*a,设a=12,求运行结果。

(1)a-=a*a,即a=a-a*a=-132(2)a+=a,即a=a+a=-264注意:如果在赋值表达式后面加上“;”,则成为赋值语句。逗号运算符和逗号表达式用“,”将两个表达式连接起来所构成的表达式称为逗号表达式。 如:3+5,6+8

逗号表达式的一般形式:表达式1,表达式2求解过程:先求表达式1的值,再求表达式2的值,整个表达式的值是表达式2的值。如上式,结果是14

又如:a=3*5,a*4结果是a=15,表达式值是60。一个逗号表达式可以与另一个逗号表达式组成新的逗号表达式。如:(a=3*5,a*4),a+5

即: (1)a=15 (2)(15,60)=====>值为60 (3)60,20======>整个表达式的值为20

例:(1)x=(a=3,6*a)(2)x=a=3,6*a 赋值表达式:a为3,x为18;逗号表达式:x为3,a为3。逗号表达式可以推广到多个表达式的情况

表达式1,表达式2,...,表达式n

它的值是表达式n的值。由于逗号运算符是所有运算符中级别最低的,因此书写表达式时要注意求解的次序。注意:并非所有的","都是运算符 如:printf("%d,%d,%d",a,b,c); ------这里的","都只是分隔符 而printf("%d,%d,%d",(a,b,c),b,c); -----这里(a,b,c)中的","是运算符逗号运算符和逗号表达式选择题:下面符合C语言语法的赋值表达式是()。

A)d=9+e+f=d+9 B)d=9+e,f=d+9 C)d=(9+e,e++,d+9) D)d=9+e++=d+7

关系运算符和表达式一、关系运算符及优先级别比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符:

<小于,<=小于或等于>大于

>=大于或等于==等于!=不等于

关系运算符的优先级:(1)>、>=、<、<=优先级相等,==、!=优先级相等,前者高于后者。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。关系表达式的一般形式为:

表达式关系运算符表达式关系表达式的值是:关系成立为“真”,不成立则为“假”,C语言中用“1”表示“真”、“0”分别表示

“假”

。例如:a+b>c-dx>3/2'a'+1<c-i-5*j==k+1

都是合法的关系表达式。表达式也可以又是关系表达式。例如:a>(b>c),a!=(c==d)

等也都是合法的关系表达式。二、关系表达式关系运算符和表达式条件运算符为?:它是一个三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:

表达式1?表达式2:表达式3其求值规则如右图:例如条件语句:

if(a>b)max=a;elsemax=b;可用条件表达式写为:

max=(a>b)?a:b;

条件运算符和条件表达式使用条件表达式时,还应注意以下几点:1.条件运算符的运算优先级

低于关系运算符和算术运算符,高于赋值符。因此max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b2.条件运算符?:是一对运算符,不能分开单独使用。3.条件运算符的结合方向是自右至左。例如:

a>b?a:c>d?c:d应理解为

a>b?a:(c>d?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

条件运算符和条件表达式例main(){charch;scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?ch+32:ch;printf("%c",ch);}if(ch>='A'&&ch<='Z')ch=ch+32;等价条件运算符和条件表达式一、逻辑运算符

C语言中提供了三种逻辑运算符!非运算&&与运算||或运算运算符&&和或运算符||均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。1、逻辑运算符优先级表示如下:(1)!高于&&高于||(2)&&,||低于关系运算符,!高于算术运算符(*,/)。

逻辑运算符和表达式按照运算符的优先顺序可以得出:

a>b&&c>d等价于(a>b)&&(c>d)!b==c||d<a等价于((!b)==c)||(d<a)a+b>c&&x+y<b等价于((a+b)>c)&&((x+y)<b)2、逻辑运算的值:

逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。逻辑运算符和表达式3、逻辑运算的规则:(1)与运算&&参与运算的两个量都为真时(非0),结果才为真(值为1),否则为假(值为0)。例如:5>0&&4>2,由于5>0为真,4>2也为真,其结果也为“真”,表达式的值为1。(2)或运算||

参与运算的两个量只要有一个为真(非0),结果就为真(值为1)。两个量都为假(值为0)时,结果为假(值为0)。例如:5>0||5>8,结果也就为真(值为1)。逻辑运算符和表达式(3)非运算!参与运算量为真(非0)时,结果为假(值为0);参与运算量为假(值为0)时,结果为真(值为1)。例如:!(5>0)的结果为假(值为0)。注意:C语言在逻辑运算值时,以“1”代表“真”,“0”代表“假”。在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。C语言中的“0”只有4个分别是:0,0.0,‘\0’,NULL。

例如:5&&3的值为“真”,即为1。又如:5||0的值为“真”,即为1。逻辑运算符和表达式二、逻辑表达式逻辑表达式的一般形式为:

表达式&&或||表达式!表达式

逻辑表达式的值:各种逻辑运算的最后值,

以“1”和“0”分别代表“真”和“假”。例如:

charc='k';inti=1,j=2,k=3;

printf("%d\n",i==5&&c&&(j=8);

printf("%d\n",x+y||i+j+k);逻辑运算符和表达式说明:

在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符。(1)表达式1&&表达式2

a+b>0&&b++

如果:表达式1的值是0,无论表达式2的值是什么,整个表达式的值都为0,因此表达式2就不计算了。(2)表达式1||表达式2

a+b>0||b++

如果:表达式1的值是1,无论表达式2的值是什么,整个表达式的值都为1,因此表达式2就不计算了。逻辑运算符和表达式判断题:

表达式!x等价于

x!=1

表达式(z=0,(x=2)||(z=1),z)的值是1

填空题:执行表达式(z=0,(x=2)||(z=1),z)后变量z的值是———

逻辑运算符和表达式×0×选择题1:

设x,t均为int型变量,则执行以下语句后,t的值是().

x=10;t=x&&x>10; A)不定值 B)10 C)1 D)0

选择题2:

设x,y,z,t均为int型变量,则执行以下语句后,t的值是(). x=y=z=1;t=++x||++y&&++z; A)不定值 B)2 C)1 D)0逻辑运算符和表达式

选择题3:设有整型变量

a,b,c,其中

a,b的值分别为10与20,计算表达式“c=(a%2==0)?a:b”后,c的值为______

A、0B、5C、10D、20

√√√位运算——进行二进制位的运算。

运算符含义&按位与|按位或^按位异或~(一目运算符)按位取反<<左移运算符>>右移运算符位运算符和位运算说明:⑴位运算符中除了~以外,均为二目(元)运算符,即要求两侧各有一个运算量。<<>>高于关系运算“>,>=”,底于算术运算符“+,-”&底于关系运算“==,!=”,高于逻辑运算符“&&”⑵运算量只能是整型或字符型数据,不能为实型数据。高底一、“按位与”运算符(&)参与运算的两个数据,按二进制位进行“与”运算。

⑴运算规则:相应位都为1时,该位相与的结果为1,否则为0,即

0&0=01&0=0 0&1=01&1=1

例如:3&53=0000001

1

&

5=00000101

00000001

值为1

例如:(-3)&(-5)——先用补码表示,然后运算。 (-3)=11111101

&(-5)=11111011 11111001位运算符和位运算⑵用途:①清零:用

0去“与”某一位,使该位清零。如想将一个单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件:原来数中为1的位,新数中相应位为0,然后使二者进行&运算即可。例如:使低4位为0 11011001

&11110000 11010000

低4位为0②保留一个数中的某些位。用

1

去“与”某一位,保留该位。如:保留低4位 10101100

&

0000

1111

0000

1100

保留低4位

位运算符和位运算

③保留其中某些位,将它与这些位为1的数作“与”运算。例如:有一数01010100,想保留其左起的第3、4、5、7、8位,

01010100

& 00111011 00010000计算机中的控制字各个位表示某些设备的状态,状态发生变化,各个位通过位运算改变数值。位运算符和位运算二、

按位或运算符(|)——两个数的相应位按位或(1)运算规则:相应位只要有一个为1,该位相或的结果就为1,否则为0,即

0|0=01|0=1 0|1=11|1=1例如:

11011001

| 00001111 11011111(2)用途:①用1去与某些位“或”,使某些位为1。例如:

11011001

| 00001111 11011111

低4位为1②用0去与某些位“或”,保留原位。例如:上例中前4位保留原位 位运算符和位运算三、

按位异或运算符(^)——两个数的相应位按位异或

异或——判断两个相应的位值是否为"异","异"则结果为1,否则为0⑴运算规则:相应位的位值不同时(相异),作或

的运算。 即0^0=01^0=1

0^1=11^1=0

例如: 11011001

^ 00001111 11010110

⑵用途:①用1去与某些位“异或”,使特定位翻转。

01111010

^ 00001111 01110101②用0去与某些位异或,保留原值。如上例中前4位用0去异或,保留原值0111位运算符和位运算对一个二进制数按位取反

(

0→1,1→0

)例如:~0001100111100110又如:若一个整数a为16位,要使a最低一位为0,可以用

a=a&0177776;(常量与a的字长有关)八进制数177776即二进制数1111111111111110,适于16位计算机系统,对于32位计算机系统,常量则应该用037777777776(八进制),这样改动移植性差。最好是用表达式:

a=a&~1; (与a的字长无关)其中:~1=~(0000000000000001)=1111111111111110四、按位“取反”运算符(~)位运算符和位运算将一个二进制数的各位全部左移若干位,右端空位补0,高位左移后溢出,舍去不起作用

温馨提示

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

评论

0/150

提交评论