当前位置:首页 » 编程语言 » 算子C语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

算子C语言

发布时间: 2022-09-20 21:32:58

1. c语言 算术运算符

算术运算符 TAG:运算符,数据类型 TEXT:算术运算符对数值进行算术运算,其中:加、减、乘、除、求余运算是双目运算。其结果可以是整数、单精度实数和双精度实数。自增、自减运算是单目运算,其操作对象只能使整型变量,不能是常量或表达式等其他形式。 REF: .TXT,+运算符.txt,-运算符.txt,*运算符.txt,/运算符.txt,%运算符,++运算符,-- 运算符 加+ TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数加法。单目运算符,表示正数。 REF: .TXT,算数运算符.txt减- TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数减法。单目运算符,表示负数。 REF: .TXT,算数运算符.txt乘* TAG:算术运算符,运算符,数据类型 TEXT:*,双目运算符,算数乘法。 REF: .TXT,算数运算符.txt除/ TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。如5.0/2等于2.5,而5/2等于2。 REF: .TXT,算数运算符.txt取余% TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。如5.0/2等于2.5,而5/2等于2。 REF: .TXT,算数运算符.txt自加++ TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数增1。 REF: .TXT,算数运算符.txt自减-- TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数减1。 REF: .TXT,算数运算符.txt关系运算符 TAG:算数运算符,运算符,数据类型 TEXT:关系运算符用于对两个操作数的比较,包括:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、!= (非等于)、==(等于)。 关系表达式是由关系运算符(>,<,>=,<=,!=,==)连接起来的表达式构成,关系运算符中的“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,在C语言中用逻辑值来表示,逻辑上的真与假时用数字“1”与“0”来表示的。关系成立时表达式的结果为真(1),否则表达式的结果为假(0)。
REF: .TXT,>运算符.txt,>=运算符.txt,<运算符.txt,<=运算符.txt,==运算符,!=运算符 大于> TAG:关系运算符,运算符,数据类型 TEXT:>运算符,例如a>b,如果a的值大于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt小于< TAG:关系运算符,运算符,数据类型 TEXT:>运算符,例如a>b,如果a的值大于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt等于== TAG:关系运算符,运算符,数据类型 TEXT:>运算符,例如a>b,如果a的值大于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt大于等于>= TAG:关系运算符,运算符,数据类型 TEXT:>运算符,例如a>b,如果a的值大于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt小于等于<= TAG:关系运算符,运算符,数据类型 TEXT:>运算符,例如a>b,如果a的值大于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt不等于!= TAG:关系运算符,运算符,数据类型 TEXT:!=运算符,例如a==b,如果a的值不等于b,返回数值1(逻辑真),否则返回数值0(逻辑假)。 REF: .TXT,关系运算符.txt逻辑运算符 TAG:运算符,数据类型 TEXT:逻辑运算符进行逻辑运算。优先级:!运算级别最高、&&运算与||运算同级。!运算的优先级高于算术运算符,而&&和||运算则低于关系运算符。 结合方向:逻辑非(单目运算符)具有右结合性;逻辑与和逻辑或(双目运算符)具有左结合性。 REF: .TXT,&&运算符.txt,||运算符.txt,!运算符.txt 逻辑非 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:!逻辑与运算符,单目运算符,右结合,如果参与运算的数据为真,返回假;参与运算的数据为假则返回真。在C语言中没有逻辑类型,如果数字的值不为0,就认为它的逻辑值为真,反之为假。 REF: .TXT,逻辑运算符.txt逻辑与 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:&&逻辑与运算符,只有当运算符两侧的数据都为真时,结果为真,否则结果为假。在C语言中没有逻辑类型,如果数字的值不为0,就认为它的逻辑值为真,反之为假。 REF: .TXT,逻辑运算符.txt逻辑或 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:||逻辑与运算符,只有当运算符两侧的数据都为假时,结果为假,否则结果为真。在C语言中没有逻辑类型,如果数字的值不为0,就认为它的逻辑值为真,反之为假。 REF: .TXT,逻辑运算符.txt赋值运算符 TAG:运算符,数据类型 TEXT:赋值表达式是由赋值运算符(=)连接表达式(右侧)和变量(左侧)。既将赋值运算符右侧的表达式的结果值赋予赋值运算符左侧的变量,表达式可以是常量、变量、表达式和另外一个赋值表达式。
REF: .TXT,基本赋值运算符 复合赋值运算符 条件运算符 TAG:运算符,数据类型 TEXT:条件运算符是C语言中唯一的一个三目运算符,它要求有三个运算对象,每个运算对象的类型可以是任意类型的表达式(包括任意类型的常量、变量和返回值为任意类型的函数调用)。 一般形式: <表达式1>?<表达式2>:<表达式3> 计算过程是:计算<表达式1>的值,如果为真(非0),则计算<表达式2>的值,并将<表达式2>的值作为整个条件表达式的结果值;如果为假(0),则计算<表达式3>的值,并将<表达式3>的值作为整个条件表达式的结果值。就是说,根据条件的真/假,只能选择一个表达式的结果作为整个表达式的结果。 优先级:高于赋值运算符,低于逻辑关系运算符。例如a>b?x=3,x=5;如果a>b则x的值为3,反之为5。 REF: .TXT,逗号运算符 TAG:运算符,数据类型 TEXT:逗号表达式是由逗号运算符(,)与两个以上的表达式连接而成。其结果是最后一个表达式的结果值。逗号表达式可以是任何类型。 一般形式: <表达式1>,<表达式2>,贩<表达式n> 计算过程:依次计算<表达式1>的值,<表达式2>的值,…,<表达式n>的值,最后将<表达式n>的值作为整个表达式的结果值。因此逗号表达式又称为“顺序求值运算”。 优先级:所有运算符中级别最低。 结合方向:自左向右(左结合性) 例如:int a=2,c; float b=5.2; c=a,2*a,2*b的结果为10.4(最后一个表达式的值),因为逗号表达式的求值顺序是:先计算c=a,将a的值赋给c(c=2),其此计算2*a的值(为4),最后计算2*b的值(为10.4)。当整个表达式计算结束后,c的值为2,整个表达式的值为10.4。 REF: .TXT,bsizeof运算符 TAG:运算符,数据类型 TEXT:sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
REF: .TXT,类型转换 隐式转换 显式转换 位运算符 TAG:运算符,数据类型 TEXT:在C语言中,位运算符是为了描述系统而设计的位运算,它的设计目标是为了取代汇编语言。位运算是对字节或字中的位(bit)进行测试或移位处理。运算符是对c语言中的字符型(char)或整型(int)数据的操作,而不能用于其他类型。例如:float、double等。位运算符分为位逻辑运算符和移位运算符。
REF: .TXT,&运算符.txt,|运算符.txt,运算符.txt,^运算符.txt
位逻辑与 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:&逻辑与运算符,按位与。如2的二进制数是0010,7的二进制数是0111 2&7的值为2(0010)。 REF: .TXT,逻辑运算符.txt位逻辑或 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:|逻辑与运算符,按位或。如2的二进制数是0010,7的二进制数是0111 2|7的值为7(0111)。 REF: .TXT,逻辑运算符.txt位逻辑反 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:逻辑与运算符,单目运算符,右结合,对运算数按位取反。 REF: .TXT,逻辑运算符.txt位逻辑异或 TAG:逻辑运算符,算数运算符,运算符,数据类型 TEXT:^逻辑与运算符,按位异或(位相异则或,否则为0)。如2的二进制数是0010,7的二进制数是0111 2^7的值为5(0101)。 REF: .TXT,逻辑运算符.txt

2. C语言中的运算符

简单赋值运算符记为“=”,由“= ”连接的式子称为赋值表达式。欢迎大家阅读!更多相关信息请关注相关栏目!

无论是加减乘除还是大于小于,都需要用到运算符,在C语言中的运算符和我们平时用的基本上都差不多。运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。大多数运算符都是二目运算符,即运算符位于两个表达式之间。单目运算符的意思是运算符作用于单个表达式。(具体什么是表达式下一节再说)

C语言中的运算符

无论是加减乘除还是大于小于,都需要用到运算符,在C语言中的运算符和我们平时用的基本上都差不多。运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。大多数运算符都是二目运算符,即运算符位于两个表达式之间。单目运算符的意思是运算符作用于单个表达式。(具体什么是表达式下一节再说)

一、赋值运算符

赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。

注意:赋值语句左边的变量在程序的其他地方必须要声明。

得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。常数只能作为右值。

例如:

count=5;

total1=total2=0;

第一个赋值语句大家都能理解。

第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。这样它先total2=0;然后total1=total2;那么我们这样行不行呢?

(total1=total2)=0;

这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。

二、算术运算符

在C语言中有两个单目和五个双目运算符。

符号

功能

单目正

单目负

乘法

除法

取模

加法

减法

下面是一些赋值语句的例子,

在赋值运算符右侧的表达式中就使用了上面的算术运算符:

Area=Height*Width;

num=num1+num2/num3-num4;

运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。

取模运算符(%)用于计算两个整数相除所得的余数。例如:

a=7%4;

最终a的结果是3,因为7%4的余数是3。

那么有人要问了,我要想求它们的商怎么办呢?

b=7/4;

这样b就是它们的商了,应该是1。

也许有人就不明白了,7/4应该是1.75,怎么会是1呢?这里需要说明的是,当两个整数相除时,所得到的结果仍然是整数,没有小数部分。要想也得到小数部分,可以这样写7.0/4或者7/4.0,也即把其中一个数变为非整数。

怎样由一个实数得到它的整数部分呢?这就需要用强制类型转换了。例如:

a=(int)

(7.0/4);

因为7.0/4的值为1.75,如果在前面加上(int)就表示把结果强制转换成整型,这就得到了1。那么思考一下a=(float)

(7/4);最终a的结果是多少?

单目减运算符相当于取相反值,若是正值就变为负值,若是负数就变为正值。

单目加运算符没有意义,纯粹是和单目减构成一对用的。

三、逻辑运算符

逻辑运算符是根据表达式的值来返回真值或是假值。其实在C语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。

符号

功能

&&

逻辑与

逻辑或

逻辑非

例如:

5!3;

0||-2&&5;

!4;

当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。逻辑非(!)运算是把相应的变量数据转换为相应的真/假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。

还有一点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。例如:

a=2,b=1;

a||b-1;

因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。

四、关系运算符

关系运算符是对两个表达式进行比较,返回一个真/假值。

符号

功能

>

大于

<

小于

>=

大于等于

<=

小于等于

等于

不等于

这些运算符大家都能明白,主要问题就是等于==和赋值=的区别了。

一些刚开始学习C语言的人总是对这两个运算符弄不明白,经常在一些简单问题上出错,自己检查时还找不出来。看下面的代码:

if(Amount=123)

很多新人都理解为如果Amount等于123,就怎么样。其实这行代码的意思是先赋值Amount=123,然后判断这个表达式是不是真值,因为结果为123,是真值,那么就做后面的。如果想让当Amount等于123才运行时,应该if(Amount==123)

……

3. C语言算术运算符是哪些

七个


*
/
%
++
--
加减乘除不用我说了吧
"%"求余,就是算除法,值是他的余数
"/"这个是除法,但是有一点注意,两边操作数全为整数时,值是取整的。
“++”是自加,比如说i++就是i的值自动加1,规则是i++是鲜赋值再自加,++i是先自加再赋值。举个例子a=i++这个是先把i的值赋给a,然后i再自加。a=++i是i先自加,然后把自加之后的值赋给a。
“--”是自减,和自加的规则相同,只是值是自动减一。
C语言的运算符可分为以下几类:
1.
算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.
关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(=
=)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3.
逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.
位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
5.
赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.
条件运算符:这是一个三目运算符,用于条件求值(?:)。
7.
逗号运算符:用于把若干表达式组合成一个表达式(,)。
8.
指针运算符:用于取内容(*)和取地址(&)二种运算。
9.
求字节数运算符:用于计算数据类型所占的字节数(sizeof)。
10.
特殊运算符:有括号(),下标[],成员(→,.)等几种。

4. c语言怎么进行算术运算

#include "stdio.h" void main() { int a,b,c; scanf("%d%d",&a,&b); c=a+b; printf("%d\n",c); getch(); }

具体如下:
1、简介C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
2、基本介绍
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。最近25年是使用最为广泛的编程语言。
3、运算
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。

5. C语言中什么是算术运算

七个

+ - * / % ++ --

加减乘除不用我说了吧

"%"求余,就是算除法,值是他的余数

"/"这个是除法,但是有一点注意,两边操作数全为整数时,值是取整的。

“++”是自加,比如说i++就是i的值自动加1,规则是i++是鲜赋值再自加,++i是先自加再赋值。举个例子a=i++这个是先把i的值赋给a,然后i再自加。a=++i是i先自加,然后把自加之后的值赋给a。

“--”是自减,和自加的规则相同,只是值是自动减一。

C语言的运算符可分为以下几类:
1. 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2. 关系运算符:用于比较运算。包括大于(>)、小于()、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3. 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4. 位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<>)六种。
5. 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6. 条件运算符:这是一个三目运算符,用于条件求值(?:)。
7. 逗号运算符:用于把若干表达式组合成一个表达式(,)。
8. 指针运算符:用于取内容(*)和取地址(&)二种运算。
9. 求字节数运算符:用于计算数据类型所占的字节数(sizeof)。
10. 特殊运算符:有括号(),下标[],成员(→,.)等几种。

6. C语言34种运算符

34种运算符:

01、圆括号()

02、下标[]

03、指针型结构成员->

04、结构成员.

05、逻辑非!

06、位非~

07、自增++

08、自减--

09、取负-

10、类型转换(类型)

11、取内容*

12、取地址&

13、求字节sizeof

14、乘*

15、除/

16、求余%

17、加+

18、减-

19、左移<<

20、右移>>

21、小于<

22、小于等于<=

23、大于>

24、大于等于>=

25、等于==

26、不等于!=

27、位与&

28、位异或^

29、位或|

30、&&与

31、或||

32、条件运算?:

33、赋值运算=

34、逗号运算,

(6)算子C语言扩展阅读

9种控制语句

1、if()~else条件语句

2、for()~循环语句

3、while()~循环语句

4、do~while()循环语句

5、continue结束本次循环语句

6、break中止执行switch或循环语句

7、switch多分支选择语句

8、goto转向语句

9、return从函数返回语句

7. C语言 算术表达式

1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.关系运算符
用于比较运算。包括大于(>)、小于(=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符
用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<>)六种。
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符
这是一个三目运算符,用于条件求值(:)。
7.逗号运算符
用于把若干表达式组合成一个表达式(,)。
8.指针运算符
用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符
有括号(),下标[],成员(→,.)等几种。

8. C语言中,有哪些算术运算符

C语言中算术运算符有以下这些

实例:

#include<stdio.h>

intmain()

{

inta=21;

intb=10;

intc;

c=a+b;

printf("Line 1 - c 的值是 %d ",c);

c=a-b;

printf("Line 2 - c 的值是 %d ",c);

c=a*b;

printf("Line 3 - c 的值是 %d ",c);

c=a/b;

printf("Line 4 - c 的值是 %d ",c);

c=a%b;

printf("Line 5 - c 的值是 %d ",c);

c=a++; // 赋值后再加 1 ,c 为 21,a 为 22

printf("Line 6 - c 的值是 %d ",c);

c=a--; // 赋值后再减 1 ,c 为 22 ,a 为 21

printf("Line 7 - c 的值是 %d ",c);

return0;

}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 21
Line 7 - c 的值是 22

(8)算子C语言扩展阅读:

C语言中,除了算数运算符,还提供以下运算符:

1、关系运算符

2、逻辑运算符

3、位运算符

4、赋值运算符

5、杂项运算符

运算符优先级:

C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。

在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

运算符结合性:

C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。

如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。

最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。

其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的 真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。

9. C语言编程问题 分解一个数 使得算子最少。

#include<stdio.h>
intmain()
{
inta[7]={100,50,20,10,5,2,1};
intb[7]={0};
intn,i;
scanf("%d",&n);
for(i=0;i<7;i++)
{
b[i]=n/a[i];
n-=a[i]*b[i];
printf("%d元:%d张 ",a[i],b[i]);
}
return0;
}

10. 求soble算子和prewitt算子源代码,用C语言编的!用于数字图像处理!

自己以前图像处理的时候写的,用的是C++, 不过处理流程一样的,可以参考一下

//Soble
void CBmp::RhSobel()
{
double temp[9];
DWORD m_Y=m_pInfo->bmiHeader.biHeight;
DWORD m_X=WIDTH((m_pInfo->bmiHeader.biWidth)*(m_pInfo->bmiHeader.biBitCount));
BYTE *m_B=(BYTE *) new char[m_Y*m_X];
for(int d=0;d<m_nPixels;d++)
{
m_B[d]=m_pPixels[d];
}
if((m_pInfo->bmiHeader.biBitCount)==24)
for(int i=1;i<m_Y-1;i++)
for(int j=3;j<(m_X-2);j+=3)
{
for(int n=0;n<9;n+=3)
{
temp[n]=(m_B[(i-1+n/3)*m_X+j-3]+m_B[(i-1+n/3)*m_X+j-2]+m_B[(i-1+n/3)*m_X+j-1])/3;
temp[n+1]=(m_B[(i-1+n/3)*m_X+j]+m_B[(i-1+n/3)*m_X+j+1]+m_B[(i-1+n/3)*m_X+j+2])/3;
temp[n+2]=(m_B[(i-1+n/3)*m_X+j+3]+m_B[(i-1+n/3)*m_X+j+4]+m_B[(i-1+n/3)*m_X+j+5])/3;
}
m_pPixels[i*m_X+j]=m_pPixels[i*m_X+j+1]=m_pPixels[i*m_X+j+2]=//
(BYTE((abs(temp[2]+2*temp[5]+temp[8]-//
temp[0]-2*temp[3]-temp[6])+
abs(temp[0]+2*temp[1]+temp[2]-//
temp[6]-2*temp[7]-temp[8]))));
}
else
for(int i=1;i<(m_Y-1);i++)
{
for(int j=1;j<(m_X-1);j++)
{
m_pPixels[i*m_X+j]=(abs(m_B[(i-1)*m_X+j+1]+(2*m_B[(i)*m_X+j+1])+m_B[(i+1)*m_X+j+1]-//
m_B[(i-1)*m_X+j-1]-(2*m_B[(i)*m_X+j-1])-m_B[(i+1)*m_X+j-1])+
abs(m_B[(i-1)*m_X+j-1]+(2*m_B[(i-1)*m_X+j])+m_B[(i-1)*m_X+j+1]-//
m_B[(i+1)*m_X+j-1]-(2*m_B[(i+1)*m_X+j])-m_B[(i+1)*m_X+j+1]));
}
}
}

//Prewitt
void CBmp::ByPrewitt()
{
double temp1,temp2;
DWORD m_Y=m_pInfo->bmiHeader.biHeight;
DWORD m_X=WIDTH((m_pInfo->bmiHeader.biWidth)*(m_pInfo->bmiHeader.biBitCount));
BYTE *m_B=(BYTE *) new char[m_Y*m_X];
for(int d=0;d<m_nPixels;d++)
{
m_B[d]=m_pPixels[d];
}
if(m_pInfo->bmiHeader.biBitCount==8)
for(int i=1;i<(m_Y-1);i++)
{
for(int j=1;j<(m_X-1);j++)
{
temp1=abs(m_B[(i-1)*m_X+j+1]-m_B[(i-1)*m_X+j-1]+m_B[i*m_X+j+1]-//
m_B[i*m_X+j-1]+m_B[(i+1)*m_X+j+1]-m_B[(i+1)*m_X+j-1]);
temp2=abs(m_B[(i-1)*m_X+j-1]+m_B[(i-1)*m_X+j]+m_B[(i-1)*m_X+j+1]-//
m_B[(i+1)*m_X+j-1]-m_B[(i+1)*m_X+j]-m_B[(i+1)*m_X+j+1]);
m_pPixels[i*m_X+j]=(temp1>temp2?temp1:temp2);
}
}
else
{
Hui();
for(int i=1;i<(m_Y-1);i++)
{
for(int j=3;j<(m_X-5);j+=3)
{
temp1=abs(m_B[(i-1)*m_X+j+3]-m_B[(i-1)*m_X+j-3]+m_B[i*m_X+j+3]-//
m_B[i*m_X+j-3]+m_B[(i+1)*m_X+j+3]-m_B[(i+1)*m_X+j-3]);
temp2=abs(m_B[(i-1)*m_X+j-3]+m_B[(i-1)*m_X+j]+m_B[(i-1)*m_X+j+3]-//
m_B[(i+1)*m_X+j-3]-m_B[(i+1)*m_X+j]-m_B[(i+1)*m_X+j+3]);
m_pPixels[i*m_X+j]=m_pPixels[i*m_X+j+1]=m_pPixels[i*m_X+j+2]=(temp1>temp2?temp1:temp2);
}
}
}
}