第二章变量和数据类型.ppt
第1章内容回顾,程序是为执行一项任务而编写的有序指令集算法是解决问题的具体方法和步骤流程图是算法的图形化表现形式C程序的编译和运行过程编译器将源程序转换成机器能理解的程序连接器用于连接相关的目标文件以生成可执行程序,第2章,变量和数据类型,预习检查,在printf函数中%d打印什么类型的数据,%f呢?double型该用什么打印?那么,如果真的想打印“%d”,该怎么办?2+2=?如何打印一个浮点数的整数部分我想把%运算符用于浮点数,但程序无法通过编译。该怎么办?,本章目标,若a=3,h=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=a,c2=b。想得到以下的输出格式和结果,请写出程序,包括定义变量类型和设计输出。要求输出的结果如下:编写程序,用getchar函数读入两个字符给c1与c2,然后分别用putchar()函数和printf()函数输出这两个字符,并思考以下问题:(1)变量C1、C2应定义为字符型或整型?还是两者皆可?(2)、要求输出C1、C2的值ASCII码,应如何处理?用putchar()函数还是printf()函数?要求掌握:字符变量的范围与整数的范围掌握putchar()与printf()的用法什么是字符的ASCII码值,本章结构,简介,变量和数据类型,类型转换,符号常量,基本数据类型,输入输出函数,算术运算符,接收并显示字符,程序,指令,C语言中的基本元素之总体,量标识符关键字运算符分隔符等,C语言中的基本元素之量,变量:是指没有固定的值,可以改变的数。变量用于开放句子,表示尚未清楚的值(即变数),或一个可代入的值变量能够作为某特定种类的值中任何一个的保留器。变量通常用一个英文字母表示常量:是指在程序运行过程中其值不能改变的量。常量分为直接常量和符号常量。一旦确定以后是不能改的,例如,计算圆面积的 C 语句:S3.14159*r*r;中的 S 和 r 都是变量,其中,r 可以有不同的值,S 的值因 r 的值不同而不同。3.14159是常量,C语言中的基本元素之定义与声明变量,定义与声明变量:数据类型 变量名;,变量的命名规则:变量名可以由字母、数字和 _(下划线)组合而成变量名不能包含除 _ 以外的任何特殊字符,如:%、#、逗号、空格等变量名必须以字母或 _(下划线)开头变量名不能包含空白字符(换行符、空格和制表符称为空白字符)C 语言中的某些词(例如 int 和 float 等)称为保留字,具有特殊意义,不能用作变量名C 语言区分大小写,因此变量 price 与变量 PRICE 是两个不同的变量,数据类型,基本数据类型之整型,仅限于32位机!,基本数据类型之整型,定义:int page_number;long int population;unsigned int age;,在同一语句中可以声明多个类型相同的变量:int page_number,copies=0,paper_width;,C语言中的基本元素之改变变量,初始化:定义时初始化变量int before=1;定义后初始化变量Int middle;middle=0 x4591;通过运算赋值int programmer=1;programmer=(left+right)/2;,格式化输入scanf,int scanf(const char*format,.);是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。,例:使用scanf函数输入数据。#include int main()int a,b,c;scanf(%d%d%d,scanf(%d,格式化输入/输出函数之scanf,scanf 函数从标准输入(键盘)读取信息,按照格式描述把读入的信息转换为指定数据类型的数据,并把这些数据赋给指定的程序变量。,转换字符串,&符号(附在读取的每个变量上)用于指明变量在内存中的位置,变量的名称,格式化输出printf,int printf(const char*format,argument);通过标准输出设备输出一组数据。,例:使用scanf函数输入数据。#include int main()int a,b,c;printf(“请输入三个整数:”);scanf(%d%d%d,格式化输入/输出函数之printf,int visitor_count=150;printf(%d,visitor_count);,printf,将一些信息按照指定的格式送到标准输出(显示器),%d,visitor_count,将按指定的格式显示该变量的值,输入/输出函数(printf/scanf)用于接受和显示数据或信息,#include int main()int num;printf(请输入一个数:);scanf(%d,格式化输入scanf,转换字符串,转义序列,格式化输入/输出函数之printf,int visitor_count=150;printf(%d,visitor_count);,输出结果:150,格式化输入/输出函数之printf,int salary=5500;printf(%10d,salary);,输出结果:5500,输出结果的左边显示了 6 个空格,%10d,基本数据类型之浮点型,单精度浮点数:float(4)双精度浮点数:double(8),7位有效数字,小数点默认6位16位有效数字,小数点默认6位,定义:float selling_price;double pressure_level;,基本数据类型之浮点型,初始化:定义时初始化变量 float before=1f;double pressure_level=6.98;定义后初始化变量double pressure_level;pressure_level=7.888;通过运算赋值Float programmer=1;programmer=(left+right)/2.0;,内存,格式化输入/输出函数之scanf,float tax_rate;scanf(%f,tax_rate,在内存中分配一块 32 位存储空间存储空间使用名称“tax_rate”标识,提示用户输入一个值输入的值存储在变量中(因为 scanf 提供此变量的地址),12.234,一旦确定以后是不能改的,格式化输入/输出函数之printf,float circumference=78.53;printf(%f,circumference);,输出结果:78.530000,默认情况下精确到六位小数,9.4786789;,9.478679,格式化输入/输出函数之printf,double mercury_level=168.2251074;printf(%7.2f,mercury_level);,输出结果:168.23,宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。,%7.2f,精度(精确到小数点后多少位),格式化输入/输出函数之printf,float circumference=78.53;printf(%f,circumference);,输出结果:78.530000,默认情况下精确到六位小数,9.4786789;,9.478679,格式化输入/输出函数之printf,double mercury_level=168.2251074;printf(%7.2f,mercury_level);,输出结果:168.23,宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。,%7.2f,精度(精确到小数点后多少位),字符型,字符变量是用来存放字符常量的,一个字符变量中只能存放一个字符.占用1个字节。系统并不是将字符本身的形状存入内存,而只是将字符的ASCII码存入内存字符类型看作一种特别短的整数类型。允许参与算术运算分为:有符号字符型:signed char,-128127无符号字符型:unsigned char,0-255 例如:char c=A;/字符A的ASCII代码为65c=c+2;/65+2=67字符C的ASCII码,基本数据类型之字符型,5 p$,有效的字符型值,2,2,正确,2+2=4,X,基本数据类型之字符,初始化:定义时初始化变量 char c=a;Char ch=65;定义后初始化变量Char ch;Ch=a;Ch=65;通过运算赋值char ch=a;ch=ch+2;,内存,格式化输入/输出函数之scanf,Char ch1;Char ch2;scanf(%c%c,ch1,ch2,格式化输入/输出函数之printf,char ch1=65;Char ch2=Aprintf(ch1=%c,ch2=%c,ch1,ch2);,输出结果:ch1=A,ch2=A,基本数据类型之字符型,那么,怎么判断得到的字符是不是一个小写字母?接下来,怎么知道他是26个字母中的第几个字母,他下一个字母又是什么?最终,怎么得到这个字母的大写字母呢?于是a+5,a+5与a+5的区别。,常量的特点:1.在程序中保持不变2.在程序中,常量可以不经说明而直接使用常量的分类:1.直接常量:对应数据类型的常量 整形常量:12U、0L、-3 实型常量:4.6F、-1.23 字符常量:a、b 等 字符串常量“Hello!”2.标识符:用来标识变量名、符号常量名、函数名、数组名、文件名的有效字符序列。有时常量定义成宏的形式:#define 标识符 常量,C语言中的基本元素之常量,整型常量,整型常量:1.十进制表示:除表示整数0外,不以0开头(以0开头的数字串会被解释成八进制数)。负数在前面加负号-,后缀l或L表示长整型,u或U表示无符号数。例:345 31684 0-23456 459L 356l 56789u 567LU2.八进制表示:以数字0开头的一个连续数字序列,序列中只能有0-7这八个数字。例:045-076 06745l 0177777u 3.十六进制表示:以0X或0 x开头的连续数字和字母序列,序列中只能有0-9、A-F和 a-f这些数字和字母,字母a、b、c、d、e、f分别对应数字10、11、12、13、14、15,大小写均可。例:0 x10 0X255 0 xd4ef 0X6a7bL,实型常量,实型常量有两种表示形式:1.小数形式。由数字和小数点组成,必须有小数点。例:4.23、0.15、.56、78.、0.02.指数形式:以幂的形式表示,以字母e或E后跟一个以10为底的幂数。(1)字母e或E之前必须要有数字。(2)字母e或E后面的指数必须为整数,字母e或E的前后及数字之间不得有空格。默认是double型,后缀为“f”或“F”即表示该数为float型,后缀“l”或“L”表示long double型。例:2.3e5 500e-2.5E3 4.5e0 34.2f.5F 12.56L 2.5E3L,字符常量,字符常量是用单引号()括起来的一个字符。对于字符来说,x和X是两个不同的字符。字符可以是字符集中任意字符。如A、x、D、?、3、X等都是字符常量。,特殊的字符常量转义字符是一种特殊的字符常量。转义字符以反斜线开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符,转义字符,输出结果:,Name:Audrey HepburnMovie:Roman Holiday,代码:,printf(“Name:Audrey Hepburn n Movie:Roman Holiday”);,转义序列允许在输出结果中包括特殊字符,字符输入输出函数,getchar(),字符型数据,字符型数据,putchar(),字符输入输出函数之getchar(),char variablename;variablename=functionname;,getchar(),语法:,例如:char c;fflush(stdin);c=getchar();,#include int main()char a,b;printf(请输入两个字符:n);fflush(stdin);a=getchar();fflush(stdin);b=getchar();putchar(a);putchar(b);putchar(n);,字符输入输出函数之示例,O,K,输出:请输入两个字符:OKOK,类型转换,自动类型转换原则:把表示范围小的类型的值转换到表示范围大的类型的值强制类型转换语法:(类型名)变量或数值,强制类型转换运算符,自动类型转换如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:1.实型赋予整型,舍去小数部分。2.整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分,小数部分值为0。3.字符型赋予整型,由于字符型为一个字节,而整型为4个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。原则:把表示范围小的类型的值转换到表示范围大的类型的值 short int long float double,强制类型转换运算符,强制类型转换:形式:(类型名)操作数说明:1.强制类型转换不会改变操作数自身的类型,只是得到一个所需类型的中间量2.多用于自动类型转换不能实现的目的3.强制类型转换后,会影响C语言做类型检查举例:int a=5,b=2;float c=(float)a/b;,本章总结,常量是在程序中不能被更改的值;而变量在程序中可以被更改的,通过变量可以引用存储在内存中的数据C语言中的基本数据类型包括整型、单精度浮点型、双精度浮点型和字符型整型分为短整型、整型、长整型,每种整型又可分为有符号型和无符号型,本章总结,单精度浮点型和双精度浮点型变量可以存储实数,但双精度型取值范围要比单精度型大的多字符型变量可以存储单个字符,其值是该字符的ASCII 码printf()和 scanf()函数属于格式输入输出函数getchar()和 putchar()函数用来输入输出单个字符的函数,