跳转到内容

C 编程基础/预备知识

来自 Wikibooks,开放书籍,构建开放世界

预备知识

[编辑 | 编辑源代码]

典型的 C 程序长什么样?

[编辑 | 编辑源代码]

首先,一个非常简单的 C 程序示例

/* Sample C program that outputs the word "Hello" */
#include <stdio.h>

int main()
{
     printf("Hello\n");
     return 0;
}

上面示例中所示的程序被称为程序源代码。源代码由字母、数字和其他符号组合而成。程序员/用户可以使用任何文本编辑器创建源代码。

在本课程中,我们将使用以下格式编写 C 程序

#include <stdio.h>

int main()
{
      /* ...your variable declarations... */

      /* ...your statements... */

      return 0;
}

什么是语句?

[编辑 | 编辑源代码]

所有 C 程序都由一系列指令组成。在 C 语言中,指令也被称为语句。在英语中,语句以句号、问号或感叹号结束。请注意,在 C 语言中,语句以分号结束。在上面的示例程序中,只有一个语句 - printf() 语句。

什么是函数?

[编辑 | 编辑源代码]

所有语句都应写入用户定义的函数中。您可以将函数视为一组或一系列语句。这类似于英语,其中一个段落由一系列语句组成。术语“用户定义”意味着是用户定义(或编写)了函数的描述。在上面的示例程序中,只有一个用户定义的函数 - main() 函数。所有 C 程序都必须具有 main() 函数。

{ } 符号有什么用?

[编辑 | 编辑源代码]

符号 { 被称为左花括号左大括号。同样,符号 } 被称为右花括号右大括号。花括号用于分组目的。将左花括号视为与开始同义的东西,将右花括号视为结束的符号。因此,在上面的示例程序中,左花括号和右花括号分别指定了 main() 函数的开始和结束。请注意,花括号必须始终成对出现。缺少花括号是语法错误最常见的原因之一。

正如我们将在后面看到的那样,花括号用于对多个语句进行分组。

/* */ 符号有什么用?

[编辑 | 编辑源代码]

符号 /* 和 */ 用于对程序中的注释进行分组。注释不是指令,而是仅提供其他信息(文本描述),例如程序正在做什么、输入是什么、输出是什么等。将 /* 视为注释的开始,将 */ 视为注释的结束。就像花括号一样,这些符号始终成对出现。注释是可选的,可以放置在程序源代码的任何位置。

可以在 /* */ 中编写多行注释。例如

/* The following is 
   an example 
   of a very simple C program */
void main()
{
     printf("Hello\n");
}

请注意,注释不能嵌套,这意味着您不能将 /* */ 放入 /* */ 中。例如,以下示例是错误的

/*
   this is a comment

   /* this is one more comment - which will cause an error */

*/

其他符号呢?

[编辑 | 编辑源代码]

其他符号,即 #include <stdio.h>void 的含义将在后面解释。

命名规范

[编辑 | 编辑源代码]

什么是名称?C 语言的命名规范是什么?

[编辑 | 编辑源代码]

数据和操作数据的指令用它们的名字来指代。在 C 语言中,为某事物命名有一些规则和约定;它们如下所示

1. 名称由字母和数字组成。

2. 第一个字符必须是字母。

3. C 语言区分大小写,这意味着小写字母 'a' 与大写字母 'A' 不同

4. 下划线符号 _ 在 C 语言中被视为字母。但是,不建议将其用作名称的第一个字符。

5. 至少名称的前 31 个字符是有效的。

示例

以下是有效的名称示例

a

A

main

void

hello

salary

rate_per_hour

student_1

student_2

student_3

First_Name

ComputeGrade

以下是无效的名称示例

1                 /* must start with a character */

1_ab              /* must start with a character */

a&                /* & symbol cannot be used in a name */

xyz_%             /* % symbol cannot be used in a name */

$money            /* must start with a character,

                     $ cannot be used in a name */

什么是关键字?

[编辑 | 编辑源代码]

作为一种语言,C 语言有自己的词汇表 - 一组关键字。这些名称是保留的,不能用于其他目的,例如命名用户定义的变量名称。在示例程序中,名称 void 是一个关键字。

ANSI C 语言有 32 个关键字(仅此而已)。

请注意,printf 这个名字实际上不是 C 关键字,也不真正属于 C 语言的一部分。它是一个标准输入/输出库中预定义的名称。这些区别将在后面解释。

常量、变量、数据类型、声明

[编辑 | 编辑源代码]

什么是常量?

[编辑 | 编辑源代码]

常量是指其值不会改变的实体。常量可以是数字常量或字面常量。

示例

数字常量的示例

1

500

-10000.100

3.1416

字面常量的示例

'A'

"Hello"

"The quick brown fox jumped over the lazy dog."

注意:在 C 中,仅包含一个字符的字面常量简称为字符。它以一对单引号包围的方式编写。如果包含多个字符,则称为字符串。字符串以一对双引号包围的方式编写。

什么是变量?

[编辑 | 编辑源代码]

程序由数据和操作这些数据的指令组成。请注意,数据必须存储在某个地方,因此需要在 RAM 中使用一些内存空间。

变量是指用于存储数据的实体。如果没有变量,就没有办法(或者实际上没有地方)存储数据。变量具有

  • 一个名称(更准确地说是一个符号名称)
  • 一个关联的物理内存空间(RAM 中的一部分)
  • 一个数据类型
  • 一个值(取决于数据类型)
  • 一个作用域
  • 一个生命周期

作用域和生命周期的概念将在课程的后半部分讨论。

什么是数据类型?

[编辑 | 编辑源代码]

数据类型指定了

  • 该类型变量可以取值的种类
  • 该类型变量可以取值的范围
  • 变量存储该类型值所需的内存量(以字节为单位)

C 语言中有哪些(基本)数据类型?

[编辑 | 编辑源代码]

有四种基本数据类型,分别是

  • char - 字符数据类型。 char 数据类型用于表示/存储/操作字符数据值。一个 char 数据类型值需要一个字节的内存空间。 char 值可以取值的范围是 0 到 255。所使用的数字到字符编码是 ASCII。
  • int - 整数数据类型。 int 数据类型用于表示/存储/操作带符号的整数值。
  • float - 单精度浮点数数据类型。 float 数据类型用于存储单精度带符号实数(即带小数点的数字)。
  • double - 双精度浮点数数据类型。 double 数据类型用于存储双精度带符号实数(即带小数点的更大数字)。

存储一个 int、一个 float 和一个 double 所需的内存空间量取决于平台(取决于机器和软件)。对于 32 位机器(以及 32 位编译器,如 Microsoft C 编译器),一个 int 和一个 float 分别需要 4 个字节的内存,而一个 double 需要 8 个字节的内存。

请注意,char 数据实际上是数字(0 到 255),并且被视为 int 值的子集。对整数执行的任何操作(稍后讨论)也可以对字符执行。

作业

找出以下数据类型在您的平台上的值范围(最小值和最大值): intfloatdouble。提示:尝试查找您的 C 编译器附带的两个名为 "limits.h""float.h" 的文件。

如何确定每个数据类型的实际大小?

[编辑 | 编辑源代码]

可以使用以下程序打印基本数据类型的大小

#include <stdio.h>

int main(int argc, char *argv[])
{
     printf("Size of char: %d\n", sizeof(char));
     printf("Size of int: %d\n", sizeof(int));
     printf("Size of float: %d\n", sizeof(float));
     printf("Size of double: %d\n", sizeof(double));
     _getch();
     return 0;
}

sizeof 是 C 中的一个关键字。它是一个运算符,它返回上面指定数据类型的大小(以字节为单位)。

什么是变量声明?

[编辑 | 编辑源代码]

变量声明是将变量“引入”到程序/函数中的“操作”。C 程序中的所有变量都必须声明。如果您忘记这样做,编译器将报告语法错误。

如何声明变量?

[编辑 | 编辑源代码]

在 C 中,声明变量的语法如下

<数据类型> <变量名>


符号 <item> 表示需要指定括在尖括号中的项目。分号表示声明的结尾。缺少分号会导致编译器生成语法错误。变量应遵循 C 命名约定。

示例

char ch;

int i;

float f;

double d;

可以在同一行上声明几种相同类型变量。在这种情况下,两个变量之间应该插入一个逗号。缺少逗号会导致编译器生成语法错误。

示例: <syntaxhighlight lang="c" char ch1, ch2;

int x, y, z;

float hourly_rate, number_of_hours, salary;

double numerator, denominator; </syntaxhighlight>

我可以为变量使用任何名称吗?

[编辑 | 编辑源代码]

可以,只要您遵循命名约定,并且不使用 C 保留字。

但是,建议您作为良好的编程实践,使用描述性或暗示性的名称。例如,如果您知道变量将代表兼职工人的时薪,那么不要使用诸如 xyz x1 之类的名称。最好使用诸如 ratehourly_rate 之类的变量名。请注意,使用下划线使变量名更容易阅读。

变量的初始值是什么?

[编辑 | 编辑源代码]

默认情况下,C 中变量的值是垃圾,这意味着该内存空间中存储着某些内容,但这些内容对于预期用途无效。

必须正确初始化变量。通过初始化,是指为变量分配有效值。使用具有垃圾值的变量会导致逻辑错误,这是一种非常难以发现的错误类型。

练习

1. 声明中间名首字母为字符变量

2. 声明年龄为整型变量

3. 声明存款金额、取款金额为浮点型变量

4. 声明长度、宽度、高度为双精度数据类型变量

华夏公益教科书