学习编程是一种积累的经验。除了学习所选语言的语法外,还必须学习所有编程语言使用的一般原则。
理解和学习C编程可能会让人望而生畏,但在开始时有一些基本的想法值得你熟悉。一个简单的项目是学习C语言基础的好方法。
那你应该从哪里开始呢?打个招呼!
几乎所有编码课程的第一部分都是helloworld程序。详细介绍一下C语言与其他语言的一些不同之处。首先,打开您选择的文本编辑器或IDE,然后输入以下代码:
#include <stdio.h>/* this is a Hello World script in C */int main(void){ printf("Hello, World! "); return 0;}这段代码在结束程序之前打印到控制台。把它保存在一个容易记住的地方,作为hello.c。现在您需要编译和构建文件。
通常,运行C脚本不需要在计算机上安装任何附加软件。打开终端窗口(如果正在运行Windows,则打开命令提示符)并导航到保存脚本的目录。
编译和运行文件的方式因系统而异:
无论使用哪种方法,运行脚本都应显示以下内容:
如果在Windows上不起作用,请确保在管理员模式下运行命令提示符。对于macOS,您可能需要从App store安装Xcode,并从StackOverflow执行以下步骤。
现在,让我们逐行查看这个程序,看看它是如何工作的,并对其进行改进!
您刚刚创建的脚本从包含库开始。
#include <stdio.h>脚本中的第一行称为预处理器。这是在编译脚本的其余部分之前执行的。在本例中,它告诉脚本使用stdio.h库。有大量的预处理器可用于不同的任务。
h负责从程序的用户那里获取输入,并将信息输出回用户。
/* this is a Hello World script in C */下一行是注释。斜杠和星号告诉编译器忽略它和结束的星号和斜杠之间的所有内容。虽然这看起来似乎毫无意义,但能够给自己和他人留下关于代码的清晰注释是一个必须养成的习惯。
每个C程序都必须有一个main函数。Main是一个返回整数的函数,用int表示。Main后面的括号是它的参数,不过在本例中,它不接受任何值,这就是为什么要使用void关键字。
在两个花括号之间编写要执行的代码。
{ printf("Hello, World! "); return 0;}在函数内部,调用printf()函数。与main()一样,printf也是一个函数。不同的是,printf是您在开始时包含的stdio库中的一个函数。
Printf将括号中引号之间的任何内容打印到控制台。\n是一个名为newline的转义序列,它告诉编译器在继续之前跳到控制台中的下一行。
注意,这些行以分号结尾,编译器使用分号将一个任务从下一个任务中拆分。注意这些分号——遗漏它们是事情不顺利的第一个原因!
最后,函数返回数字0,结束程序。main()函数必须始终返回一个整数,并且返回=0;向计算机发出进程成功的信号。
了解这个脚本的每一步对于学习C语法以及语言的工作方式都是一个很好的开端。
你可以在C中创建你自己的自定义函数,而不是在主函数中打印Hello World,而是创建一个新函数来完成它。
void print_for_me(){ printf("Hello, World! ");}让我们把它分解一下。
void是一个关键字,表示下面的函数不会返回任何内容。
print \u for \u me()是函数的名称,空括号表示它不需要参数即可工作。参数是传递给函数使其工作的任何信息——稍后您将添加自己的参数以更改输出!注意:这与上面使用void的main()函数不同。该函数不能接受参数,而这个函数可以(但在本例中,不必)。
您应该很熟悉这个代码块——它只是原始main函数的print语句。
现在,您可以从主函数调用这个函数。
int main(void){ print_for_me(); print_for_me(); return 0;}您可以在这里看到使用自己的函数的好处。而不是输入printf(“你好,世界!\n“)每次可以调用函数两次。
现在看来这似乎不太重要,但是如果print\u for\u me函数包含大量代码行,那么能够如此轻松地调用它将大大节省时间!
这是你在整个教育过程中会遇到的编程的基本思想。只编写一次自己的函数,而不是一遍遍地编写相同的大块代码。
原型是初学者C语言区别于其他语言的主要方式之一。简而言之,原型就像是以后定义的函数的预览。如果在main函数之后编写print \u for \u me()函数,编译时可能会收到警告:
警告消息告诉您,编译器在声明print\u for\u me函数之前已运行,因此无法确定程序运行时是否正常工作。
代码仍然可以工作,但是通过使用原型可以完全避免警告。
#include <stdio.h>void print_for_me();int main(void){ print_for_me(); print_for_me(); return 0;}void print_for_me(){ printf("Hello, World! ");}通过查看完整的程序,您可以看到print\u for\u me()的原型存在于程序的开头,但不包含任何内容。prototype函数向编译器显示函数的外观,以及它是否需要参数。
这意味着,当您在main函数中调用它时,编译器知道是否正确调用了它,并且可以在需要时抛出警告或错误。这可能是现在看起来很奇怪的事情,但现在了解它们会对将来有所帮助。
这个程序在没有原型的情况下仍然可以工作,但是它们是很好的使用方法。输出现在看起来还是一样的,让我们改变它,使它更个人化!
在最后一步中,您将询问用户的姓名,并记录他们的输入。然后在之前创建的函数中使用它。在C语言中,单词不像其他编程语言那样被称为字符串。
相反,它们是单个字符的数组。数组的符号是[],关键字是char。首先在脚本开始时更新原型函数:
#include <stdio.h>void print_for_me(char name[]);现在,编译器将知道脚本后面的函数采用一个名为name的字符数组。到目前为止,这个角色不存在。更新您的主要功能以创建它,并使用它存储用户输入:
int main(void){ char name[20]; printf("Enter name: "); scanf("%s", name); print_for_me(name); print_for_me("Everyone!"); return 0;}main中的第一行创建了一个字符数组,其中包含20个可能的空格,称为name。接下来,将提示用户使用printf输入他们的名称。下一行使用一个名为scanf的新函数,该函数接受用户键入的下一个单词。
“%s”告诉函数它应该将数据存储为字符串,并将其命名。
现在,当您为我调用print时,可以在括号中包含名称。在下一行,您将看到您还可以传递其他字符,只要它们在引号之间。这两次,括号中的内容都会传递给print\u for\u me函数。
现在修改它以使用您提供的新信息:
void print_for_me(char name[]){ printf("Hello, "); puts(name);}在这里,您可以看到括号已经更新,就像脚本开始时的原型一样。在内部,您仍然使用printf打印hello。这里的一个新函数是puts。这是printf的更高级版本。
放在括号中的任何内容都将打印到控制台,并自动添加一个换行符(您先前使用的\n换行符)。
保存和编译代码的方法与之前相同——请注意,如果不想覆盖以前的程序,可以将程序命名为其他名称。我给我的名字叫hello2:
如您所见,在发送预设的问候语“Everyone!”之前,程序接受输入并在函数中使用它再次给同一个函数提供两个独立的输出。
这个程序很简单,但其中的一些概念并不简单。更高级的C代码必须写得非常好,以防止崩溃。这就是为什么许多人认为这是一种优秀的语言,学习第一,因为它灌输给新的程序员良好的习惯。
其他人认为学习C++是一个更好的想法,因为它是建立在C上,同时保持较低的系统控制。(还有一个生锈的问题,它是一个与C++类似的令人兴奋的编程语言。)
有一点是肯定的:像Python这样的语言对初学者更加友好。对于一种古老的语言来说,C仍然到处使用,但是Python可能是未来的语言!
... 但是如果你是第一次,不要只买一个Arduino,而是带一个初学者工具包。这些都是你需要开始的。请参阅我们推荐的Arduino入门套件。 ...
... Chin的refcard深入研究了Java编程。尽管如此,它仍然是初学者友好的。这个refcard涵盖了从设置到Java编程以及测试I/O库的所有内容。因此,带有Java和Raspberry Pi refcard的DZone IoT应用程序提供了全面的软件和硬件概述。DZone的IoT部...
...案没有对错之分。但学习斯威夫特是两大选择之一。对于初学者来说,Swift比Objective C更容易,所以入门并不是一个艰苦的过程。 ...
... 这些Raspberry Pi初学者项目是对Pi的硬件和软件功能的一个很好的介绍。从其中一个开始,你马上就可以开始跑步了! ...
... 有些框架对于初学者来说很难导航。即使您以前从未使用过包管理器,Cargo对于初次使用的人来说也很简单。 ...
... 对于初学者来说,C有一个坏名声。学习这门语言有很多很好的理由,但是在开始学习的时候要记住一些基本的技巧。 ...