C 简介
C 简介
安装编译器
在开始使用 C 之前,您需要做的第一件事是将 确保你有一个编译器。 你问什么是编译器? 编译器将您编写的程序转换为可执行文件,该可执行文件您的计算机实际上是可以理解和运行的。
如果你使用的是 Linux,你可以使用 gcc,(在windows系统上为MinGW),这样才能编译用C语言编写的程序。
Hello World
每个完整的 C 程序都从一个名为“main”的函数中开始。函数只是执行“某事”的命令的集合。main 函数总是在程序首次执行时调用。从 main 中,我们可以调用其他函数,无论它们是由我们编写的还是由其他人编写的,或者使用内置的语言功能。要访问编译器附带的标准函数,您需要在 #include 指令中包含一个标头。这样做的作用是有效地获取标头中的所有内容并将其粘贴到您的程序中。这样做的作用是有效地获取标头中的所有内容并将其粘贴到您的程序中。让我们看一个程序:
#include <stdio.h>
int main()
{
printf( "Hello World!\n" );
getchar();
return 0;
}让我们看看hello程序的要素。#include 是一个“预处理器”指令,它告诉编译器在实际创建可执行文件之前将名为 stdio.h 的标头中的代码放入我们的程序中。通过包含头文件,您可以访问许多不同的函数 printf 和 getchar 函数都包含在 stdio.h 中。
下一个重要行是 int main()。这一行告诉编译器有一个名为 main 的函数,并且该函数返回一个整数,因此 int。“大括号”({ 和 })表示函数和其他代码块的开始和结束。如果您用 Pascal 编程,您将知道它们是 BEGIN 和 END。即使您没有用 Pascal 编程,这也是思考其含义的好方法。
printf 函数是在屏幕上显示输出的标准 C 方式。引号告诉编译器您要按原样(几乎)输出文字字符串。'\n' 序列实际上被视为代表换行符的单个字符(我们稍后会更详细地讨论这一点);目前,请记住,当它们出现在字符串文字中时,有一些序列实际上不会由 printf 字面显示,而 '\n' 就是其中之一。'\n' 的实际效果是将屏幕上的光标移动到下一行。请注意分号:它告诉编译器您处于命令(例如函数调用)的末尾。您会看到分号用于结束 C 中的许多行。
下一个命令是 getchar()。这是另一个函数调用:它读取单个字符并等待用户按 Enter 键后再读取该字符。包含此行是因为许多编译器环境将打开一个新的控制台窗口,运行程序,然后在您看到输出之前关闭该窗口。此命令可防止该窗口关闭,因为程序尚未完成,因为它正在等待您按 Enter 键。包括该行可以让您有时间查看程序的运行。
最后,在程序结束时,我们使用 return 语句将一个值从 main 返回给作系统。这个返回值很重要,因为它可以用来告诉作系统我们的程序是否成功。返回值 0 表示成功。
最后一个大括号关闭了该功能。您应该尝试编译此程序并运行它。您可以将代码剪切并粘贴到文件中,将其另存为 .c 文件,然后对其进行编译。
# 将文件命名为hello.c,使用以下命令进行编译
gcc hello.c你可以开始尝试使用 printf 函数,并熟悉编写简单的 C 程序。
解释你的代码
注释对于所有非最简单的程序都至关重要,本教程将经常使用它们来解释代码的各个部分。当你告诉编译器某段文本是注释时,它在运行代码时会忽略它,允许你使用任何文本来描述实际代码。在 C 语言中创建注释,你需要用/和/将文本包围起来,将它们之间的所有内容作为注释。某些编译器环境或文本编辑器会改变注释区域的颜色,使其更容易识别,但有些则不会。务必确保不要意外地注释掉程序中需要的代码(即告诉编译器你的部分代码是注释)。
在学习编程时,注释掉代码的某些部分以查看输出如何受到影响,也是很有用的。
使用变量
到目前为止,你应该能够编写一个简单的程序来显示程序员输入的信息,并使用注释来描述你的程序。这很好,但如何与用户交互呢?幸运的是,你的程序也可以接受输入。
但在尝试接收输入之前,你必须有一个存储输入的地方。在编程中,输入和数据存储在变量中。有多种不同的变量类型;当你告诉编译器你在声明一个变量时,你必须同时包含数据类型和变量名。几种基本类型包括 char、int 和 float。每种类型可以存储不同类型的数据。
char 类型的变量存储单个字符,int 类型的变量存储整数(不带小数点的数字),float 类型的变量存储带小数点的数字。char、int 和 float 这些变量类型各自都是一个关键字,当你声明变量时使用它们。有些变量还使用更多的计算机内存来存储它们的值。
当看起来有些变量类型似乎是重复的时,有多个变量类型可能看起来很奇怪。但使用正确的变量大小对于使你的程序高效非常重要,因为有些变量比其他变量需要更多的内存。目前,只需说不同类型的变量几乎都会被使用就足够了!
在使用变量之前,你必须通过声明来告诉编译器关于它的信息,包括它的"类型"。要声明一个变量,你需要使用语法 <变量类型> <变量名>;。(这里的括号表示你需要用括号内的文本替换表达式。)例如,一个基本的变量声明可能看起来像这样:
int myVariable;再次注意行末的分号的使用。即使我们不是调用函数,"表达式"的末尾仍然需要分号。这段代码会创建一个名为 myVariable 的变量;现在我们可以在程序的后续部分自由使用 myVariable。
在同一行上声明多个相同类型的变量是允许的;每个变量之间应该用逗号分隔。如果你尝试使用一个未定义的变量,程序将不会运行,并且你会收到一个错误消息,告诉你犯了错误。
这里有一些变量声明的示例:
int a;
int b, c, d;
char letter;
float the_int;你可以在同一个程序中声明多个同类型的变量,但不能声明多个同名的变量。此外,你不能同时声明同名的变量和函数。
读取输入
在 C 语言中使用变量进行输入或输出一开始可能会有些麻烦,但坚持一下就会明白。我们将使用 scanf 函数来读取一个值,然后使用 printf 函数将其输出。让我们先看一下程序,然后再详细分析其中的具体操作。如果你需要,甚至可以编译并运行这个程序来帮助你理解。
#include <stdio.h>
int main()
{
int this_is_a_number;
printf( "Please enter a number: " );
scanf( "%d", &this_is_a_number );
printf( "You entered %d", this_is_a_number );
getchar();
return 0;
}这一切意味着什么呢?我们之前已经见过 #include 和 main 函数了;main 必须出现在你打算运行的每一个程序中,而 #include 使我们能够使用 printf(以及 scanf )。(正如你可能猜到的,stdio.h 中的 io 代表"输入/输出";std 只是代表"标准")。关键字 int 将 this_is_a_number 声明为整数。
这是开始变得有趣的地方:scanf 函数通过读取一个字符串和一些用 & 修饰的变量来工作。字符串告诉 scanf 要查找哪些变量:注意我们有一个只包含 "%d" 的字符串——这告诉 scanf 函数要读取一个整数。scanf 的第二个参数是变量,有点像。我们稍后会了解更多细节,但核心思想是 scanf 需要知道变量存储的位置才能改变其值。在变量前使用&可以获取其位置并传递给 scanf,而不是传递变量的值。这就像给某人指引到饮料货架让他们去拿一瓶可乐,而不是为那个人去拿可乐。& 为 scanf 函数提供了变量的指引。
当程序运行时,每次调用 scanf 都会检查其输入字符串以确定要期待什么样的输入,然后将输入的值存储到变量中。
第二个 printf 语句中也包含相同的 '%d' , scanf 和 printf 都使用相同的格式来指示字符串中嵌入的值。在这种情况下,printf 取字符串之后的第一个参数,即变量 this_is_a_number,并将其视为由"格式说明符"指定的类型。在这种情况下,printf 根据格式说明符将 this_is_a_number 视为整数。
将一个数字视为整数意味着什么?如果用户尝试输入一个十进制数,在存储到变量中时将被截断(也就是说,数字的小数部分将被忽略)。尝试在运行示例程序时输入一串字符或一个十进制数;响应将因输入而异,但在任何情况下都不太美观。
当然,无论使用哪种类型,如果没有修改它们的能力,变量都是无趣的。与变量一起使用的几个运算符包括以下这些:*,-,+,/,=,==,>,<。*用于乘法,/用于除法,-用于减法,+用于加法。当然,要意识到在程序内部修改变量的值,使用等号是非常重要的。在一些语言中,等号用于比较左右值,但在 C 语言中,使用==来完成这个任务。等号仍然非常有用。它将等号左侧变量的值设置为等号右侧的值。执行数学函数的运算符应该用于等号右侧,以便将结果赋值给等号左侧的变量。
这里有几个例子:
a = 4 * 6; /* (注意注释和分号的使用)a是24 */
a = a + 5; /* a等于a的初始值加上5 */
a == 5 /* 不将5赋值给a,而是检查a是否等于5。 */其他形式的等于,==,不是将值赋给变量的方式。相反,它是检查变量是否相等。它在 C 的许多领域都非常有用;例如,你经常会在条件语句和循环等结构中使用==。你可能已经猜到<和>是如何工作的了。它们是大于和小于运算符。
例如:
a < 5 /* 检查a是否小于5 */
a > 5 /* 检查a是否大于5 */
a == 5 /* 检查a是否等于5 */