1 / 31

数据类型

数据类型. 本章内容. 变量类型 常量表示 转义字符 stdio.h 中提供的输入输出函数 流的输入输出. 变量类型( P26 ). 字符型、整型变量的声明. char (1B), short int (2B) , long int (4B) , int (?) 根据字节数计算表达范围 signed 范围 unsigned 范围 注意在不同系统中长度可能不同,可用 sizeof 查看 ( 举例) ,int 类型在 VC 中是 4B, 而在 TurboC 中为 2B 声明一个变量 , 类型名 后跟变量名 如 char a;

rafi
Download Presentation

数据类型

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据类型

  2. 本章内容 • 变量类型 • 常量表示 • 转义字符 • stdio.h中提供的输入输出函数 • 流的输入输出

  3. 变量类型(P26)

  4. 字符型、整型变量的声明 • char(1B), shortint(2B) ,long int (4B),int(?) • 根据字节数计算表达范围 • signed范围 • unsigned范围 • 注意在不同系统中长度可能不同,可用sizeof查看(举例),int 类型在VC中是4B,而在TurboC中为2B • 声明一个变量,类型名 后跟变量名 • 如 char a; • 声明多个变量时,变量之间用逗号隔开 • 如:int a,b,c; • 用signed修饰符说明有符号数,signed可以省略 • 如: signed char a; int b;//a,b均为有符号数 • 用unsigned修饰符说明无符号变量 • 如: unsigned long int c; • 当用short long unsigned修饰int时,int 可以省略 • 如:unsigned long c;等价于unsigned long int c;

  5. 字符的存储 • C语言中的字符存储的是其ASCII • char a=‘A’,b=65;//a,b保存的内容相同 • 示例: • #include "stdio.h" • void main(){ • char a='A',b=65; • printf("%c,%c\n",a,b); • printf("%hd,%hd\n",short(a),short(b)); • }

  6. 整数的存储 • C语言中的有符号整数采用补码表示 • 如:char a=-1;unsigned char b=255;//a,b编码完全相同,都是1111 1111 • 举例: • #include "stdio.h" • void main(){ • short c=-1; • unsigned short d=65535; • printf("%hd,%hd\n",c,d); • printf("%hu,%hu\n",c,d); • short e=32767,f; • f=e+1; • printf("%hd,%hd\n",e,f);*/ • }

  7. 实数类型及声明 • float(4B) • 表达范围-3.4E1038~3.4E38之间 • 6位精度 • double(8B) • 表达范围-1.7E10308~1.7E308之间 • 16位精度 • 声明举例: • float a,b; double c;

  8. 实数表示及误差来源 • 实数是把存储位划分成一定格式,然后分别把表示成±0.bbbbbb*2±bbbb 格式的数值正负号、尾数、阶码正负号、阶码部分保存到格式相应位置中 • 如在下图所示的格式中,-27变为指数形式为,0.11011*2101的存储二进制为1001011101100000 • 误差来源: • 尾数是有限的,有些十进制数变成二进制存储时,长度超过容纳范围丢失产生误差 • 在运算中,对阶移位而使部分尾数移出容纳范围而产生误差

  9. 整型常量的表示 • 十进制表示和数学中相同,如35,-36 • 八进制数用零做前缀,如023,-012, -079(错) • 十六进制数用零加x做前缀表示,如0x2a,-0x1f • 用L做后缀表示长整数常量,U后缀表示无符号数常量,如123456789ul • 示例: • #include "stdio.h" • void main(){ • int a,b,c; • a=23;b=023;c=0x23; • printf("%d,%d,%d\n",a,b,c); • }

  10. 实数常量 • 浮点数常量 • 普通表示法,实数后加f,如3.4f,-36.f(.不可省略) • 科学记数法1.3e-5f,表示1.3X10-5 • 双精度常量表示与浮点数表示相同,只需要去掉后面f • 字符型常量用单引号做定界符表示 ,如’a’,’3’,’%’ • 注意字符型常量有且只能有一个字符,如:’ab’, ‘’(空)都是错的 • 字符串常量用双引号做定界符表示,如:”a”, ”sdhjfdshjfhjsd”,“”(空串),“ ”(由一个空格组成的字符串)

  11. 实数输出举例 • #include "stdio.h" • void main(){ • float a=34.5678; • printf("%f,%d\n",a,a); • } • 输出结果:34.567799,-1610612736 • 说明前面存储时产生误差,后者格式错误输出完全错误

  12. 转义字符 • 一些在编辑或通信过程中起控制作用的字符,ASCII码值小于32,不属于可打印字符,不方便用键盘输入或无法输入,直接记忆ASCII又比较困难,因此C语言中定义“\”转义字符,用”\”加一个单词的首字母,表示一个控制字符,下面是”\”后可以跟的字符及其含义

  13. 转义字符举例 • #include "iostream.h" • void main(){ • cout<<"a0123456789"<<'\a'<<"k0123456789"<<endl; • cout<<"b0123456789"<<'\b'<<"k0123456789"<<endl; • cout<<"\\0123456789"<<'\\'<<"k0123456789"<<endl; • cout<<"n0123456789"<<'\n'<<"k0123456789"<<endl; • cout<<"t0123456789"<<'\t'<<"k0123456789"<<endl; • cout<<"A\n\101\012\x41\x0a"<<endl; • }

  14. 变量的初始化 • 变量在声明的同时赋一个初始值,称为变量初始化,尽管初始化有时和=运算符起相同的作用,但是其执行原理是不同的,赋值的格式在很多形式下也是不同的,在学复杂数据类型时要特别注意 • 举例: • int a=20,b,c=30; • char e=‘r’,f=‘\67’

  15. 输入输出(一) stdio.h中提供的输入输出函数

  16. getchar()与putchar()函数 • C语言为保证自身的可移植性,没有输入输出指令,输入输出功能是通过函数实现的 • stdio.h文件中提供的单字符输入输出函数 • int getchar(void ) • 举例 char c; c=getchar();将从键盘读入一个字符存于c中 • int putchar(int c) • 举例 char b=‘A’;putchar(b);将在屏幕上输出字母A

  17. getchar()与putchar()函数举例 • #include "stdio.h" • void main(){ • char c; • c=getchar();//输入 a • c=c-32; • putchar(c); • putchar('\n'); • }

  18. stdio.h中提供的输出函数printf() • 格式: • int printf(“格式控制字符串”,表达式1,表达式2…) • 举例:printf(“name is%s,age is %d”,“Tom”,30+2) • 格式控制串中的控制字符,按照次序控制后面变量列表中字符的输出,像上面例子中,%s控制”Tom”的输出格式,%d控制30+2的输出,注意如果是逗号表达式,一定用括号括起来,否则会视为两个表达式

  19. printf()函数中%后的类型符号 • c : 以字符形式输出 • d,i:以有符号十进制整数形式输出 • o:以无符号八进制整数形式输出 • x或X:以无符号十六进制整数形式输出 • u:以无符号十进制整数形式输出 • f:以带小数点形式输出浮点数 • e或E:以科学记数法形式输出浮点数 • g或G:由系统选择使用小数点形式或科学记数法形式输出浮点数 • s:以字符串形式输出 • p:以十六进制内存地址方式输出 • %:输出%

  20. 控制输出时读取内存的长度 • 在输出时在类型符号前加L输出长整形或双精度数据,加h输出短整形数据 • 举例: • #include "stdio.h" • void main() • { long a=0x11112222L,b=0x33334444L; • printf("%hx,%x",a,b); • }

  21. 控制输出数据的长度 • 在使用%d,%c,%f,%e …可以使用数字说明输出的宽度,当指定宽度的整数部分,大于实际需要时填充空格,不能正确输出时,按实际情况输出 • #include "stdio.h" • void main(){ • printf("%4d,\n%04d,\n%-4d,\n%+4d,\n%x,\n%#x\n",1,2,3,4,5,5); • printf("\n%7.2f,\n%7.2e\n",123.456,123.456); • } • -左对齐,+显示正负号,0填充零,#在八进制十六进制前显示前缀

  22. stdio.h中输入函数SCANF() • 格式 int scanf(“格式控制字符串”,变量地址列表) • 注意事项: • 格式字符串,中除了格式控制符外其他字符要求原样输入,否则无法正确输入,所以一般情况下,scanf()的格式串中只包含格式控制符,没有多余字符 • scanf()函数中需要的是地址列表,不是变量,如果程序错误,会在程序执行时,出现系统错误

  23. scanf()函数中%后的类型符号 • c:输入一个字符 • d ,D :输入有符号十进制整数 • e, f :输入浮点数 • le,lf:输入双精度数 • o,O :输入八进制整数 • i,I :直接输入十进制、加0输入八进制,加0x输入十六进制数 • u ,U:输入无符号十进制整数 • x ,X: 输入十六进制数 • s :输入字符串

  24. 控制输入的宽度 • #include "stdio.h" • void main(){ • int a,b,c; • scanf("%2d%3d",&a,&b);//input 123 456 • printf("%d,%d\n",a,b); • }

  25. 通过%*略过一个输入数据 • 示例: • #include "stdio.h" • void main(){ • int a,b; • scanf("%d%*d%d",&a,&b);//input 12 34 56 • printf("%d,%d\n",a,b); • }

  26. 长度限制影响举例 • //输入时f与lf有区别,输出时没有区别 • #include "stdio.h" • void main(){ • float a=12.345f; • double b=12.345; • scanf("%lf%lf",&a,&b); • printf("error input a:%f,%lf\n",a,b); • scanf("%f%f",&a,&b); • printf("error input b:%f,%lf\n",a,b); • scanf("%f%lf",&a,&b); • printf("error output :%lf,%f\n",a,b); • }

  27. 输入输出(二) 流的输入输出

  28. 流的输入输出控制符号 后三个函数定义在iomanip.h中

  29. 流的输入输出举例 • #include "iostream.h" • void main(){ • int a,b,c; • cin>>a>>b>>c; • cout<<a<<b<<c<<endl;//没有间隔 • }

  30. 流的输入输出举例 • #include "iostream.h" • void main(){ • int a=20,b=20; • cout<<hex<<a<<endl; • cout<<b<<endl;//keep hex • cout<<dec<<b<<endl;//dec • }

  31. 不能混用 • cin cout是C++中定义输入输出,scanf(),printf()是C语言中定义的函数,两者工作机理不同,只能同时使用其中一套,不能混用,举例: • #include <iostream.h> • #include <stdio.h> • void main() • { int a; • cout<<"input a please:\n"; • scanf("%d",&a); • printf("%d\n",a); • }

More Related