购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第3章

C语言运算符

在C语言中,使用常用的运算符将变量或者常量等进行相应的运算操作,可以提高其编程效率。这些运算符包括赋值运算符、算术运算符、逻辑运算符和关系运算符等。用户实际编程时,为了更好地利用运算符实现相应的功能,必须对其功能和使用方法非常熟悉。在本章中,将主要介绍这些运算符的功能及其使用方法等相关的基础知识。

3.1 C语言常用运算符

C语言常用运算符的种类有很多,并且各个种类的功能和使用方法都是不相同的。为了使运算符能够更好地发挥作用,读者需要对这些运算符进行深入的学习,并且能够掌握其具体的使用规则。在本节中,将具体讲解C语言常用运算符的种类及其相应的功能和使用方法等。

3.1.1 赋值运算符

在C语言中,经常会用到的运算符是赋值运算符,该运算符使用符号“=”进行标识。虽然赋值运算符的标识符是数学上的等号,但是其意义却大不相同。当用户使用赋值运算符进行功能实现时,主要是将一个已知的值赋给已经定义的变量并初始化。一般情况下,赋值运算符的使用原型如下:

变量标识符=变量初始化值; //使用赋值运算符初始化变量

根据其使用原型,可以知道赋值运算符的使用非常简单。不论是什么类型的变量,都可以使用该运算符进行赋值操作。例如,用户需要在程序中使用赋值运算符为不同类型的变量进行初始化,并将初始化后的变量输出显示。具体的代码如下:

#include<stdio.h> //包含输入输出头文件

main() //主函数开始

{

int a=10; //定义并初始化整型变量

char sz='c'; //定义并初始化字符型变量

float f=1.245245; //定义并初始化单精度变量

printf("%d\n",a); //输出各变量的值

printf("%c\n",sz);

printf("%1f\n",f);

return 0; //程序正常结束

}

在程序中,可以看到变量的初始化操作非常简单。仅使用赋值运算符就可以将指定的值赋给相应的变量。为了验证赋值运算符的具体功能,程序运行后会将初始化的变量值输出显示,如图3.1所示。程序运行后,将使用赋值运算符初始化的变量值都进行了输出显示。通过程序运行结果与初始值的比较,用户可以非常明确地知道赋值运算符的具体功能。

图 3.1 程序运行结果

注意 在使用赋值运算符时,一定要避免将该运算符与等号的功能混淆。

3.1.2 算术运算符

算术运算符是指用于实现算术计算的运算符,包括基本的算术操作,即加、减、乘、除。在使用时,这四种基本的算术运算符可以使用标识符“+”、“-”、“*”、“/”分别进行标识。在本小节中,将分别介绍这四种算术运算符的使用原型及其使用方法等基础知识。

1. 加法运算符

加法运算符可以实现两个数据之间的加法运算操作。使用该运算符后,程序将返回参与运算的两个数据相加后的结果。加法运算符的使用格式如下:

数据1+数据2; //加法运算符的使用格式

在使用格式中,数据1和数据2的类型必须是相同的。否则,必须通过强制类型转换将两个数据的类型转换成相同类型以后,才能够使其计算的结果正确。例如,用户在程序中,分别实现两个整型变量的加法运算和不同类型变量之间的加法运算,并输出相应的计算结果。具体代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

int sc=30; //定义并初始化整型变量

int sc1=40;

float f1=1.2545; //定义并初始化单精度变量

int f2=3;

int num=0;

num=sc+sc1; //使用加法运算符实现整型数据之间的相加

printf("两个整型变量计算的结果是:%d\n\n",num); //输出计算结果

num=0; //重新初始化结果变量

num=((it)f1+f2; //进行强制类型转换,并进行加法计算

printf("单精度和整型变量计算的结果是:%d\n",num); //输出计算结果

return 0; //程序正常返回

}

在实例代码中,分别定义了不同类型的变量并进行了初始化。通过使用加法运算符,将两个相同类型的变量和不同类型的变量相加,返回其计算结果并输出。该实例程序运行后的结果如图3.2所示。程序运行之后会显示加法计算后的结果。但是,当单精度变量和整型变量相加后,其计算结果却等于4。这是因为在代码段“num=((it)f1+f2;”中,f1是通过强制类型转换为整型变量的。所以,f1的值1.2545会被转换为整数1,即变量num=1+3=4。

图 3.2 程序运行结果

注意 使用强制类型转换时,含有小数点的数据会被用四舍五入的方法对小数点以后的数据省略。另外,加法运算符不能使用在单个字符或多个字符的运算之中。

2. 减法运算符

减法运算符的功能是实现两个数据之间的减法运算操作。其具体的使用格式如下:

数据1-数据2;

//减法运算符的使用格式

与加法运算符一样,参与运算的两个数据类型可以是相同的,也可以是不相同的。例如,用户可以使用减法运算符实现不同类型变量之间的减法运算。具体代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

float f1=1.2545; //定义并初始化单精度变量

int f2=3;

int num=0;

num=((it)f1-f2; //进行强制类型转换,并进行减法计算

printf("单精度和整型变量计算的结果是:%d\n",num); //输出计算结果

return 0; //程序正常返回

}

在实例代码中,将不同类型的变量使用减法运算符连接,以实现数据间的减法操作。实例程序运行后,将输出f1和f2相减后的结果,如图3.3所示。

图 3.3 实例程序运行结果

注意 不能够将减法运算运用在字符数据的运算中。

3. 乘法运算符

乘法运算符的作用是实现两个数据之间的乘法运算。该运算符使用符号“*”标识,具体使用格式如下:

数据1*数据2; //乘法运算符的使用格式

例如,在程序中,使用乘法运算符实现数据a和数据b的乘法运算。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

int a=10; //定义并初始化整型变量a

float b=2.5; //定义并初始化单精度变量

float c=0.0;

c=a*b; //实现数据间的乘积运算

printf("使用乘法运算符后的乘积等于:%1f\r\n",c); //输出计算后的结果

return 0;

}

当实例程序编译、运行以后,程序将输出变量a和变量b的乘积,如图3.4所示。

4. 除法运算符

图 3.4 程序运行结果

除法运算符使用符号“/”标识,表示计算两个数据之间的商。其使用格式如下:

商=数据1/数据2; //除法运算符使用格式

例如,定义了两个数据,分别为10和2.65,使用除法运算符对这两个数据进行除法运算。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

int a=10; //定义并初始化整型数据

float f=2.65; //定义并初始化单精度数据

float f1=0.0;

f1=a/f; //使用除法运算符获取数据相除后的商

printf("使用除法运算符计算后的商是:%1f\r\n",f1); //输出计算结果

return 0;

}

上面的实例代码运行之后,将输出变量a和变量f之间的商,如图3.5所示。

图 3.5 程序运行结果

注意 在编程时,一定不要将除法运算符“/”书写为“\”,否则,程序将出现不能识别符号的错误提示。

3.1.3 逻辑运算符

在C语言中,逻辑运算符的功能是实现数据间的逻辑运算操作。其中,常用的逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑运算后的结果只有两个,真或假。使用不同的逻辑运算,所得到的结果也是不相同的。在本小节中,将介绍各种逻辑运算符的功能及其使用方法等。

1. 逻辑运算符的功能及其使用格式

在实际编程时,逻辑运算符会根据参与运算的两个变量值相同或者不同,而返回不同的逻辑运算结果。由于参与逻辑非运算的变量只能有一个,所以具体的逻辑运算规则也会有所不同,如表3.1和表3.2所示。

表3.1中列出了逻辑与和逻辑或运算符,根据不同的变量将得到不同的运算结果。一般情况下,在逻辑或运算中,只要参与运算的变量中有一个为真,即1,则逻辑或运算的结果就为真。而在逻辑与运算中,只有参与运算的变量都为真,则逻辑与运算的结果才为真。否则,逻辑运算后的结果都为假,即0。

注意 在逻辑运算中,数字1表示真,而数字0则表示假。

在表3.2中列出了逻辑非运算符的运算规则。根据运算规则,逻辑非运算的实质就是将参与运算的变量进行反向取值。例如,参与运算的变量为真,则通过逻辑非运算后,其结果应该为假。基本了解了常用逻辑运算符的功能后,就可以在程序中使用这些逻辑运算符实现相应的功能。其具体的使用格式如下:

数据1&&数据2; //逻辑与运算符的使用格式

数据1||数据2; //逻辑或运算符的使用格式

!数据1; //逻辑非运算符的使用格式

注意 在实际编程时,一定要严格按照逻辑运算符的使用格式编写程序。否则,程序运行后,将不能实现预期的功能。

2. 逻辑运算符实例程序

通过前一小节对逻辑运算符的学习,读者应该掌握了逻辑运算符的相关功能和使用方法。这样,在实际编程时,可以直接使用这些逻辑运算符实现其相应的功能。例如,使用常用的逻辑运算符,可以非常方便地判断两个数据是否相同,并且根据判断结果输出提示语。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数开始

{

char c1='M'; //定义并初始化字符变量

char c2='M';

char c3='n';

if(c1=='M'&&c2=='M') //通过逻辑与运算判断是否相同

{

printf("通过逻辑与运算,其结果是数据c1和c2的值是相同的!"); //输出判断结果

}

if(c2=='M'&&c3=='n') //判断

{

printf("通过逻辑与运算,其结果是数据c2和c3的值是不相同的!"); //输出提示语

}

if(c1=='M'||c2=='M') //使用逻辑或运算符判断数据相同

{

printf("通过逻辑或运算,其结果是数据c1和c2的值是相同的!"); //输出提示语

}

if(c2=='M'||c3=='n')

{

printf("通过逻辑或运算,其结果是无法判断数据c2和c3的值是否相同!"); //输出提示语

}

return 0; //程序正常结束

}

在实例程序中,分别使用逻辑与和逻辑或运算符对字符变量c1、c2和c3的值进行了判断。程序运行后,将根据判断结果输出不同的提示语,如图3.6所示。程序将根据逻辑运行的结果,输出相应的提示语。但是,对于逻辑或运算而言,当出现不同的运算条件时,其运算后的结果是不能够准确判断的。

图 3.6 程序运行结果

注意 实际编程时,也可以将参与逻辑运算的逻辑值直接设置为真或者假。当然,也可以是复杂的表达式。

3.1.4 关系运算符

关系运算符的功能是对两个表达式或者变量进行比较,其比较的结果为真或假。在C语言中,常用的关系运算符有6种,分别是大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=)和等于(==)。通过关系运算后,如果关系表达式成立,则返回真;否则,返回假。在本小节中,将讲解关系运算符的功能及其使用方法等。一般情况下,关系运算的结果根据关系表达式的比较结果不同而不同,其具体作用如表3.3所示。

通过对表3.3的学习,读者应当可以很快地掌握关系运算符的作用及其使用方法。例如,在程序中,分别定义两个相同类型的变量a1和a2。通过使用关系运算符对其进行比较,并将比较的结果输出。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

int a1=10; //定义并初始化整型变量

int a2=11;

while(1) //while循环

{

if(a1>a2) //判断a1是否大于a2

{

printf("数据a1大于a2\n"); //输出提示语

}

else

{

if(a1<a2) //判断a1是否小于a2

{

printf("数据a1小于a2\n"); //输出提示语

}

else

{

if(a1==a2) //判断a1是否等于a2

{

printf("数据a1等于a2\n");

}

else

{

if(a1!=a2) //判断a1是否不等于a2

{

printf("数据a1不等于a2\n");

}

}

}

}

break; //跳出while循环

}

return 0;

}

在实例程序中,分别使用大于、小于、等于以及不等于几种关系运算符对变量a1和a2进行比较,并根据其比较后的结果输出不同的提示语,如图3.7所示。由于变量a1的值比变量a2的值小,所以程序输出了提示语“数据a1小于a2”。

图 3.7 程序运行结果

注意 可以将关系表达式所返回的结果作为逻辑运算中的条件使用。

3.1.5 三目运算符

在C语言中,三目运算符是唯一一个有三个变量同时参与运算的运算符。其具体的使用格式如下:

<表达式1>?<表达式2>:<表达式3> //三目运算符使用格式

在上面的使用格式中,表达式1表示三目运算符的运算条件,并且程序将根据该运算条件的真假,对后面的取值进行选择。如果表达式1的值为真,则三目运算符的运算结果为表达式2。否则,其运算结果将为表达式3。例如,在程序中,可以使用三目运算符对数据进行条件选择。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数开始

{

char sz[]="用户选择了C语言课程"; //定义并初始化字符数组

char sz1[]="用户没有选择C语言课程";

char s='C'; //定义并初始化字符变量

printf("第一次选择课程\n"); //输出提示语

printf("%s\n\n",s=='C'?sz:sz1); //输出数据

printf("第二次选择课程\n"); //输出提示语

s='A'; //重新赋值

printf("%s\n\n",s=='C'?sz:sz1);

return 0; //程序正常结束

}

在实例代码中,分别定义并初始化两个字符数组sz和sz1,并且通过三目运算符判断指定的字符变量s的值是否为字符“C”,如果两个值相同,则程序将输出“用户选择了C语言课程”;否则,程序将输出“用户没有选择C语言课程”,如图3.8所示。

注意 使用三目运算符时,既可以使用逻辑运算表达式作为判断条件,也可以直接使用布尔变量值作为判断条件。

图 3.8 实例程序运行结果

3.1.6 位运算符

在C语言中,位运算符的作用主要是针对每个二进制数据位进行相关的运算。其中,用户常用的位运算符包括按位与(&)、按位或(|)、按位异或(^)、左移(<<)以及右移(>>)等。在本章中,将分别介绍常用位运算符的功能及其使用方法等。实际上,位运算符的功能与前面介绍的逻辑运算符的功能是相同的。当然,两者之间也有所不同,前者主要用于二进制数据位的运算,而后者则适用于任何类型的数据运算。位运算符的具体作用如表3.4所示。

表3.4已经列出了常用位运算符的运算结果。这样,用户就可以直接使用表中所列出的运算结果编写程序。例如,在编程时,需要将定义的两个数据进行位运算,并且将运算后的结果进行输出。具体的代码如下:

#include<stdio.h> //包含头文件

main()

//主函数

{

int a=0110101; //定义并初始化整型数据

int a1=1011001;

int b=0; //定义并初始化中间整型变量

b=a&a1; //将数据进行按位与运算

printf("按位与运算结果:%d\n",b); //输出运算结果

b=a|a1; //进行按位或运算

printf("按位或运算结果:%d\n",b); //输出运算结果

a=a<<3; //进行左移运算

printf("左移运算结果:%d\n",a);

a=a>>3; //进行右移运算

printf("右移运算结果:%d\n",a);

b=a^a1; //进行异或运算printf("按位异或运算结果:%d\n",b);return 0; //程序正常结束}

在实例程序中,用户将数据a和a1分别进行按位与、按位或、左移、右移以及按位异或运算,并且将运算后的结果输出显示,如图3.9所示。

注意 用户使用位运算符时,要避免与逻辑运算符的使用方法混淆。

图 3.9 程序运行结果

3.2 单目运算符

在C语言中,单目运算符是指该运算符只被用于单个数据的运算,即参与运算的数据只有一个。用户在实际编程时,最为常用的单目运算符有前置运算符和后置运算符两种。在本节中,将分别介绍这两种单目运算符的定义和使用方法等。

3.2.1 前置单目运算符

前置单目运算符是指运算符在数据之前,即使用格式“运算符运算数据”表示。例如,前置加法单目运算符“++a”,表示变量“a”在使用前会被加1。在本小节中,将介绍前置单目运算符的相关使用方法等知识点。通常情况下,运算符在运算数据之前,都表示运算数据在调用之前需要进行相应的运算。例如,用户在实例代码中使用前置单目运算符对数据进行操作。具体代码如下:

#include<iostream.h> //包含相关头文件

main() //主函数开始

{

int in=0,i=0; //定义两个整型变量

cout<<"请用户输入一个整数:"<<endl; //输出提示语

cin>>in; //获取用户的输入

cout<<"用户用户希望自加多少次(6,12):"<<endl; //输出提示语

cin>>i; //获取用户的输入

switch(i) //根据用户的输入选择相应的功能

{

case 6: //如果用户选择次数为6

{

for(int m=0;m<6;m++) //使用for循环结构

{

++in; //在使用变量之前进行前置运算

cout<<"变量使用前置运算符自加"<<m<<"次"<<endl; //输出运算次数

}

cout<<"运算后的变量值为:"<<in<<endl; //输出最终的结果

break; //跳出该循环

}

case 12: //如果用户选择次数为12

{

for(int m1=0;m1<12;m1++) //使用for循环

{

++in; //使用变量之前进行前置运算

cout<<"变量使用前置运算符自加"<<m1<<"次"<<endl;

}

cout<<"运算后的变量值为:"<<in<<endl;

break;

}

default: //如果用户没有有效地进行选择

{

cout<<"输入错误!"<<endl; //输出提示语

break; //跳出该循环体

}

}

}

在实例代码中,用户根据所需要的次数对预定义的变量值进行前置加1操作。用户先将该实例代码复制到编译器中,进行保存、编译以及运行,实例程序运行后的结果如图3.10所示。

从实例程序运行结果来看,用户在程序中输入了数字“13”对变量“in”进行初始化操作,即代码中的05~06行代码。并且选择的循环次数为“6”,在循环的过程中,程序每次都会在变量“in”调用之前将其值进行加1操作。经过6次循环之后,变量“in”的值已经变成了“19”。可见,实例程序运行的结果是正确的。

如果用户在应用程序中,将循环的次数修改为“12”,则实例程序运行后的结果应该为“25”。为了验证用户的计算,可以将实例代码重新运行,并选择循环次数为“12”,实例程序运行结果如图3.11所示。

图 3.10 前置运算符实例程序运行结果

图 3.11 实例程序运行结果

提示 在运行实例程序结果中,用户的计算已经得到了证实。

用户经常使用到的前置单目运算符还包括“--a”,表示调用变量“a”之前,会将其值进行减1操作。其他的操作方法与“++a”的操作方法都是一样的。因此,在这里不再赘述,请用户参考前面的实例代码进行前置减法运算符的功能代码编写。

3.2.2 后置单目运算符

通常情况下,用户常用的前置单目运算符也可以将运算符放到运算数据之后,作为后置单目运算符使用。其基本格式为“a++”,表示程序在调用变量“a”之后,才将变量值进行加1操作。在本小节中,将介绍后置单目运算符的使用方法。例如,用户将上一小节中的实例代码修改,以实现后置单目运算符的功能。修改后的代码如下:

#include<iostream.h> //包含相关头文件

main() //主函数开始

{

int in=0,i=0; //定义两个整型变量

cout<<"请用户输入一个整数:"<<endl; //输出提示语

cin>>in; //获取用户的输入

cout<<"用户用户希望自加多少次(6,12):"<<endl; //输出提示语

cin>>i; //获取用户的输入

switch(i) //根据用户的输入选择相应的功能

{

case 6: //如果用户选择次数为6

{

for(int m=0;m<6;m++) //使用for循环结构

{

in++; //在使用变量之后进行后置运算

cout<<"变量使用后置运算符自加"<<m<<"次"<<endl; //输出运算次数

}

cout<<"运算后的变量值为:"<<in<<endl; //输出最终的结果

break; //跳出该循环

}

case 12: //如果用户选择次数为12

{

for(int m1=0;m1<12;m1++) //使用for循环

{

in++; //使用变量之后进行后置运算

cout<<"变量使用后置运算符自加"<<m1<<"次"<<endl;

}

cout<<"运算后的变量值为:"<<in<<endl;

break;

}

default: //如果用户没有有效地进行选择

{

cout<<"输入错误!"<<endl; //输出提示语

break; //跳出该循环体

}

}}

在实例代码中,用户主要是需要修改“for”循环结构体中的前置运算为后置运算,即实例代码段“in++;”,其他的代码可以不用进行修改。那么,用户将修改后的代码复制到VC++编译器中,进行保存、编译以及运行,实例程序运行后的结果如图3.12和图3.13所示。

注意 用户通过对后置单目运算符的学习,可以非常方便地实现数据操作。

图 3.12 变量循环6次后的运行结果

图 3.13 变量循环12次以后的运行结果

3.3 运算符实例程序

为了使读者能够深入理解C语言运算符的具体功能及其使用方法,将通过编写运算符实例程序向读者详细讲解常用运算符的使用方法及其相应的功能。例如,用户将C语言中常用的运算符应用到实例程序中,以实现相应的功能并将运算后的结果输出显示。具体的代码如下:

#include<stdio.h> //包含头文件

main() //主函数

{

int sc=30; //定义并初始化整型变量

int sc1=40;

float f1=1.2545; //定义并初始化单精度变量

int f2=3;

int num=0;

num=sc+sc1; //使用加法运算符实现整型数据之间的相加

printf("两个整型变量计算的结果是:%d\n\n",num); //输出计算结果

num=0; //重新初始化结果变量

num=((it)f1+f2; //进行强制类型转换,并进行加法计算

printf("单精度和整型变量计算的结果是:%d\n",num); //输出计算结果

num=((it)f1-f2; //进行强制类型转换,并进行减法计算

printf("单精度和整型变量相减后的结果是:%d\n",num); //输出计算结果

int a=10; //定义并初始化整型变量a

float b=2.5; //定义并初始化单精度变量

float c=0.0;

c=a*b; //实现数据间的乘积运算

printf("使用乘法运算符后的乘积等于:%1f\r\n",c);

//输出计算后的结果

char c1='M'; //定义并初始化字符变量

char c2='M';

char c3='n';

if(c1=='M'&&c2=='M') //通过逻辑与运算判断是否相同

{

printf("通过逻辑与运算,其结果是数据c1和c2的值是相同的!");

}

if(c2=='M'&&c3=='n')

{

printf("通过逻辑与运算,其结果是数据c2和c3的值是不相同的!");

}

if(c1=='M'||c2=='M') //使用逻辑或运算符判断数据相同

{

printf("通过逻辑或运算,其结果是数据c1和c2的值是相同的!");

}

if(c2=='M'||c3=='n')

{

printf("通过逻辑或运算,其结果是无法判断数据c2和c3的值是否相同!");

}

return 0; //程序正常返回

}

在实例程序中,用户分别实现了加法运算符、逻辑运算符以及乘法运算符的运算操作等,并且将运算后的结果输出显示。程序运行结果如图3.14所示。

注意 当用户使用逻辑运算符编写程序时,该类运算符经过运算后,返回的结果只能够为真或者假。这样,用户就可以根据其运算结果进行相应的判断。

图 3.14 实例程序运行结果

3.4 小结

在本章中,主要介绍了C语言常用运算符的种类及其具体的功能实现,并且通过实例程序编写,详细讲解了运算符的使用方法等。由于每个运算符实现的功能并不相同,所以本章重点在于如何熟练掌握运算符所实现的具体功能和使用方法,而其难点则在于这些运算符同时使用时,如何才能更好地处理运算符之间的操作关系。通过本章知识的学习,用户能够输入理解C语言运算符的功能和具体的功能程序编写方法。在第4章中,将讲解C语言中标准输入/输出方面的知识。

3.5 习题

1. 已知有两个整型变量a=1和b=2,试使用关系运算符“>”编写程序实现两个变量的比较。如果a大于b,则输出“YES”;否则,输出“NO”。

2. 将第1小题中的功能使用三目运算符进行实现。

3. 编写程序实现从输入流中获取数据,并将其作为初始化值赋给整型变量a,然后分别使用前置单目运算符和后置单目运算符对其进行运算,并输出运算后的结果。

4. 分别定义并初始化两个布尔变量bool1=0和bool2=1,使用逻辑与对其进行逻辑运算,并根据运算结果判断输出0还是1。 XeXRi3f53URfykPEiu5l/MhHqZbU5+apP95c4h67Ssvot0ugxpGSjYWXMn1bZrbT

点击中间区域
呼出菜单
上一章
目录
下一章
×