++/--运算符(精选12篇)
++/--运算符 篇1
1 表达式的概念
表达式是Visual Fox Pro命令和函数的重要组成部分, 是由常量、变量、函数用运算符连接而成的有意义的式子。
2 各种运算符及相关表达式
2.1 算术运算符
算术运算符用于进行算术运算, 连接起来的表达式称为算术表达式, 结果是一个数值。如下:
2.2 字符运算符
用于字符串连接运算, 结果是一个新的字符串, 如下:
2.3 日期运算符
用于进行日期运算, 如下
2.4 关系运算符
用于进行关系运算, 结果是逻辑值, 如下:
2.5 逻辑运算符
用于作表达式之间的逻辑运算, 参加运算的表达式应有逻辑值。运算的结果是逻辑值, , 如下表:
比较运算符
逻辑运算符的优先级:逻辑非→逻辑与→逻辑或
逻辑运算真值
3 设计表达式
3.1 运算符的优先级
一个表达式中可以有多种运算符。Visual Fox Pro默认算术运算符和字符运算符的优先级高于关系运算符, 关系运算符的优先级高于逻辑运算符。例:3* (21-4) >9+15/5 AND“abck”=”abc”, 先算算术运算, 式子变为51>12 AND“abck”=”abc”, 再算比较运算, 式子变为.T.AND.T., 最后算逻辑运算, 运算结果为.T.。
3.2 括号
在Visual Fox Pro的表达式中, 可以使用括号改变运处的先后次序。括号只能使用圆括号 () , 且括号可以嵌套, 即括号内可以再用圆括号。如果表达式含有括号, 就先算括号内的。越是内层的括号, 其优先级越高。例如, 表达式100- (5* (2+3) -15) /5中有括号, 运算时先计算最里层的括号 (2+3) , 再计算外层的括号, 这与数学上的运算顺序是一致的。
3.3 数据类型匹配问题
在数值型表达式、字符型表达式和逻辑型表达中, 运算符两边的数据类型必须一致。如果运算符两边的数据类型不相同, Visual Fox Pro将显示出错信息。例如, 执行命令:?“李明的英语成绩是”=100Visual Fox Pro将显示出错信息。出现错误的原因是运算符“+”两边的数据类型不相同。一个字符型数据与一个数值数据是不能组成表达式的。
总之, 在使用Visual Fox Pro中的表达式时, 一是要注意不同类型运算符的优先级;二是注意相同类型运算符的优先级;三是要注意表达式中数据类型的匹配。最后还应经过大量的上机调试练习, 才能做到游刃有余。
参考文献
[1]周察金.数据库应用基础——Visual FoxPro[M].北京:高等教育出版社.2006.
++/--运算符 篇2
总结:1.关系运算符优于逻辑运算符
2.移位运算符介于算术运算符和比较运算符之间
3.除单目运算符外,算术运算符的优先级最高
***结合方向自右向左的只有三类:赋值、单目和三目,其它的都是从左至右结合单目运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 逻辑运算符 > 条件运算符 > 赋值运算符 > 逗号运算符
单目运算符:!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符;
算数运算符:*, /, %, +,-;
移位运算符:<<左移运算符,>>右移运算符;
关系运算符:<、<=、>、>=关系运算符; ==等于运算符,!=不等于运算符;
逻辑运算符:&按位与运算符,^按位异或运算符,|按位或运算符,&&逻辑与运算符,||逻辑或运算符;
条件运算符:? :
赋值运算符:=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=赋值运算符;
++/--运算符 篇3
【关键词】直观、算理、算法、运算依据
【分类号】G633.6
一、缘由
刚刚参加完区里组织的学科素质大赛课堂环节,抽课讲了一节人教版三年级下册《两位数乘两位数笔算乘法》课。根据教材内容,研究:“一套书有12本,每本24元,一共要付多少钱?”“24×12”的计算方法。教师提供每张表示每本书价格是24元的12张长方形卡片。
学生思维非常活跃,通过摆一摆、算一算的方法找到了“可以先求10个24再加2个24”等的口算、竖式多种方法。其间,还有学生指出“可以把12个24平均分成2份,每份是6个24,两边一样多,是24×6的2倍,就是24×12=24×6×2=288”的巧妙算法。
我窃喜,学生结合直观图形,不但理解了算理,掌握了计算方法,还能从乘法意义的本质出发,无意识地采用四年级才要学习的乘法分配律、结合律两种方式来解释解答。
今天在班内处理四年级“72×125用简便方法计算”练习题,本以为小学数学五大基本运算定律及应用定律进行简算的知识学生已经学过,加之昨天课堂的欣喜,问题解决应该不会困难,但没想到仍有部分学生出现解题疑难现象。
二、前期课堂简算教学回顾
根据教材44页情境内容,采取:先复习乘法运算定律及连除的简便运算,进行12=4×(),25=100÷()等的专项练习;明确“一打”的意思;笔算12×25的积;完成书上例题中的填空;比较两种简便算法的正确性;针对“为什么可以这样算”展开讨论,从而使学生发现、总结解题方法的大致流程。
三、反思
同样两节有关乘法的计算课,一道笔算研究,一道简算研究,课堂教学效果却出现如此反差,原因何在?在运算教学中,学生运算能力的培养核心是什么?我们应该怎样帮助学生理解算理,掌握算法?运算教学还应注意些什么问题?带着这些思考,再次走进课堂。
四、调整方案,再次研究
仍然从昨天的研究问题入手,要求不用竖式计算出结果,写出计算过程,说明理由。学生有了长方形卡片“书价”的形象依托,思维异常活跃起来,很快用乘法分配律及结合律两种方式得出结论,解题呈现过程也比三年级学生更丰富。我把24改成25,要求抛开学具,想象分摆过程,再计算。除仍有部分学生理解表象成是求“12个25相加的和是多少”外,有学生变换成点子图从不同理解角度说明解题思路:“25×12单从算式上还可以看成是25个12, 5个12是60,25个12里面有5个这样的5个12,所以25×12 =5×(5×12)=300”。
再进行“72×125简算”时,学生已没有太多困难,分摆过程不但能在头脑中呈现表述出来,而且还发现:一道简算题如有多种简算方法,选择哪种更简便,要视试题而定。
五、启示
《数学课程标准(2011年版)》指出:“运算能力主要是指能够根据法则和运算律正确地进行运算的能力。培养运算能力有助于学生理解运算的算理,寻求合理简洁的运算途径解决问题。”其刻画了三个主要表现特征:正确运算、理解算理、方法合理。也就是说,运算要“有根有据地正确运算”,才能“促进理解与应用”。
基于以上认识,结合以上运算教学课例,浅谈一下自己新的启示与认识。
1.“烧全鱼”还是“烤中段”
现在课程主张“烧全鱼”,而在现实教学中我们不时的遭遇“烧全鱼”的尴尬。比较“笔算乘法”与“简算教学”两节課,两节同样都是以现实问题情境为着力点的研究内容,“笔算乘法”情境内容单一,针对性强,而“简算教学”情境内容却较之丰富。纠其课堂教学效果反差原因之一,“简算教学”为兼顾“全鱼”,却忽略了“中段”教学重点的充分设计。再次研究时,有意侧重了动手实践、体验与感受,使学生切切实实地走进了问题,经历了知识形成的过程。由此看来,不管是选择“烧全鱼”还是“烤中段”,都要“适合“,只要有利于学生理解与掌握就都是好方法。因此,问题情境有与无,内容多与少,都要视具体问题而定。
2. 在直观教学中理解算理,掌握算法
一直以来,很多人认为运算教学没有什么道理可讲,只要学生把法则牢记于心,反复“演练”就可以达到正确、熟练的要求。殊不知,算理与算法可谓是运算能力的一体两翼。不掌握算法就无法确保运算的“正确”;只知道怎么算,不知道为什么这样算,就不敢保证运算能力的灵活应用。现在运算教学淡化程式化地叙述算理和计算法则,重在经历、形成计算方法的过程,即既要使学生知道怎么算,又要使学生知道为什么这样算。就以上课例我最大的收获莫过于借助直观图示,在直观教学中让学生理解算理,掌握算法,提高运算能力的感触。
《数学课程标准(2011年版)》指出:“借助几何直观可以把复杂的数学问题变得简明、形象,有助于探索解决问题的思路,预测结果”。由此,就运算教学而言,我认为,直观教学——就是要把抽象的算理具体化、形象化,使学生在具体的直观图示中理解算理,掌握算法。
在《两位数乘两位数笔算乘法》中,“直观教学”教学在促进学生理解算理与掌握方法中可谓功不可没。
如第一个教学环节:
“把12个24平均分成2份,每份是6个24,两边一样多,是24×6的2倍,就是24×12=24×6×2=288”。多么具体、直观、形象、简明的描述,这样的计算方法学生理解还有困难吗?!
再看第二个教学环节:endprint
由算法多样化优化得出:“把12个24拆分成10个24再加2个24的和”的方法计算最简便。重点建立联系,理解算理。结合“口算、竖式和直观图”,教师提问“48、“240”和“288”各表示什么意思?它们分别是指图示中的哪一部分?这一过程实际在直观图示、建立联系中把抽象的算理和具体的计算方法有机地融合在了一起,既在促进学生理解算理,也在帮助学生掌握计算方法。这就是“直观教学”在算理中具体化和形象化的具体体现。
这节课在研究过程中用时有些长,但我认为,它远比直接告诉学生具体的计算方法要厚重得多。曹培英老师在《“数学课程标准”核心词的实践解读之六——运算能力》一文中谈到:有文章披露,2009年对三年级学生的测试中有如下试题,全国常模抽样测试中随机抽取1664份样本的得分率只有43.09%。如图,在34×12的竖式中,箭头所指的这一步表示的是( )。A.10个34的和;B.12个34的和;C.1个34的和;D.2个34的和。
我想,造成半数以上学生不理解算理的原因,不仅在于算法多样化在其中的过多干扰,还有就是我们是否让每一个学生都真正理解了这一步计算的含义?有教育者指出:“通过观察去认识与通过体验去认识,认识的深度不一样,参与的情感不一样,留下的印象更是不一样”,道理就应该于此吧。
北师大周玉仁教授曾讲:“要让学生做科学,而不是让学生听科学。”把抽象的、枯燥的数学具体化、形象化、生动化,学生才会感到亲切,才会产生趣味性、积极性与主动性;把操作、思维、語言、计算有机结合,才有利于学生理解算理,掌握算法,发展思维,开发智力,培养能力。由此可见,计算教学的价值决不仅仅只是会计算,而是要在计算的过程中激发学生积极主动地探索,创造潜力得以发挥。
3.重视明晰“合理运算途径”的运算依据
《数学课程标准(2011年版)》指出,运算是要“根据法则和运算律正确地运算”,即要“有根有据地正确运算”。也就是说,每一种“合理的运算途径”的背后都有“法则或运算律”的运算原理在支撑,选择何种“合理的运算途径”都要能够用“法则或运算律”的运算原理来得到有根有据的解释或说明。这样才能确保运算正确、理解算理。
在本文中,学生的“合理运算途径”,都能依靠直观图示描述,都能用运算依据——乘法意义内涵来解释。而恰恰就是这一解释,使学生为“合理运算途径”找到了“运算依据”的“家”, 从而也真正理解了算理,为后续很多有关能够用乘法意义来解释的运算教学打下着坚实基础。
本文谈到的课例教学,除乘法意义外,涉及到的乘法分配律和乘法结合律两个运算定律的使用不是属于还未研究范畴,就是属于正在研究内容。限于此,乘法意义做为解题的依据,本身就成了贯穿始终与使之理解的关键和核心。但关于这两个定律的研究,我们往往重视结构和数据的特征,侧重算法掌握,而却容易忽略运用运算本身所蕴藏的内涵来解释。这就往往会造成学生只依靠记忆、模仿来解题,而一旦记忆消退或形式多变,就无能应对。因此,更高层次的思考不是我们培养学生看到算式,先想怎样确定它的结构或数据特征,而是要清楚“我可以”或“为什么”这样做的思考与理由,也就是首先要为每个“合理运算的途径”找到“运算依据”的“家”。例如看到:18×52+48×18这个算式,看到的不应只是它的外在形式——结构和数据特征,而是要思考试题本身所表达的内涵,即是求52个18再加48个18的和这样一种认知。这样,即使学生遗忘了解题模式,也能很快意识到这不就是求“52加48个”也就是(52+48)等于100个18的和吗?由此,简便运算方法不就使学生牢牢的掌握了吗?倒过来,也就是比乘法分配律和结合律基本形式解题难度大的题目,如求98×57或25×24的积,简便计算。如果学生真正理解了乘法意义本身蕴含的含义,看到98×57,就会想到:不就是求“100个57,多加了2个,再减掉2个57的差”吗?对于25×24这种算式,解题的途径不只一种,学生掌握了题意本身所蕴含的含义,无论是拆分——分别相乘再求和的方式,还是“分组”,看它里面包含几个这样的几个几的解题思考,其实质都是立足真正理解乘法意义基础上的解答方式。
综上所述,运算教学,不但要让学生在直观中深刻领悟运算中的算理,掌握算法,学会选择简洁的运算途径,而且还要让每一种“合理的运算途径”都能找到“运算依据”的“家”, 增强能力,这不就是运算教学我们应该注意和力求的着力吗?!
参考文献:
《义务教育数学课程标准2011年版》
《义务教育数学课程标准实验教科书数学四年级下册教师教学用书》
《数学学课程标准解读:“十大核心词”的实践研究》 曹培英
《“数学课程标准”核心词的实践解读之六——运算能力(上)》 曹培英
《数学还是那个数学》 曹培英
《新课程理念下“运算教学”的研讨》 周玉仁
小议二级C语言之逻辑运算符 篇4
1.1 填空
#include
#define N 9
void fun (int a[], int n)
{int i, t, p;
/**********found**********/
p= (n%2==0) ?n/2:n/2+___1___;
for (i=0;i
{
t=a[i];
/**********found**********/
a[i]=a[p+___2___];
/**********found**********/
___3___=t;
}
}
main ()
{int b[N]={1, 2, 3, 4, 5, 6, 7, 8, 9}, i;
printf ("n The original data:n") ;
for (i=0;i
printf ("n") ;
fun (b, N) ;
printf ("n The data after moving:n") ;
for (i=0;i
printf ("n") ;
}
1.2 改错
#include
void fun (float*a, float*b, float*c)
{
/**********found**********/
float*k;
if (*a<*b)
{k=*a;*a=*b;*b=k;}
/**********found**********/
if (*a>*c)
{k=*c;*c=*a;*a=k;}
if (*b<*c)
{k=*b;*b=*c;*c=k;}
}
main ()
{float a, b, c;
p r i n t f ("I n p u t a b c:")
scanf ("%f%f%f", &a, &b, &c) ;
printf ("a=%4.1f, b=%4.1f, c=%4.1fnn", a, b, c) ;
fun (&a, &b, &c) ;
printf ("a=%4.1f, b=%4.1f, c=%4.1fnn", a, b, c) ;
}
1.3 编程
#include
#define N 16
typedef struct
{char num[10];
int s;
}STREC;
int fun (STREC*a, STREC*b)
{
}
main ()
{STREC s[N]={{"GA05", 85}, {"GA03", 76}, {"GA02", 69}, {"GA04", 85},
{"GA01", 91}, {"GA07", 72}, {"GA08", 64}, {"GA06", 87},
{"GA015", 85}, {"GA013", 91}, {"GA012", 64}, {"GA014", 91},
{"GA011", 77}, {"GA017", 64}, {"GA018", 64}, {"GA016", 72}};
STREC h[N];
int i, n;FILE*out;
n=fun (s, h) ;
printf ("The%d highest score:n", n) ;
for (i=0;i
printf ("%s%4dn", h[i].num, h[i].s) printf ("n") ;
out=fopen ("out.dat", "w") ;
}
2 上机操作解析
2.1 填空
(1) 1 (2) i (3) a[p+i]或* (a+p+i)
2.2 改错
(1) float k; (2) if (*a<*c)
2.3 编程
int fun (STREC*a, STREC*b)
{
}
3 知识点详析
逻辑运算符:
逻辑运算符是用来对操作数进行逻辑操作的, 运算结果为逻辑值“真 (1) ”或“假 (0) ”。C语言有3种逻辑运算符。
(1) &&, 逻辑“与”, 即对两个操作数进行求与运算, 如a&&b。只有当两个操作数都是真时, 求与后才是真。否则, 求与后为假。
(2) ||, 逻辑“或”, 即对两个操作数进行求或运算, 如a||b。两个操作数中只要有一个为真, 求或后就为真。只有两个都是假时, 求或后才是假。
(3) !, 逻辑“非”或逻辑“求反”, 对“真”求反后为“假”, 对“假”求反后为“真”。
摘要:全国计算机等级考试是在每年的三月份与九月份举行, 其中作为本科生报考人数最多的就是二级C语言, C语言的上机操作题每年困扰着这无数的大学生们, 二级C语言的上级操作题分为三题, 即填空题, 改错题, 编程题, 总共100分, 本文举例了二级C语言的一些试题加以分析, 并且着重介绍了逻辑运算符。
关键词:全国计算机等级考试,二级C语言,上机操作,逻辑运算符
参考文献
[1]路瑾铭.全国计算机等级考试过关宝典系列——教程 (二级C语言) .2011 (9)
运算符与表达式练习题附答案 篇5
B.+ C.!=
D.?: 2.能正确表示逻辑关系:“a≥10或 a≤0”的C语言表达式是()。A.a>=10 or a<=0 B.a>=10| a<=0 C.a>=10 && a<=0 D.a>=10||a<=0 3.C语言中运算对象必需是整型的运算符是()。(A)+(B)/(C)%(D)* 4.已知int i;float f;正确的表达式是()。A)(int f)%i B)int(f)%i C)int(f % i)D)(int)f % i 5.下列程序的输出结果是()。
void main(){ int a=7,b=5;printf(“%dn”,b=b%a);}(A)0(B)1(C)5(D)不确定值 6.若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为()。(A)1.4(B)1(C)2.0(D)2 7.已知x=4.5,y=2.5,求表达式(x+y)/2+(int)y%(int)x的值()。A)3 B)5 C)3.5 D)5.5 8.已知各变量的类型如下
int i=8,k,a,b;unsigned long w=5;double x=1.42,y=5.2;则以下符合C语言语法的表达式是()。(A)a+=a-=(b=4)*(a=3)(B)a=a*3+2(C)x%(-3)(D)y=float(i)9.已知int a,b;执行语句a=(b=3*2,b*4),a+6;后变量a的值为()。A)6 B)12 C)24 D)30 10.若有以下程序
main(){ int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%dn”,m,i);} 执行后的输出结果是()。(A)8,6(B)8,3(C)6,4(D)7,4 11.设 int i,j=5;执行语句i=(++j)+(++j);后i的值是()。
A)10 B)12 C)13 D)14 12.设int x=10,y,z;执行y=z=x++;x=y==z后,变量x的值是()。
A)0 B)1 C)10 D)11 13.以下程序段的输出是()。main()
{ char x =‘A’ ;
x =(x>=‘A’&& x<=‘Z’)?(x+32): x;printf(“%c”,x); } A)A B)a C)Z D)z 14.若x=3,y=2,z=1,求下列表达式的z值为()。z+=(x (A)1(B)2(C)3(D)4 15、若变量已正确定义,要将 a和b中的数进行交换,下面不正确的语句组是()。(A)s=a;a=b;b=s;(B)a=a+b;b=a-b;a=a-b;(C)s=b;b=a;a=s;(D)a=s;s=b;b=a;16.以下程序的输出结果是()。 main() { int a=4,b=5,c=0,d;d=!a&&!b||!c;printf(“%d\n”,d);}(A)1(B)0(C)非0的数(D)-1 答案: 1、B 2、D 3、C 4、D 5、C 6、B 7、D 8、A 9、C 10、C 11、D 16、A 12、B、B 14、C 一、加法结合律:(a + b) + c = a + (b + c) 例1 计算:(239.78 + 71.23) + 28.77. 先从小括号内算起显然比较麻烦,若先把71.23与28.77结合起来,相加后结果为整数,然后再和第一个数相加,这样就简便多了. 解:原式=239.78 + (71.23 + 28.77) =239.78 + 100 = 339.78. 二、乘法交换律:ab=ba. 例2 计算:420 × 9 × . 因为420 × 可以约分化简,所以应在运算中交换9和的位置. 解:原式= 420 ×× 9 = 60 × 9 = 540. 三、乘法结合律:(ab)c=a(bc) 例3 计算:[25 × (-0.125)] × (-8) 因为(-0.125) × (-8) = 1,所以先把后两个数相乘,再和第一个数相乘,这样更简单. 解:原式= 25 × [(-0.125) × (-8)] = 25 × 1 = 25. 四、乘法分配律:a(b + c) = ab + ac. 例4 计算:8 ×+×-+ . 8与第一个括号内的分数相乘仍会得分数,若8与第二个括号内的分数相乘,结果为整数,因此可先把8与第二个括号内各数相乘. 解:原式=8 ×-+×+ =(5 - 2 + 4) ×+ =7 ×+ =1 + =2. 五、逆用分配律:ab + ac = a(b + c). 1. 直接逆用分配律. 例5 计算:66 × 176 - 66 × 34 - 66 × 42. 按一般计算规则,要先进行3次乘法运算,再进行2次减法运算,共需进行5次运算.注意到式子中有共同因数66,因此,应将分配律反过来应用. 解:原式=66 × (176 - 34 - 42) = 66 × 100 = 6 600. 2. 拆数后逐步逆用分配律. 例6 计算:99 × 99 × 199. 直接计算将会很繁,我们可以把199变成99+100,这样就可以逆用分配律进行计算. 解:原式=99 ×99 + 99 + 100 =99 × (99 + 1) + 100 =99 × 100 + 100 =100 × (99 + 1) =100 × 100 =10 000. 3. 变形后逆用分配律. 例7 计算:13 + 6 ÷ 2 + 1. 先把带分数化成假分数,即将原式变成 + ÷ + ,逆用分配律将前后两个括号内的公因数提取后再计算. 解:原式= +÷+ =125 ×+÷ 25 ×+ =125 ÷ 5 = 25. 六、拆数后应用分配律. 例8 计算:25 ×- 11 ×. 这道题若直接进行计算比较麻烦,但我们发现,24与25相差1,11与12也相差1,因此可以把25拆成24 + 1,把11拆成12-1,这样可以运用分配律,便于约分化简. 解:原式=(24 + 1) ×- (12 - 1) × =23 +- 11 + =13. 七、添数后应用分配律. 例9 计算 ++++ . 此题可以按常规方法通分进行计算,但这样做比较复杂,我们可以取各分母的最小公倍数60来乘各个数,所得结果再除以60即可. 解:原式=++++ × 60 ÷ 60 =(20 + 10 + 6 + 5 + 4) ÷ 60 =. 八、引申后应用分配律. 例10 计算:÷+++++ +++ + ÷ . 因为前后两部分互为倒数,所以我们只需计算出后半部分的结果即可. 解: ++++÷ = ++++× 60 = 45. 故 ÷++++= . 原式 = + 45 = 45. 九、分配律正、逆同用. 例11 计算: - +-× 12 ×- 3 × 1 + 4 × 1. 12 ×-3 × 1 + 4 × 1可变形为12 ×-12 ×+ 12 × ,我们发现,可以逆用分配律,得12 ×-+ = 12,然后再用12乘前面括号内各数,正用分配律. 解:原式=- +-× 12 ×- 12 ×+ 12 × =- +-× 12 ×-+ =- +-× 12 =-5 + 2 - 9 = -12. 多态性是面向对象程序设计的重要特征之一, 它与封装性和继承性共同组成面向对象的程序设计的三大基本特征, 在函数重载中, 同一个函数名可对应若干种不同的实现, 依据函数参数的类型、个数和顺序来确定某个实现。在运算符重载中, 同一个运算符对应着很多种功能, 这些功能是通过函数来定义的, 依据操作数的类型来确定应选运算符的功能。我们接触的还有另一种是指同样的消息被不同类的对象接受时产生完全不同的实现, 该情况大多产生在多类继承中不同类中的相同说明的成员函数的多态行为。其中多态性分为专用多态和通用多态, 专用多态分为强制多态和重载多态;通用多态分为参数多态和包含多态。其中重载是实现C++多态性的一种十分重要的机制, 成为重载多态, 即为程序正文中相同作用域内的同一个标识符赋予不同的操作语义, 实质上就是实现了程序空间到代码空间的一对多映射。 1 函数重载 简单地说函数重载就是赋给同一个函数名多个含义。在我们学的C++中函数重载分为普通函数的重载和成员函数的重载, 也就是说我们所学的函数重载可以以两种不同的方式来实现, 就是我们所说的普通函数的重载和成员函数的重载。 1.1 普通函数的重载 例1: 运行的结果:1.2, 3.2 上一例题中, 两个函数都是普通的函数重载, 由于主函数中调用的两个函数对应的参数个数不同, 所以通过形参和实参的结合, 我们得到了运行的结果。 1.2 成员函数的重载 例2: 运行结果为:Default Constructing 0 Constructing 3 这是一个很常见的习题, 该函数调用了构造函数的两种形式, 有参和无参, 对应于主函数中带有不同形式参数的函数, 我们得到不同的结果。 2 运算符重载 运算符重载就是就是赋予已有的运算符多重含义, 即多种功能。C++语言中通过重新定义运算符, 使它能够用于特定类的对象执行的特定的功能。一般情况下运算符重载有两种形式, 重载为类的成员函数和重载为有元函数两种。 2.1 重载为类的成员函数 例1: 2.2 重载为有元函数 执行的结果同例1, 两种运算符比较, 我们知道单目运算符最好被重载为成员函数, 双目运算符最好被重载为有元函数。 3 结论 以上我们总结了函数重载和运算符重载的区别和特点。众所周知, 重载是为了以不同的方式来实现函数, 我们如果熟练的应用这门技术, 可以提高程序的运行效率和可读性, 通过学习, 使我们更透彻地理解了C++的多态性问题。 参考文献 [1]谭浩强.C语言程序设计[M].3版.北京:清华大学出版社, 2005, 8. [2]吕凤翥.C++语言基础教程[M].2版.清华大学出版社, 2007, 2. 1.1 填空题 1.2 改错题 1.3 编程题 2 上机操作题答案 2.1 填空题 (1) s[i] (2) ‘9’ (3) *t=n 2.2 改错题 (1) t=*x;*x=y; (2) return (t) ;或return t; 2.3 编程题 3 知识点详析 类型转换的规则: 如果赋值运算符两边的数据类型不相同, 系统将自动进行类型转换, 即把赋值号右边的类型换成左边的类型。具体规则如下: (1) 实型赋予整型, 舍去小数部分。 (2) 整形赋予实型, 数值不变, 但以浮点形式存放, 即增加小数部分 (小数部分的值为0) 。 (3) 字符型赋予整型, 由于字符型为1个字节, 而整形为2个字符, 故将字符的ASCII码值放到整型量的低8位中, 高8位为0。整型赋予字符型, 只把低8位赋予字符量。 参考文献 [1]路瑾铭.全国计算机等级考试过关宝典系列——教程 (二级C语言) .2011 (9) 1 非数值处理问题中运算符重载问题的提出 在利用C++开发非数值处理问题的软件过程中,数据类型的定义及对数据的处理可以在不同的类中实现。为了便于叙述,在本文中分别称呼它们为数据类和数据处理类。 在数据处理类中,我们往往会对数据进行抽象,将侧重点放在数据的逻辑结构和存储结构的选择上,进而按照结构化、模块化以及面向对象的程序设计方法设计出比较满意的算法(程序)。我们所关注的是在算法实现过程中如何体现出数据之间的关系(逻辑结构),而并不关心数据本身究竟是什么情况,比如在程序设计过程中会使用ElemType之类的标识符来表示数据的类型,在程序开始部分使用C++语言中的typedef语句将ElemType定义为实际的数据类型。 由于数据处理类并不关心数据的类型,所以在算法中会将其作为简单类型处理,大胆使用输入/输出、算术、关系、赋值等运算符,至于运算符的重载问题会抛给数据类处理。 2 运算符重载时形式的选择 在C++中,只有类的成员函数和类的友元函数才能够访问类的私有数据成员,因此只有将运算符重载为数据类的成员函数或是友元函数时,才能使被重载的运算符应用于新的数据类型。在对某个运算符进行重载时,究竟是将其重载为成员函数还是友元函数,是我们首先要弄清楚的问题。 2.1 只能重载为成员函数的运算符 C++要求,像赋值“=”、下标“[]”、调用“()”、以及成员访问箭头“->”等,这些第一个操作数一定是本类对象的运算符,重载时必须被定义为类的成员函数,任何把这些运算符重载为非类成员函数的做法都会产生编译时刻的错误。这样做的原因在于类的所有非静态成员函数都隐含有指向对象自己的this指针(类的友元函数不具有),如果将运算符重载为类的成员函数,则运算符的第一个操作数系统默认就是this对象(本类的对象)。 也正是由于this指针的存在,当运算符被重载为成员函数的形式时,第一个操作数不作为函数参数,这样一来,对于单目运算符可以不写参数,而双目运算符可以只写一个参数,即第二个操作数(或称右操作数)。 运算符重载为成员函数格式如下: <函数返回值类型>operator<运算符名>(<参数表>); 例如有一个表示时间的time类,求将已有时间推后x小时后的时间,重载“+”运算符为time类的成员函数,格式如下: time operator+(int x); 2.2 只能重载为友元函数的运算符 与第1)种情况正好相反,像插入运算符“<<”和提取运算符“>>”等第一个操作数一定不是本类对象的运算符,只能被重载为类的友元函数。比如插入运算符“<<”的第一个操作数cout是系统定义类ostream类的全局对象,提取运算符“>>”的第一个操作数cin是系统定义类istream类的全局对象。 当运算符被重载为友元函数的形式时,函数参数的个数与运算符操作数的个数一致,即单目运算符需要一个参数,而双目运算符需要两个参数。 运算符重载为友元函数格式如下: friend<函数返回值类型>operator<运算符名>(<参数表>); 同样以1)中的time类为例,重载“+”运算符为time类的友元函数,格式如下: firend time operator+(time&t,int x); 2.3 根据应用情况选择重载形式的运算符 分析1)、2)两种情况,之所以某些运算符只能重载为成员函数或是友元函数,是由这些运算符的第一个操作数的类型决定的,第一个操作数一定是本类对象的运算符,重载时必须被定义为类的成员函数,第一个操作数一定不是本类对象的运算符,只能被重载为类的友元函数。如果对运算符的第一个操作数的类型没有限制,那么这个运算符既可以被重载为成员函数,也可以被重载为友元函数。 在具体选择运算符的重载形式时,可以根据应用情况来决定。双目运算符,如算术运算符“+”、“-”,关系运算符“>”、“<”等,有两个操作数,就存在三种情况:两个操作数都为类的对象;第一个操作数为类的对象、第二个操作数为其它数据类型;第一个操作数为其它数据类型、第二个操作数为类的对象。显然,将运算符重载为类的成员函数无法处理第三种情况,而将运算符重载为类的友元函数时三种情况都可以处理。因此,双目运算符最好重载为类的友元函数。单目运算符只有一个操作数,既然是因为被用于新类型而重载,那么这唯一的操作数绝大多数情况下是用户定义类的对象,如果将其重载为类的成员函数,则可以通过this指针自由地访问本类的数据成员,不用设置参数;另外友元的使用会破坏类的封装,因此单目运算符最好重载为类的成员函数。 3 非数值处理问题中C++运算符重载实例 下面我们以编写一个简单的商品库存表管理程序为例,来分析在运算符重载过程中要注意的问题。 3.1 类的设计 我们计划用线性表来管理一个商品库存表,为简单起见,只作如下要求: 1)每个商品记录包含有四项内容:商品代号、商品名称、最低库存量和当前库存量。 2)可对商品库存表进行记录的添加、遍历(显示输出)。 本程序要处理的数据是商品记录,定义一个商品类(goods),专门用于描述商品情况及因商品这一新的类型而引发的操作。 由于采用线性表管理商品库存表,还需定义一个线性表类(List),实现对记录的添加、遍历(显示输出)。 3.2 类的实现 在VC++6.0中,创建一个名为“商品库存表管理程序”控制台应用程序,插入两个普通类:List和goods。 对于goods类,我们很快就确定下来它的四个数据成员: char code[5];//商品代号 char name[15];//商品名称 int minq;//最低库存量 int curq;//当前库存量 List类是非常容易实现的,若线性表采用顺序存储结构,则数据成员即为一个存储线性表元素的数组及一个存储线性表长度的整型变量。按照设计要求,List类只包含初始化(InitList())、插入(InsertList())、遍历(TraverseList())三个操作。 List.h中的主要代码如下: 3.3 程序测试及对运算符重载时要注意的问题 编写一个非常简单的主程序main.cpp来测试我们所设计的类,代码如下: 程序运行结果如图1所示。 从运行结果显示,我们所编写的程序实现了设计要求,当然这个程序的功能与现实中的要求相差甚远,至少商品库存表应该保存在文件中,限于篇幅,这里不再讨论。 在以上的实例中,我们重载了四个运算符,从goods.h和goods.cpp中,我们可以清楚地看出将运算符重载为类的成员函数和友元函数在声明及实现时的格式区别,这是我们在编程时要注意的问题之一。另外,当友元函数不属于某个类时,它的身份同main()函数一样是全局函数,放置位置可以很灵活,比如在本实例中,“>>”与“<<”的重载函数可以放置在goods.cpp中,也可以放置在main.cpp或List.cpp中,但是最好根据运算符的操作数的情况放置在相对应的cpp文件中,本实例中,运算符“>>”与“<<”的操作数是goods类型,就把它们的重载函数放置在goods.cpp中。 4 结束语 在非数值处理问题中,由于新的数据类型的出现,运算符重载问题非常普遍,我们只要合理选择运算符重载的形式,正确使用重载格式,就一定能充分发挥运算符重载所带来的编程优势,提高编程的质量。 摘要:在利用C++处理非数值问题中,用户自己定义数据类型的情况比较普遍,以至运算符重载问题非常突出,程序设计者只要合理选择运算符重载的形式,正确使用重载格式,就一定能充分发挥运算符重载所带来的编程优势,提高编程的质量。 关键词:C++,运算符,重载 参考文献 [1]徐孝凯.数据结构使用教程[M].2版.北京:清华大学出版社,2006. [2]李龙澍.C++程序设计[M].北京:清华大学出版社,2003. C语言作为一种计算机高级语言, 既适合编写系统程序又适合编写应用程序, 同时具有汇编语言和高级语言的双重特性, 具有强大的功能, 是当今最受欢迎的计算机语言之一, 已成为大中专院校计算机专业和非计算机专业的必修课程。但是由于C语言的语法多、数据类型结构丰富、表示式类型多样化、程序设计自由度大、源程序书写格式自由等诸多问题, 学习、熟练、掌握、灵活运用C语言并不容易。其中最关键的问题是运算符的使用。本文将对C语言的运算符从定义、使用到注意事项逐一解析。 C语言的运算范围很宽, 具有非常丰富的运算符, 如:自增 (++) 、自减 (--) 、位运算符等, 共有34种运算符。运算符是告诉编译器对运算对象进行某种操作运算的符号。C语言常用的运算符有三类:算术运算符、关系与逻辑运算符、位运算符。除此之外, 还有一些用于完成特种任务的特种运算符, 如:强制类型转换运算符 ( () ) 、条件运算符 (?:) 、赋值运算符、逗号运算符 (, ) 和自增 (++) 、自减 (--) 运算符等。各种运算符的优先级如图1所示。 1 算术运算符和算术表达式 C语言中, 算术运算符用于各类数值运算。基本的算术运算符有+、-、*、/及求余%5种, 其运算规则与代数运算基本相同, 需要说明的是, / (除) 运算中, 其商为整数, 小数部分被舍弃, 例如:5/2=2, 若两个运算对象中至少有一个是实型, 则运算结果为实型, 例如5.0/2=2.5, % (求余) 运算, 要求运算符两侧的操作数均为整型数据才有意义, 否则出错, 结果是整除后的余数。 1.1 算术运算符的优先级运算规则 按先乘除后加减的运算符的优先级次序执行。算术运算符遵循自左向右的左结合性运算规则, 即运算对象先与左边的运算符结合。 1.2 强制类型转换运算符 可以利用强制类型转换运算符“ () ”将一个表达式转换成所需要的类型。一般格式为: (类型名) (表达式) 。在进行强制类型转换时, 类型关键字 (或表达式) 名必须用圆括号括起来, 例如: (int) x不能写成int x, (float) (a+b) 不能写成 (float) a+b。 注意两点:①在强制类型转换时, 原来变量的类型未发生变化;②算术表达式中若含有不同类型数量值的混合运算, 遵循优先级和结合性外, 遵循低精度类型转换为高精度类型自动类型转换规则。如4+3.5结果为7.5。 1.3 自增 (++) 、自减 (--) 运算符 在C语言中有两个很有用的运算符, 就是自增1和自减1运算符“++”和“--”, 运算符“++”是操作数自加1, 而 “--”则是操作数自减1, 即++x等同于x=x+1, --x等同于x=x-1。注意:该运算符只用于变量, 不可用于常量和表达式。 还需特别强调的是, “++”和“--”运算符放在操作数之前和之后的运算的意义不同。例如:i++表示在使用了i之后再使其值加1, ++i则表示在使用i之前先使其值加1, 举例来说, 如x=2;y=++x;此时y=3;若将程序改为x=2;y=x++;则y=2;在这两种情况下, x的值都被置为3, 其区别在于运算的过程控制。 自增自减运算符这种在运算过程中的控制是很有用的, 生成代码块, 目前在C语言中被广泛使用, 已成为C语言的主要风格之一, 选用运算符“++”和“--”来完成增1和减1的运算功能是目前一个很好的选择。 2 关系运算符和关系表达式 关系运算符用于比较运算, 是对两个表达式进行比较, 返回一个真/假值, C语言中关系运算符有6个, 如表1所示。 用关系运算符将C语言的两个表达式 (可以是算术表达式、关系表达式、逻辑表达式、赋值表达式等) 连接起来的式子称为关系表达式, 其形式为:表达式1关系表达式表达式2, 如a+b>c+d, 若表达式成立, 其结果是“逻辑真”用“1”表示, 若表达式不成立, 其结果是“逻辑假”用“0”表示, 关系表达式的结果只能且必为二者之一。 3 逻辑运算符和逻辑表达式 逻辑运算符用于逻辑运算, 即对问题进行逻辑判断, C语言提供三种逻辑运算符, 包括&&逻辑与 (相当于同时And) 、‖逻辑或 (相当于或者Or) 、!逻辑非 (相当于否定Not) 。 用逻辑运算符将1个或多个表达式连接起来进行逻辑运算的式子称为逻辑表达式。逻辑运算结果为一个整数值0或1, 0代表“假”, 非零代表“真”。例如:x=5, 则 (x>=0) && (x<=10) 的值为“真”, (x<=-1) ‖ (x>5) 的值为“假”。其运算规则如表2所示。 注意:在进行逻辑“&&”运算时, 若第一个表达式的值为假, 则第二个表达式不再需要计算, 第二个表达式不参与计算, 且值保持不变, 只有第一个表达式是值为真时, 才要计算第二个表达式的值。同理, 对于“‖”运算, 只要第一个表达式的值为真, 则第二个表达式不再计算, 若第一个表达式的值为假, 才要计算第二个表达式的值。 4 赋值运算符和赋值表达式 C语言的赋值运算符分为简单赋值 (=) 和复合赋值 (+=、-=、*=、/=、%=、&=、︱=、∧=、<<=、>>=) 共11种。 简单赋值表达式的一般形式为:变量=表达式。系统先计算=右边表达式的值, 再将其结果的数据类型转换为左边变量的数据类型, 最后将转换结果赋值给左边变量, 赋值表达式的值是左边变量所得到的值。注意:“=”不同于“==”, “=”表示赋值运算符, “==”表示等号运算符, 它们是两种完全不同的运算符。在有些判断语句中, 用“=”表示比较运算而不是用“==”, 如if (x=4) printf (“yes”) ;else printf (“no”) 。 复合赋值表达式的一般格式为:变量复合赋值运算符表达式, 等价于变量=变量双目运算符表达式。如x+=3等价于x=x+3;y*=x+6等价于y=y* (x+6) 。注意:被赋值的变量必须是单个变量, 且必须在赋值运算符的左边。且赋值是指将赋值运算符右侧的数据存入赋值运算符左侧变量所表示的内存单元中。如x=5表示将常量表达式5放入由变量x表示的存储单元, 即将5赋予x。 C语言允许将赋值运算作为表达式, 且允许出现在其他语句 (如循环语句) 中。复合赋值运算符和赋值表达式及运算规则如表3所示。 5 条件运算符和条件表达式 条件运算符是C语言中唯一一个三目运算符, 用于条件求值。一般格式为:表达式1 表达式2:表达式3, 其含义是, 若表达式1的值为非0, 条件表达式取表达式2的值;若表达式1的值为0, 条件表达式取表达式3的值作为最后的结果。如:7>3 1:-1, 7>3关系运算的结果为1, 故该条件表达式的值为1。 6 逗号运算符和逗号表达式 恰当地使用逗号表达式可以简化程序设计。逗号表达式常用在for语句中, 一般形式为表达式1, 表达式2, ……, 表达式n, 从左至右依次计算表达式的值, 最后“表达式n”的值即为整个逗号表达式的值。例如, 逗号表达式“a=3*5, a*4”的值为60:先求解a=3*5, 得a=15;再求a*4=60, 所以逗号表达式的值为60。 用一个逗号表达式语句可代替多个赋值语句, 如:a=0, b=1, c=2;在语法上作为一条语句, 它相当于下面3条语句:a=0;b=1;c=2;用一个逗号表达式语句可得到多个计算结果, 如:y=10, x= (y=y-5, 60/y) ;执行后, 可同时得到x的值为12, y的值为5.需要注意的是, 逗号运算符不同于逗号分隔符, 如int a=5;printf (“%d, %d, %d”, a, ++a, ++a) ;语句中逗号是分隔符, 分割printf函数的三个参数, printf函数运算规则是从右到左, 最后输出的结果是7, 7, 6, 而不是5, 6, 7。 7 位运算符 C语言为整型数据提供了位运算符, 以字节中的每个二进制位为运算对象, 最终的运算结果还是整型数据。位运算又分为按位逻辑运算和移位运算。 7.1 位逻辑运算 按位逻辑运算符有4种, 如表4所示。参与运算时, 操作数都必须首先转换成二进制数, 然后再执行相应的按位运算。位逻辑运算符的优先级从高到低依次为:按位取反运算符、&运算符、︱运算符、∧运算符。 7.2 位移运算 左移或右移时出现的空位应当补0, 运算规则如表5所示。 8 结束语 C语言中运算符和表达式数量之多, 使得C语言的功能十分完善, 如何正确有效地使用和掌握C语言的运算符和表达式让是许多学习者感到困惑的问题。本文从这些问题出发, 对C语言的运算符和表达式进行了系统的解析, 对容易出现问题的地方进行了强调, 提出了相应的解决方法, 希望对C语言的学习者有所帮助。 参考文献 [1]李铮.C语言程序设计基础与应用[M].北京:清华大学出版社, 2005. [2]何光明.C语言程序设计[M].北京:清华大学出版社, 2007. [3]刘新铭.C语言程序设计教程[M].北京:机械工业出版社, 2006. [4]高福成.C语言程序设计教程[M].北京:清华大学出版社, 2004. [5]伍一.C语言程序设计基础与实训教程[M].北京:清华大学出版社, 2005. 接下来,我们要依次完成:①解交点A,B的坐标以及求弦AB的长;②解弦AB的中点C的坐标;③求线段AB的中垂线PC的方程;④解直线PC与l的交点P的坐标;⑤求线段PC的长;⑥解含k的方程PC=2AB. 小结 ①利用韦达定理,不需要解交点,即很多几何问题可以转化为关于x1+x2,x1x2的方程;②利用椭圆的第二定义推得的焦点弦长公式计算焦点弦长大大减小了运算量;③有些具体的平面三角问题,直接解三角形比解析法更快. 解答完毕,感觉此题缺少点运动变化的味道.下面我们让弦AB动起来,设AB是过椭圆右焦点F、斜率为k的动直线,则弦长AB和线段PC的长随之变化,若设PC=λAB,则λ的值也是变化的,λ的值是否存在最大或最小呢? 这下我们理解了,该题等式“PC=2AB”中的系数为何取“2”?原来我们所计算的问题正好是λ的最小值情形.由此我们不得不感慨命题人的精妙构思和合理设计. 高中教师往往认为运算, 尤其是数值运算, 是学生小学和初中学习的内容, 是学生早就应该掌握的基础知识, 因此在平时的教学中, 容易出现以下误区:一是偏重于解题思路、解题方法的总结和提炼, 弱化了对运算算理、技巧的指导;二是对学生在平时作业或考试中因运算失误而出现的错误, 习惯于冠以“粗心”、“不够仔细”等原因, 没有引起学生对运算的重视;三是在运算问题中更重视含参数的运算, 公式记忆等知识性的问题, 而忽视数值运算问题。 数字之间的换算、估算等运算能力是运算能力中的基础能力, 很多式子的化简变形的技巧方法要依托数值的运算为基础才能实现, 因此, 培养数学运算能力要从培养数值运算能力开始。如何提高学生的数值运算能力? 我就此谈谈感受。 一、端正态度, 认识运算的重要性 要提高学生对运算的重视程度, 一方面, 教师要从自身做起, 在课堂教学和课下的辅导中, 站在学生的角度, 重视数值的运算过程, 学生才会模仿教师的一言一行, 自觉注意数值运算问题。另一方面, 在平时的作业尤其是考试讲评中, 让学生统计因运算错误而引发的失分, 强调“千里之堤毁于蚁穴”, 引起学生的重视。 二、加强指导, 养成运算的好习惯 运算能力的培养需要贯穿于教学过程的始终。例如, 练习课上, 对于一些运算问题, 我会在黑板上的一个专门的区域书写演算过程, 即使是很简单的运算, 也会在运算之后立即检验运算结果的正确性, 并且及时强调这是一种运算的好习惯。慢慢的, 学生就会学着不再只口算不演算, 也慢慢学着验算。 不仅在习惯方面, 在技巧方法方面也要对学生运算加以指导。有的学生对于一些数字比较大的运算有畏难情绪, 一算就错, 所以不喜欢做, 也不愿意做。例如利用导数求y= (482x) 2x (x>0) 的最大值 , 函数解析式展开得到y=4x3-4×48x2+4×242x, 这里我没有求出4×48及4×242, 而是带上这些因数直接求导得到 这里需要求方程y′=0的根, 但是不管是利用求根公式还是十字相乘因式分解, 这个数字都有些大, 注意, 我没有把常数项16×12计算出来, 原因就是为了方便利用十字相乘法分解因式, 只需要把16×12写成4×4×4×3=24×8, 从而导数可以因式分解为 这样, 在提公因数—化简的过程中, 学生不费劲就可以解决看似很困难的运算问题, 计算正确率高。这在一定程度上激发了学生的学习兴趣, 提高了学生的运算能力。 三、强化练习, 提高运算的基本能力 要想提高学生的运算能力, 必须通过大量的练习和反馈。我要求学生熟记常用的勾股数、常用的平方数、2的n次方 (n≤10) 等常见的数值, 便于提高运算速度。经常在作业中布置一些难度不大的运算题, 帮助学生及时复习相关的公式等知识点。根据实际情况, 课前用5分钟的时间做一些针对性检验, 当堂反馈, 也是一种很有效的做法。 运算能力是高中生应具备的各种能力之一, 提高学生的运算能力要从多方面入手, 我仅从教学实例出发, 谈了在教学中有关提高学生数值运算能力的看法和做法, 希望能够和大家分享, 期待各位老师批评指正。 参考文献 [1]蒋佩锦.关于提高运算能力的探索[J].中学教研 (数学) , 2001 (10) :3. [2]孙名符, 刘凯峰.数学计算的教育价值[J].中学教研 (数学) , 2001 (10) :3. 【++/--运算符】推荐阅读: 加法运算定律简便运算01-07 C++运算符重载剖析07-04 自增自减运算符12-07 运算法则07-14 简便运算06-01 运算技巧06-11 代数运算06-16 集合运算06-22 导数运算07-07 线性运算09-06巧用运算律 篇6
++/--运算符 篇7
++/--运算符 篇8
++/--运算符 篇9
C语言中的运算符和表达式解析 篇10
简化运算,适度拓展 篇11
提高运算能力从数值运算开始 篇12