1、第三章 数据类型、运算符与表达式,教学目标,掌握几种基本数据类型,包括整型、浮点型、双精度型和字符型数据类型的基本概念 掌握常数和变量的使用方法,数据类型,基本类型,构造类型,指针类型,空 类 型,单精度,双精度,共用体类型,结构体类型,数组类型,枚举类型,实型(浮点型),字 符 型,整 型,3.1 C的数据类型,3.2 常量与变量,#define PRICE 255 A=PRICE*B+6; C=PRICE+C/120; . E=165/PRICE+A*C; PRICE是标识符,亦代表常量,叫符号常量 习惯上用大写字母表示,也可以用一个标示符代表一个常量,常量: 在程序运行过程中,其值保持不
2、变的量,叫1,0,123 整型常量4.6, 1.23 实型常量a, d 字符常量,A=255*B+6; C=255+C/120; . E=165/255+A*C;,对字符常量:a、b, 输入时请注意单引号 全角和半角的区别: 、,变量有自己的名字,对应一定的内存存储单元。例如:sum=10;sum=20;sum=sum+30;sum 所对应的内存单元的内容不再是10或20而是50。 变量名:以字母或下划线开头,后续字母、数字或下划线,变量:在程序运行过程中其值可以改变的量,由字母、数字、下划线组成,不能用关键字,不能数字开头,大小写敏感; 习惯上用小写字母表示; 字符长度最好32个字符。,合法
3、的变量名,标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。,思考:判断下列变量名的合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123,十进制整数: 123,-456,0 八进制整数: 以0开头的数据,如:-011,0167 十六进制整数:以0x开头的数据,如:0x
4、123 根据数据的数值的大小,分配相应的内存空间。 #include “stdio.h“ void main() int a,b=54;a=12;printf( “%d,%dn“,a,b); ,在C语言中,整型常数可以用以下三种形式表示:,3.3 整型数据,整型变量基本型:以int表示 (integer),整型变量的定义: 类型 变量名例如:int sum; 对变量的定义, 一般放在函数的开头部分,在计算机中,整型数据占一定的内存空间, 只能表示一定范围的数据, 一般以机器的一个字长(word)存放一个整型数据,3.4 浮点型数据,浮点型常量 浮点数又称实数。它有两种表现形式: 十进制形式(必
5、须包含小数点)。如:0.123f, .123F, 345.0, 68., 0.0 都是合法的十进制数表示。 指数形式(e或E之前必须有数字,指数必须为整数。) 如:123e3或123E3都表示123103。e-5 ,1.2E-3.5,浮点型常量的类型 默认double型; 在实型常量后加字母f或F,认为它是float型,(x),(),3.4.1 浮点型常量的表示方法,1、浮点型数据在内存中的存放形式 占4/8个字节,按指数形式存放 每个浮点型数由小数部分(尾数)和指数部分(阶码)组成。,注意: 标准C中对各部分所占位数无具体规定 小数部分的位数决定数的精度 指数部分的位数决定数的范围,二进制数
6、,2的幂次,3.4.2 浮点型变量,数符 小数部分 指数,2 、浮点型变量的分类 C的浮点型变量分为单精度和双精度两种: 单精度占4字节,提供7位有效数字,表示数的范围为3.4*10383.4*1038。 双精度占8字节,提供16位有效数字,范围为1.7*103081.7*10308。 浮点型变量的定义 用float表示单精度,double表示双精度。,例如:float a; double b; a=123456.789f; b=123456.789; a中实际存储的是123456.7 (7位有效) b中实际存储的是123456.789 (全部有效),aaa,11,字符常量 定义:用单引号括起
7、来的单个普通字符或转义字符。a A b ? n ,转义字符:指不能用符号直接表示的字符常量,反斜线后面跟一个字符或一个代码值表示。 n 换行 0 空字符,字符常量的值为该字符的ASCII码值(Page 364 附录A)A65, a97,048 , n10,3.5 字符型数据,由于 “ 在C语言中都有了特殊的意义,故要想在字符串中使用它们,须在其前面再加上一个反斜线。例如: 反斜线 单引号 ” 双引号,字符变量一个字符变量只能存放一个字符。定义: char c1,c2;字符变量的赋值:c1= a; c2= b; 一个字符占一个字节 字符数据的存储形式在内存中字符变量的存储形式是ASCII码,02
8、54,在内存中占8位。,字符常量与字符串常量不同,字符串常量 定义:用双引号(“ “)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,判正误:,char ch;ch=A; ch=“china“; ch=“A“;,对字符串常量:“hello “ 输入时请注意双引号 全角和半角的区别: “ 、“”,3.6 变量赋初值,在变量定义的同时可以为变量赋初值 int a=3; (相当于 int a; a=3;) float f = 3.56f; double d=12.1; char c = a; int a,b,c = 5 ; 表示只给c赋初值。 (相当于int a,b,c; c
9、 = 5;),3.7 各类数值间的混合运算,不同类型的数据(整型、实型、字符型)可以进行混合运算。如:10 + a + 1.5 8765.1234 * b 先将它们转换成同一类型的数值,再进行计算,这里转变为双精度型。,隐式转换 什么情况下发生: 运算转换-不同类型数据混合运算时; 赋值转换-把一个值赋给与其类型不同的变量时; 输出转换-输出时转换成指定的输出格式; 运算转换规则: 由低向高转换,运算结果为最高级别的类型,例如:10 + a + i * f - d / e,int,double,double,double,+,double,double floatint char,必须转换由低
10、向高转换,float x; int i;x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,一般形式:(类型名)(表达式),显式转换(强制转换),说明:强制转换得到所需类型的中间变量,原变量类型不变 。,例 (int)(x+y) (int)x+y(double)(3/2) (int)3.6,warning C4244: = : conversion from float to int, possible loss of data,i=x;,较高类型向较低类型转换时可能发生精度丢失,3.8 算术运算符和算术表达式,算术运算符 基本
11、的算术运算 、*、%(1)关于除法运算 /当两个整数相除时,其商为整数,小数部分被舍弃 例如:5 / 2 = 2, 5.3 / 2 = 2.65 (2)关于求余数(模)运算 要求两侧的操作数均为整型数据,否则出错。例如:5%2=1,运算符的优先级与结合性 优先级(算术运算):() * / % + 在同一级别中,采取由左至右的结合方向。如:a b + c 相当于 ( a b ) + c,算术表达式用算术运算符将运算对象按C的语法规则连接起来的式子叫例如:a * b / c(1.5 + z),第四章 最简单的C程序设计,教学目标,掌握的几种基本控制语句的用法 掌握赋值语句的基本用法 掌握输入输出语
12、句的基本用法 掌握C程序的基本结构,一、C程序结构,例 求园的面积 #include #define PAI 3.1415926 void main() float r,s;r = 20;s = r * r * PAI;printf (“area=%f n“,s); ,area=1256.637,宏定义,函数1,源程序文件1,源程序文件i,源程序文件n,预编译命令,函数n,C程序,说明部分,执行部分,语句是计算 机执行的最 小单位,(语句),二、C语句概述,C语句分类:1.控制语句2.函数调用语句3.表达式语句4.空语句5.复合语句,一条完整的C语句必须以“;”结束, “;”是一个语句不可缺少
13、的一部分。,1.控制语句:完成一定的控制功能。,C 有9种控制语句: if( ) else (条件语句) for( ) (循环语句) while( ) (循环语句) do while( ) (循环语句) continue (结束本次循环语句) break (中止执行switch或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句),2.函数调用语句,由一次函数调用加一个“ ; ”构成。,如:printf(“Hello World!”) ;,函数调用,分号,又如:y=sin(x); 附录V C库函数 P.381,3.空语句,由一个 “ ; ”构成
14、。 即: ;,作用:程序转向点; 什么也不做的循环体。while(i=11);,4.复合语句,用 括起的一组语句,称为块 (Block) 。,如:if (x1x2) y=x1*x1+x2 ;printf(“y=%d“,y) ;,不能省略,不能加“;”,4.2 赋值语句,定义: 赋值表达式加上分号 功能: 将数据赋给变量 格式:变量 = 表达式; 例: a=2*5+3; s=sqrt(5)+3/2; int c=x;,4.3 数据输入输出的概念及在语言中的实现,一、数据输入输出的概念,计算机的输入输出是以计算机主机为主体而言。,输入:从外部通过输入设备(如: 键盘、磁盘、光盘、扫描仪等)向计算机
15、输入数据。,输出:从计算机向外部设备(如: 显示屏、打印机、磁盘等)输出数据。,如:putchar 函数 输出字符getchar 函数 输入字符printf 函数 格式输出scanf 函数 格式输入puts 函数 输出字符串gets 函数 输入字符串,二、数据输入输出在语言中的实现,调用输入输出函数实现输入输出操作,C语言无I/O语句,I/O操作由函数实现,Input / Output,2文件开头应有“#include“命令,在调用标准输入输出库函数时,文件开头必须有预编译命令:#include 或 #include “ stdio.h “,其中,stdio.h是“头文件“,包含了标准输入输出
16、函数有关的信息。,附录v C库函数表 (Page 371377 ),1.数学函数 2.字符函数和字符串函数 #include #include 3.输入输出函数 4. 动态存储分配函数 #include #include ,一、printf 函数 按规定格式向显示器输出任意类型的数据.,一般格式: printf(格式控制,输出列表),被输出的数据,可以 是常量、变量、表达式。,用双引号括起的转换控制字 符串,它包括两种信息:,格式说明,由%开始。如:%d,%f,%c,%s,%i,%lf,修饰字符,直接输出的字符,4.5 格式输入与输出,修饰符号 a= b= .,12,123,12345,格式字
17、符 对不类型的数据用不同的格式字符。 1. d或i格式符,用来输出十进制整数。 (1)%d 按整型的实际长度输出。a=12, b=123, c=12345;printf(“%d,%d,%d“,a,b,c);12,123,12345 (2)%md 按给定长度m输出,数字不够长,左边补空格;数字长度大于m,按原长度输出。printf(“%4d%4d%4d“,a ,b ,c);,3. c格式符,用来输出一个字符。 char c= a ; printf(“%c”, c); a,char c= a ; printf(“%3c”,c);,7.f格式符 用来输出实数(包含单精度和双精度)单精度时,7位数字有
18、效,双精度时,16位数字有效, 以小数形式输出。 (1)%f:不指定宽度,整数部分全部输出,输出6位小数。,例:单精度实数的输出。 void main() float x,y;x=111111.111; y=222222.222;printf(“%fn“,x+y); ,例:双精度实数的输出。 void main() double x,y;x=1111111111111.1111111111; y=2222222222222.2222222222;printf(“%fn“,x+y); ,333333.328125,3333333333333.333000,(2)%m.nf 整个数据占m位,其中小
19、数占n位,向右对齐。若数值的长度小于m,按实际长度输出。m包含小数点占的一位。 (3)%-m.nf 意义同上,向左对齐。 main() float x=123.456F;printf(“%f %10f %10.2f %0.2f %-10.2fn“, x,x,x,x,x); ,注意不能写成F。,void main() int a; float b; double c;printf (“Input a b c d n“);scanf (“%d%f%lf“, ,3 4 5 c,3 5 c,二、scanf 格式输入函数 格式:scanf(格式控制,地址列表) 功能:按指定格式从键盘读入数据,存入地址表
20、指定的存储单元中,并按回车键结束; 返值:正常,返回输入数据个数; & 是地址符,表示a ,b,c三个变量在内存中的地址. 连续输入多个数字时,空格、回车和tab键均可作为分割符.,输入数据要与控制格式相符合scanf(“%d,%d”, -不正确,4.6 顺序结构的程序设计,顺序结构:按语句排列的先后顺序执行,写在前面的语句先执行。 当计算需要引用一个变量时,该变量一定要事先定义、赋值,然后才能出现在表达式中.,A,B,传统的流程图,A,B,N-S图,例4.10 输入三角形的三条边,求三角形的面积。,area = s*(s-a)*(s-b)*(s-c),#include void main()
21、 int a,b,c;float s,area;scanf(“%d%d%d”, ,例4.11从键盘上输入一个大写字母,分别用大小写字母形式输出,同时输出它们的ascii码。int main() char c1,c2; c1=getchar();printf(“%c,%dn“,c1,c1); c2=c1+32;printf(“%c,%dn“,c2,c2);return 0; ,A ,65 a ,97,计算公式c2=c1+32(大写字母改成小写字母),例4.12 求ax2+bx+c=0方程的根,a ,b,c 由键盘键入,设b2-4ac0,分析: 1)已知一元二次方程的系数 a,b,c2) 求方程的
22、根 x1=?,x2=?3) 计算公式:x1,x2=,#include #include void main() int a,b,c; /输入变量float x1,x2; /输出变量float disc,p,q; /临时变量scanf(“a=%d, b=%d, c=%d“, ,a=1,b=3,c=2,x1=-1.00 x2=-2.00,本章要点,掌握C语言的一般结构 函数、说明部分、语句部分(执行部分) 输入输出语句的使用 对整数、浮点数、字符和字符串的输入输出格式要掌握 顺序执行程序的特点 按照程序书写的顺序逐条执行,直至main()的最后一条语句。,目的: 1,掌握掌握几种基本数据类型,包括整型、浮点型、双精度型和字符型数据类型的基本概念 2,掌握常数和变量的使用方法 3,掌握C程序的基本结构 4,掌握赋值语句和输入输出语句的基本用法 内容: 1,复习第三章、第四章,阅读上机指南; 2,编写程序:page 653.7,3.9, page 85 4.8,4.9。 要求: 每小班选举一个C课代表,由课代表将作业统一交到B1106, 截止时间节后周六下午5点。,课 外 练 习 二,