第三章——C语句

第三章——C语句

​ 一个函数包含声明部分执行部分执行部分是由语句组成的,语句的作用是向计算机系统发出操作指令,要求执行相应的操作。

声明部分不是语句,它不产生机器指令,只是对有关数据的声明。

C语句分为以下5类:

  1. 控制语句。

    if()···else··· (条件语句)

    for()··· (循环语句)

    while()··· (循环语句)

    do··· while()··· (循环语句)

    continue (结束本次循环语句)

    break (终止执行switch或循环语句)

    switch (多分支选择语句)

    return (从函数返回语句)

    goto (转向语句,在结构化程序中基本不用goto语句)

  2. 函数调用语句。函数调用语句由一个函数调用加一个分号构成。

    例如:printf("This is a c statement.");

  3. 表达式语句。表达式语句由一个表达式加上一个分号构成。

    例如:a = 3是赋值语句;

    a = 3;是表达式语句。

  4. 空语句。

    例如:;

    此语句只有一个分号,它什么也不做。

    用处:用来作为流程的转向点,也可用来作为循环语句中的循环体(循环体是空语句,表示循环体什么也不做)

  5. 复合语句。可以用{}把一些语句和声明括起来成为复合语句。

    例如:

    {
        float pi=3.14159, r=2.5, area;  //定义变量
        area=pi * r * r;
        printf("area=%f", area);
    }
    

    注意:复合语句中最后一个语句中最后的分号不能忽略不写。

赋值语句

  • =就是赋值运算符,它的作用就是将一个数据赋给一个变量。

  • 复合赋值运算符:

    +=,-=,*=,/=,%=

    例如:a+=3即:先使a加3,在赋值给a

  • 赋值表达式

    形式:变量 赋值运算符 表达式

    作用:将一个表达式的值赋给一个变量,因此赋值表达式具有计算和赋值的双重功能。

    例如:a+=a-=a*a,a初值为12。

    求解步骤:

    1.先进行"a-=a*a"运算,相当于"a = a - a * a",a的值为12-144=-132。

    2.再进行"a+=-132"的运算,相当于"a = a + (-132)",a的值为-132-132=-264。

  • 赋值过程中的类型转换

    如果赋值运算符两侧的类型不一致,但都是算术类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,规则如下:

    • 将浮点型数据赋给整型变量时,先对浮点数取整,然后赋予整型变量。
    • 将整型赋给单,双精度时,数值不变,但以浮点数形式存储到变量中。
    • 将double型赋给float变量时,先将双精度数转换为单精度,存储到float变量的4字节中。
    • 字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。
    • 将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将其字节原封不动的送到被赋值的变量。

注意:要避免把占字节多的整型数据项占字节少的整型变量赋值,因为赋值后数值可能发生失真。

总结点:知道整型数据之间的赋值,按存储单元中的存储形式直接传送。实型数据之间以及整型与实型之间的赋值,是先转换后赋值。

  • 赋值语句和赋值表达式

    注意:要区分赋值表达式和赋值语句

    赋值语句末尾必须有分号,赋值表达式的末尾没有分号。在一个表达式中可以包含一个或多个赋值表达式,但绝不能包含赋值语句。

选择结构语句

if语句的一般形式

(1) if (表达式) 语句 1 (没有else子句部分)

(2) if (表达式) (有else子句部分)

​ 语句1

else

​ 语句2

(3) if(表达式1) 语句1 (在else部分有嵌套了多层的if语句)

else if(表达式2) 语句2

else if(表达式3) 语句3

···

else 语句n

例如:

if      (number>500)  cost=0.15;
else if (number>300)  cost=0.10;
else if (number>100)  cost=0.0075;

说明:

  • 整个if语句可以写在多行上,也可以写在一行上,如:

    if (x>0) y=1; else y=-1;

  • 注意else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。

  • 注意:复合语句应当用花括号括起来。

关系运算符和关系表达式

总结

  1. <, <=, >, >=的优先级别相同,(==, !=)级别相同,但优先级低于前四种。

  2. (高)算术运算符——>关系运算符——>赋值运算符(低)

  3. 用关系运算符将两个数值或数值表达式连接起来的式子,称关系表达式。

  4. 关系表达式的值是一个逻辑值,即“真“或”假“;以”1“代表真,”0“代表假。

例如:

// 若a=3,b=2,c=1
c>a+b    等效于    c>(a+b)    (关系运算符的优先级低于算术运算符)
a==b>c   等效于    a==(b>c)   (小于运算符<的优先级高于相等运算符==)
a=b>c    等效于    a=(b>c)    (关系运算符的优先级高于赋值运算符)
    b>c为真,值为1,所以a=1;
f=a>b>c  
自左向右,先执行"a>b"得值为1,再执行"1>c"得值为0,赋给f,所以f为0
逻辑运算符和逻辑表达式
运算符含义举例说明
&&逻辑与a && b如果a和b都为真,则结果为真,否则为假
||逻辑或a || b如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假
!逻辑非!a如果a为假,则!a为真,如果a为真,则!a为假

优先等级:

!(非)–>&&(与)–>||(或),!为三者最高。

(高) !(非)——>算术运算符——>关系运算符——>&&和||——>赋值运算符**(低)**

逻辑表达式

​ 逻辑表达式的值应该是一个逻辑量"真"或"假"。

判断一个量是否为"真"时,以0代表"假",以非0代表"真"。即将一个非零的数值认作"真"。

例如:

5>3 && 8<4 -!0

表达式自左向右扫描求解。

  1. 5>3,求得值为1
  2. 4 - !0,求得值为3
  3. 8<3,求得值为0
  4. 1 && 0, 值为0
条件运算符和条件表达式

形式:表示式1 ? 表达式2 : 表达式3

说明:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。

例如:

a>b? a : b+1相当于a>b ? a : (b+1)。

选择结构的嵌套

​ 在if语句中有包含一个或多个if语句的嵌套

形式:

if()
	if()    语句1
	else    语句2
else
	if()     语句3
	else    语句4

举例:

#include <stdio.h>
int main()
{
	int x, y;
    scanf("%d",&x);
    if(x<0)
        y=-1;
    else
        if(x==0) y=0;
        else y=1;
    printf("x=%d,y=%d\n", x,y);
    return 0;
}
switch语句实现多分支选择结构

形式:

switch(表达式)

{

case 常量1 : 语句1

case 常量2 : 语句2

case 常量n : 语句n

default : 语句n+1

}

说明:

  • switch后面的括号内的"表达式",其值的类型应为整数类型(包括字符型)。
  • 各个case标号出现次序不影响执行结果。
  • 每个case常量必须互不相同;否则就会出现互相矛盾的现象。
  • case标号只起标记的作用。
  • 如果在各case子句中没有break语句,将连续输出。

注意:一般情况下,在执行一个case子句之后,应当用break语句时流程跳出switch结构,即终止switch语句的执行。

// 程序举例:判断一个数是否为素数
#include <stdio.h>
#inclde <math.h>

int main()
{
    int m, i;
    printf("请输入一个数:");
    scanf("%d", &m);
    if(m>1)
    {
        // 素数是一个大于2的自然数。
        for(i=2;i<=m;i++)
        {
            if(m%i==0)
                break;  // 一旦判定不是素数,直接跳出
        }
        if(i<m)
        {
            printf("%d不是素数\n",m);
        }
        else
            printf("%d是素数\n",m);
    }
    else
        printf("输入有误!");
    return 0;
}

循环结构语句

while语句

形式:

while(表达式) 语句

注意:

只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。

例如:

while(i<=100)当i>100为真,条件表达式i<=100的值为假,不执行循环体

do···while语句

形式:

do

​ 语句

while (表达式);

注意:

该语句的特点是:先无条件地执行循环体,然后判断循环条件是否成立,若成立,再执行循环体。

程序举例:

// 计算1-100的总和
#include <stdio.h>

int main()
{
    int i=1, sum=0;
    do
    {
        sum = sum+i;
        i++;
    }while(i<=100);
    printf("sum=%d\n", sum);
    return 0;
}
for语句

形式:

for(表达式1, 表达式2, 表达式3)

​ 语句

3个表达式的主要作用:

表达式1:设置初始条件,只执行一次。

表达式2:是循环条件表达式,用来判定是否继续循环。

表达式3:作为循环的调整,使循环变量增值,它是在执行完循环体后才进行的。

for语句里的表达式是可以省略的,例如:
for(i=1; ;i++) sum=sum+i;省略表达式2,此时循环无终止地进行下去,也就是表达式2始终为真。

甚至可以三个都省略,例如:

for(; ;) printf("%d\n",i);无终止地执行循环体语句,没有实用价值。

break语句提前终止循环

形式:使流程跳到循环体之外,接着执行循环体下面的语句。

**注意:**break语句只能用于循环语句和switch语句之中,而不能单独使用。

continue语句提前结束本次循环

作用:结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的”表达式3“,然后进行下一次是否执行循环的判定。

程序举例:

// 输出4*5的矩阵
#include <stdio.h>

int main()
{
    int i,j,n=0;
    for(i<=1;i<4;i++)
        for(j<=1;j<5;j++,n++)
        {
            if(n%5==0) printf("\n");  // 控制在输出5个数据后换行
            if(i==3 && j==1) break;    // 遇到第3行第1列,终止内循环
            printf("%d\t", i*j);
        }
    printf("\n");
    return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值