程序设计语言第2章 运算符和表达式_第1页
程序设计语言第2章 运算符和表达式_第2页
程序设计语言第2章 运算符和表达式_第3页
程序设计语言第2章 运算符和表达式_第4页
程序设计语言第2章 运算符和表达式_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章C语言程序的运算符和表达式

C语言程序设计本章介绍算术运算符和算术表达式、赋值运算符和赋值表达式及与赋值相关的运算符(复合的赋值运算符、自增1、自减1运算符)以及其他运算符,从而进一步提高顺序结构程序的设计能力。主要内容

12赋值运算符、复合的赋值运算符3自增1(自减1)运算符、类型转换4算术运算符和算术表达式逗号运算符、容量运算符问题:从键盘输入a、b变量的值,求a/b和a%b的值。例2_1求a/b和a%b的值#include"stdio.h"main(){inta,b;scanf("%d%d",&a,&b);printf("%d\n",a/b);printf("%d\n",a%b);}2.1计算a/b和a%b的值程序运行结果:3

503

运算符与表达式

1.运算符的功能:即它对数据做什么操作2.运算符对运算对象有一定的限制3.表达式值的类型算术运算符有:单目运算符:-(负)、+(正),右结合双目运算符:+、-、*、/(整数相除结果取整)、%(取余)优先级:先乘除(含取余),后加减,括号优先结合性:同级从左至右

a*b/c-1.55+3*2

a/b/c*(3-d)

要求%两侧均为整形数据2.2算术运算符用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。例如:25.0/425/4等于6,25.0/4.0等于6.255/10等于0,5.0/10.0等于0.54%9等于4(%只能对整型数据操作)-15%4等于-3乘号不能省略,且要根据运算顺序书写,如:数学表达式

a(b2+4ac) (a+b)÷cdC表达式a*(b*b+4*a*c)(a+b)/c/d或(a+b)/(c*d)算术表达式#include"stdio.h"main(){

inti=3;floatr=2.0;printf("%d\n",2*-i);printf(“%f\n”,r/i);printf("%d\n",r/i);printf("%d",2%3);}程序执行结果:-60.66666721845i=r/i:02算术运算举例8

实战演练

1.编程序计算数学表达式:b2-4ac,a,b,c的值从键盘输入。2.编程序计算298秒是几分几秒。提示:设intx=298;再定义两个变量存放分(m)、秒(s)值;则:m=x/60;s=x%60。3.从键盘输入一个三位数,求各位数字之和。例如,输入的三位数为358,则输出结果为3+5+8=16。提示:题目的关键是要求出该数的个、十、百位上的数字,可利用C语言整数相除,结果仍为整数的特点。若设该数为data,它的个、十、百位为g、s、b,则b=data/100;s=(data-b*100)/10;g=data%10C提供了6个用于位操作的运算符。这些运算符只能作用于整数分量,即有符号或无符号的char,short,int和long类型3&41.按位与(&)运算

见0则0位运算就是参加运算的两个数按二进制位参加运算,如“与”运算是两个参加运算的二进制位都是1,结果值是1,只要有一个运算数是0,结果是0。例如3&4为:

00000011(3)(&)00000100(4)

00000000(0)2.3位运算符2.按位或(|)运算

“见1,则1”按位或运算符用于对一个数据的某些位置1。如x是一个整数(16位),要将低8位全置为1,高8位保留原样,可以这样运算:x|0377,0377是8进制数,转换成二进制后,低8位全为1,和x或运算后,x的低8位也为1。3.按位异或(^)运算:“同则0,异则1”异或运算可以使特定位翻转,如要使01111010的低4位翻转,可与(00001111)进行异或运算,即:

011110105^300000101(^)00001111^0000001101110101000001102.3位运算符4.按位左移(<<)运算3<<20|00001100|左移运算用来将一个数的各二进制位左移若干位,左移一位相当于这个数乘2,如x<<2用于将x的值左移2位,右边空出的2位用零填充。这个表达式的结果等于左运算分量x乘以4。原码5.按位右移(>>)运算3>>2|00000000|11右移一位相当于这个数除以2,右移n位,相当于除以2n。右移位运算符中的运算分量的值必须是正的。当右移无符号量时,左边空出的位用0填空;当右移有符号量时,左边空出的位或用符号位填空(即算术移位)或用0填充(逻辑移位)-6>>2|11100001|2.3位运算符6.按位求反(~)运算“~”是一元运算符,用于求整数的反码。它分别将运算分量各位上的1转换成0,0转换成1。如x=x&~077用于将x的最后6位置为0~00000101~5111110102.3位运算符例

交换a,b变量的值

#include"stdio.h"main(){inta=3,b=5,t;t=a;a=b;b=t;printf(“a=%d,b=%d\n”,a,b);}2.4赋值运算符及表达式由赋值运算符“=”将变量和表达式连接起来的式子。其形式是:

变量=表达式

赋值表达式表达式值各变量值a=55a=b=c=55a,b,c均为5a=5+(c=6)

11a为11,c为6

赋值运算符及表达式复合的赋值运算符C语言中有10种复合赋值运算符:

+=、-=、*=、/=、%=、

<<=、>>=、&=、^=、|=(位运算符以后讲)实例:a/=3等价于a=a/3

x*=y+8等价于x=x*(y+8)a+=a-=a*a相当于a=a+(a=a-a*a)y%=8等价于y=y%8a=-4a+=a-4例

复合赋值运算符的应用#include"stdio.h"main(){intx=3,y=8;x*=y+1;printf("x=%d,y=%d",x,y);}程序执行结果:x=27,y=8赋值运算举例17

实战演练

1.用赋值语句表达:a的值为2,b的值比a多2,c的值比b的值多2,并输出a,b,c的结果。请编出完整程序验证。2.假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请先填空,再编出完整程序验证。a+=_________;(a为a、b之和)b=a-__________;a-=___________;

++(自增),--(自减):n=1n++;++n;++n,--m前缀,变量的值+(-)1n++,m--后缀,变量的值+(-)1优先级:高于双目运算结合性:同级从右至左

j=3;k=2

k=++j;→j=j+1;k=j;即j的为4,k的值为4

k=j++;→k=j;j=j+1;

即j的为4,k的值为32.5自增自减运算符说明:对于j变量,j++和++j都使j的值加1,但k的值就不同了,所以前缀和后缀运算对变量是一样的,对表达式的值就不一样自增、自减举例例2_5自增1运算,前后缀区别#include"stdio.h"main(){intx,y=5;x=5;y=x++;printf("%d%d\n",y,x);x=5;y=++x;printf("%d,%d\n",y,x);}逗号表达式的格式:表达式1,表达式2,…,表达式n逗号表达式的求解顺序及结果:先求解表达式1,再求解表达式2,…,最后求解表达式n;逗号表达式的最终结果为表达式n的值。实例:k=1a=3*5,a*4

结果为60x=(a=10,b=100,c=50)结果为50y=(i++,j--,k+2)

结果为k+22.6其他运算符获得一个变量或某种类型的量在内存中所占的字节数。它有以下两种用法:值,类型sizeof(表达式)inta;sizeof(a)

例如:intx=1;sizeof(x)

floaty=5.0;printf(“%d”,sizeof(x+y));

结果为:8sizeof(类型名)例如:

printf(“%d”,sizeof(shortint))结果为:2容量运算符sizeof

2.7C语言运算符的分类与优先级

1.运算符的类型2.运算符的优先级

3.结合律

两个同优先级的运算符相邻时,是按从左到右的顺序运算(左结合),还是按从右到左的顺序运算(右结合),C语言运算符的结合性大多数是左结合的,有一小部分是右结合的。运算符是表示某种运算的符号,是对数据的操作表达式是用运算符和括号将运算对象连接起来的符合C语言语法规则的式子运算对象可以是常量、变量、函数等优先级和结合性:优先级是指表达式中各计算的先后次序;结合性是指当一个运算对象两侧的运算符的优先级相同时进行运算的结合方向运算符及表达式

2.8不同类型数据之间的转换

设银行定期存款的年利率r为2.25%,并已知存款期为n年,存款本金为m元,编程计算n年后的本利之和算法步骤:

step1:定义变量;step2:输入算法所需要的数据r,n,m;step3:进行运算和数据处理:本利之和=m*(1+r)nstep4:输出运算结果数据。24例2_6计算存款n年后的本利之和#include"stdio.h"#include"math.h"main(){intn,m;floatr=0.0225,total;printf("Pleaseentern,m:");scanf("%d,%d",&n,&m);pow(x,3)total=m*pow(1+r,n);x3printf("Total=%f\n",total);}25程序运行结果:Pleaseentern,m:3,1000Total=1069.030143自动转换:当参加算术运算的数据类型不一致时低级向高级转换;赋值运算符两边的数据类型不同时,将右侧表达式的值转换为左侧变量的类型强制转换:强迫变量或表达式的值转换为某一特定类型。常用在自动类型转换不能达到目的时。转换格式为:(int)3.0%(int)5.2(类型说明符)变量(类型说明符)(表达式)(double)a,(int)(x+y),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论