当前位置:文档之家› C语言中《赋值运算》

C语言中《赋值运算》

3.1复合赋值运算算术运算符―+ —* / %‖和赋值运算符―=‖结合起来,形成复合赋值运算符。

如下所示:+=:加赋值运算符。

如a+=3+1,等价于a=a+(3+1)。

-=:减赋值运算符。

如a-=3+1,等价于a=a-(3+1)。

*=:乘赋值运算符。

如a*=3+1,等价于a=a*(3+1)。

/= :除赋值运算符。

如a/=3+1,等价于a=a/(3+1)。

%= :取余赋值运算符。

如a%=3+1,等价于a=a%(3+1)。

复合赋值运算符的作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,然后再将最终结果赋予左边的变量。

所以复合运算要注意:一、是复合运算符左边必须是变量;二、是复合运算符右边的表达式计算完成后才参与复合赋值运算。

复合运算符常用于某个变量自身的变化,尤其当左边的变量名很长时,使用复合运算符书写更方便。

Eg 1:赋值运算符的演示:#include <stdio.h>void main(){int nA=10;int nB=10;printf("%d\t",nA+=nA-=nA*nA);printf("%d ",nB+=nB-=nB*=nB);}运行结果:-180 03.2自增自减运算自增运算符和自减运算符自增和自减运算符是C++语言所特有的,主要用于给一个变量加1或减1。

自增和自减运算符及其功能如下:+ +:自增运算符。

如a++; ++a;都等价于a=a+1。

- -:自减运算符。

如a- -; - -a;都等价于a=a-1。

自增运算符和自减运算符可以放到变量前面(前置方式)或者后面(后置方式),这两种方式同样实现了变量的自增或自减运算。

但是当变量的自增运算或者自减运算同其它运算符配合构成一个表达式时,前置运算时变量先做自增或自减运算,再将变化后的变量值参加表达式中的其它运算。

后置运算时变量在参加表达式中的其它运算之后,再做自增或自减运算。

Eg 2:前置与后置运算符的区别:#include <stdio.h>void main(){int nNum1,nNum2;nNum1=nNum2 = 5;printf("\nPost Pre");printf("\n%d %d",nNum1--,--nNum2);printf("\n%d %d",nNum1--,--nNum2);printf("\n%d %d",nNum1--,--nNum2);printf("\n%d %d",nNum1--,--nNum2);printf("\n%d %d\n",nNum1--,--nNum2);}运行结果:Post Pre5 44 33 22 11 03.3顺序程序设计举例使用计算机解决问题,首先要求把问题描述清楚,需要作什么工作,先作什么,再作什么,达到什么条件后,就表示完成;然后,再把这些步骤编程成计算程序,让计算机来实现。

问题的解决步骤叫作算法,算法这一词最早主要是指解决纯数学计算问题,现在可以指解决有关信息处理一切问题的方法与步骤。

当然,对于计算机用户而言最关心的是程序的输入和输出,算法是程序员要操心的。

每一个固定的算法有满足两个要求:第一,有序性,算法是一组有序的操作步骤的组合,不同的执行顺序会有不同的结果。

第二,有穷性,一个算法只能有一个输入,一个输出,输入的条件经过有穷的步骤的后,可以得到一个输出结果,不可能无穷无尽的作个没完。

依据算法,可用计算机语言编写相对应的程序,如果算法中的每一步都是“直线”的执行,没有分支,那么这样编写的程序就是顺序结构的程序,顺序程序是最简单程序结构,也是一些程序的基础。

3.4应用举例Eg 3:已知三角形三边,求三角形面积。

分析:这里已知三角形三边a,b,c ,使用了 求面积的海伦公式:))()((2c S b S a S S A cb a S ---=++=Eg 4:两数求和程序:运行结果:Sum: 10 + 24 = 34分析:第4句定义了nNum1,nNum2,nSum 是三个整型变量,int 是整型标识符;第8句printf 一共有四个参数,其中第一个字符串中含有格式说明,第一个参数以后的所有参数,都是参数列表。

%d 表示输入时,取对应参数表中变量的值,它是格式说明符。

#include <stdio.h> void main() {int nNum1,nNum2,nSum;nNum1=10; nNum2=24;nSum= nNum1 + nNum2printf(‖sum: %d + %d = %d \n",nNum1,nNum2,nSum); }#include <stdio.h> #include <math.h> void main() { double dbA = 3.0; double dbB = 4.0; double dbC = 5.0;double dbS = (dbA + dbB + dbC ) / 2;double dbArea = sqrt(dbS*(dbS –dbA)*(dbS –dbB)*(dbS – dbC)); printf(―三角形的面积是:%lf\n‖,dbArea);}4.1分支语句分支结构程序是根据给定的条件来判断执行何种操作。

C++语言中提供了if 语句来实现这个功能。

格式:if(条件){语句组1; }else {语句组 2;}◆ if◆ 使用{ }把一些语句包括起来,这叫作复合语句。

◆在{}括号中,可定义变量写C++语句,但它作为一个分支的整体执行或不执行。

◆ 如果语句组中只有一个条语句也可以不用{}括号,不写成复合语句,但为了程序清晰化,还是提倡使用复合语句。

Eg 1:输入两个整数,判断第一个整数是否可整除第二个整数。

分析:判断是否可整除,可以使用判断其相除的余数是否为零作为条件,注意,这里==与=不同,==是表示判断两个数是否相等,而=是一个赋值运算符,这是程序很容易写错的地方。

if 语句也可以只有一个分支。

Eg 2:输入两个整数,按由大到小排序输出。

这个问题的算法是: 输入两个整数nA ,nB,如果 nA < nB , 则交换nA ,nB ,再输出nA ,#include <stdio.h> void main() {int nA = 0,nB = 0;printf("请输入两个整数:\n " );scanf("%d,%d",&nA,&nB); if( nA % nB == 0 ) {printf("%d 不可以整除%d\n",nA,nB); }else {printf("%d 不可以整除%d\n",nA,nB); } }nB#include <stdio.h>void main(){int nA,nB;printf("请输入两个整数:\n");scanf("%d,%d",&nA,&nB);if(nA < nB ){int nT = nA;nA = nB;nB = nT;}printf("%d,%d",nA,nB);}分析:当nA<nB条件不成立时,那么程序流程就不执行交换两个变量的操作。

直接执行printf语句。

反映在流程图上,就是直接画一条流程线。

Eg3: 输入一个成绩,然后根据分数段,输出其相应的等级:[100,90] 优[80,89] 良[70,79] 中[60,69] 极格[0,59] 不级格#include <stdio.h>void main(){double dbScore;scanf("%lf",&dbScore);if(dbScore < 60 ){printf("不级格!\n");}else if(dbScore < 70 ){printf("合格!\n");}else if(dbScore < 80 )} else { }4.2条件表达式和逻辑表达式if 语句条件里面填写的表达式,是条件表达式,而多个条件表达式,又可以组合成逻辑表达式。

C++语言提供了以下关系运算符:关系运算符是执行一种形式的运算,这个运算的结果是一个逻辑值,逻辑值只有真和假两种情况,C++用0表示假,用1(或其它非0的整数)表示真。

Eg 3:关系运算:#include <stdio.h>void main(){ int nA = 3;int nB = 5;printf("%d,%d,%d,%d,%d\n", nA<nB, nA<=nB,nA > nB,nA==nA,nA != nB);}运行结果:1,1,0,1,1多个关系表达式可以组合成逻辑表达式,逻辑运算符仅有三种个:例如: nA =3,nB = 9,nC = 10,nD = 20,那么:1) 表示nX 既大于nA又小于nB ,那么逻辑表达式可写成:(nX > nA && nX < nB)注意:C++语言中,不支持nA < nX < nB 这样的写法。

这里只有当nX > nA和nX < nB两个分支同时都成立时,这个表达式才为真。

2) 表示nX 或者在nA到nB之间,或者在nC到nD之间,可表示为:(( nX > nA && nX < nB ) || (nX > nC && nX < nD))当组合表达式时,运算符间具有默认的优先运算级别。

C++的运算优先级为:() → ! →算术运算(+,-,*,/)→关系运算(>,<,!=,…) → &&→ ||如果要改变原有优先级,需要加括号,因为括号的优先级是最高的。

一般在复杂的表达式中,提倡加上括号以示清晰。

4.3应用程序举例Eg 4:求三个数中的最大数。

分析:如果有a,b,c三个数,可以先找出前两个数的最大数,再同第三个数比较。

流程图如下图:#include <stdio.h>void main(){printf("请输入三个整数: ");int nA,nB,nC,nMax;scanf("%d,%d,%d",&nA,&nB,&nC);if(nA > nB ){nMax = nA;}else{ nMax = nB; }if( nMax < nC ){nMax = nC;}printf("最大的数是:%d\n",nMax);}Eg 5:从键盘输入一个字母,如果是大写字母,就用小写字母输出,如果是小字母就用大写输入,如果不是字母,就提示‖不能处理!‖。

相关主题