第二章 数据类型、运算符与表达式.doc_第1页
第二章 数据类型、运算符与表达式.doc_第2页
第二章 数据类型、运算符与表达式.doc_第3页
第二章 数据类型、运算符与表达式.doc_第4页
第二章 数据类型、运算符与表达式.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

第二章 数据类型、运算符与表达式【计划课时】授课8课时+上机2课时 要求预习第二章,原码、补码、二进制、逻辑运算一、数据类型1基本类型 教材P10 字符型(char) 1字节 数值型 整型短整型 (short) 2字节 整 型 (int) 2字节 长整型 (long) 4字节 (可表示到21亿) 实型单精度 (float) 4字节 6/7 位有效数字 长单精度(long float) 8字节 16/17位有效数字 双精度 (double) 8字节 长双精度(long double) 10字节 20位有效数字 可知:charintlong int=floatdouble (以上字节长度为Turbo C环境) 测试类型长度的专用关键字 sizeof printf(“:%d bytes n”,sizeof();【例】main()printf(“字符型:%d 字节”,sizeof(char);printf(“ %d n”,sizeof(int)+5);结果:字符型:1字节 7二、注意事项1整型整数 int 的范围:-32768+32767 【例二】 main() int a; scanf(“%d”,&a); /*亦可用赋值语句*/ printf(“a=%dn”,a); 运行程序: 12345 1234567 (= 100101101011010000111) a=12345 a=-10627 (其补码为1101011010000111) 【注意】一个数据“溢出”(超出其存储空间长度)时,会自动截去左边多余部分。2.数据存储形式011000011 字符型 (用一个字节存放该字符的ASCII值)0110000111100110 整 型 (用规定字节存放该数值的补码) 011010101010001010101010 011000011 实 型 尾数(补码) 指数(阶码) 【注意】第一位均为符号位。 字符型以ASCII码存储,其余以补码存储。 对ASCII码,要求记住:09AZ = = = != 关系表达式: 含有关系运算符的表达式 特别注意 aXb 之类算式的正确写法 a=x & x=b(错误:a=X=b)【例】若x=1000,则printf(“%d”,2x3)的结果是什么?(不管x为何值,结果恒为1) 讨论: if (1x关系赋值 5逻辑运算 逻辑运算符:! & | 逻辑运算符的任一端如果为非0数,则视为“真”,为0则视为假。 【例】printf(“%d”, !3+5) 结果为5 printf(“%d”, !0+5) 结果为6 注意:!优先于关系运算符,与+、-同级。 常用优先级: !、+、- 算术运算符 关系运算符 & | 赋值【例一】 main() 【例二】 main() int a=1,b=2,m=2,n=2; int a=1,b=2,m=2,n=2; (m=ab)&+n; (m=ba)&+n; printf(“%dn”,n); printf(“%dn”,n);求运行后n的值是多少。 (例一: n=2 例二: n=3 如将式中&改为|,则结果相反)原因:在&和|的左边如果能判断出结果,则右边不再作运算。【例三】有以下程序段: int a,b,c; a=b=c=1; +a|+b&+c; 问执行后a、b、c的值各是多少?(a=2,b=1,c=1)【例四】main() int m=5; if (m+5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); 运算结果: m=6,m=56条件运算 P56 条件运算符: ? : (三元运算符,即需连接三个运算量) 一般形式: e1?e2:e3 (e1为条件表达式,e2,e3为任意类型表达式) 功能:如果e10(为真),运算结果为e2的值,如果e1=0(为假),则取e3的值。 【例一】 main()int x,y; printf(“Input x=”); scanf(“%d”,&x); y=x0?1:x0) -1 (x0) 如果将条件运算语句改为: y= 0 (x=0) y= 0 (x=0) y=x=0?0:x0?1:-1;呢? -1 (x0) 1 (x(y+x)?10:12.5y+?20:30; 202. x-(y+x)?10:12.5y+?20:30; 10 3. -x(y+x)?10:12.5y+?20:30; 20结论:-x(y+x)或x-(y+x)之类结构中,右边的x应为自减后的值7.逗号运算 逗号运算符: , C语言中逗号可作分隔符使用,将若干变量隔开, 如:int a,b,c; 又如:printf(“%d%d%d”,a,b,c); 亦可作运算符使用,将若干独立的表达式隔开,并依次计算各表达式的值。其一般形式 表达式1,表达式2,表达式n 逗号表达式的求解过程:先求表达式1的值,再求表达式2的值,最后求表达式n的值。整个逗号表达式结果的值是最后一个表达式n的值。 在C语言所有运算符中,逗号表达式的优先级最低。 【例一】main() 【例二】main() int x,a; int x,a; x=(a=3*5,a*4,a+5); x=(a=3*5,a*4),a+5; printf(“x=%d,a=%dn”,x,a); printf(“x=%d,a=%dn”,x,a); 运算结果:x=20,a=15 运算结果:x=60,a=15 分析:x的值是a+5 x的值是x=(a=3*5,a*4) a*4,a+5并不改变a本身的值 同左 【例三】main() int a,b,x; x=(a=8,b=15,b+,a+b); printf(“a=%d,b=%d,x=%dn”,a,b,x); 运算结果:a=8,b=16,x=24 (改成+b呢?结果不变) 【注意】常用运算符的优先级 逗号赋值条件(?:)逻辑关系算术五、数据间的转换(混合运算)1数据的类型级别2基本规则 a.有符号整型变长,数值不变(符号位扩展) (字符型可以看作单字节整型) b.无符号整型变长,数值不变(零扩展) (同上) c.有符号整型与同级无符号整型相互转换,按补码规则 【例】编一程序将整型-1转换为无符号整型数 main()int a=-1;printf(“%u”,a); 结果为65535(11111111111111112) d.实型化整型,自动取整 e.将实数赋给整型变量,自动取整(int a=7.9999999等效于int a=7) f.float只要参加运算,均自动转为double。 【例】main()float I=3,j=4; printf(“%dn”,sizeof(i+j); 结果为8(双精度) g.两个整型数相除,其值也是整型数(取商之整数部分)。所以 3/2的值为1而非1.5。 h.不同类型运算量参加运算,一般是将长度较短的运算量转换为长度较长的运算量,以保证不丢失信息。3强制类型转换(显式转换) 【例一】 (int)3.5的值是整型数3 【例二】 int x,float y,那么printf(“%d”,sizeof(int)x+y);输出结果?(8 double)六、数据的输入和输出 一、数据输出 P34 1字符输出函数putchar(c) 其中 c为字符型/整型的常量/变量/表达式 【例】以下程序运行结果是什么? #include main()char x=a;clrscr();putchar(x);putchar(b);putchar(x+2);putchar(b+2); 结果:abcd2格式输出函数printf() 格式: printf(“”,输出项1,输出项2,输出项n); 格式控制参数:% - 0 m.n l或h 格式字符 - 左对齐输出 0 数字前的空位填0 m 输出域宽(长度,包括小数点) (如数据的位数小于m,则左端补以空格,如大于m,则按实际位数输出) n 输出精度(小数位数) l 或 h 长度修正符 l 长整型及双精度(对int表示long型 , 对float表示double型) long型宜用%ld,double宜用%lf 【例】main() long a=1234,b=32769; printf(“a=%ld,a=%d”,a,a); printf(“b=%ld,b=%dn”,b,b); 运行结果:a=1234,a=1234,b=32769,b=-32767 h 表示短整型 如 %hd %hx 格式字符 %d 输出十进制整数 %x 以十六进制无符号形式输出整数 例见试题汇编题3.26%o 以八进制无符号形式输出整数 %u 无符号 %f 输出小数形式浮点数 %lf double型 %s 输出字符串 %c 输出单字符 【例一】 printf(“|%-15s|2.2%f|n”,”ZHANG WEI”,165.1256); printf(“|%s|%012fn”,”LI CHANG”,234.45); 运行结果:|ZHANG WEI |165.13| (注意:WEI后面补了六个空格) |LI CHANG|00234.450000| (注意:数字部分连小数点共16位) 如果第二句改为printf(“|%15s|%012fn”,”LI CHANG”,234.45);运行结果:|ZHANG WEI |165.13| | LI CHANG|00234.450000| 注意:格式字符与对应输出项类型要一致,否则正确的运算结果能得到正确的显示结果。 【例二】若float y=1234.9999;printf(“%d”,y);则输出结果为何? (0) 实际上实数y为任意值(如1234或1)结果都是0。 【例三】(前例)编一程序将整型-1转换为无符号整型数 main()int a=-1;printf(“%u”,a); 结果为65535(11111111111111112)特殊使用: 1、printf语句中,如果在%与x之间出现#号,则输出的16进制数前带0x,但在其他格式中#无效。【例四】y=23456;printf(“y=%8x,y=%#8x”,y,y); 结果:y= 5ba0,y= 0x5ba0 (试题汇编题3.7) 2、如果在%d之类格式中插入*号,如 int i=3,x=1; printf(“#%*d”,i,x);输出:# 1(在#和1之间插入i个空格)。(试题汇编题3.35)二、数据输入 P421格式输入函数scanf() 格式: scanf(“”,&变量名1,&变量名2,&变量名n); 格式控制参数:% * m l或h 格式字符 &求地址的运算符 &a 表示该变量所占空间的首地址 *抑制字符(“虚读”,即读入数据后不送给任何变量) 【例】 scanf(“%3d%*4d%f”,&i,&f); 如果输入 1234567890.1234567890 结果i=123,f=890.123474 【注意】对于scanf(“%d%d%f”,&a,&b,&c);之类格式字符相接的语句,应注意数据项值分隔处如何识别: 变类型时自动识别 按指定域宽自动分隔 用分隔符号(空格键,tab键,回车键) 用指定字符(如逗号等)分隔(用户输入时也必须按该字符分隔) 注意没有精度规定(m.n) 为了便于使用,应尽量采用某种习惯的分隔格式。2字符输入函数getchar、getche()和getch() P41 从键盘上读入一个字符,但后两个函数输入后无需回车。getch()还有一个功能,即不把读入的字符回显到屏幕上,常用于密码输入或菜单选择。 理论上getche()和getch()包含在conio.h中(实际使用中似乎不用加文件包含语句)。 【例一】#include /*此句不能省*/ main() char a,b; a=getchar(),b=getchar(); printf(“a=%c,b=%cn”,a,b); 运行时,如果输入:Student 输出结果为a=S,b=t 【例二】#include main()char i=y; while (i=y|i=Y) printf(“您好!是否继续?(y/n)n”); i=getche(); /*不能用getchar(),否则会把回车符作为第二次读入值*/ printf(“再见!”); 【例三】/*一个设置密码输入程序*/ #include main() char password,c=*; printf(“n请输入密码:”); while (1) password=getch(); putchar(c); if (password=r) break; /*此处加入密码验证语句*/ printf(“n欢迎使用本程序!”); 第二章作业P29 2.2 2.5 2.9 2.10 2.12补充:1、已知x=15编程求: (给出以指数形式表示的运行结果并附上源程序)2、已知字母a的ASCII码为十进制的97,下面程序的输出是:main() char a=a; a+; printf(“%d,%cn”,a+2-0,a+3-0); 3、下面程序的输出结果是:main() int a=4,b=7;printf(“%dn”,(a=a+1,b+a,b+1);printf(“%dn”, a=a+1,b+a,b+1);4、下面程序的

温馨提示

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

评论

0/150

提交评论