C学习笔记(五)运算符、表达式和语句

基本运算符

基本算术运算的运算符:=、+、-、*、/。(C没有指数运算符,用pow()函数代替)

赋值运算符=

赋值运算符=把右边的变量或者表达式的值赋给右边的变量。

#include <stdio.h>
int main(void)
{
int jane,tarzan,cheeta;

cheeta=tarzan=jane=68;
printf("                        cheeta tarzan jane\n");
printf("First round score %4d %8d %8d\n",cheeta,tarzan,jane);
return 0;
}

结果如下

                       cheeta tarzan jane
First round score       68      68    68  

加法运算符+

加法运算符+把两边的值加起来。

income=salary+bribes;
printf("%d",4+20);

减法运算符-

减法运算符-从前面的数减去后面的数。

takehome=224.00-24.00;

+和-运算符被称为二元或双值运算符,这表示它们需要两个操作数。

符号运算符-和+

这两个运算符用于指示一个值的代数符号。

rocky=-12;
smokey=+12;

乘法运算符*

表示两数相乘。

cm=2.45*inch;

除法运算符/

用/表示除法。

整型数的除法和浮点数的除法有很大不同。浮点数除法得到浮点数结果,整数除法得到整数结果。但是整数不能有小数部分,当3去除5的时候,小数部分会被丢弃。

在C中,整数除法结果的小数部分会被丢弃,这个过程叫截尾。

#include <stdio.h>
int main(void)
{
printf("integer division: 5/4 is %d \n",5/4);
printf("integer division: 6/3 is %d \n",6/3);
printf("integer division: 7/4 is %d \n",7/4);
printf("floating division: 7./4. is %1.2f \n",7./4.);
printf("mixed division:7./4 is %1.2f \n",7./4);
return 0;
}

结果如下

integer division: 5/4 is 1
integer division: 6/3 is 2
integer division: 7/4 is 1
floating division: 7./4. is 1.75
mixed division: 7./4 is 1.75

截尾是不会先四舍五入的,会直接将小数部分截掉。

当混合类型进行除法时,编译器会将两个操作数转变成一致的类型。

运算符的优先级

 

其他运算符

sizeof运算符和size_t类型

#include <stdio.h>
int main(void)
{
int n=0;
size_t intsize;
intsize = sizeof(int);
printf("n=%d,n has %zd bytes;all ints have %zd bytes.\n",
        n,sizeof n,intsize);
return 0;
}    

sizeof运算符以字节为单位返回其操作数的大小。操作数可以是具体数据对象(如一个变量),或者一个类型(如float)。如果是一个类型,就必须放在括号里。

C规定sizeof返回size_t类型的值。这是一个无符号整数类型,它不是新类型,而是根据标准类型定义的。

C有一个typedef机制,它允许为已有的类型创建一个别名。例如:

typedef double real;

取模运算符%

取模运算符用于整数运算。它计算出两数相除的余数。

增量和减量运算符++和--

 增量运算符将操作数的值加1.它有两种方式出现,++出现在变量前面是前缀模式,在变量后面是后缀模式。

#include <stdio.h>
int main(void)
{
int ultra=0,super=0;
while(super<5)
{
super++;
++ultra;
printf("super=%d,ultra=%d\n",super,ultra);
}
return 0;
}

输出结果如下

super=1,ultra=1
super=2,ultra=2
super=3,ultra=3
super=4,ultra=4
super=5,ultra=5

上面程序中的两个增量运算符语句等价于

super=super+1;
ultra=ultra+1;

当然前缀模式和后缀模式是有区别的,以下示例显示了区别

#include <stdio.h>
int main(void)
{
int a=1,b=1;
int aplus,plusb;

aplus=a++;
plusb=++b;
printf("a aplus b plusb \n");
printf("%1d %5d %5d %5d\n",a,aplus,plusb);
return 0;
}

结果如下

a     aplus      b       plusb
2        1       2         2

前缀和后缀增量的区别就在于a++是使用a的值后再自增,++a是自增后再使用a的值。

当然这是当它们和其他运算合用的时候才会有的区别,单独使用增量运算符时是没有区别的。

自增运算符的优先级

增量和减量运算符有很高的优先级,只有圆括号比它们的优先级高。

不要太聪明

 如果一次使用太多的增量运算符,就会出现不期望的结果。

while(num<21)
{
printf("%10d %10d\n",num,num*num++);
}

这个程序看起来合理,其实它只能在某些系统上正常工作。问题是当printf()获取要打印的值时,它可能先计算最后一个参数的值,从而在计算其他参数之前增加num的值。所以,结果不会是:

5       25

而可能是:

6       25

另一个不确定的语句是:

ans=num/2+5*(1+num++);

在C中,编译器决定先计算哪个的值,所以如果先计算了num++,那么和先计算num/2就会是两个不同的结果。

通过两个原则避免这些问题:

如果一个变量出现在同一个函数的多个参数中时,不要将增量或减量运算符用于它上面。

当一个变量多次出现在一个表达式里时,不要将增量或减量运算符用于它上面。

表达式和语句

 表达式(expression)是由运算符和操作数组合构成的。简单的表达式是一个单独的操作数。下面是一些表达式:

4
-6
a*(b+c/d)/20
q=5*2
x=++q%3
q>3

每一个表达式都有一个值

这是表达式最重要的属性。例如,

-4+6,值为2

c=3+8,值为11

5>3,值为1

6+(c=3+8),值为17

语句

语句是一条完整的计算机指令。在C中,语句用结束处的一个分号标识。

#include <stdio.h>
int main(void)              /*求出前20个整数的和*/
{
int count,sum;              /*声明语句*/

count=0;                    /*赋值语句*/
sum=0;
while(count++<20)
     sum=sum+count;
printf("sum=%d\n",sum);     /*函数语句*/
return 0;
}

 声明语句用来声明变量。

赋值语句为变量赋值。

函数语句引起函数的执行。

while语句被称为结构化语句。

原文地址:https://www.cnblogs.com/hahazexia/p/3022993.html