写点什么

C 语言从入门到精通(三)

用户头像
代码情缘
关注
发布于: 2021 年 06 月 07 日
C语言从入门到精通(三)

什么是注释?

  • 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思

  • 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流沟通

  • 注释可以是任何文字,也就是说可以写中文

  • 被注释的内容在开发工具中会有特殊的颜色



为什么要使用注释?

  • 没有编写任何注释的程序


void printMap(char map[6][7] , int row, int col);int main(int argc, const char * argv[]){    char map[6][7] = {        {'#', '#', '#', '#', '#', '#', '#'},        {'#', ' ', ' ', ' ', '#' ,' ', ' '},        {'#', 'R', ' ', '#', '#', ' ', '#'},        {'#', ' ', ' ', ' ', '#', ' ', '#'},        {'#', '#', ' ', ' ', ' ', ' ', '#'},        {'#', '#', '#', '#', '#', '#', '#'}    };    int row = sizeof(map)/sizeof(map[0]);    int col = sizeof(map[0])/ sizeof(map[0][0]);    printMap(map, row, col);    int pRow = 2;    int pCol = 1;    int endRow = 1;    int endCol = 6;    while ('R' != map[endRow][endCol]) {        printf("亲, 请输入相应的操作\n");        printf("w(向上走) s(向下走) a(向左走) d(向右走)\n");        char run;        run = getchar();        switch (run) {            case 's':                if ('#' != map[pRow + 1][pCol]) {                    map[pRow][pCol] = ' ';                    pRow++;//3                    map[pRow][pCol] = 'R';                }                break;            case 'w':                if ('#' != map[pRow - 1][pCol]) {                    map[pRow][pCol] = ' ';                    pRow--;                    map[pRow][pCol] = 'R';                }                break;            case 'a':                if ('#' != map[pRow][pCol - 1]) {                    map[pRow][pCol] = ' ';                    pCol--;                    map[pRow][pCol] = 'R';                }                break;            case 'd':                if ('#' != map[pRow][pCol + 1]) {                    map[pRow][pCol] = ' ';                    pCol++;                    map[pRow][pCol] = 'R';                }                break;        }        printMap(map, row, col);    }    printf("你太牛X了\n");    printf("想挑战自己,请购买完整版本\n");    return 0;}void printMap(char map[6][7] , int row, int col){    system("cls");    for (int i = 0; i < row; i++) {        for (int j = 0; j < col; j++) {            printf("%c", map[i][j]);        }        printf("\n");    }}
复制代码


  • 编写了注释的程序


/*     R代表一个人     #代表一堵墙//   0123456     ####### // 0     #   #   // 1     #R ## # // 2     #   # # // 3     ##    # // 4     ####### // 5
分析: >1.保存地图(二维数组) >2.输出地图 >3.操作R前进(控制小人行走) 3.1.接收用户输入(scanf/getchar) w(向上走) s(向下走) a(向左走) d(向右走) 3.2.判断用户的输入,控制小人行走 3.2.1.替换二维数组中保存的数据 ( 1.判断是否可以修改(如果不是#就可以修改) 2.修改现有位置为空白 3.修改下一步为R ) 3.3.输出修改后的二维数组 4.判断用户是否走出出口*/// 声明打印地图方法void printMap(char map[6][7] , int row, int col);int main(int argc, const char * argv[]){ // 1.定义二维数组保存迷宫地图 char map[6][7] = { {'#', '#', '#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#' ,' ', ' '}, {'#', 'R', ' ', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#', ' ', '#'}, {'#', '#', ' ', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#', '#', '#'} }; // 2.计算地图行数和列数 int row = sizeof(map)/sizeof(map[0]); int col = sizeof(map[0])/ sizeof(map[0][0]); // 3.输出地图 printMap(map, row, col); // 4.定义变量记录人物位置 int pRow = 2; int pCol = 1; // 5.定义变量记录出口的位置 int endRow = 1; int endCol = 6; // 6.控制人物行走 while ('R' != map[endRow][endCol]) { // 6.1提示用户如何控制人物行走 printf("亲, 请输入相应的操作\n"); printf("w(向上走) s(向下走) a(向左走) d(向右走)\n"); char run; run = getchar(); // 6.2根据用户输入控制人物行走 switch (run) { case 's': if ('#' != map[pRow + 1][pCol]) { map[pRow][pCol] = ' '; pRow++;//3 map[pRow][pCol] = 'R'; } break; case 'w': if ('#' != map[pRow - 1][pCol]) { map[pRow][pCol] = ' '; pRow--; map[pRow][pCol] = 'R'; } break; case 'a': if ('#' != map[pRow][pCol - 1]) { map[pRow][pCol] = ' '; pCol--; map[pRow][pCol] = 'R'; } break; case 'd': if ('#' != map[pRow][pCol + 1]) { map[pRow][pCol] = ' '; pCol++; map[pRow][pCol] = 'R'; } break; } // 6.3重新输出行走之后的地图 printMap(map, row, col); } printf("你太牛X了\n"); printf("想挑战自己,请购买完整版本\n"); return 0;}
/** * @brief printMap * @param map 需要打印的二维数组 * @param row 二维数组的行数 * @param col 二维数组的列数 */void printMap(char map[6][7] , int row, int col){ // 为了保证窗口的干净整洁, 每次打印都先清空上一次的打印 system("cls"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%c", map[i][j]); } printf("\n"); }}
复制代码



注释的分类

  • 单行注释

  • // 被注释内容

  • 使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面

  • 作用范围: 从第二个斜线到这一行末尾

  • 快捷键:Ctrl+/

  • 多行注释

  • /* 被注释内容 */

  • 使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面

  • 作用范围: 从第一个/*到最近的一个*/



注释的注意点

  • 单行注释可以嵌套单行注释、多行注释


// 南哥 // it666.com// /* 江哥 */// 帅哥
复制代码


  • 多行注释可以嵌套单行注释


/*// 作者:LNJ// 描述:第一个C语言程序作用:这是一个主函数,C程序的入口点 */
复制代码


  • 多行注释不能嵌套多行注释


/* 哈哈哈     /*嘻嘻嘻*/ 呵呵呵 */
复制代码




##注释的应用场景


  • 思路分析


/*     R代表一个人     #代表一堵墙//   0123456     ####### // 0     #   #   // 1     #R ## # // 2     #   # # // 3     ##    # // 4     ####### // 5
分析: >1.保存地图(二维数组) >2.输出地图 >3.操作R前进(控制小人行走) 3.1.接收用户输入(scanf/getchar) w(向上走) s(向下走) a(向左走) d(向右走) 3.2.判断用户的输入,控制小人行走 3.2.1.替换二维数组中保存的数据 ( 1.判断是否可以修改(如果不是#就可以修改) 2.修改现有位置为空白 3.修改下一步为R ) 3.3.输出修改后的二维数组 4.判断用户是否走出出口*/
复制代码


  • 对变量进行说明


// 2.计算地图行数和列数int row = sizeof(map)/sizeof(map[0]);int col = sizeof(map[0])/ sizeof(map[0][0]);
复制代码


  • 对函数进行说明


/** * @brief printMap * @param map 需要打印的二维数组 * @param row 二维数组的行数 * @param col 二维数组的列数 */void printMap(char map[6][7] , int row, int col){    system("cls");    for (int i = 0; i < row; i++) {        for (int j = 0; j < col; j++) {            printf("%c", map[i][j]);        }        printf("\n");    }}
复制代码


  • 多实现逻辑排序


    // 1.定义二维数组保存迷宫地图    char map[6][7] = {        {'#', '#', '#', '#', '#', '#', '#'},        {'#', ' ', ' ', ' ', '#' ,' ', ' '},        {'#', 'R', ' ', '#', '#', ' ', '#'},        {'#', ' ', ' ', ' ', '#', ' ', '#'},        {'#', '#', ' ', ' ', ' ', ' ', '#'},        {'#', '#', '#', '#', '#', '#', '#'}    };    // 2.计算地图行数和列数    int row = sizeof(map)/sizeof(map[0]);    int col = sizeof(map[0])/ sizeof(map[0][0]);    // 3.输出地图    printMap(map, row, col);    // 4.定义变量记录人物位置    int pRow = 2;    int pCol = 1;    // 5.定义变量记录出口的位置    int endRow = 1;    int endCol = 6;    // 6.控制人物行走    while ('R' != map[endRow][endCol]) {        ... ...    }
复制代码



使用注释的好处

  • 注释是一个程序员必须要具备的良好习惯

  • 帮助开发人员整理实现思路

  • 解释说明程序, 提高程序的可读性

  • 初学者编写程序可以养成习惯:先写注释再写代码

  • 将自己的思想通过注释先整理出来,在用代码去体现

  • 因为代码仅仅是思想的一种体现形式而已



什么是关键字?

  • 关键字,也叫作保留字。是指一些被 C 语言赋予了特殊含义的单词

  • 关键字特征:

  • 全部都是小写

  • 在开发工具中会显示特殊颜色

  • 关键字注意点:

  • 因为关键字在 C 语言中有特殊的含义, 所以不能用作变量名、函数名等

  • C 语言中一共有 32 个关键字



这些不用专门去记住,用多了就会了。在编译器里都是有特殊颜色的。 我们用到时候会一个一个讲解这个些关键字怎么用,现在浏览下,有个印象就 OK 了



关键字分类



什么是标识符?

  • 从字面上理解,就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来

  • 其实标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字

  • C 语言是由函数构成的,一个 C 程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称, 这个名称就是标识符

  • 综上所述: 程序员在程序中给函数、变量等起名字就是标识符


标识符命名规则

  • 只能由字母(a~z、 A~Z)、数字、下划线组成

  • 不能包含除下划线以外的其它特殊字符串

  • 不能以数字开头

  • 不能是 C 语言中的关键字

  • 标识符严格区分大小写, test 和 Test 是两个不同的标识符

标识符命名规范

  • 见名知意,能够提高代码的可读性

  • 驼峰命名,能够提高代码的可读性

  • 驼峰命名法就是当变量名或函数名是由多个单词连接在一起,构成标识符时,第一个单词以小写字母开始;第二个单词的首字母大写.

  • 例如: myFirstName、myLastName 这样的变量名称看上去就像驼峰一样此起彼伏


用户头像

代码情缘

关注

当你已经努力的时候,其实你可以再努力一些 2018.03.22 加入

公众号 代码情缘,专注分享硬核编程知识。

评论

发布
暂无评论
C语言从入门到精通(三)