C语言自增自减问题总结

合集下载

c语言自增自减运算符的变量类型

c语言自增自减运算符的变量类型

c语言自增自减运算符的变量类型在计算机编程中,C语言是一种非常常见和重要的编程语言之一。

在C 语言中,自增和自减运算符是非常基础和常用的运算符。

它们通常用于增加或减少变量的值。

在这篇文章中,我将以深度和广度的方式探讨C语言中自增自减运算符的变量类型,并分享一些我个人的观点和理解。

1. 变量类型的概念在C语言中,变量类型是非常重要的概念。

C语言中的每个变量都具有特定的数据类型,它决定了变量所能表示的值的范围和存储方式。

常见的变量类型包括整型、浮点型、字符型等。

在使用自增和自减运算符时,变量的类型会影响到运算结果。

2. 整型变量的自增自减运算对于整型变量而言,自增运算符(++)会使变量的值增加1,自减运算符(--)会使变量的值减少1。

不同的整型变量(如int、short、long等)在进行自增自减运算时,可能会有不同的表现,特别是在涉及到溢出和上溢的情况下。

对于无符号整型变量,在达到最大值后再进行自增操作会导致变量的值变为0。

3. 浮点型变量的自增自减运算在C语言中,浮点型变量是用来表示实数的,它包括float和double 两种类型。

对于浮点型变量而言,自增自减运算并不常见,因为它们通常被用于表示具有实际意义的数值,而非作为计数器使用。

在实际编程中,应该谨慎使用自增自减运算符来操作浮点型变量,以避免精度丢失或意外的结果。

4. 字符型变量的自增自减运算字符型变量在C语言中被用来表示单个字符,它们对应着ASCII码或Unicode码中的数值。

字符型变量可以进行自增自减运算,这其实是对字符编码值的增减操作。

一个字符型变量的值为'A',对其进行自增操作后,其值将变为'B'。

字符型变量的自增自减运算在某些情况下可以用于字符集的遍历和操作。

5. 总结与展望通过以上对C语言中自增自减运算符的变量类型的讨论,我们可以发现不同类型的变量在进行自增自减运算时会有不同的表现,特别是在涉及到溢出和精度的问题时。

关于C语言中的自增.减的运算原理

关于C语言中的自增.减的运算原理

C语言中的自增/自检运算原理总结自增(i++)、自减(i--)运算符的作用是使变量的值加1或减1,例如:++ i,-- i(在使用i之前,先使i值加(减)1);i++,i -- (在使用i之后,使i值加(减)1);粗略的来看,++ i和i++的作用是相当于i=i+1。

但是++i和i++的不同之处在于:++i是先执行i=i+1,再使用i的值;而i++是先使用i的值,再执行i=i+1。

如果i的原值等于3,则计算结果如下:①j=++I;(i的值先变成4,再赋给j,j的值为4)例:i=3;Printf(“%d”,++i);输出结果:4;②j=i++;(先将i的值3赋给j,j的值为3然后i变为4)例:i=3;Printf(“%d”,i++);输出结果:3;看下面程序:程序1:#include<stdio.h>void main(){int a,b;a=5;b=(a++)+(a++);printf("%d\n",a);printf("%d\n",b);}分析:a经过两次自加1的运算变成了7;然而b=(a++)+(a++);这里的a++表达式等于a不进行自加运算前的值,b相当于两个没有进行自加1运算前的值相加即:b=5+5; → b=10;程序2:#include<stdio.h>void main(){int a,b;a=5;b=(a++)+(a++)+(a++);printf("%d\n",a);printf("%d\n",b);}分析:a经过两次自加1的运算变成了8;然而b=(a++)+(a++);这里的a++表达式等于a不进行自加运算前的值,b相当于两个没有进行自加1运算前的值相加即:b=5+5+5; → b=15;a++已经介绍的差不多了,那么再说一下++a,程序3:#include<stdio.h>void main(){int a,b;a=5;b=(++a)+(++a);printf("%d\n",a);printf("%d\n",b);}分析:a的计算结果为7这个好理解,就是b值的计算,由上面的介绍可知++a是先将a的值进行自加1之后,再取出a值,这里有两个++a的运算式,即a先自加1变成7,再参与b 值的计算:b=7+7; → b=14;那么b=(++a)+(++a) +(++a);的计算结果是不是24呢?看下面的程序:程序4:#include<stdio.h>void main(){int a,b;a=5;b=(++a)+(++a)+(++a);printf("%d\n",a);printf("%d\n",b);}分析:这里的b并不等于24,而是22,之前已经计算出b=(++a)+(++a)的值为14,这时a=7,那么又经过一个(++a)式,a=8,且最后一个表达式(++a)也是等于8,则b=(7+7)+8→b=14+8; 即:b=22,那么b=(++a)+(++a)+(++a) +(++a)又等于多少呢?程序5:#include<stdio.h>void main(){int a,b;a=5;b=(++a)+(++a)+(++a)+(++a);printf("%d\n",a);printf("%d\n",b);}分析:由上面程序可知:这里的a=9,再由b=(++a)+(++a)与b=(++a)+(++a)+(++a)可得,b=(++a)+(++a)+(++a)+(++a)即:b=(7+7)+8+9,那么- -a呢?程序6:#include<stdio.h>void main(){int a,b;a=5;b=(--a)+(--a);printf("%d\n",a);printf("%d\n",b);}分析:与++a原理相同:--a这里的值为a=3,则b=3+3→b=6;那么b=(--a)+(--a) +(--a);原理与++a相同,即:b=(--a)+(--a) +(--a); → b=3+3+2; →b=8。

C语中的自增自减

C语中的自增自减

C语中的自增自减摘要运算符多、操作灵活是C语言的一大特色。

在诸多运算符中,最难理解、最容易出错的便是自增、自减运算符。

本文就这两个运算符使用中应注意的问题进行了分析介绍。

关键词C语言自增运算符自减运算符Points for Attention of Using Auto-increasing and Auto-decreasing Operators in Language CWang HongAbstract:Many operators and convenient operation characterize language C. Among those operators, the most difficult to understand and the easiest to mistake are auto-increasing and auto-decreasing operators. This paper analyses the notices in using these two operators.Key words:Language C auto-increasing operators auto-decreasing operators在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。

变量i被称为“计数器”,用来记录完成某一操作的次数。

C语言为这种计数器操作提供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。

它们是从右向左结合的一元算术运算符,优先级为2。

学习和应用这两个运算符时应注意以下几点:1注意表达式的值和变量值的区别以自增运算符为例,当自增运算符++作用于一个变量时,例如:当i=3时++i这个算术表达式的值为4,同时变量i的值也由原来的3改变为4。

一般情况下,计算表达式后不改变变量本身的值,而++运算符和--运算符组成的表达式计算后,则改变变量的值,这称为运算符的副作用。

C语言程序自增自减问题的几点思考

C语言程序自增自减问题的几点思考

值 变 为 6; 后 进 行 6 +6的 运 算 , 得 l 。 然 +6 故 8
(I) 表 达 式m=( II . ++i +( ) i +( ) ++) ++i的值 。
系 统 先 对 表 达 式 扫 描 , 到 两 次 ++i 一 次 遇 和
i ++, 对 i 行 两 次 增 1 i 值 变 为 5; 后 先 进 ,的 然
分 别 在 VC和 TC中 的 运 行 结 果 为 例 来 说 明 。
# i c ud ” t o. n l e s di h”
v i m i( o an ) d
{ t i ,=3 m , m=i ++i ++i i =3j , nI n + + ++; n =++ +( j+( j ; j ++ ) ++ )

理 论探 索 ・
C 语言程序 自增 自减 问题 的几点思考
郑 英 ( 内江 职 业技 术 学院 四1 内江 6 1 o ) 1 I 4 1 o
摘 要 : 章 针 对 教 学 和 各 类 考 试 中 所 遇 到 的 c语 言 自增 . 问 题 , 运 算 顺 序 、 出 方 式 , 译 器 对 自增 减 问 题 的 影 响 出 发 , 过 大 量 试 文 减 从 输 蝙 通 验 进行 分 析 、 证 问题 源 头 , 出学 生 在 学 习和 考 试 中对 白增 , 问题 的认 识 态 度 。 论 提 减 关 键 词 : i - ++ 一一 赋 值 混合 运 算 c ̄* 中 图分 类 号 : 4 4 G6 2. 文献标识码 : A 文章 编 号 : 0 —94 ( 1 ) —0 1 —0 1 1 2 1 07 6 0 0 0 1 9 1
nf t 函数 是 要 输 出 两 个 表达 式 的值 (和 i i ++

C语言知识点总结(正式版)

C语言知识点总结(正式版)

C语言知识点总结C语言知识点总结 (1)一、常量 (2)二、标识符 (2)三、变量 (2)四、表达式 (3)五、输入输出函数 (4)六、C语言的语句 (5)七、C程序的基本结构 (5)八、选择结构语句 (6)➢if(表达式) 语句1 else 语句2 (6)➢条件运算符表达式1? 表达式2 : 表达式3 (6)➢switch语句 (6)九、循环结构 (7)➢for循环语句 (7)➢while循环语句do while循环语句 (7)十、数组 (8)十一、字符串函数 (8)十二、函数 (9)十三、指针 (10)十四、宏定义 (11)十五、结构体,共用体,枚举类型 (11)十六、Turbo C的使用 (13)一、常量➢数字常量i.普通数字:1,35,2.7ii.指数形式:2.45e-2等价于2.45*10-2注意e大小写皆可,e前面的数字不能省,就算是1也不能省,后面的数字一定要是整数iii.长整型,单精度浮点型:3235L,32.5F 分别表示3235是长整型数据,32.5是单精度浮点型左,若不写上L,F则表示3235是整型,32.5是双精度浮点型,L,F大小写皆可➢字符常量i.普通字符常量:用单引号把一个字符括起来,如’A’,’@’ii.转义字符常量:一对单引号括起来并以“\”开头的字符序列,如’\n’(回车)、’\123’(8进制123对应的字符), ’\x23’(16进制23对应的字符)➢字符串常量用一对双引号把一个字符序列括起来,如“ABCef”,系统存放字符串常量,每个字符分配一个字节,各字符所占字节紧邻,并且字符串末尾会给再开一个字节里面放一个’\0’做为结束标志。

➢符号常量定义格式#define 符号常量名符号常量值,如#define N 20则定义了符号常量N,其值为20,注意符号常量名和符号常量值之间是用空格隔开,而不是写上=号,#define和符号常量名之间也有空格的。

二、标识符➢命名规则以数字,字母,下划线这三类字符组成,但只能以字母或下划线开头,而不能也数字开头,另外不能将关键字做为标识符。

c语言自增与自减运算符详解

c语言自增与自减运算符详解

c语言自增与自减运算符详解C语言中的自增和自减运算符是一种特殊的运算符,可以用来对变量进行增加或减少操作。

它们不仅可以用于数值类型的变量,还可以用于指针类型的变量。

在本文中,我们将详细介绍自增和自减运算符的使用方法和注意事项。

让我们来了解一下自增运算符(++)的用法。

自增运算符可以将变量的值增加1。

它可以用在变量前面或后面,分别表示先增加再使用和先使用再增加。

当自增运算符用在变量前面时,它会先将变量的值增加1,然后再使用增加后的值。

例如:```cint a = 1;int b = ++a;// 此时a的值为2,b的值为2```当自增运算符用在变量后面时,它会先使用变量的值,然后再将变量的值增加1。

例如:```cint a = 1;int b = a++;// 此时a的值为2,b的值为1```自增运算符也可以用于指针类型的变量。

当自增运算符用在指针变量前面时,它会将指针的值增加指针指向的数据类型的大小。

例如:```cint arr[5] = {1, 2, 3, 4, 5};int *p = arr;p++; // p指向arr[1]```当自增运算符用在指针变量后面时,它会先使用指针的值,然后再将指针的值增加指针指向的数据类型的大小。

例如:```cint arr[5] = {1, 2, 3, 4, 5};int *p = arr;int a = *p++; // a的值为1,p指向arr[1]```接下来,让我们来了解一下自减运算符(--)的用法。

自减运算符可以将变量的值减少1。

它的使用方法和自增运算符类似,可以用在变量的前面或后面。

当自减运算符用在变量前面时,它会先将变量的值减少1,然后再使用减少后的值。

例如:```cint a = 2;int b = --a;// 此时a的值为1,b的值为1```当自减运算符用在变量后面时,它会先使用变量的值,然后再将变量的值减少1。

例如:```cint a = 2;int b = a--;// 此时a的值为1,b的值为2```自减运算符也可以用于指针类型的变量。

浅析C语言自增自减运算符的使用

浅析C语言自增自减运算符的使用

浅析C语言自增自减运算符的使用夏超群【摘要】在C语言的众多运算符中,最难理解、使用时最易得到模棱两可结果的是自增、自减运算符.就这两个运算符在程序中的具体使用进行了详细的分析,不管是自增还是自减,前置运算符是"先变后用",后置运算符是"先用后变".但是C语言的灵活性也容易使程序费解,不同的编译环境可能导致处理结果不同.【期刊名称】《武汉工程职业技术学院学报》【年(卷),期】2010(022)003【总页数】3页(P47-49)【关键词】C 语言;自增运算符;自减运算符【作者】夏超群【作者单位】武汉工程职业技术学院江北校区,湖北,武汉:430415【正文语种】中文【中图分类】TP332.2C语言的运算符非常丰富,在程序中可以灵活使用它们以达到所需的功能。

许多初学者学习使用过程中,经常对自增、自减运算符的运算结果产生质疑,弄懂自增、自减运算符的运算,显得至关重要。

1 自增、自减运算符的特点1.1 自增运算符 ++它是单目运算符,其功能是使操作数的值增1。

其操作数必须为变量,++可以置于操作数前面,也可以放在后面。

例如:++n ;n++ ;这两个语句执行的结果都是使变量n的值增加1,单纯从这两个语句的执行结果上看++前置和后置似乎没有区别,它们和下面的赋值语句得到的效果也是一样:n=n+1;但我们不应该被表象迷惑,实际上,++前置和后置是有区别的,具体如下:n++:先使用n的值,再使n值增加1。

++n:先使n值增加1,再使用n的值(使用时n的值已经增加了)。

例如:int n=1,p,q;p=n++;q=++n;对于“p=n++;”这个语句,是先使用n的值,将其赋给p,再使n的值增加1。

即该语句等价于这样两条语句:p=n;n=n+1;所以这个语句执行完后,p的值是1,而n的值变成2。

对于“q=++n;”这个语句,是先使n的值增加1,再将n的值赋给q。

即该语句等价于这样两条语句:n=n+1;q=n;所以这个语句执行完后,n的值变为3,而q的值也是3。

c语言float类型计算

c语言float类型计算

c语言float类型计算让我们来了解一下float类型的特点。

float类型的变量可以存储大约6-7位有效数字,而且可以表示的范围很广,从10的-38次方到10的38次方之间的数值。

这使得float类型非常适合处理需要高精度计算的场景,比如科学计算、金融计算等。

在C语言中,我们可以使用float类型进行各种基本的数学运算,比如加减乘除等。

下面我们将介绍一些常见的float类型计算问题。

1. 加法运算:使用加法运算符(+)可以将两个float类型的变量相加。

例如,如果有两个float类型的变量a和b,我们可以使用以下代码将它们相加并将结果保存在一个新的变量c中:```cfloat a = 3.14;float b = 2.71;float c = a + b;```2. 减法运算:使用减法运算符(-)可以将一个float类型的变量减去另一个float类型的变量。

例如,如果有两个float类型的变量a 和b,我们可以使用以下代码将它们相减并将结果保存在一个新的变量c中:```cfloat a = 3.14;float b = 2.71;float c = a - b;```3. 乘法运算:使用乘法运算符(*)可以将两个float类型的变量相乘。

例如,如果有两个float类型的变量a和b,我们可以使用以下代码将它们相乘并将结果保存在一个新的变量c中:```cfloat a = 3.14;float b = 2.71;float c = a * b;```4. 除法运算:使用除法运算符(/)可以将一个float类型的变量除以另一个float类型的变量。

需要注意的是,除以0是不允许的,会导致程序崩溃。

例如,如果有两个float类型的变量a和b,我们可以使用以下代码将它们相除并将结果保存在一个新的变量c中: ```cfloat a = 3.14;float b = 2.71;float c = a / b;```5. 求余运算:使用求余运算符(%)可以获取两个float类型变量相除后的余数。

c语言算术运算符

c语言算术运算符

c语言算术运算符c语言算术运算符在数学运算中最常见的就是加减乘除四则运算。

C语言中的算术运算符就是用来处理四则运算的符号,这是最简单、最常用的运算符号。

下面是店铺为你整理的c语言算术运算符相关介绍!下表是C语言中的算术运算符及其用法。

算术运算符看上去都比较简单,也很容易理解,但在实际使用时还有很多需要注意的问题,具体如下:1、进行四则混合运算时,运算顺序遵循数学中“先乘除后加减”的原则。

2、在进行自增(++)和自减(--)的运算时,如果运算符(++或--)放在操作数的前面则是先进行自增或自减运算,再进行其他运算。

反之,如果运算符放在操作数的后面则是先进行其他运算再进行自增或自减运算。

请仔细阅读下面的代码块,思考运行的结果。

int num1 = 1; int num2 = 2;int res = num1 + num2++;printf("num2=%d" + num2);printf("res=%d" + res);上面的代码块运行结果为:num2=3,res=3,具体分析如下:第一步:运算mum1+mun2++的结果,此时变量mun1,mum2的值不变。

第二步:将第一步的运算结果赋值给变量 res,此时 res值为 3。

第三步:mum2进行自增,此时其值为 3。

3、在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。

如果除法运算有浮点数参与运算,系统会将整数数据隐形类型转换为浮点类型,最终得到的结果会是一个浮点数。

例如, 2510/1000 属于整数之间相除,会忽略小数部分,得到的结果是2,而2.5/10 的`实际结果为0.25。

请思考一下下面表达式的结果:3500/1000*1000所得结果为3000。

由于表达式的执行顺序是从左到右,所以先执行除法运算 3500/1000,得到结果为 3,然后再乘以 1000,最终得到的结果就是 3000。

c语言指针自增自减运算的含义

c语言指针自增自减运算的含义

c语言指针自增自减运算的含义C语言中的指针自增自减运算在编程中具有非常重要的含义和作用。

通过对指针的自增自减操作,我们可以更加灵活地操作内存位置区域,实现对数据的高效访问和操作。

本文将深入探讨C语言中指针自增自减运算的含义和用法,帮助读者全面理解这一重要的概念。

一、指针的基本概念在C语言中,指针是一种非常重要的数据类型,它用来存储变量的位置区域。

通过指针,我们可以直接访问或修改变量的值,实现对内存的精准控制。

指针的自增自减运算就是针对指针变量所指向的内存位置区域进行操作,使得指针能够指向相邻的内存单元,实现对数据的高效遍历和处理。

二、指针的自增运算指针的自增运算使用”++“符号来实现,它的含义是使指针指向下一个内存单元。

如果有一个指针变量ptr,执行ptr++操作后,ptr将指向下一个内存位置区域,即ptr += sizeof(数据类型)。

这种操作在对数组进行遍历或者实现循环遍历过程中非常有用,可以快速地访问数组中的元素。

在实际编程中,指针的自增运算可以用于实现对数组的遍历、链表的操作和内存空间的动态分配等。

通过合理地使用指针的自增运算,我们可以优化程序的性能,提高数据的访问效率。

三、指针的自减运算指针的自减运算使用”--“符号来实现,它的含义是使指针指向上一个内存单元。

类似地,执行ptr--操作后,ptr将指向上一个内存位置区域,即ptr -= sizeof(数据类型)。

指针的自减运算可以用于倒序遍历数组或链表等数据结构,也可以配合动态分配的内存空间进行内存释放和管理。

在实际编程中,指针的自减运算同样具有重要的作用,它可以帮助我们在处理一些特定问题时更加灵活地操作内存位置区域,实现复杂数据结构的遍历和管理。

四、个人观点和总结作为一名程序员,深入理解指针的自增自减运算对于提高编程能力和理解计算机底层原理非常重要。

通过合理地使用指针的自增自减运算,我们可以更加高效地处理内存数据,实现对各种数据结构的操作,为程序的性能优化和功能实现提供了重要的支持。

C语言_各章_重点知识_总结

C语言_各章_重点知识_总结

C语言各章重点知识总结第一章C语言概述1、C程序的组成和形式的基本特点(P6-7)(1)C程序是由函数构成的,一个C源程序至少且仅包含一个main函数,也可以包含一个main函数和若干个其他函数。

(2)一个函数由两部分组成①函数的首部:即函数的第一行,包括函数名、函数类型、函数属性、函数参数名、参数类型例:int max (int x,int y)一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。

函数可以没有参数,如main()。

②函数体:即函数首部下面的花括号内的部分。

如果一个函数内有多个花括号,则最外层的一对花括号为函数体的范围。

函数体一般包括:声明部分、执行部分2、运行C程序的步骤及每个步骤生成文件的类型及特点(P7)第二章算法1、算法的定义一个程序应包括①数据结构即对数据的描述;②算法也就是操作步骤。

计算机算法可分为两大类:数值运算算法和非数值运算算法。

2、算法的特性(P19)1.有穷性;2.确定性;3.有零个或多个输入;4.有一个或多个输出;5.有效性。

3、描述算法的常用方法(P20-33)1.自然语言;2.用流程图表示算法。

3.N—S图4.计算机语言5.伪代码4、C程序算法的3种基本结构及其共同特点(P24-25)三种基本结构:1.顺序结构:最基本;2.选择结构:又称选取结构或分支结构;3.循环结构:又称重复结构;①当(while)型循环;②直到(until)型循环。

共同特点:1. 只有一个入口;2. 只有一个出口;3. 结构内的每一部分都有机会被执行到;4. 结构内不存在“死循环”。

5、结构化程序设计的设计原则(P34)1.自顶向下;2.逐步细化;3.模块化设计;4.结构化编码。

第三章数据类型、运算符与表达式1、C语言的基本数据类型和构造数据类型(P37)在程序中对用到所有数据都必须制定其数据类型。

数据有常量和变量之分,它们分别属于以上这些类型。

2、字面常量和符号常量(P37-38)在程序运行过程中,其值不能被改变的量称为常量,常量区分为整型常量和实型常量,常量一般从其字面形式即可判别,这种常量称为字面常量或者直接常量。

C语言的自增和自减

C语言的自增和自减

1、自增和自减运算符是C语言中特有的一种运算符,他们的作用分别是对运算对象做加1和减1运算,其功能如下:++ 自增运算符,如:a++,++a;-- 自减运算符,如:a--,--a。

从表面上看,a++和++a的作用都是使变量a的值加1,但由于运算符++所处的位置不同,使变量a执行加1的运算过程也不同,++a的运算过程是:先使变量a执行a+1的操作,再使用a的值,a++的运算过程是:先使用变量a的值,再执行a+1的操作。

自增和自减运算符只能用于变量,不能用于常数或者表达式。

1、逗号运算符在C语言中,逗号运算符“,”可以将两个或多个表达式连接起来,称为逗号表达式。

逗号表达式的一般形式为:表达式1,表达式2,表达式3....表达式n逗号表达式的运算过程是:先运算表达式1,再计算表达式2,....以此计算到表达式n。

1、条件运算符是C语言中唯一的一个三目运算符,他要求有3个运算对象,用它可以将3个表达式连接构成一个表达式。

条件表达式的一般形式如下:表达式1?表达式2:表达式3其功能是首先计算表达式1,当其值为真(非0值)时,表达式2的值作为挣个条件表达式的值,否则将表达式3的值作为整个条件表达式的值。

C语言中共有6种位运算符,按优先级从高到低依次是:按位取反(运算符~)--左移(运算符<<)--右移(运算符>>)--按位与(运算符&)--按位异或(运算符^)--按位或(运算符|)1、c语言中的移位运算符有两种,左移运算符、右移运算符。

1)左移运算符(<<),其作用是讲一个数的各个二进制位全部左移若干位。

例如a=a<<2,表示将a的二进制数左移2位,若a=15,即二进制数00001111,左移2位得到的结果是00111100,再如a=240,即二进制数11110000,左移2位后得到的结果是11000000.其中高位左移后溢出,被舍弃了,低位以0进补。

C语言中多个自增自减的运算规律-文档资料

C语言中多个自增自减的运算规律-文档资料

C语言中多个自增自减的运算规律C语言中有两个很奇特的单目运算符:++(自增运算符)和--(自减运算符),自增运算符和自减运算符都有前缀式和后缀式。

这两个运算符在C语句中,尤其是循环语句中使用较为广泛,对于单个的自增运算符或自减运算符,相信大家都易于理解。

但是,C语言允许在一个表达式中使用一个以上的自增运算符、自减运算符,这种灵活性使程序简洁,但同时也会引起副作用。

这种副作用主要表现在:使程序费解,并易于发生误解或错误。

例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一或者干脆回避这类问题。

既然前面提到在一个表达式中可以有多个自增或自减运算符,我们不能总是以费解或避免出错为由来回避这个问题,不用归不用,了解一下这些内容还是相当有必要的。

为了弄清楚C语言中多个自增或自减运算符的运算规律,笔者经查阅大量资料并反复上机验证,总结出在VC++6.0环境下多个自增自减的运算规律。

1 连续多个后缀的运算规律先统一取值后依次自增或自减。

如:#includevoid main(){int a,i=5;a=(i++)+(i++)+(i++);printf(“a=%d,i=%d\n”,a,i);}其运算规律是先对所有的i++统一取值5,然后i依次自增3次,即 a=5+5+5=15,i=5+1+1+1=8。

因此,程序输出结果为:a=15,i=82 连续多个前缀的运算规律前两个连续的前缀(两个连续自增,或者两个连续自减,或者一个自增一个自减),即依次自增(减)后,统一取第二个自增(减)的值,后面的每个自增(减)后即刻取值。

如:#includevoid main(){int a, i=5;a= (++i)+(++i)+(++i);printf(“a=%d,i=%d\n”,a,i);}第一个++i的值为6,第二个++i的值为7,第三个++i的值为8,但第一个++i和第二个++i统一取第二个++i的值7,即a=7+7+8=22,而i的值则依次自增,即i=5+1+1+1=8。

c语言算术运算

c语言算术运算

c语言算术运算一、算术运算的概念算术运算是数学中的基本运算之一,它包括了加减乘除和取余等运算。

在计算机编程中,算术运算是最基础的操作之一。

C语言作为一种计算机编程语言,具有强大的算术运算功能。

二、加法运算加法运算是指将两个数相加的过程。

在C语言中,使用“+”符号表示加法运算。

例如,a+b表示将a和b两个数相加的结果。

三、减法运算减法运算是指将两个数相减的过程。

在C语言中,使用“-”符号表示减法运算。

例如,a-b表示将a减去b的结果。

四、乘法运算乘法运算是指将两个数相乘的过程。

在C语言中,使用“*”符号表示乘法运算。

例如,a*b表示将a和b两个数相乘的结果。

五、除法运算除法运算是指将两个数相除的过程。

在C语言中,使用“/”符号表示除法运算。

例如,a/b表示将a除以b的结果。

六、取余运算取余运算是指将一个数除以另一个数所得的余数。

在C语言中,使用“%”符号表示取余运算。

例如,a%b表示将a除以b所得的余数。

七、自增自减运算自增自减运算是指将一个数加1或减1的过程。

在C语言中,使用“++”和“--”符号表示自增自减运算。

例如,a++表示将a加1,a--表示将a减1。

八、算术运算的优先级在C语言中,不同的算术运算符具有不同的优先级。

一般来说,乘法和除法运算的优先级高于加法和减法运算。

在同一表达式中,先进行高优先级的运算,再进行低优先级的运算。

如果不确定优先级,可以使用括号来改变运算的顺序。

九、总结算术运算是C语言中最基础的操作之一,包括了加减乘除和取余等运算。

在编程中,合理使用算术运算符可以大大提高程序的效率。

在进行算术运算时,需要注意不同运算符的优先级,以免产生错误的结果。

c语言自增自减运算规则

c语言自增自减运算规则

c语言自增自减运算规则逗号运算符逗号运算符优先级最低;逗号运算符是用来分割多个表达式的;由逗号运算符组成的逗号表达式的运算结果是:最后一个表达式的结果注意:int i;i = 3,4,5,;以上语句得到的i的值为3i = (3, 4, 5);得到的i的值为5总结:++i置前自增:先对i的值加1,然后用增1后的值参加所有的后续运算i++滞后自增自减:先用变量原来的值参加所有的后续运算,直到本条语句所有的运算全部运算完毕后,才对变量值加减1滞后自增减在条表中的特殊表现:先利用原值参与条件判断,然后立刻自增减;滞后自增减在逗号表达式中的特殊表现:int i = 3, j = 4, k;k = (++i, j++, i++ * ++j);printf("%d %d %d\n", i, j, k);结果:i = 5;j = 6k = 24总结:滞后自增遇到逗号运算符时立刻自增减,但是函数中的参数逗号除外数据类型转换1.1)自动类型转换在某一次运算中,如果参与运算的两个运算数的数据类型不一致,则C语言会对其自定进行数据类型转换,且遵循如下原则:短整型向长整型靠拢;简单数据类型向复杂数据类型靠拢;如下两个例子:5.0 + 1/2=5.0 +0=5.0+0.0=5.05+1/2.0=5+1.0/2.0=5+0.5=5.0+0.5=5.5数学运算式:1/1+1/2+1/3+.....+1/nint i;double s = 0;for(i = 1; i <= n; i++)s += 1.0/i;1.2.强制类型转换语法:(数据类型转化)表达式s += (double)1 / i;//强制类型转换也是运算符,是单目运算符最低的强制类型转换以人类的意志为原则s +=(double)(1/i);//只是得到0.0强制类型转换运算绝对不可能改变变量的数据类型1.3自动强制类型转换这种运算只发生在赋值运算中char c = 97.14159;在赋值时候会丢失一些精度,输出小写字母adouble f = 'A';输出65.000转换原则:若赋值运算符两侧的数据类型不一致,则,由C语言对赋值运算符右侧表达式时的值,进行自动类型转换工作;且是按照赋值运算符左侧的左值数据类型为依据转换的;。

C语言自增自减运算符的解析与应用

C语言自增自减运算符的解析与应用

C语言自增自减运算符的解析与应用雷玉梅【摘要】自增自减是C语言运算符里比较有特色的运算符,也是在使用时最容易出错的运算符.结合教学和使用经验对Turbo C 2.0中的自增自减运算符进行研究,根据自增自减运算符的特点和不同使用形式,剖析自增自减运算符的使用规则,总结各种解题技巧和使用方法,以便更好地帮助初学者学习和使用自增自减运算符.【期刊名称】《辽宁师专学报(自然科学版)》【年(卷),期】2011(013)001【总页数】3页(P22-23,94)【关键词】自增运算符;自减运算符;三层计算法;解题技巧;使用方法【作者】雷玉梅【作者单位】阜新高等专科学校,辽宁阜新123000【正文语种】中文【中图分类】TP312C0 引言自增自减是C语言中比较有特色的运算符.合理使用自增自减运算符,在编程中可以节省代码,提高效率,事半功倍;如果掌握不好或使用不当,则极易造成错误.在互联网的搜索引擎中随意打入C语言自增自减运算符,寻求解题方法的比比皆是.本文根据自增自减运算符的特点,针对不同题型,给出不同的解题规律,以期为初学者学习和使用自增自减运算符提供帮助.1 自增自减运算符的含义及使用形式1.1 含义自增运算符即“++”,其含义是把变量的值取出加1,再存回该变量,相当于变量自身加1.自减运算符即“--”,其含义是把变量的值取出减1,再存回该变量,相当于变量自身减1.1.2 使用形式使用形式分为前缀形式和后缀形式两种.前缀形式:运算符在变量前,例如:++i,--j.后缀形式:运算符在变量后,例如:i++,j--.不论前缀运算还是后缀运算,变量值都相应增加(减少)1,区别是前缀运算是“先变后用”,而后缀运算是“先用后变”.虽然运算法则简单明了,可在实际应用中,在不同的使用场合,这个法则却不是万能的,死记硬套法则,结果往往是错误的.下面根据不同的使用形式,论述如何灵活运用法则.2 各类含有自增自减运算符题型的解题技巧2.1 一个自增或自减运算符组成的表达式例1:i=3k1=++ik2=i++k1=?,k2=?,i=?解题技巧:应用“加号在前,先加后用,加号在后,先用后加”法则,自减同理.解题过程:(1)第一个表达式,因为++在前,所以“先加后用”,先把i的值增1,变成i=4,再把i的值赋给k1,k1=4;(2)第二个表达式,因为++在后,所以“先用后加”,先把i的值赋给k2,k2=3,再把i的值增1,i=4.结论:此类题型,使用“加号在前,先加后用,加号在后,先用后加”法则可以轻松解决.2.2 多个自增自减运算符组成的表达式例1:多个自增运算符组成的表达式i=3k=(++i)+(i++)+(++i)k=?i=?例2:多个自减运算符组成的表达式i=3k=(i--)+(--i)+(i--)k=?i=?例3:多个自增自减运算符混合组成的表达式i=3k=(i++)+(--i)+(i--)k=?i=?解题技巧:使用“三层计算法”.所谓三层计算法,即先变层,使用层,后变层,然后逐层从左向右计算[1].在解例1时,很多初学者本着“加号在前,先加后用;加号在后,先用后加”的原则,认为k=4+4+6=14.但在Turbo C和MS C系统中运行时,得出的结果却是15,那么此类问题应该如何计算呢?使用三层计算法解决此类问题将变得非常简单.三层计算法的具体步骤为:先把式子划分三层,分别是先变层,使用层,后变层,然后逐层计算,计算完一层后,再进入下一层的计算,最后得出正确结果.例1的解题过程如下:先变层i+1 —— i+1使用层k=i+i+i后变层i+1先计算第一层:i+1和i+1,i原来是3,加了两次1,结果为i=5.再计算第二层:k=i+i+i,相当于k=5+5+5,结果为k=15,i还是5.最后计算第三层:一个i+1,i的结果变成6.所以最终结果为:k=15,i=6.例2的解题过程如下:先变层—— i-1 ——使用层k=i+i+i后变层i-1 —— i-1计算第一层:i-1,所以i变成2.计算第二层:k=2+2+2=6.计算第三层:2个“i-1”,i 的值变成0.最终结果:k=6,i=0.例3的解题过程如下:先变层—— i-1 ——使用层k=i+i+i后变层i+1——i-1计算第一层:i-1,所以i变成2.计算第二层:k=2+2+2=6.计算第三层:i+1,i-1,i的值还是2.最终结果:k=6,i=2.结论:对于这样多个自增自减运算符组成的表达式,不可简单地应用“加号在前,先加后用,加号在后,先用后加”原则,只需设置三个层,逐层计算,即可轻松获得结果. 2.3 printf()函数直接输出自增自减表达式形式1:单个自增自减组成一个输出项.解题技巧:输出项表列按着“从右向左”的顺序输出,还是加号在前,先加后用,加号在后,先用后加,自减同理.例1:int i=3printf(“%d,%d”,i,i++);很多初学者认为输出结果是:3,3,其实不然.printf函数输出时,求值顺序是从右向左的,那么应该先输出后者i++项,因为++在后,所以先输出i的值3,输出后再加1,所以到下一个输出项i的值时,i已经变成4了,所以结果为:4,3.结论:对于单个自增自减表达式作为一个输出项,使用“加号在前,先加后用,加号在后,先用后加”原则,只不过运算顺序要从右向左.形式2:多个自增自减组成一个输出项.解题技巧:也适用“加号在前,先加后用,加号在后,先用后加”规则,不过这里的“先变后用”和“先用后变”中的“后”就是指++i和i++这一小项运算完之后.例2:i=3;printf(“j=%d”,(++i)+(i++)+(i++));解题:第一个(++i)先给i的值加1,表达式值是4,i的值也是4,第二个(i++)先取出i 的值,表达式的值是4,然后i再加1变为5,第三个(i++)先取出表达式的值为5,i再加1变为6,这样输出的结果便是三个表达式的和,即4+4+5=13.结论:对于多个自增自减表达式组成一个输出项,不可使用三层计算法,而是适用于“加号在前,先加后用,加号在后,先用后加”规则.3 自增自减运算符在不同场合的使用方法3.1 自增自减运算符在循环结构中的使用方法自增自减运算符在循环结构中一般用于修改循环变量,例如“i++”“i--”,其中i 称为循环变量,通过自增自减运算,才能使循环执行若干次后,达到不满足循环条件的情形,从而结束循环[2].如果没有这样的语句,那么循环变量的值将始终不变,程序将无限次循环下去,从而进入死循环.在while和do…while循环结构,循环变量的自增自减运算应放在循环体内,例如:i=1;while(i<100){sum=sum+i;i++},do…while亦是如此.在for循环中,可以把循环变量的自增自减运算放在for结构中,也可以放在循环体内,例如:for(i=1;i<100;i++)sum+=i;也可以for(i=1;i<100;){sum+=i;i++;}.3.2 自增自减运算符在指针中的使用方法指针是C语言的一大特色.指针使用非常灵活,可以指向各种类型的变量、数组、函数和文件.当指向变量和数组时,“p++,p--”可以使指针移动,找到相邻元素的地址.这里要注意,p++是使指针指向内存中下一个元素,而不是简单地将值加1,p--指向内存中上一个元素而不是地简单将值减1,实际上p++(p--)是p+1×d(p-1×d),d 是一个数据对象所占的字节数[3].在C语言中,整数d=2,单精度实数d=4,字符型数d=1.下面来看一个程序段:int a[6]={1,2,3,4,5,6},*p;p=a;printf(“%d”,*p++);printf(“%d”,*++p);此程序段中,定义了一个一维数组,指针指向数组的首地址,即指向存储单元a[0],第一个printf函数输出*p++,*和++优先级相同,++在变量后,所以先用后加,即先取出*p的值,然后再自增.第一个的输出结果为a[0]的值1,p指向存储单元a[1],第二个printf函数输出*++p,++在变量前,所以先加后用,先指针加1,指向存储单元a[2],再取其值,结果为3.4 结语自增自减运算符使用灵活,利用这一点可以巧妙地处理许多在其他语言中难以处理的问题,但另一方面,有时会出现一些令人容易混淆的问题,因此使用者务必小心谨慎使用.参考文献:【相关文献】[1]胡方.探讨C语言自增、自减运算符的应用[J].辽宁师专学报(自然科学版),2008,(1):22.[2]秦玉平,戴心来.C语言中的自加自减运算[J].渤海大学学报,2004,(4):367-368.[3]陈仲民.关于C语言教学方法和程序设计的探讨[J].计算机教育,2007,(6):3-6.。

计算机二级c语言自增自减习题

计算机二级c语言自增自减习题

自增自减1、以下对于单目运算符 ++、 --的表达中正确的选项是A)它们的运算对象能够是任何变量和常量B)它们的运算对象能够是 char 型变量和 int 型变量,但不可以是 float 型变量C)它们的运算对象能够是 int 型变量 ,但不可以是 double 型变量和 float 型变量D)它们的运算对象能够是 char 型变量、 int 型变量和 float 型变量2、设有以下定义int a=0;double b=;char c=A’;#define d2则下边语句中错误的选项是A) a++;B) b++;C) c++;D) d++;3、以下选项中,与k=n++完整等价的表达式是A) k=n,n=n+1B) n=n+1,k=n C) k=++n D) k+=n+14、设正 x、y 均为整型变量,且x=10 y=3,则以下语句的输出结果是printf("%d,%d\n",x--,--y);A) 10,3B) 9,3C) 9,2D)10,25、设有int x=11; 则表达式(x++ * 1/3) 的值是A) 3B) 4C) 11D) 126、以下程序的输出结果是。

#includemain(){int i=010 ,j = 10;printf("%d,%d\n",+ +i , j - -);}A) 11,10B) 9,10C) 010,9D) 10,97、有以下程序main(){int m=12,n=34;printf("%d%d",m++,++n);printf("%d%d\n",n++,++m);}程序运转后的输出结果是A)B)C)D)8、有以下程序main(){ int m=3,n=4,x;x=-m++;x=x+8/++n;printf("%d\n",x);}程序运转后的输出结果是A)3B)5C)-1D)-29、设 a、b、c 为整型数,且a=2、b=3、c=4,则履行完以下语句:a*=16+(b++)-(++c);后, a 的值是知识点++-- 只好用于变量,不可以用于常量和表达式 ,如 5++, (a+b)++,(-i)++ 都是错误的联合方向:自右向左。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言自增自減问题总结
在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。

C 语言为这种操作提供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。

它们是单目运算符,是从右向左结合的算术运算符。

学习和应用这两个运算符时应注意以下几点:
我将自增自减运算符和变量结合在一下的表达式称为自增自减表达式,如
x++,--I等。

通常情况下就有以下的结论:
1‘’前缀表达式:++x, --x; 其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表达式的值;即“先变后用”,也就是变量的值先变,再用变量的值参与运算。

2、后缀表达式:x++, x--; 先用x的当前值作为表达式的值,再进行自增自减1运算。

即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化,。

如a=8; b=a++; c=++a; 其中赋给变量b的值为表达式(a++)的值,不应该理解为a的值,则b=8, c=10;
3、自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整型、实型,还是字符型变量等,但不能用于表达式或常量。

如:++(a+b), 与5++,const int N=0; N++; 等都是错误的。

而i+++j++、++i+(++j)、++a+b++、++array [--j];等,这些都是合法的。

4、再说结合性与结合方向
编译器对程序编译时,从左到右尽可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式
“i++”,这是不允许的。

自增自减运算符是单目运算符,其结合性是从右到左。

表达式k=-i++等效于k=(-i)++还是k=-(i++)?。

因为负号也是单目运算符,因此,上式从右到左结合,等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。

此赋值表达式的值即为所赋的值-5。

不要因为k=-i++等效于k=-(i++)
就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。

5、注意运算符的副作用
C语言允许在一个表达式中使用一个以上的赋值类运算,包括赋值运算符、自增运算符、自减运算符等。

这种灵活性使程序简洁,但同时也会引起副作用。

这种副作用主要表现在:使程序费解,并易于发生误解或错误。

例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一。

对于这种情况,为了增强程序的可读性与可移植性,在一个表达式中,就应该用简单的自增与自减运算,不用对同一变量进行多次自增自减运算的表达式,否则,其他人可能看不懂,换个运行环境也可能是不同的结果。

我相信,在考试试题中也是不会出现象这种有不同结果的试题的,请读者放心。

当然,为了丰富知识,了解一下这些内容也是必要的。

以下内容是经查阅资料所得:用各种表达式上机测试,给出VC++环境下连续自增(自减)运算规则:
1、在一般表达式中和在函数参数中计算的结果相同(这一点与Turbo C环境不同);
2、后缀:同表达式中Turbo C的情况相同:先统一取值后依次自增,如:
int a,i=5; a=i+++i+++i++; a=15, i=8.
3、前缀:前两个自增同Turbo C,即依次自增后统一取值,后面的每个自增后即取值,如:
int a, i=5; a= ++i +(++i)+(++i); a=22, i=8.
4、前后缀混合的情况:
(1) 一般情况:表达式中自左向右计算,参数自右向左运算。

前缀自增后取值;后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自增在语句结束前进行。

(2) 前后缀各有一个的情况:设int i=5; 由于i++*++i应满足交换率与
++i*i++相同,规定按后者计算故为36。

实验2内容4:int i=5;
printf("%d,%d\n", --i, i++*++i ); 打印5,36。

(3) 若i++或++i或两者有多于一个的情况:++i有两个以上在一起时最左边的连续自增同3、,其余每个自增后取值,如:int i=5;
printf("%d\n%d\n",--i,(++i)+(i++)+(i++)+(++i)); 打印6和25
printf("%d\n%d\n",--i,(++i)+(++i)+(++i)+(++i)+(i++)); 打印8和40 printf("%d\n%d\n",--i,(++i)+(++i)+(++i)+i+(++i)+(++ i)); 打印9和49
(4) 函数参数中有括号时,括号参数优先计算,其余参数仍自右向左计算,如:
int i=9,j=8; printf("%d %d\n", (++i, j--), ++i); 打印8 11
printf("%d %d %d\n", (++i, j--), ++i, i); 打印8 11 10
(5) 最后i的值等于原值加总自增次数减自减的次数.
克服这类副作用的方法是,尽量把程序写得易懂一些,即将费解处分解成若干个语句。

如:k=i+++j:可写成k=i+j:i++:而类似(i++)+(i++)+(i++)这类连续自增、自减的运算最好不要使用,以避免疑团的出现,同时也可减少程序出错的可性能。

最后感谢为了得到正确结果而花较多时间去上机实践的人们,祝你幸福快乐!。

相关文档
最新文档