美文网首页c语言
c语言进阶 c和指针(三)

c语言进阶 c和指针(三)

作者: 我就是一个垃圾 | 来源:发表于2019-01-12 01:57 被阅读6次

这一篇主要写语句和操作符及表达式

一、if语句

if和while语句即使只有一句话最好也写上大括号,有格式感,这是我的风格

if和while语句可以循环嵌套

语句的三种形式

1) 第一种形式为基本形式:if

        if(表达式) 语句

其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

2) 第二种形式为: if-else

if(表达式) 

    语句1;

else 

    语句2;

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。

3) 第三种形式为if-else-if形式

前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:

     if(表达式1)

        语句1;

    else  if(表达式2) 

        语句2;

    else  if(表达式3) 

        语句3;

        … 

    else  if(表达式m) 

        语句m;

    else

        语句n;

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序

二、while语句

while语句的一般形式为:

    while(表达式) 语句

其中表达式是循环条件,语句为循环体。

while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

三、break和continue语句

break和continue语句都可以用在循环中,用来跳出循环(结束循环);break语句还可以用在switch语句中,用来跳出switch语句。

break语句

break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。

 注意:

break语句对if-else的条件语句不起作用;

在多层循环中,一个break语句只向外跳一层。

continue 语句

continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。

对比一下break和continue。

while的用法:

while(表达式1){

    ……

    if(表达式2)  break;

    ……

}

continue的用法:

while(表达式1){

    ……

    if(表达式2)  continue;

    ……

}

四、switch语句

C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:

switch(表达式){ 

    case 常量表达式1:  语句1;

    case 常量表达式2:  语句2;

    … 

    case 常量表达式n:  语句n;

    default:  语句n+1;

}

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

五、goto语句

跳转到相应的标签的代码

goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto 语句的使用格式为:

     goto  语句标号;

其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。

goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合

六、操作符

C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、<、<=)、位运算符(>>、<<、==、!=、<、<=)、逻辑运算符(!、||、&&)、条件运算符、(?:)指针运算符(&、*)、赋值运算符(=)、逗号运算符(,)、求字节运算符(sizeof)、强制类型转换运算符((类型名))、其他(下标[]、分量、函数);若按参与运算的对象个数,C语言运算符可分为单目运算符(如!)、双目运算符(如+、-)和三目运算符(如?:)

1.基本的算数运算符

(1). +加法运算或正值运算符

4+4、+5、

(2).- 减法运算或负值运算符

6-4、-10、-29

(3). *乘法运算

注意符号,不是x,而是*

(4). /除法运算

注意符号,不是÷,也不是\,而是/

整数除于整数,还是整数。1/2的值是0,这个并不是二分之一, 不会四舍五入,直接截断取值。

(5)%取余运算

取余:即两个整数相除之后的余数

注意:%两侧只能是整数,正负性取决于%左侧的数值

2.注意:

(1).当运算对象是负数时,不同机器的运算结果也可能是不同的。

(2).双目运算符两边的数值类型必须一致才能进行运算,所得结果也是相同类型的数值。

(3).双目运算符两边的数值类型如果不一致,必须由系统先进行一致性转换。

     转换规则:char->short->int->unsigned->long->double->float

(4).C语言规定,所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补零,转换长双精度数才能进行运算。

1.C语言提供了6种运算符

(1).&,按位与,规则:若两个相应额二进制位都为1,则该位的结果为1,否则为0.

(2).|,按位或,规则:两个相应的二进制位中只要有一个为1,则该位的结果为1,否则为0.

(3).^,按位异或,规则:若两个二进制位相同,则结果为0,不同则为1

(4).~,安慰求反,规则:安慰取反,即0变1,1变0

(5).<<,左移,将一个数的二进制位全部左移若干位,左移1位相当于乘2,左移n位,相当于乘2的n次方

(6).>>,右移,将一个数的二进制位全部右移若干位。不同系统下右移的结果不同,而在mac系统下:正数右移1位,相当于除以2,右移n位,相当于除以2的n次方(移动时,空缺的高位补零,移出的位数舍弃);负数

1.&&逻辑与

(1). 使用格式:

条件A && 条件B;

(2). 运算结果:

只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”

(3).运算过程:

总是先判断条件A是否成立

如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”

如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假”(逻辑与的“短路的运算”)

(4).注意:

1>.若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。 比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3)&& (a<5)

2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。比如 5&& 4的结果是1,为“真”;-6 && 0的结果是0,为“假”

2.|| 逻辑或

(1).使用格式:

条件A || 条件B;

(2).  运算结果:

当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。

(3).运算过程:

总是先判断条件A是否成立

如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”(逻辑或的“短路运算”)

如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”

例:逻辑或的结合方向是“自左至右”。比如表达式(a<3) || (a>5)

若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0

若a的值是2:先判断a<3,成立,停止判断。因此结果为1

因此,如果a的值在(-∞, 3)或者(5, +∞)范围内,结果就为1;否则,结果就为0

(4).注意:

  C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑或也适用于数值。比如 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。

3.! 逻辑非

(1).使用格式:

! 条件A;

(2).运算结果:

其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。

例:逻辑非的结合方向是“自右至左”。比如表达式! (a>5)

若a的值是6:先判断a>5,成立,再取反之后的结果为0

若a的值是2:先判断a>3,不成立,再取反之后的结果为1

因此,如果a的值大于5,结果就为0;否则,结果就为1

(3).  注意:

1>.可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是“真”,!!!(4>2)结果为0,是“假”

2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1

七、表达式

赋值表达式等等

注意左值和右值

八、优先级表格

相关文章

  • c语言进阶 c和指针(三)

    这一篇主要写语句和操作符及表达式 一、if语句 if和while语句即使只有一句话最好也写上大括号,有格式感,这是...

  • 深入理解C指针

    标签(空格分隔): C语言进阶 本文将会持续更新。。。。 指向指针的指针 在c语言中指针的操作时通过指针变量来实现...

  • c语言进阶 c和指针(五)

    这里讲一讲函数的可变参数列表和字符串和字符以及结构体联合体和动态内存分配 一、可变参数列表 C 语言允许定义参数数...

  • c语言进阶 c和指针(六)

    这一篇主要讲各种输入输出函数 一、流的概念 需要说明的是,现在基本上不建议用gets()了,c11中已经彻底取消了...

  • C语言进阶 c和指针(八)

    C语言常用头文件总结 序号 库类别头文件 1字符处理 ctype.h 2地区化 local.h 3数学函数 mat...

  • c语言进阶 c和指针(一)

    我打算写一个系列的c语言进阶的内容,基础的东西将不会罗列出来 我将按照《c和指针》这本书的顺序,并且加入自己的想法...

  • c语言进阶 c和指针(二)

    这一篇主要说一说数据 一、基本数据类型 C语言中只有四种基本数据类型——整形(字符也算是一种整形,枚举也算是一种整...

  • c语言进阶 c和指针(四)

    写一篇文章主要讲指针以及数组,内容源于朱有鹏老师的上课笔记,我懒了,直接拿过来用了 一.指针 4.3.1.指针到底...

  • c语言进阶 c和指针(七)

    这一篇主要讲各种标准函数库,每个函数库中有哪些函数,详细列表以及使用 一、stdio.h stdio .h 头文件...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

网友评论

    本文标题:c语言进阶 c和指针(三)

    本文链接:https://www.haomeiwen.com/subject/qjkqdqtx.html