signed

QiShunwang

“诚信为本、客户至上”

C Primer Plus 第6版中文版 - 第2章 C语言概述

2021/4/26 16:49:52   来源:

文章目录

    • 一、简单的C程序
    • 二、C 语言程序的基本语法
    • 三、提高程序可读性的技巧
      • 1、使用有意义的文件名、函数名、变量名
      • 2、合理使用注释
      • 3、使用空行分隔函数中概念上的的多个部分
      • 4、每条语句各占一行
    • 四、C 语言的进一步用法
      • 声明多个变量
      • 使用运算符
      • 在一行中打印多个变量
    • 五、多个函数
    • 六、程序 BUG
    • 七、关键字和保留字符
    • 八、练习

一、简单的C程序

第一个 C 语言程序示例,假设文件名为 first.c

#include <stdio.h>  // 这里是注释
int main(void)    // 一个简单的 C 程序
{
	int num;    // 定义一个名为 num 的整型变量
	num = 1;    // 给 num 变量赋值为 1
	printf("I am a simple ");   // 使用 printf() 函数输出内容
	printf("computer.\n");    // 在行最后使用转义符 \n 来进行换行
	printf("My favorite number is %d because it is first.\n", num);    // 使用占位符 %d 进行变量的格式化输出

	return 0;	
}

使用 gcc 命令对程序进行编译

gcc first.c

会在原目录下生成一个 a.out 的文件,这个文件可以直接运行。
在 linux 系统下,输入以下指令来运行这个文件:

./a.out

运行程序输出的结果应该是下面这样的:

I am a simple computer.
My favorite number is 1 because it is first.

二、C 语言程序的基本语法

#include <stdio.h>
这一行是告诉编译器把 stdio.h 这个文件的内容包含在程序中,stdio.h 是 C 编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持。在一些不需要输入输出的程序里面,可以不使用这个模块,例如汽车里面的一些控制程序。

C 程序里面包含一个或多个函数,函数之间还可以进行相互的嵌套。

main 函数是 C 语言的基本函数,如果只有个函数,我们一般使用 main 来进行命名。

函数前面的 int 表明函数返回一个整型值。后面的圆括号里面的 void 表示这个函数不带参数,这里的参数是形式参数,是一个变量。

函数的开头一行和最后一行是一对{ } ,被花括号括起来的是函数体。

int 声明后面变量是整型,变量的类型有很多种,在 C 语言中需要先声明变量的类型,才能进行赋值操作。 Python 中可以不声明变量的类型而直接进行赋值操作。

num = 1 ; 是赋值表达句,赋值用 = ,判断相等用 ==

printf(""); 调用 printf() 这个函数来把内容输出到屏幕上。

\n 为转义字符,表示在这个位置输出一个换行符, \t 表示 Tab 键, \b 表示退格键(Backspace)。

最后一句里面的 %d 为格式化占位符,表示在这个位置输出一个变量,变量在语句的后面表示,这样可以很方便进行变量的输出。

return 0; 有返回值的 C 函数要有 return 语句,没有返回值的函数可以省略这个,但是最好养成在 main() 函数中保留 return 语句的习惯,在一些操作系统中它有实际的用途。

// 表示行注释,它后面的所有字符都会被编译器忽略。
/* 注释内容 */ 为块注释,如果要进行大段文字的注释,可以使用块注释。

三、提高程序可读性的技巧

1、使用有意义的文件名、函数名、变量名

如果实在没有办法只通过函数名或者变量名表达清楚它们的作用,就在后面加上注释。

2、合理使用注释

添加大量的注释虽然会在第一次编写程序时耗费一些时间,但是程序的后续维护会更加方便。

一般程序内的注释行数会占到总代码的一半左右。

3、使用空行分隔函数中概念上的的多个部分

空行在程序中也会被程序忽略,并且没有实际意义,但是通过使用空行可以把程序的各个部分分隔开,使程序更加容易阅读。

4、每条语句各占一行

这个听起来像是常识,不需要特别强调,但是还是会有人不按照这样的格式来写程序。

例如以下程序:

#include <stdio.h>
int main(void) { int four; four = 4;
printf(
		"%d\n"
); return 0;}

这样的程序格式也会被编译器识别,不会报错,但是非常难以阅读。

更加易读的格式是每条语句写一行,注释如果比较短就直接写在这一行这后面,如果注释较长,就另起一行。

四、C 语言的进一步用法

声明多个变量

可以在程序开始同时声明多个变量,每行声明一个就可以了。

例如:

int name;
int age;

也可以这样写:

int name, age;

使用运算符

可以在变量赋值时使用运算符(加、减、乘、除等)。

例如:

int m, km;
m = 5;
km = m / 1000;

运算符的使用规则和数学中一样,也可以使用括号。

在一行中打印多个变量

这个也很简单,在前面使用多个占位符,然后在后面按顺序写上多个变量名称就可以了。
例如:

printf("There is %d m in %d km.\n", m, km);

五、多个函数

要在一个程序中使用多个函数,需要先定义函数名称和函数主体,然后调用它。

函数名称的定义一般放在最前面,函数主体的内容一般放在 main 函数的后面。

也可以在第二个函数里面调用第三个函数。

为了整齐,一般把定义函数名的语句都写在最前面,定义函数主体内容的语句写在 main 函数的后面。
当然,最好是加上注释,来说明这些函数的用途。

#include <stdio.h>
void num(void);   // 定义函数名
void age(void);   // 定义第三个函数名

int main(void)
{
	num();    // 调用函数
}

void num(void)   // 定义函数主体
{
	printf("This is a test.\n")
	age();   // 调用第三个函数
}

void age(void)   // 定义第三个函数主体
{
	printf("I'm 25 years old.\n");
}

六、程序 BUG

在编写程序的过程中,不可避免的会出现一些错误,有些错误很小,可能只是误用了全角的逗号,或者是后面使用变量名的使用打错了一个字母。

这些错误在编译的时候,编译器会报错,提醒你错误的位置,和可能的原因。我们只需要进行对应的修改以后再重新编译即可。

有些错误可能不是书写错误,编译器并不会报错,这就需要我们进行认真排查。
例如,写出来的句子不通顺,或者是语法格式不规范。

书写错误和语法格式不规范的问题,后期我们使用集成开发环境(IDE)以后,可以帮我们解决很多这方面的问题。
句子不通顺的问题,就需要我们自己多多留心了。

七、关键字和保留字符

关键字是每种语言内部使用的一些词汇,他们已经有了特定的用途,不能再用他们来定义变量名或者函数名等,这样操作会引起歧义,所以被程序禁止使用。
如:int, if, return 等。

C 语言的关键字目前共有32个

关键字含义
auto声明自动变量
short声明短整型变量或函数
int声明整型变量或函数
long声明长整型变量或函数
float声明浮点型变量或函数
double声明双精度变量或函数
char声明字符型变量或函数
struct声明结构体变量或函数
union声明共用数据类型
enum声明枚举类型
typedef用以给数据类型取别名
const声明只读变量
unsigned声明无符号类型变量或函数
signed声明有符号类型变量或函数
extern声明变量是在其他文件正声明
register声明寄存器变量
static声明静态变量
volatile说明变量在程序执行中可被隐含地改变
void声明函数无返回值或无参数,声明无类型指针
if条件语句
else条件语句否定分支(与 if 连用)
switch用于开关语句
case开关语句分支
for一种循环语句
do循环语句的循环体
while循环语句的循环条件
goto无条件跳转语句
continue结束当前循环,开始下一轮循环
break跳出当前循环
default开关语句中的“其他”分支
sizeof计算数据类型长度
return子程序返回语句(可以带参数,也可不带参数)循环条件

还有一些保留标示符,C 语言里面已经指定了他们的用途,我们也不能使用,包括一些以下划线 _ 开头的的标示符和标准库函数名。

例如:
_Bool
_Complex
_Noreturn

八、练习

在初学时,章节内的每个例题和后面的练习题都要亲手敲一遍,熟悉 C 语言程序的基本结构,以及避免一些可能的语法问题。

只有亲自敲代码的时候出现了错误,并找出错误的地方和原因,那么以后就可以尽量避免再出现这种错误,或者再出现这种错误的时候就可以快速的找到问题,并解决它。

还是一句话:多练习,多思考。