首页 > 其他分享 >C-Primer-Plus-第二章-C语言概述

C-Primer-Plus-第二章-C语言概述

时间:2022-08-16 20:11:08浏览次数:45  
标签:语句 main 函数 程序 C语言 Plus printf Primer

第二章 C语言概述

参考书籍:C Primer Plus(第6版)中文版

一、前言

打算跟这本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。本文所有图片均来源于此书。

二、主要内容

1. C程序组成

C程序组成

2. C程序示例

#include <stdio.h>
int main(void)       /* 一个简单的C程序 */
{
    int num;        /* 定义一个名为num的变量 */
    num = 1;        /* 为num赋一个值 */
    
    printf("I am a simple");  //使用printf函数
    printf("computer.\n");
    printf("My favorite number is %d because it is first.\n",num);
    
    return 0;
}

2.1 快速概要

  • C程序包含一个或多个函数 ,它们是C程序的基本模块。
    • 程序中有一个名为main() 的函数。圆括号表明main() 是一个函数名。int 表明main() 函数返回一个整数,void 表明main() 不带任何参数。
    • intvoid 是标准ANSI C定义main() 的一部分。
  • 注释在/**/ 两个符号之间,这些注释能提高程序的可读性。
    • 注释只是为了帮助读者理解程序,编译器会忽略它们。
  • 该程序使用使用printf() 函数,在程序中使用函数叫作调用函数 。
  • 代码\n 告诉计算机另起一行,即把光标移至下一行。
  • %d 告诉计算机以何种形式输出num 的值,打印在何处
  • C函数可以给调用方提供(或返回)一个数,这里return语句的作用。

2.2 程序细节

  • #include指令和头文件
    • #include <stdio.h> 的作用相当于把stdio.h 文件中的所有内容都输入该行所在的位置。
    • 这是一种“拷贝-粘贴”的操作。include 文件提供了一种方便的途径共享许多程序共有的信息。
    • 所有的C编译器软件包都提供stdio.h 文件。该文件中包含了供编译器使用的输入和输出函数(如,printf() )信息。该文件名的含义:standard input/output file
    • 通常,在C程序顶部的信息集合被称为头文件 (header )。头文件中可以定义一些常量,或者指明函数名以及如何使用它们。头文件包含了编译器创建最终可执行程序要用到的信息。
    • #include中的#符号表明,C预处理器在编译器接手之前处理这条指令,这属于预处理器指令
  • main()函数
    • C程序一定从main() 函数开始执行(目前不必考虑例外的情况)
    • 函数是C程序的基本模块
    • intmain() 函数的返回类型。这表明main() 函数返回的值是整数。返回到哪里?返回给操作系统。
    • 通常,函数名后面的圆括号中包含一些传入函数的信息。
  • 注释
    • 在程序中,被/* */ 两个符号括起来的部分是程序的注释。在/**/ 之间的内容都会被编译器忽略。
    • C99新增了另一种风格的注释,普遍用于C++和Java。这种新风格使用//符号创建注释,仅限于单行。
  • 花括号、函数体和块
    • 一般而言,所有的C函数都使用花括号标记函数体的开始和结束。
    • 花括号还可用于把函数中的多条语句合并为一个单元或块,类似于Pascal这些语言中的beginend
  • 声明
    • int num; 这行代码叫作声明 (declaration )。
    • 声明是C语言最重要的特性之一。
    • 在该例中,声明完成了两件事。
      • 其一,在函数中有一个名为num 的变量 (variable )。
      • 其二,int 表明num 是一个整数(integer)(即,没有小数点或小数部分的数)。
    • int 是C语言的一个关键字 (keyword ),表示一种基本的C语言数据类型。
      • 关键字是语言定义的单词,不能做其他用途。
    • 示例中的num 是一个标识符 (identifier ),也就是一个变量、函数或其他实体的名称。
      • 声明把特定标识符计算机内存中的特定位置联系起来,同时也确定了储存在某位置的信息类型或数据类型。
    • 在C语言中,所有变量都必须先声明才能使用。
    • 以前的C语言,还要求把变量声明在块的顶部,其他语句不能在任何声明的前面。C99和C11遵循C++的惯例,可以把声明放在块中的任何位置。
    • 数据类型
      • C语言可以处理多种类型的数据,如整数、字符和浮点数。
      • 把变量声明为整型或字符类型,计算机才能正确地储存、读取和解释数据。
    • 命名
      • 给变量命名时要使用有意义的变量名或标识符。
      • C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。
        • 如果两个标识符都是64个字符,只有最后一个字符不同,那么编译器可能将其视为同一个名称,也可能不会。标准并未定义在这种情况下会发生什么。
      • 可以用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第1个字符必须是字母或下划线,不能是数字。
      • C语言的名称区分大小写,即把一个字母的大写和小写视为两个不同的字符。因此,starsStarsSTARS 都不同。
  • 声明变量的4个理由
    • 把所有的变量放在一处,方便读者查找和理解程序的用途。
    • 声明变量会促使你在编写程序之前做一些计划。
      • 程序在开始时要获得哪些信息?希望程序如何输出?表示数据最好的方式是什么?
    • 声明变量有助于发现隐藏在程序中的小错误,如变量名拼写错误。
    • 如果事先未声明变量,C程序将无法通过编译
      • 在我地盘这 你就得听我的 把程序收割 用代码找快乐^ ^
  • 赋值
    • num = 1; 程序清单中的这行代码是赋值表达式语句。
    • 可以给num 赋不同的值,这就是num 之所以被称为变量 (variable )的原因
  • printf()函数
    • C语言的一个标准函数:printf()
    • 圆括号表明printf 是一个函数名。圆括号中的内容是从main() 函数传递给printf() 函数的信息。该信息被称为参数 ,或者更确切地说,是函数的实际参数 (actual argument )。
    • 在C语言中,实际参数 (简称实参 )是传递给函数的特定值,形式参数 (简称形参 )是函数中用于储存值的变量。
  • \n组合
    • \n 组合(依次输入这两个字符)代表一个换行符 (newline character )。
    • 换行符是一个转义序列 (escape sequence )。
      • 转义序列用于代表难以表示或无法输入的字符,如,\t 代表Tab 键,\b 代表Backspace 键(退格键)。每个转义序列都以反斜杠字符(\)开始。
  • %d占位符
    • % 提醒程序,要在该处打印一个变量,d 表明把变量作为十进制整数打印。
    • printf() 函数名中的f 提醒用户,这是一种格式化 打印函数。
  • return语句
    • 有返回值的C函数要有return 语句。
    • int main(void) 中的int 表明main() 函数应返回一个整数。C标准要求main() 这样做。
    • 如果遗漏main() 函数中的return 语句,程序在运行至最外面的右花括号} 时会返回0

3. 简单程序的结构

C程序的基本结构:程序由一个或多个函数组成,必须有main() 函数。函数由函数头函数体组成。

  • 函数头 包括函数名、传入该函数的信息类型和函数的返回类型。
  • 函数体 被花括号括起来,由一系列语句、声明组成。
函数包含函数头和函数体

4. 提高程序可读性的技巧

  • 选择有意义的函数名和写注释。
    • 注意,使用这两种技巧时应相得益彰,避免重复啰嗦。如果变量名是width ,就不必写注释说明该变量表示宽度。
  • 在函数中用空行分隔概念上的多个部分。
    • C语言并未规定一定要使用空行,但是多使用空行能提高程序的可读性。
  • 每条语句各占一行。
    • C语言的格式比较自由,可以把多条语句放在一行,也可以每条语句独占一行。
    • 分号告诉编译器一条语句在哪里结束、下一条语句在哪里开始。

5. 多个函数

/*two_func.c -- 一个文件中包含两个函数*/
#include <stdio.h>
void butler(void); /* ANSI/ISO C函数原型 */
int main(void)
{
    printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");
    
    return 0;
}
void butler(void)
{
    printf("You rang,sir?\n");
}

butler() 函数在程序中出现了3次。

  • 第1次是函数原型 (prototype ),告知编译器在程序中要使用该函数。
    • 注意,void 在这里的意思是“空的”,而不是“无效”。
    • 例如,butler() 函数原型中的第1个void 表明,butler() 函数没有返回值。
  • 第2次以函数调用 (function call )的形式出现在main() 中。
  • 第3次出现在函数定义 (function definition )中,函数定义即是函数本身的源代码。、
  • C90标准新增了函数原型。函数原型是一种声明形式,告知编译器正在使用某函数,因此函数原型也被称为函数声明 (function declaration )。
  • 记住,无论main() 在程序文件处于什么位置,所有的C程序都从main() 开始执行。但是,C的惯例是把main() 放在开头,因为它提供了程序的基本框架。、
  • C标准建议,要为程序中用到的所有函数提供函数原型。
    • 标准include 文件(包含文件)为标准库函数提供了函数原型。例如,在C标准中,stdio.h 文件包含了printf() 的函数原型。

6. 调试程序

  • 语法错误
    • 如果不遵循C语言的规则就会犯语法错误 ,这类似于英文中的语法错误。
    • C语言的语法错误指的是,把有效的C符号放在错误的地方。
  • 语义错误
    • 编译器无法检测语义错误,因为这类错误并未违反C语言的规则。编译器无法了解你的真正意图,所以你只能自己找出这些错误。
    • 解决这类错误的方法之一是,把自己想象成计算机,跟着程序的步骤一步一步地执行。
  • 程序状态
    • 程序状态 (program state )是在程序的执行过程中,某给定点上所有变量值的集合,它是计算机当前状态的一个快照。
    • 跟踪程序状态的方法
      • 自己模拟计算机逐步执行程序。
      • 在程序中的关键点插入额外的printf() 语句,以监视制定变量值的变化。
      • 使用调试器,调试器(debugger )是一种程序,让你一步一步运行另一个程序,并检查该程序变量的值。

7. 关键字和保留标识符

关键字是C语言的词汇。它们对C而言比较特殊,不能用它们作为标识符(如,变量名)。许多关键字用于指定不同的类型,如int 。还有一些关键字(如,if )用于控制程序中语句的执行顺序。

在下表中所列的C语言关键字中,粗体表示的是C90标准新增的关键字,斜体 表示的C99标准新增的关键字,粗斜体 表示的是C11标准新增的关键字。

函数包含函数头和函数体

8. 关键概念

  • 程序员要具备抽象和逻辑的思维,并谨慎地处理细节问题。
  • 可以把程序看作是你希望计算机如何完成任务的描述。

9. 本章小结

  • C程序由一个或多个C函数组成。
    • 每个C程序必须包含一个main() 函数,这是C程序要调用的第1个函数。
  • 简单的函数由函数头和后面的一对花括号组成,花括号中是由声明、语句组成的函数体。
    • 声明语句为变量指定变量名,并标识该变量中储存的数据类型。
  • 编译器可以检测出语法错误,但是程序的语义错误只有编译完之后才能从程序的行为中表现出来。
    • 检查程序是否有语义错误要跟踪程序的状态,即检查程序每执行一步后所有变量的值。
  • 关键字是C语言的词汇。

10. 译者注

  • C语言是通过赋值运算符而不是赋值语句完成赋值操作。根据C标准,C语言并没有所谓的“赋值语句”,本书及一些其他书籍中提到的“赋值语句”实际上是表达式语句(C语言的6种基本语句之一)。本书把“赋值语句”均译为“赋值表达式语句”,以提醒初学者注意。
  • 在C语言中,return语句是一种跳转语句。
  • 历年的C标准中从来没有函数调用语句!值得一提的是,函数调用本身是一个表达式,圆括号是运算符,圆括号左边的函数名是运算对象。在C11标准中,这样的表达式是一种后缀表达式。在表达式末尾加上分号,就成了表达式语句。请初学者注意,这样的“函数调用语句”实质是表达式语句。

标签:语句,main,函数,程序,C语言,Plus,printf,Primer
From: https://www.cnblogs.com/tacticKing/p/16592821.html

相关文章

  • PCR引物设计软件primer5
    PrimerPremier5是一款分子生物学试验常用的PCR引物设计软件,下面简要介绍一下该软件的使用方法。 第一步:打开primer5软件(图1). 图1 第二步:依次点击File-->New......
  • C语言`union`及`位域`
    C语言union及位域1.unionunion就相当于一个类型不固定的变量,存储大小由union内最长的变量决定,存储空间共享,访问内部不同的变量,就会以相应的变量规范对内存进行解析,以如下......
  • 【记录】第一天学习C语言
    今天是2022年8月15日,正式开始C语言的学习之路啦!还有18天开学,就要正式成为大学生了!再说作为电子信息工程专业的学生,怎么能不在暑假开始先学C呢!!!......
  • C++primer练习13.49-54
    练习13.49为你的String类添加一个移动构造函数和一个移动赋值运算符String(String&&a):elements(std::move(a.elements)),first_free(std::move(a.first_free)),cap(st......
  • MDK下的C语言基础学习
    1.位操作1.1:不改变其他位的值情况下,对某几个位进行操作GPIOA->CRL&=0XFFFFFF0F;//将第4-7位清0,清零用&GPIOA->CRL|=0X00000040;//设置相......
  • 【C语言】使用dup2,execlp,实现保存系统命令结果到文件
    #include<fcntl.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>intmain(void){intfd;//创建文件,获取文件描述符fd=open("ps.out"......
  • MyBatisPlus(三、增删改查)
    目录前言1、查询1、查询所有,不加条件去查询2、查询所有,加条件去查询3、多条件去查询4、分页查询5、等等2、添加3、删除4、修改5、自定义SQL(多表关联查询)总结前言 ......
  • c语言中输出整数类整型变量的长度(所占的字节数)
     001、c语言中整数类变量一共包含四个基本类型。001、char型   002、shortint型  003、int型  004、longint型。其中每种基本类型分为signed型和un......
  • c语言中输出字符型变量(char型)所占用的位数
     001、 #include<stdio.h>#include<limits.h>##CHAR_BIT定义了char型所占用的位数,该变量定义在limits.h头文件中intmain(void){printf("CHAR......
  • c语言中输出非负整数用二进制表示时一共有多少个1或者0组成
     001、#include<stdio.h>##文件包含指令,头文件intmain(void){unsignedi;##声明一个unsignedi......