310 likes | 536 Views
数据类型. 本章内容. 变量类型 常量表示 转义字符 stdio.h 中提供的输入输出函数 流的输入输出. 变量类型( P26 ). 字符型、整型变量的声明. char (1B), short int (2B) , long int (4B) , int (?) 根据字节数计算表达范围 signed 范围 unsigned 范围 注意在不同系统中长度可能不同,可用 sizeof 查看 ( 举例) ,int 类型在 VC 中是 4B, 而在 TurboC 中为 2B 声明一个变量 , 类型名 后跟变量名 如 char a;
E N D
本章内容 • 变量类型 • 常量表示 • 转义字符 • stdio.h中提供的输入输出函数 • 流的输入输出
字符型、整型变量的声明 • 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;
字符的存储 • 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)); • }
整数的存储 • 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);*/ • }
实数类型及声明 • float(4B) • 表达范围-3.4E1038~3.4E38之间 • 6位精度 • double(8B) • 表达范围-1.7E10308~1.7E308之间 • 16位精度 • 声明举例: • float a,b; double c;
实数表示及误差来源 • 实数是把存储位划分成一定格式,然后分别把表示成±0.bbbbbb*2±bbbb 格式的数值正负号、尾数、阶码正负号、阶码部分保存到格式相应位置中 • 如在下图所示的格式中,-27变为指数形式为,0.11011*2101的存储二进制为1001011101100000 • 误差来源: • 尾数是有限的,有些十进制数变成二进制存储时,长度超过容纳范围丢失产生误差 • 在运算中,对阶移位而使部分尾数移出容纳范围而产生误差
整型常量的表示 • 十进制表示和数学中相同,如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); • }
实数常量 • 浮点数常量 • 普通表示法,实数后加f,如3.4f,-36.f(.不可省略) • 科学记数法1.3e-5f,表示1.3X10-5 • 双精度常量表示与浮点数表示相同,只需要去掉后面f • 字符型常量用单引号做定界符表示 ,如’a’,’3’,’%’ • 注意字符型常量有且只能有一个字符,如:’ab’, ‘’(空)都是错的 • 字符串常量用双引号做定界符表示,如:”a”, ”sdhjfdshjfhjsd”,“”(空串),“ ”(由一个空格组成的字符串)
实数输出举例 • #include "stdio.h" • void main(){ • float a=34.5678; • printf("%f,%d\n",a,a); • } • 输出结果:34.567799,-1610612736 • 说明前面存储时产生误差,后者格式错误输出完全错误
转义字符 • 一些在编辑或通信过程中起控制作用的字符,ASCII码值小于32,不属于可打印字符,不方便用键盘输入或无法输入,直接记忆ASCII又比较困难,因此C语言中定义“\”转义字符,用”\”加一个单词的首字母,表示一个控制字符,下面是”\”后可以跟的字符及其含义
转义字符举例 • #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; • }
变量的初始化 • 变量在声明的同时赋一个初始值,称为变量初始化,尽管初始化有时和=运算符起相同的作用,但是其执行原理是不同的,赋值的格式在很多形式下也是不同的,在学复杂数据类型时要特别注意 • 举例: • int a=20,b,c=30; • char e=‘r’,f=‘\67’
输入输出(一) stdio.h中提供的输入输出函数
getchar()与putchar()函数 • C语言为保证自身的可移植性,没有输入输出指令,输入输出功能是通过函数实现的 • stdio.h文件中提供的单字符输入输出函数 • int getchar(void ) • 举例 char c; c=getchar();将从键盘读入一个字符存于c中 • int putchar(int c) • 举例 char b=‘A’;putchar(b);将在屏幕上输出字母A
getchar()与putchar()函数举例 • #include "stdio.h" • void main(){ • char c; • c=getchar();//输入 a • c=c-32; • putchar(c); • putchar('\n'); • }
stdio.h中提供的输出函数printf() • 格式: • int printf(“格式控制字符串”,表达式1,表达式2…) • 举例:printf(“name is%s,age is %d”,“Tom”,30+2) • 格式控制串中的控制字符,按照次序控制后面变量列表中字符的输出,像上面例子中,%s控制”Tom”的输出格式,%d控制30+2的输出,注意如果是逗号表达式,一定用括号括起来,否则会视为两个表达式
printf()函数中%后的类型符号 • c : 以字符形式输出 • d,i:以有符号十进制整数形式输出 • o:以无符号八进制整数形式输出 • x或X:以无符号十六进制整数形式输出 • u:以无符号十进制整数形式输出 • f:以带小数点形式输出浮点数 • e或E:以科学记数法形式输出浮点数 • g或G:由系统选择使用小数点形式或科学记数法形式输出浮点数 • s:以字符串形式输出 • p:以十六进制内存地址方式输出 • %:输出%
控制输出时读取内存的长度 • 在输出时在类型符号前加L输出长整形或双精度数据,加h输出短整形数据 • 举例: • #include "stdio.h" • void main() • { long a=0x11112222L,b=0x33334444L; • printf("%hx,%x",a,b); • }
控制输出数据的长度 • 在使用%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填充零,#在八进制十六进制前显示前缀
stdio.h中输入函数SCANF() • 格式 int scanf(“格式控制字符串”,变量地址列表) • 注意事项: • 格式字符串,中除了格式控制符外其他字符要求原样输入,否则无法正确输入,所以一般情况下,scanf()的格式串中只包含格式控制符,没有多余字符 • scanf()函数中需要的是地址列表,不是变量,如果程序错误,会在程序执行时,出现系统错误
scanf()函数中%后的类型符号 • c:输入一个字符 • d ,D :输入有符号十进制整数 • e, f :输入浮点数 • le,lf:输入双精度数 • o,O :输入八进制整数 • i,I :直接输入十进制、加0输入八进制,加0x输入十六进制数 • u ,U:输入无符号十进制整数 • x ,X: 输入十六进制数 • s :输入字符串
控制输入的宽度 • #include "stdio.h" • void main(){ • int a,b,c; • scanf("%2d%3d",&a,&b);//input 123 456 • printf("%d,%d\n",a,b); • }
通过%*略过一个输入数据 • 示例: • #include "stdio.h" • void main(){ • int a,b; • scanf("%d%*d%d",&a,&b);//input 12 34 56 • printf("%d,%d\n",a,b); • }
长度限制影响举例 • //输入时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); • }
输入输出(二) 流的输入输出
流的输入输出控制符号 后三个函数定义在iomanip.h中
流的输入输出举例 • #include "iostream.h" • void main(){ • int a,b,c; • cin>>a>>b>>c; • cout<<a<<b<<c<<endl;//没有间隔 • }
流的输入输出举例 • #include "iostream.h" • void main(){ • int a=20,b=20; • cout<<hex<<a<<endl; • cout<<b<<endl;//keep hex • cout<<dec<<b<<endl;//dec • }
不能混用 • 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); • }