C程序设计课件第1章.ppt

上传人:本田雅阁 文档编号:3479334 上传时间:2019-09-01 格式:PPT 页数:66 大小:506.02KB
返回 下载 相关 举报
C程序设计课件第1章.ppt_第1页
第1页 / 共66页
C程序设计课件第1章.ppt_第2页
第2页 / 共66页
C程序设计课件第1章.ppt_第3页
第3页 / 共66页
C程序设计课件第1章.ppt_第4页
第4页 / 共66页
C程序设计课件第1章.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《C程序设计课件第1章.ppt》由会员分享,可在线阅读,更多相关《C程序设计课件第1章.ppt(66页珍藏版)》请在三一文库上搜索。

1、第三章 简单程序,常量 变量 表达式 语句组成 表达式语句 赋值 类型转换 输入/输出,常量(constant),在程序执行期间不变的数据称为常量 如 圆周率的近似值3.14165926 自然对数底的近似值2.7183 等 可以直接书写在程序中的常量,称为字面常量。 #include void main() printf(“%f n”, 2.7183); 打印出 2.7183,常量标识符 为什么 一个常量多次用到 方便修改常量 如何声明 枚举常量表中的标识符就是常量标识符 #define 标识符 常量 如何使用 #define SPEED 55,#define pai 3.14 #define

2、 R 10 void main() float x,y; x=2*pai*R; y=pai*R*R ,#define pai 3.14 #define R 10 void main() float x,y; x=2*3.14*10; y=3.14*10*10 ,#define pai 3.14; #define R 10; void main() float x,y; x=2*pai*R; y=pai*R*R ,#define pai 3.14; #define R 10; void main() float x,y; x=2* 3.14; * 10 ; y= 3.14; * 10 ; * 1

3、0 ; ,变量(variable),相对于常量,变量是程序执行期间值可变的数据对象 两个方面 变量值:程序运行某一时刻,变量所具有的值 变量属性: 名字 数据类型 作用域 存储空间 存储地址 等,编译程序在把高级语言程序翻译成机器语言时 给每个变量都分配一块适当的存储空间,以便随时保存变量的值。这块存储区就是变量的存储区 变量的地址就是这块存储区的首地址 变量的值就是这块存储区中现行保存的数据。 变量v 被分配在内存地址为0F000开始的存储区域,当前值为5。,变量地址,变量名,变量值,变量的存储区,变量声明,声明变量的意义: 引进新变量 规定所引变量的属性 语法 变量声明 类型 变量项表 ;

4、 变量项表 变量项 变量项,变量项表 变量项 标识符 标识符 = 初值,不考虑初值的一般形式 T id , id , . , id ; 变量类型 变量名字 变量的作用域 例子 int i , j , k ; char c ; int t ; float amount , total ; bool flag ; enum red,blue,green color ;,void main() int x,y; z=x*2; char z; x=x+y; z=x+y; w=z+x; ,变量出现形态,声明出现 赋值出现 引用出现 int n, x; n=1; n=3; n=n*5+7 x=n;,n:,

5、编译程序会给该变量分配一块存储空间。但是从程序开始执行的时刻一直到给该变量赋值之前该变量是没有值的,这时称该变量为“值无定义的”,为变量赋以一个它值域之内的(即所属类型的)一个数据。一旦为变量赋值,该变量就变成了“值有定义的”,引用性出现分成 引用变量当前值 一般在表达式中 变量必须是“值有定义的” 不会改变变量的值 引用变量本身 多出现在参数结合中 可是“值无定义的” 可能会改变变量的值,1,3,22,x:,22,变量地址,变量地址 变量在内存中的所在位置,即内存地址。 求地址 将单目运算符“&”,缀在变量前, 求相应变量地址。 例子 被分配在内存地址为0F000开始的存储区域的变量V &V

6、 的值就是 0F000,也称为V的指针,变量初始化,形式 id = 初值 例子 int i=0 , j=1 , k=100*2, m=k*i*j; char c=A ; enum red,blue,green color = red ; 变量在声明时被赋以初值,则在程序开始运行时,它便取得了相应值,它是值有定义的。,enum set a,b,c,d var_set; enum set a,b,c,d var_set=d; enum set a,b,c,d; enum set var_set=d; enum a,b,c,d var_set=d;,变量使用注意事项,程序中使用的一切变量都必须声明。

7、 在同一作用域内,任何两个变量不许重名,也不许与其它类标识符重名。 从程序的静态行文顺序看,变量的声明必须出现在所有使用之前。 从程序的静态行文顺序看,在变量声明中给变量赋初值处,相应表达式必须是可计算的。 从程序的动态执行顺序看,为变量赋值的出现必须在所有使用值之前。,表达式,表达式(expression) 是 C 程序完成各类运算的主要部分,由运算符和运算分量组成。 语法 表达式 基本表达式 后缀表达式 一元表达式 二元表达式 条件表达式 逻辑表达式 赋值表达式 顺序表达式 基本表达式 标识符 字面常量 (表达式),基本表达式是C表达式的最底层,包括: 标识符 字面常量 括号表达式 标识符

8、包括变量标识符和常量标识符,它们的类型由相应声明给出,当表达式计算时,变量应该是值有定义的。 字面常量 括号括表达式,3*6 u0 r=(x+y)*5=(r-s)/8 3 、6 、u 、r 、x 、y 、5 、s 、8 都是基本表达式 经与运算符组合后的 x+y 、r-s 是表达式; 用括号括上的表达式 (x+y)、(r-s) 又变成基本表达式 最终若干基本表达式与运算符组合得到的 r=(x+y)*5=(r-s)/8 仍是表达式。,运算符优先级,C 表达式与通常数学表达式的书写区别: 所有字符必须写在一条水平线上。不允许出现上、下角标、分数线等。 sqrt(x*y) x*x*x*x*x (x+

9、y)/5 fabs(x*y),a乘b ab ab ab a*b 除了下标使用方括号以外,所有括号必须用圆括号。 a*b+c*(a+b) (a*(b+c*(a+b),数学中连续的关系运算, a = = + =,适当加括号是好习惯 xy|y=2&y2 (xy)|(y=2)&(y2) (xy)|(y=2)&(y2),表达式计算规则,括号内的表达式先计算 运算符分16个优先级,不同级运算符相邻,先计算优先级高的运算 同级运算符相邻,按结合律的规定从左向右或从右向左进行计算 二元运算符和三元运算符的各个运算分量的计算次序是依赖于实现的。,int x=3, y=4, r=1, s=9 ; r = ( x

10、+ y ) * 5 = ( r s ) / 8,7,35,-8,0,0,-1,#include stdio.h /* 1 */ int x,y ; /* 2 */ int f ( int z ) /* 3 */ x=x+1 ; /* 4 */ return (z*z); /* 5 */ /* 6 */ void main ( ) /* 7 */ x=0 ; /* 8 */ printf ( “%dn”, x+f(2) ); /* 9 */ /* 10 */,计算顺序 从左至右 结果为4 从右至左 结果为5,设u=20、v=30、w=40、x=20、y=50则 w=0 | u+20v | xx

11、false | true xx true & false,语句(statement),程序的一个侧面是描述对数据的操作,操作由一个个动作组成。 在程序设计语言中,表示动作的是语句,语句的执行执行相关动作。,语句分类,表达式语句,语法 表达式语句 表达式 ; 例子 3+5; b = a*c-3 x+y ,赋值语句,一般形式 v = e; v 是一个左值(现在看就是一个变量),作为赋值运算符左端的运算分量。 = 是赋值运算符,由一个赋值号组成。 e 是一个表达式,作为赋值运算符右端的运算分量,e能计算出一个值。,days = 2+5 ; 执行结果是将值 7 赋给变量 days 。 若 days 原

12、来是值无定义的 现在它变成值有定义的,并取值 7; 若 days 原来是值有定义的, 则不论 days 原来值是什么,都将被 7 所取代days 仍是值有定义的,值是 7 。 最后整个表达式值也为7。,在赋值表达式中,赋值运算符“=” 右端是计算值的表达式, 左端回答“该值交给什么对象” 因此下述语句都是正确的。 firstnumber=1; circumference=2*pi*radius 甚至数学上显然不成立的,也是正确的。 nextnumber=nextnumber+1 其执行结果是将变量 nextnumber 的值加1,得到一个新值,再送入变量 nextnumber 中去。,下述形式

13、是错误的, 因为左端不是变量(左值) 1=firstnumber length*width=area,例3-1 设 v1 , v2 , v 是同一类型的三个变 量,且 v1 , v2 都是值有定义的,则下 述语句列将使 v1 与 v2 的值互相交换 v=v1; v1=v2; v2=v;,v1:,v2:,v:,例3-2 做一个长 50cm ,宽 30cm,面积 500cm2 的各边等宽矩形的木框,计 算该木框多宽。,area=2(length*x+(width-2x)*x) 即 : 4x*x - 2(length+width)x + area = 0 4x*x - 2(length+width)

14、x + 500 = 0,#include “stdio.h“ #include “math.h“ #define length 50.0 #define width 30.0 #define area 500.0 void main() float x1,x2,b,d; b=-2.0*(length+width); d=sqrt(b*b-4.0*4.0*area); x1=(-b+d)/(2*4); x2=(-b-d)/(2*4); printf(“x1=%.2f x2=%.2f n“, x1,x2); ,该程序运行后将输出: X1=36.58 X2=3.42,左值 实质是内存某个存储区的地址

15、 通俗的讲,左值是允许在赋值运算符左端出现的表达式。 最基本的左值,+和-,Eg: (1) int p=1,q; (2) int p=1,q; q=p+; q=+p; q=1;p=2 q=2;p=2,类型转换,为什么要进行类型转换 对 C 而言,各种不同类型及其数据是有区别的 C对参与运算的运算分量类型 在参数结合时对参数的类型都有一定的限制或进行一些必要的转换 void main() bool x=true,y=true,z=true; int w=x+y+z; bool u=x+y+z; ,隐式类型转换,对象 各种浮点类型 各种整数类型 转换的原因 每一类型数据存储长度,表示形式不同,隐式

16、转换规则,单目运算(一元运算、后缀运算)转换规则 所有浮点类型不转换 长度大于int类型的整数类型不转换 长度小于int类型的带符号整数类型转换成int类型 长度小于int类型的无符号整数类型 值可以用int类型表示,转换成int类型 值不能用int类型表示,转换成unsigned int类型,双目运算和三目运算 向类型高的运算分量转换 把短类型转换成长类型 把整数类型转换成浮点类型 把有符号类型转换成无符号类型,long double double float unsigned long long long long unsigned long long unsigned int unsig

17、ned char 、unsigned short int char 、short,把短类型转换成长类型 把整数类型转换成浮点类型 把有符号类型转换成无符号类型,各占用多少字节?,强制类型转换,形式 (类型名) 例子 (char)(A+0) 结果为char类型小写的q (int)5.2/2 结果为int类型的2 (float)5/2 5/(float) 2 结果为float类型的2.5 注意 类型名必须用括号括上,该运算符就是这种形式; 用括号把它的运算分量括上是一种好的习惯 (char)(A+0) 结果为char类型小写的q (char)A+0 结果为int类型的113。,赋值运算过程,计算赋

18、值运算符右端表达式e的值 若e与v赋值兼容,把e的值按赋值转换规则转换成赋值运算符左端v的类型 把转换后的值送入v中 例子 float v; float v=3.0; int i=3; int i; v=i+3; i=v+3;,赋值兼容,v = e 中要求e的类型与v的类型兼容,算术赋值转换规则,输入/输出 (I/O),输入 把数据从外部设备(磁盘、键盘、磁带、传感器、 )上读入计算机内。 输出 指把计算机内部的数据送到外部设备(磁盘、显示器、打印机、 ). C语言中的处理方式 一切外部设备全部定义为文件 C的 I/O 全部是针对文件的 通过标准函数库中若干标准函数实现I/O。,程序文件分类

19、头文件(.h) 代码文件(.cpp或 .c) 标准库函数 #include 命令 意义 将源文件包含到当前源程序文件中 形式 #include #include “文件名” 标准I/O函数头文件stdio.h,任何C 程序使用I/O函数,必须引用该标准头文件: #include,单个字符输入,输入函数 getchar() 从标准输入设备(键盘)上读入一个字符,作为函数值 使用 char ch; ch=getchar();,读入一个字符送入变量ch中,单个字符输出,输出函数 putchar (int型表达式 ) int型表达式计算出的值转换成字符类型值输出到标准输出设备(显示器)上。 函数值 如

20、果正确,输出的int型整数作为函数值 如果错误,则EOF( -1 )作为函数值 使用 char ch=c; putchar(ch+3);,格式输入函数,形式 scanf ( , ) 意义 其操作是从标准输入设备上读入一系列数据,按格式控制的要求进行转换并送入输入列表所列的诸变量中 函数值 输入的数据个数 如果输入操作正确 EOF 否则,输入列表 &v1 , &v2 , &v3 , , &vn 格式控制 含有各种以百分号开始的格式控制符的常量字符串 如下是一个格式控制: “%d %c %f %d”,“%.d”,设i 为 int 型变量、ch 为char型变量、 v为 float型变量、k 为 i

21、nt型变量 scanf ( “%d%c%f%d” , &i , &ch , &v , &k ) 从键盘上输入数据 1234123e+2987 变量 i 得到整数数据1234 变量 ch 得到字符型数据空格 v 得到浮点型数据12300 k 得到整数数据987,格式输出,形式 printf ( , ) 意义 其操作是按照格式控制的要求,把输出列表上的数据转换成字符串,送入标准输出设备上输出。 函数值 输出的字符个数 如果输出操作正确; EOF 否则。,输出列表 e1 , e2 , e3 , , en 格式控制,“-”表示以左对齐方式输出,printf(“ num1=%2d flag=%c n a

22、rea=%10.3f num2=%5d n”, 25 , A , 123.0/2 , 987 );,num1=,25,flag= ,A,area=,61.500,num2=,987,例3-3 修改例3-2使之适用于任意长、宽、面积; 并产生一个较好的输出格式。 #include “stdio.h“ #include “math.h“ void main() float x1,x2,b,d; float length, width,area; printf(“please input length,width,area:n“); scanf(“%f%f%f“, ,首先将在终端屏幕上显示一行提示: Please input: lenth, width, area: 这时计算机处于等待输入状态。 操作员应顺次从键盘键入矩形方框的长、宽和面积 设键入值为: 5030500 键入结束后,计算机继续向下运行,产生如下输出: x1=36.6x2=3.4 到此程序执行结束。,本章小结,常量 变量 表达式 语句组成 表达式语句 赋值 类型转换 输入/输出,作业,3.1 3.2 3.3 3.6 3.9 3.13 3.14-1、3、5、7 3.27,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1