版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章流程控制C程序的基本构成要素——常量(constant)变量(variable)表达式(expression)赋值(assignment)输入输出(input&output)3.1变量及变量声明3.1.1变量变量(variable):在程序执行期间值可变的数据对象。
值:在程序执行的某一时刻变量所具有的值;属性——
名字(name) 类型(type) 作用域(scope) 存储区(storagearea) 地址(address)
重要!
2.7183v:0F000:变量地址变量名变量值变量的存储区
设有变量v,分配在内存0F000开始的一块存储区中,现行值为2.7183,如图所示。3.1.2变量声明
属性由变量声明规定。
一个变量声明的形式如下:
Tid,id=初值,...,id;
1.id是标识符,代表相应变量的名字;
2.T是类型,可以是任何一种类型符;注意!
3.变量声明位置决定了它的作用域变量声明例子:inti,j,k;
charc;intt;floatamount,total;
boolflag;enum{red,blue,green}color;
3.1.3变量形态变量作为程序语言的一个成分,在程序中有三种出现状态:
1.在变量声明中出现2.为变量赋值时出现3.引用性出现
在变量声明中出现程序开始执行的时刻一直到给该变量赋值之前该变量是没有值的,称该变量为“值无定义的”。例如有变量声明:charc;则引进字符型变量,在程序开始执行时c是“值无定义的”,它还没有值。c:为变量赋值时出现
这种出现状态为变量赋以一个它值域之内的(即所属类型的)一个数据。一旦为变量赋值,该变量就变成了“值有定义的”。例如:变量c若给它赋值'P'后,它便是“值有定义的”,并且值为'P'。
P若再给它赋值'S',则c的值就变成了'S',这时原来的值'P'便已丢失。S
3.1.4变量地址 在C程序中,经常使用一个变量的存储区及其地址。因此C给出一个运算符 & 例如:变量v,运算&v 将得到v的地址0F000。 该地址也称为v的指针, 运算符&也称为求指针运算符, 运算&v也称为求v的指针。3.1.5变量初始化变量赋初值(Initialization)在定义变量的同时对变量赋值(初始化)举例inta=2*3;
/*相当于inta;a=6;*/inta,b=3;
/*对b赋初值,a没有初值*/intb,c,a=b=c=100;
/*对三个变量赋同样的初值*/变量使用前,一般应先对它赋值ints=0;//求和变量s;1.一切变量都必须声明;
2.在同一作用域内,不许重名;
3.变量的声明必须出现在使用之前;4.在变量声明中给变量赋初值处,相应常量表达式必须是可计算的。3.2表达式3.2.1表达式的结构 表达式(expression)是C程序完成各类运算的主要部分,由运算符和运算分量组成的符合语法规则的式子。<表达式>→<基本表达式>▌<后缀表达式>▌<一元表达式>▌<二元表达式>▌<条件表达式>▌<逻辑表达式>▌<赋值表达式>▌<顺序表达式><基本表达式>→<标识符>▌<字面常量>▌<(表达式)>(1)基本表达式——C表达式的最底层:
标识符 字面常量(直接变量)cf.符号常量 括号表达式由基本表达式(运算分量)和运算符相互组合可以构成各种复杂的表达式。例如:
x,max,min//基本表达式;
(x+y)、(r-s)//用括号括上的基本表达式;
r=(x+y)*5<=(r-s)/8//若干基本表达式+运算符
C运算符(按优先级从高到低)运算符的结合方向规则单目运算符的结合方向都是“从右向左”!、~、++、--、+(正号)、-(负号)*(指针运算符)、&(地址运算符)sizeof、(type)赋值运算符的结合方向是“从右向左”三目运算符的结合方向是“从右向左”唯一的三目运算符:条件运算符?:其他运算符的结合方向都是“从左向右”1.自增、自减运算符形式++i,--i 使用i之前,先使i的值加/减1i++,
i--
使用i之后,再使i的值加/减1说明++i和--i的值是加/减1之后i的值i++和i--的值是加/减1之前i的值++和--只能用于变量,不能用于常量和表达式++和--的结合方向是“自右向左”自增、自减运算符举例inti=3,j,a,b=1,c=2;j=++i;
/*i=i+1,j=i,i=4,j=4*/j=i++;
/*j=i,i=i+1,i=5,j=4*/j=-i++; /*-(i++),i=6,j=-5*/j=i++*2;
/*(i++)*2,i=7,j=12*/a=(b+c)++;
/*非法!!!
*/a=34++;
/*非法!!!
*/2.逗号运算符逗号运算符,exp1,exp2逗号运算符的优先级最低,“自左向右”结合逗号表达式的值是exp2的值exp1和exp2都可以又是“逗号表达式”把多个表达式组合成一个表达式使用举例x=(a=3,6*a)
/*a=3,x=18*/x=a=3,6*a
/*a=3,x=3*/在书写C表达式时必须注意与通常数学表达式的区别:
1.所有字符必须写在一条水平线上,上角标下角标分数线等。
2.a×b、ab、a·ba*b3.除了下标使用方括号以外,其他括号必须用圆括号。
4.a<y<b (a<y)&&(y<b)5.由两个(或以上)字符构成的运算符,中间不许夹有空格等分隔符。
6.适当加括号是好习惯。3.2.2表达式的计算表达式的计算顺序是不确定的。大致遵循如下规则:1.先计算优先级高的运算符规定的运算。2.若两个运算符同级且相邻,则应按运算符结合律的规定从左向右或从右向左计算。我们已经学习了: 算术运算符(+、-、*、/、%)、 关系运算符(<、>、<=、>=)、 判等运算符(==、!=)、 逻辑运算符(!、&&、||)、 求变量指针运算符(&)。算术2.关系、判等3.逻辑
算术表达式的优先级高于关系表达式,关系表达式的优先级高于判等表达式,判等表达式的优先级高于逻辑表达式。在算术表达式中, 乘法运算(*、/、%)高于加法运算(+、-)在逻辑表达式中,
非运算(!)优先级最高, 与运算(&&)其次,
或运算(||)优先级最低。
高低布尔型结果运算布尔型结果运算算术型结果运算在关系、判等表达式中,优先级相等例子——:短路表达式a.设
intu=20、v=30、w=40、x=20、y=50计算如下算式:
u+20>v||w==0||x<y||v+w/3>x||x+y>u+v+w当计算出u+20>v的值为true后,整个表达式为真。b.设
intn=3,m=6;if(n>4&&m++<10)n=3>4为false,所以,整个表达式为假。逻辑表达式随堂练
例1:名称预测正确性逻辑表达式
有人在赛前预测A、B、C、D、E、F六名选手在百科知识大赛中会按照顺序分获第一到第六名,结果证实这个人猜对了三个人的名次。例2:谁在哪一排全班同学排成六排,A、B、C、D、E、F六名分站第一排到第六排,已知A不在第一排,A和B前后相邻,C在D前面,E在B前两排,C在F后四排。问A、B、C、D、E、F六名同学各在哪一排。3.3语句程序对数据的操作,表示为语句(statement)。
空语句;表达式语句(cf.表达式)返回语句returnbreak语句continue语句goto语句复合语句
{…}
if语句分支语句
switch语句
do语句重复性语句
while语句
for语句简单语句结构语句语句cf.表达式表达式语句x=a+bx=a+b;3.4赋值 最基本的操作——带赋值运算符的表达式语句。一般形式:v=e;
其中:
=是赋值运算符。v—左值(变量),作为赋值运算符左端的运算分量。e—右值是一个表达式,作为赋值运算符右端的运算分量,能计算出一个值。下述语句正确:
firstnumber=1;circumference=2*pi*radius;nextnumber=nextnumber+1;下述形式错误:
1=firstnumber;
tength*width=area;3.5类型转换 各种不同类型变量是有区别的。对 联合运算、参数结合参数类型需转换。 在C中进行混合运算遵循一个隐式转换规则。除此之外,C还提供显式强制类型转换运算。
双、三目运算隐式转换规则: 向类型高的运算分量转换,短→长、整数→浮点、有符号→无符号。longdouble↑double↑float↑unsignedlonglong↑longlong↑unsignedlong↑long↑unsignedint←unsignedchar、unsignedshort↑int←char、short
横向的箭头表示向左转换。
纵向箭头表示向上转换。强制类型转换 形式——(类型名) 该运算把右侧的运算分量强制转换为括号内的类型。比如:(char)(‘A’+’0’)char类型的小写’q’(int)5.2/2int类型的2 (float)5/2float类型的2.5使用强制类型转换要注意:
1.类型名必须用括号括上;
2.熟练使用括号,eg.
若把(char)(‘A’+’0’)写成(char)‘A’+’0’,则得int类型的113。floatx=2.8,y=3.7,z;inta,b,c,d=5,e=2;a=(int)x+y; /*a=5,2+3.7=>5*/b=(int)(x+y); /*b=6,(int)(6.5)*/c=(int)x;printf("x=%f,c=%d\n",x,c);
/*x=2.800000,c=2*/z=(float)d/e;
/*z=2.5*/例子3.6基本输入输出头文件#include<stdio.h>输入输出函数字符输出函数 putchar字符输入函数
getchar格式输出函数 printf格式输入函数
scanf字符串输出函数 puts字符串输入函数 gets3.6.1getchar、putchar
1.getchar函数说明intgetchar(void);从标准输入设备输入一个字符需要输入回车后,函数才返回参数说明无参数返回值若成功,返回输入字符的ASCII码值若失败,返回EOF(EndofFile)2.putchar函数说明——
intputchar(intc);输出一个字符到标准输出设备
返回值——若成功,返回输出字符的ASCII码值若失败,返回EOF(EndofFile)getchar函数举例intc;c=getchar(); /*输入'a'后回车*/putchar(c); /*输出?*/c=getchar(); /*是否需要输入?
*/printf("c=%d\n",c); /*输出c=?*/c=getchar(); /*输入'abcd'后回车*/putchar(c); /*输出?*/putchar(getchar()); /*输出?*/putchar函数举例intc,i;putchar('a'); /*输出'a'*/putchar('\n'); /*输出换行符*/putchar(101); /*输出'e'*/putchar('\101'); /*输出'A'*/3.7.3格式输入 标准函数scanf是C提供的格式输入函数,调用它的一般格式是:scanf(<格式控制>,<输入列表>)
注:输入字符存放于键盘缓冲区内,输入以回车结束输入列表输入列表由逗号“,”分隔开的若干输入表项组成;每个输入表项是一个变量的指针(变量的地址)。运算符“&”是求变量指针的运算。所以输入列表一般应该有形式
&v1,&v2,&v3,…,&vn其中v1,v2,…,vn是n个变量。格式控制格式控制是一个常量字符串。其中含有各种以百分号开始的格式控制符,下表列出常用的scanf函数格式控制符。例:“%d%c%f%d”键盘上输入数据为
1234123e+2987函数调用
scanf(“%d%c%f%d”,&i,&ch,&v,&k)结果:变量i——整型1234;
ch——字符型空格(ASCII码32);
v——浮点型12300;
k——整型987。函数scanf举例inti,j;charc;scanf("%d%d",&i,&j);/*"23"or"2<TAB>3"or"2<Enter>3"*/scanf("i=%d,j=%d",&i,&j);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子宫动脉栓塞介入治疗
- 打印与艺术品创作的数字创新与展望考核试卷
- 摩托车的品质与销售价格考核试卷
- 合成材料制造对于化学工业的改进与创新考核试卷
- 创业空间激发创新创业潜力考核试卷
- 店铺转让合同模板(一)
- 交警个人总结
- 清理垃圾施工合同范例
- 灯品合同范例
- 特殊教具采购合同范例
- 《公共科目》军队文职考试试题及解答参考(2024年)
- 2024年秋季新人教版七年级上册英语全册教案设计
- 法律服务投标方案(技术方案)
- 2024年人教版七年级上册历史第三单元综合检测试卷及答案
- 2024年江苏省高中学业水平合格性考试数学试卷试题(答案详解1)
- DZ∕T 0148-2014 水文水井地质钻探规程(正式版)
- 创建五星级班组PPT课件
- TBJWA001-2021健康直饮水水质标准
- 监理日报模板
- 社区卫生服务中心创建汇报材料
- 社会工作评估
评论
0/150
提交评论