C语言数据类型与基本操作.ppt
q常量和变量q标识符与关键字q整型数在计算机中的存储方式q有符号的数据类型和无符号的数据类型q运算符及表达式q不同类型数据间的转换第二章第二章 C C语言数据类型与基本操作语言数据类型与基本操作1数据类型 数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作数据数据类型类型构造类型构造类型指针类型指针类型空类型空类型字符类型字符类型 char枚举枚举整型整型实型实型单精度单精度双精度双精度短整型短整型长整型长整型整型整型数组数组结构体结构体共同体共同体基本基本类型类型数值数值类型类型2基本类型类型关键字取值范围 位数(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535float321e-371e38double641e-3071e308char8说明:数据类型所占位数随机器硬件不同而不同,上表以微机为例:long double 80 1e-49311e4932字符型浮点型整 型3q整型常量 十进制十进制:例 15,19,123,-345,0 八进制八进制:以 0(零)开头的整数,例 0123,011 十六进制十六进制:以 0 x 或 0X 开头的整数,例 0 x123,0Xff注注:用 l或 L表示一个数是长整型,例 123L;无符号数用 u 或 U表示,无符号长整型用 ul 或 UL 表示,例:123u,0 xful问题:0123 =()100 x123=()100Xff =()1083291255问题:0123 =()100 x123=()100Xff =()10例 12 与 12L例 30000 为int型 65536 为long int 型2.1 常量与变量4q实型常量 格式格式:(必须有小数点)例 0.123,.123,123.0,0.0,123.指数格式指数格式:(必须有 数字 在 e 或 E的前面;指数 必须是 整型)例:12.3e3,123E2,1.23e4,e-5 ,注:注:用 f 或 F 注明是单精度,用l 或 L 注明是长双精度,没有注明则是 双精度.5q字符常量和转义字符用单撇号括起来的一个字符;一个字符的值可用ASCASC数值表示;如 101 -A 012 -n 376 -x61 -a 60 -0 483 -()例:A-101-x41-65如 A65,a97,048,n10如 a A?n 101特殊形式的字符常量就是以一个“”开头的字符序列,称为转转义字符。例:nn(换行);例 转义字符举例(ch2_001.c,ch2_004.c)main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);运行结果:(屏幕显示)A B CI say:”How are you?”C ProgramTurbo C例 main()printf(Yb=n);运行结果:屏幕显示:¥转义字符及含义:转义字符及含义:垂直制表 tab位v16进制代表的字符xhh水平制表Tab位t8进制代表的字符ddd回车r双撇换行 n单撇换页f输出结果加?号标记?退格b反斜杠响铃 a6例 符号常量举例(ch2_1.c)#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);运行结果:total=3008编译程序根据变量定义为其分配指定字节的内存单元.addressint a=1,b=-3,c;abc2 bytes2 bytes2 bytesaddressaddress.内存1-3随机数变量 变量 及 赋值 定义变量:数据类型 var1,var2,var n;一个变量可以边定义边赋值;例:int a,b,c;float data;变量类型决定变量所占存储空间大小变量名例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;所有变量必须先定义后使用。.例1 int student;stadent=19;/Undefined symbol statent in function main 例2 float a,b,c;c=a%b;/illegal use of floating point in function main 一般在函数开始部分定义.main()int a,b=2;float data;a=1;data=(a+b)*1.2;printf(data=%fn,data);变量定义可执行语句main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(data=%fn,data);3a变量名变量名值值存储单元存储单元9&整型变量占 2 字节bytes;shortintlongsizeof(type)求字节数&实型变量单精度:占 4 bytes,7 位有效数值双精度:占 8 bytes,1516位有效数值&字符变量 以 ASC ASC 字符集中的数值保存在内存中字符集中的数值保存在内存中;字符可以当作一般整型数来处理字符可以当作一般整型数来处理.例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G /*s=33+71;*/C程序 中没有 字符串变量10例#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(total=%f,ch1=%cn,total,ch1);定义符号常量 定义变量输出运行结果:total=37.500000,ch1=d112.2 标识符和关键字-标识符一个标识符可由字母、数字和下划线组成 ;必须用字母或下划线开头;大小写要区分;不能用保留关键字作变量名;避免混淆的字母;例如:l 与 I,o 与 0.例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$1231232 个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while-关键字132.3 整型数在计算机中的存储方式1.二进制位与字节二进制位与字节 计算机系统的内存储器,是由许多称为字节的单元组成的,1个字节由8个二进制位(bit)构成,每位的取值为0/1。最右端的那1位称为“最低位”,编号为0;最左端的那1位称为“最高位”,而且从最低位到最高位顺序,依次编号。图11-1是1个字节各二进制位的编号。图11-1 1个字节各二进制位的编号2.数值的原码表示数值的原码表示数值的原码表示是指,将最高位用作符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值(以二进制形式表示)的表示形式。为简化描述起见,本节约定用1个字节表示1个整数。76543210142.3 整型数在计算机中的存储方式例如,+9的原码是00001001 符号位上的0表示正数 -9的原码是10001001。符号位上的1表示负数 3.数值的反码表示数值的反码表示数值的反码表示分两种情况:(1)正数的反码:与原码相同。例如,+9的反码是00001001。(2)负数的反码:符号位为1,其余各位为该数绝对值的原码按位取反(1变0、0变1)。例如,-9的反码:因为是负数,则符号位为“1”;其余7位为-9的绝对值+9的原码0001001按位取反为1110110,所以-9的反码是11110110。152.3 整型数在计算机中的存储方式4.数值的补码表示数值的补码表示数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001。(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。例如,-9的补码:因为是负数,则符号位为“1”;其余7位为-9的绝对值+9的原码0001001按位取反为1110110;再加1,所以-9的补码是11110111。已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位不变,其余各位取反,然后再整个数加1。162.3 整型数在计算机中的存储方式例例如如,已已知知一一个个补补码码为为11111001,则则原原码码是是10000111(-7):因因为为符符号号位位为为“1”,表表示示是是一一个个负负数数,所所以以该该位位不不变变,仍仍为为“1”;其其余余7位位1111001取取反反后后为为0000110;再再加加1,所所以以是是10000111。5.数值在计算机中的表示数值在计算机中的表示补码补码在在计计算算机机系系统统中中,数数值值一一律律用用补补码码表表示示(存存储储),原原因因在在于于:使使用用补补码码,可可以以将将符符号号位位和和其其它它位位统统一一处处理理;同同时时,减减法法也也可可按按加加法法来来处处理理。另另外外,两两个个用用补补码码表表示示的的数数相相加加时时,如如果果最最高位(符号位)有进位,则进位被舍弃。高位(符号位)有进位,则进位被舍弃。原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000(用一字节表示数)(用一字节表示数)172.4 有符号的数据类型和无符号的数据类型类型类型类型标识符类型标识符长度长度取值范围及精度取值范围及精度字符字符型型signed char8-128+127unsigned char80255整整 形形signed short int16-32768+32767unsigned short int16065535signed long int32-2 147 483+2 147 647unsigned long int3204 294 967 295实实 型型Float32约约(3.410-383.41038),6位位精度精度Double64约约(1.710-3081.710308),16位精度位精度表2.3基本数据归纳18w2.5 运算符及表达式 算术算术运算符运算符:+-*/%+-+-*/%+-关系关系运算符运算符:=!=!=逻辑逻辑运算符运算符:!&|&|位位运算符运算符:|&|&赋值赋值运算符运算符:=+=-=+=-=条件条件运算符运算符:?:?:逗号逗号运算符运算符:,地址地址运算符运算符:*&*&求字节数求字节数运算符运算符:sizeofsizeof强制类型转换:强制类型转换:(type-name(type-name)分量分量运算符运算符:.-.-下标下标运算符运算符:其他其他 :()-()-19q赋值运算符和复合赋值运算符及表达式简单的赋值运算 =变量变量 =表达式表达式复合的赋值运算符+=-=*=/=%=&=|=变量变量1 1 操作符操作符=表达式表达式2 2 变量变量1 1=变量变量1 1 操作符操作符 表达式表达式2 2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例例 a=3;a=3;d=func();d=func();c=d+2;c=d+2;20q算术运算符及表达式运算符:+-*/%(*/%(取余取余)+(自增)自增)-(自减)(自减)运算规律运算规律 :从左至右:从左至右优先级优先级 :%-*/*/-+-+-(1)(2)(3)(1)(2)(3)注:注:两个整数两个整数 /是是 整型整型;两个整数两个整数%是是 整型整型.例 5/2 =-5/2 =例 5%2 =-5%2 =1%10 =5%1 =5.5%2例 5/2 =2 -5/2 =-2 (向零取整)例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()21自增、自减运算符 +-+-自增、自减在变量前面在变量前面:+i,-i+i,-i(在表达式中,先自加(自减)后用其值在表达式中,先自加(自减)后用其值)在变量后面在变量后面:i+,i-i+,i-(在表达式中,先用其值再自加(自减)在表达式中,先用其值再自加(自减))例 j=3;k=+j;j=3;k=+j;j=3;k=j+;j=3;k=j+;j=3;printf(j=3;printf(%d%d,+j);,+j);j=3;printf(j=3;printf(%d%d,j+);,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;a=3;b=5;c=(a+)*b;/k=4,j=4/k=4,j=4/k=3,j=4k=3,j=4/4 4/3 3/c=20,a=4c=20,a=4/c=15,a=4c=15,a=422 注意:只针对变量,而不针对常量和表达式;不要产生只针对变量,而不针对常量和表达式;不要产生二义性;运算规律是自右至左。二义性;运算规律是自右至左。如如 8+(x*y)+8+(x*y)+j=-(+k);k=4 j=-4 j=-(k+);k=4 j=-3 例例 k=3;k=3;j=-+k;j=-+k;j=-k+;j=-k+;v解决办法解决办法1.1.避免在同一表达式中的同一变量的自加自减避免在同一表达式中的同一变量的自加自减.例例:i=3;:i=3;y=(i+)+(i+)y=(i+)+(i+)y=6 i=5 y=3+3;i+;i+;y=6 i=5 y=3+3;i+;i+;y=7 i=5 y=3+4;i+;y=7 i=5 y=3+4;i+;232.2.不使用连续运算符,用括弧分隔。不使用连续运算符,用括弧分隔。例例1:i=3;j=1;x=i+j;1:i=3;j=1;x=i+j;例例3:i=3;printf(3:i=3;printf(%d,%d%d,%d,i,i+);,i,i+);x=i+(+j);x=5 i=3 j=2 x=i+(+j);x=5 i=3 j=2 x=(i+)+j;x=4 i=4 j=1 x=(i+)+j;x=4 i=4 j=1 例例2:i=3;j=1;x=i-+j;2:i=3;j=1;x=i-+j;等价于等价于 x=i-(+j);x=1 i=3 j=2 x=i-(+j);x=1 i=3 j=2可能输出可能输出:3,3 :3,3 4,3 4,33.3.在函数调用时,实参的求值顺序在函数调用时,实参的求值顺序C C无统一规定无统一规定.24注:注:运算顺序:右-to-左操作符左边只能是 变量,不能是常量和 表达式高到低转换数据有可能丢失例 3=x-2*y;a+b=3;例 float f;int i;i=10;f=i;则 f=10.0例 int i;i=2.56;/结果i=2;例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2类型不一致,数值型和字符型会自动转换。例:a=12;a+=a-=a*a例:int a=2;a%=4-1;a+=a*=a-=a*=3;/a=-264 等价于a=a+(a=a-(a*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)25q长度测试运算符sizeof长度测试运算符sizeof可用来测试某个类型的变量所占用计算机内存空间的字节长度。格式为:sizeof(类型名)例:main()printf(char:%d bytesn,sizeof(char);printf(short:%d bytesn,sizeof(short);printf(int:%d bytesn,sizeof(int);printf(long:%d bytesn,sizeof(long);printf(float:%d bytesn,sizeof(float);printf(double:%d bytesn,sizeof(double);26q关系运算及关系表达式 =!=!=运算顺序运算顺序:左-to-右 优先级优先级:=!=优先级别相同(高)优先级别相同(低)例 ca+b /c(a+b)ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)关系表达式的值为一个逻辑值,用 1 代表“真”,用 0 代表“假”。非零数也表示“真”。例 int a=3,b=2,c=1,d,f;ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d=1/f=027注意:例 若 a=0;b=0.5;x=0.3;则 a=x278在C中是允许的,值为0例 int i=1,j=7,a;a=i+(j%4!=0);则a=2例 a0 结果为 A100 结果为1028注意:例例 注意区分注意区分“=”与与“=”int a=0,b=1;if(a=b)printf(a equal to b);else printf(a not equal to b);例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-6029ab!a!ba&ba|bTFTFFFTTq逻辑运算符和逻辑表达式 !&|!&|运用逻辑值运用逻辑值 :0 表示“假”非0 表示“真”求逻辑值时求逻辑值时 :“假”则为0 “真”则为1 TFFFFFTTFFTTTFTT30!&|高低例 a=x&xb&xy a=b|x=y !a|abl优先级别优先级别:l运算顺序运算顺序:!:right-to-left&:left-to-right|:left-to-right/(a=x)&(xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)例 a=4;b=5;!a a&b a|b !a|b 4&0|2 53&2|83)&2|(8(4-(!0)值为1例:已知year 为整型变量,不能使表达式(year%4=0&year%100!=0)|(year%400=0)的值为“真”的数据是()(A)1990 (B)1992 (C)1996 (D)200031!&|高低l优先级别优先级别:l运算顺序运算顺序:!:right-to-left&:left-to-right|:left-to-right短路特性:结果能确定后,后面的就不再运算。例 a&b&c /只在a为真时,才判别b的值;(1假为假)只在a、b都为真时,才判别 c的值例 a|b|c /只在a为假时,才判别b的值;(1真为真)只在a、b都为假时,才判别 c的值例 a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&(n=cd)/结果m=0,n=132例例 if(ab)printf(%d,a);else printf(%d,b);printf(%d,ab?a:b);例例 求求 a+|b|printf(a+|b|=%dn,b0?a+b:a-b);expr1取取expr2值值取取expr3值值非非0=0例例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a&c0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3 值的类型如果不一样值的类型如果不一样,则值转换则值转换成较高的类型成较高的类型.例例 x?a:b /x=0,表达式值为表达式值为b;x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0;xy ,值为值为1.5q条件运算符及条件表达式 表达式1?表达式2 :表达式3 像像 if if 语句的简化语句的简化33q条件运算符及条件表达式例:从键盘读入一个整数赋给例:从键盘读入一个整数赋给x,如果如果x大于等于大于等于0,把,把x的的平方赋给平方赋给y,否否 则把则把x的的2倍赋给倍赋给y。#include stdio.h void main()int x,y;scanf(%d,&x);y=x=0?x*x:2*x;printf(y=%dn,y);分析下列程序的输出结果。分析下列程序的输出结果。#include stdio.hvoid main()int i,j,k,a=3,b=2;i=(-a=b+)?-a:+b;j=a+;k=+b;printf(i=%d,j=%d,k=%dn,i,j,k);请编制程序,任意输入两个整数,请编制程序,任意输入两个整数,输出其中较小者。输出其中较小者。main()int n1,n2,main;clrscr();printf(input two number(n1,n2):);scanf(%d,%d,&n1,&n2);min=(n1n2)?n2:n1;printf(min=%d,min);编制程序,输入大写字母,则输出小写字母;输入小写字母,则输出大写字母。main()char ch;printf(input any letter:);scanf(%c,&ch);ch=(ch=A)&(ch=z)?ch+32:ch-32;printf(output:%cn,ch);34q逗号运算符和逗号表达式表达式1,表达式2,表达式n运算顺序:左-to-右逗号表达式的值是 表达式表达式 n n 的值不是所有的逗号都是逗号表达式例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3)x=a=3,6*a例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);/a=15,表达式值60/a=15,表达式值20/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,3例:/*ch2_6.c*/#include main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);运行结果:x=335q位运算位运算符位运算符1按位与按位与&(1)(1)格式:格式:x&yx&y(2)(2)规则:对应位均为规则:对应位均为1 1时才为时才为1 1,否则为,否则为0 0:3&9=13&9=1。(3)(3)主要用途:取主要用途:取(或保留或保留)1)1个数的某个数的某(些些)位,其余各位置位,其余各位置0 0。例如,3&9=1:0011&1001 0001=1 2按位或按位或|(1)(1)格式:格式:x|yx|y(2)(2)规则:对应位均为规则:对应位均为0 0时才为时才为0 0,否则为,否则为1 1:3|9=113|9=11。例如,例如,3|9=113|9=11:0011 0011|1001|1001 1011=11 1011=11(3)(3)主要用途:将主要用途:将1 1个数的某个数的某(些些)位置位置1 1,其余各位不变。,其余各位不变。36q位运算3按位异或按位异或(1)(1)格式:格式:xyxy(2)(2)规则:对应位相同时为规则:对应位相同时为0 0,不同时为,不同时为1 1:39=1039=10。(3)(3)主要用途:使主要用途:使1 1个数的某个数的某(些些)位翻转位翻转(即原来为即原来为1 1的位的位变为变为0 0,为,为0 0的变为的变为1)1),其余各位不变。,其余各位不变。4按位取反按位取反(1)(1)格式:格式:xx(2)(2)规则:各位翻转,即原来为规则:各位翻转,即原来为1 1的位变成的位变成0 0,原来为,原来为0 0的的位变成位变成1 1:在:在IBM-PCIBM-PC机中,机中,000 xffff0 xffff,9=0 xfff69=0 xfff6。(3)(3)主要用途:间接地构造一个数,以增强程序的可移植主要用途:间接地构造一个数,以增强程序的可移植性。性。5按位左移按位左移(1)(1)格式:格式:x x 位数位数(2)(2)规则:使操作数的各位左移,低位补规则:使操作数的各位左移,低位补0 0,高位溢出:,高位溢出:52=205(1)(1)格式:格式:xx位数位数(2)(2)规则:使操作数的各位右移,移出的低位舍弃;高位:规则:使操作数的各位右移,移出的低位舍弃;高位:1)1)对无符号数和有符号中的正数,补对无符号数和有符号中的正数,补0 0;2)2)有符号数中的负数,取决于所使用的系统:补有符号数中的负数,取决于所使用的系统:补0 0的称为的称为“逻辑右移逻辑右移”,补,补1 1的称为的称为“算术右移算术右移”。例如,。例如,20 20 2=52=5。说明:(1 1)x x、y y和和“位数位数”等操作数,都只能是整型或字符型等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算数据。除按位取反为单目运算符外,其余均为双目运算符。符。(2 2)参与运算时,操作数)参与运算时,操作数x x和和y y,都必须首先转换成二进,都必须首先转换成二进制形式,然后再执行相应的按位运算。制形式,然后再执行相应的按位运算。例如,例如,52=205 2=5 20 2=5:10100 0010110100 00101。38q位运算(3)实现&、|、运算主要用途的方法 1 1)构造)构造1 1个整数:该数在要取(或保留)的位、或要置个整数:该数在要取(或保留)的位、或要置1 1的位、或要翻转的位上为的位、或要翻转的位上为1 1,其余均为,其余均为0 0。2 2)进行按位与、或按位或、或按位异或操作。)进行按位与、或按位或、或按位异或操作。(4)实现按位取反主要用途的方法 1 1)求)求00,间接地构造一个全,间接地构造一个全1 1的数;的数;2 2)按需要进行左移或右移操作,构造出所需要的数。)按需要进行左移或右移操作,构造出所需要的数。例如,直接构造一个全例如,直接构造一个全1 1的数,在的数,在IBM-PCIBM-PC机中为机中为0 xffff0 xffff(2 2字节),而在字节),而在VAX-11/780VAX-11/780上,却是上,却是0 xffffffff0 xffffffff(4 4字字节)。如果用节)。如果用00来构造,系统可以自动适应。来构造,系统可以自动适应。39w2.6 不同类型数据间转换 自动转换(automatic)转换规律如下图40doublefloatlongunsignedintchar,short低高说明:必须转换运算之前例 char ch;int i;float f;double d;ch/i +f*d -(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f -d/l例 int i;float f;double d;long l;41强制转换强制转换(类型类型)(表达式表达式)例 (int)(x+y)(int)x+y (double)(3/2)(int)3.6 注意 值的类型转换了,但变量的类型没变.例 main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);结果:x=3.600000,i=3思考高类型向低类型转换会怎样42本章小结1 1、基本数据类型的种类、取值范围、在内存中占用字节数;、基本数据类型的种类、取值范围、在内存中占用字节数;2 2、常量的表示方法;、常量的表示方法;3 3、标示符的命名规则,变量的赋值、存放数据的实质;、标示符的命名规则,变量的赋值、存放数据的实质;4 4、数据类型的转换规律;、数据类型的转换规律;5 5、字符与字符串的区别;、字符与字符串的区别;6 6、运算符及表达式:符号、结合规律、优先级、取值;、运算符及表达式:符号、结合规律、优先级、取值;7 7、逻辑运算符及逻辑值的表示;、逻辑运算符及逻辑值的表示;8 8、逗号表达式及取值。、逗号表达式及取值。43练习题1 1、设、设int x=1,y=1;int x=1,y=1;表达式(表达式(!x|y-)!x|y-)的值是()的值是()A.0 B.1 C.2 D.-1 A.0 B.1 C.2 D.-12 2、以下选项中合法的用户标识符是()、以下选项中合法的用户标识符是()A.long B._2test C.3dmax D.a.dat A.long B._2test C.3dmax D.a.dat3 3、若、若x=3.5,y=2.5,a=2,b=3,x=3.5,y=2.5,a=2,b=3,则则 (float)(a+b)/2+(int)x%(int)y=()float)(a+b)/2+(int)x%(int)y=()A.3.5 B.2.6 C.3 D.2.1 A.3.5 B.2.6 C.3 D.2.14 4、假设、假设x x和和y y为为doubledouble型,则表达式型,则表达式x=2,y=x+3/2x=2,y=x+3/2的值是()的值是()A.3.500000 B.3 C.2.000000 D.3.000000 A.3.500000 B.3 C.2.000000 D.3.0000005 5、已知、已知a a大于大于b b及及a a小于等于小于等于c,c,则可以表示为()则可以表示为()A.ba A.baa=c B.ba&ac C.ba|a=c D.b=aa=c B.ba&ac C.ba|a=c D.b=a6 6、c c语言中合法的常量为()语言中合法的常量为()A.e-3 B.1.2e+02 C.039 D.xabA.e-3 B.1.2e+02 C.039 D.xab7 7、int I=0;int I=0;执行语句执行语句while(I+5);while(I+5);后,后,I I的值是()的值是()A.5 B.6 C.7 D.4 A.5 B.6 C.7 D.48 8、表达式:、表达式:1010!9 9的值是()的值是()A.true B.0 C.1 D.A.true B.0 C.1 D.非零值非零值9 9、判断题:、判断题:aa和和“a”“a”在内存中所占字节相同。()在内存中所占字节相同。()c c语言没有逻辑值。语言没有逻辑值。()()44练习题参考答案1 1、设、设int x=1,y=1;int x=1,y=1;表达式(表达式(!x|y-)!x|y-)的值是(的值是(B B)A.0 B.1 C.2 D.-1 A.0 B.1 C.2 D.-12 2、以下选项中合法的用户标识符是(、以下选项中合法的用户标识符是(B B)A.long B._2test C.3dmax D.a.dat A.long B._2test C.3dmax D.a.dat3 3、若、若x=3.5,y=2.5,a=2,b=3,x=3.5,y=2.5,a=2,b=3,则则 (float)(a+b)/2+(int)x%(int)y=(a)float)(a+b)/2+(int)x%(int)y=(a)A.3.5 B.2.6 C.3 D.2.1 A.3.5 B.2.6 C.3 D.2.14 4、假设、假设x x和和y y为为doubledouble型,则表达式型,则表达式x=2,y=x+3/2x=2,y=x+3/2的值是(的值是(D D)A.3.500000 B.3 C.2.000000 D.3.000000 A.3.500000 B.3 C.2.000000 D.3.0000005 5、已知大于、已知大于b b及及a a小于等于小于等于c,c,则可以表示为(则可以表示为(D D)A.ba A.baa=c B.ba&ac C.ba|a=c D.b=aa=c B.ba&ac C.ba|a=c D.b=a6 6、c c语言中合法的常量为(语言中合法的常量为(b b)A.e-3 B.1.2e+02 C.039 D.xabA.e-3 B.1.2e+02 C.039 D.xab7 7、int I=0;int I=0;执行语句执行语句while(I+5);while(I+5);后,后,I I的值是(的值是(B B)A.5 B.6 C.7 D.4 A.5 B.6 C.7 D.48 8、表达式:、表达式:1010!9 9的值是(的值是(C C)A.true B.0 C.1 D.A.true B.0 C.1 D.非零值非零值9 9、判断题:、判断题:aa和和“a”“a”在内存中所占字节相同。()在内存中所占字节相同。()c c语言没有逻辑值。语言没有逻辑值。()()45