第四章

作者: White541 | 来源:发表于2018-01-02 23:08 被阅读0次

    18.1.1~18.1.2

    [TOC]

    第四章:C程序控制

    for循环语句

    for循环语句的标准格式是:

    for(表达式1; 表达式2; 表达式3)
        语句
    
    • 其中,表达式1用于对循环控制变量初始化,表达式2是循环继续条件,表达式3用于对循环控制变量进行增值;

    • 很多情况下,表达式1和表达式3是用逗号运算符分隔的表达式组,组中各个表达式一次从左向右求值;

    • 在for循环语句的初始化和增量部分,只编写与循环控制变量有关的表达式;

    • for循环语句的三个表达式可以选择省略,但分号 ; 需保留。

    //计算存款利息
    #include <stdio.h>
    #include <math.h>
    int main(void)
    {
        double principal=1000, amount, rate=0.05;
        int year = 1;
        
        printf("%4s%21s\n", "Year", "Amount on deposit");           //制表
    
        for (; year <= 10; year++)
            printf("%4d%21.2f\n", year, amount = principal * pow(1.0 + rate, year));
        return 0;
    }
    
    • double 为双精度浮点数类型,变量比 float 更大,精度也更高;
    • pow(x,y) 函数能够求得x的y次幂,它接收两个 double 型实参,返回一个 double 型结果。使用 pow 函数前,需在源程序中包含头文件 math.h
    • 转换说明符 %21.2f 表明这个变量占用的域宽为21,保留的精度为2;
    • 若显示出的数码个数小于域宽,将会自动向右对齐。在 % 与域宽之间插入减号 - 能实现左对齐。

    Switch多重选择语句

    switch多重选择语句由一系列case从句和一个可选的default从句组成,每个case只能测试一个整型常量表达式。

    #include <stdio.h>
    int main(void)
    {
        int grade;
        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
    
        while ((grade = getchar()) != EOF) {
            switch (grade) {
    
            case'A':
            case'a':
                ++aCount;
                break;
    
            case'B':
            case'b':
                ++bCount;
                break;
    
            case'C':
            case'c':
                ++cCount;
                break;
    
            case'\n':                               //对换行或空白符处理
            case'\t':
            case' ':
                break;
    
            default:
                printf("Incorrect letter. Enter a new letter/n");
                break;
            }                                   //end switch
        }                                       //end while
    
        printf("A:%d\n", aCount);
        printf("B:%d\n", bCount);
        printf("C:%d\n", cCount);
    
        return 0;
    }
    
    • getchar 函数表示从键盘读入一个字符,类型为char的整数;除了使用getchar从键盘录入字符外,还可使用scanf_s,通过转换说明符%c来输入字符;
    • EOF 意为“End Of File”,为符号常量,windows中通过Ctrl + Z 实现输入;
    • 每个case标签下可有多个操作语句而不需要使用花括号括起;
    • 当每次只需要一个字符时,需要对输入流中的换行或其他空白符进行处理;
    • 除了intchar外,C语言中还有short(-32768 ~ +32768)、long(-2147483648 ~ +2147483648),int取值范围至少与short相当但不超出long,数据类型signed char可表示范围在-128 ~ +127之间的整数或计算机字符中的任意字符;
    • 字符常量用单引号 '' 括起来的特定字符表示。

    do...while循环语句

    执行do...while循环语句时,首先执行循环体,然后再进行循环条件的测试,因此,do...while循环语句的循环体至少被执行一次。应当使用花括号括起循环体,以避免与while循环语句的混淆。

    //打印1到10
    #include <stdio.h>
    int main(void)
    {
        int counter = 1;
    
        do {
            printf("%d\n", counter);
        } while (++counter <= 10);
    
        return 0;
    }
    

    break和continue语句

    • whilefordo...whileswitch 语句中,执行break语句将导致程序立即从这些语句中退出,转去执行紧跟这些语句之后的下一条语句。
    • whilefordo..while循环结构中,执行continue语句会使控制流略过循环体中剩余语句,重新开始新一轮循环。在whiledo...while循环结构中,执行continue语句后,将立即开始下一环节循环条件的测试;在for循环语句中,执行continue语句后,将立即开始下一轮环节的增量表达式,然后开始循环条件测试。
    • 因此使用continue语句时,whilefor循环结构工作方式不同。

    性能提示:对于结构化程序设计技术,适当使用breakcontinue语句有助于程序运行速度更快。

    逻辑运算符

    • 逻辑与运算符&&、逻辑或运算符||都是二元运算符,从左到右结合;逻辑非!是一元运算符,从右向左结合。
    • 给出目前为止运算符优先级和结合律:
    运算符 结合律 类型
    ++(后缀) --(后缀) 从右向左 后缀类
    + - ! () ++(前缀) --(后缀) 从右向左 一元类
    * / % 从右向左 乘法类
    + - 从左向右 加减类
    < <= > >= 从左向右 关系类
    && 从左向右 逻辑与运算符
    ` ` 从左向右 逻辑或运算符
    != == 从左向右 相等类
    ?: 从右向左 条件类
    = += -= *= /= %= 从右向左 赋值类
    , 从左向右 逗号运算符

    区分相等运算符==和赋值运算符=

    在一常量一变量中使用相等运算符如 x == 7 时,习惯写为 7 == x ,即将常量写在左边,有助于避免运行时发生的逻辑错误。

    错误预防提示:程序编写完成后,用文本搜索器检索程序中每一个=,检查其是否使用正确。

    相关文章

      网友评论

          本文标题:第四章

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