控制/MCU
C语言编程细节
和我们平时说话使用的语言一样,任何编程语言都有它的语法要求,正所谓无规矩不成方圆,一门语言有了完善的规则才能成为一种可推广的语言。上一篇内容介绍的数据类型和各种运算符也是C语言基础语法规则中的一部分。现在我们再来了解一下使用C语言编程时的一些细节问题。
●在编程时需要使用英文输入法,或将输入法切换到英文状态。这一点是必须要强调的,因为很多初学者编程是犯的错误都是因为符号使用了中文符号。虽然现在的编译器有自动检测符号的功能,你可以很容易检测出问题所在,但还是希望初学者编程时潜意识里要自觉切换输入法,这是程序员最基本的“修养”。
●C语言中是以英文符号(后文中的符号都是指英文符号)的分号";"作为一条逻辑语句的结束符,即一个“;”代表一条语句。在每一行代码段中可以包含多条程序语句,只是为了可读性我们一般不那样做,良好的习惯就是一行一条语句,甚至在一些复杂的逻辑中我们可以把一条长的复杂语句分开写成连续的多行,但在一些情况中需在每一行结尾使用“”作为连接符(其后不能有其他符号),所以编程时若要分行写统一都加“”。
●C语言注释,注释是指在编程时程序员可以提供一些对程序的解释说明等信息,这些内容不会被编译器编译,不是有效的程序段。在C语言中可以以“//”作为行注释,即一个“//”注释一行代码,另外也可以使用“/ 程序块 /”进行块注释,即包含的程序内容都被注释了。
●空行,C语言中的空格行是没有意义的,我们为了程序的美观和层次感可以在适当位置添加一些空行。
●C语言是强类型语言,强类型语言指对变量定义要求比较高,变量必须先定义后使用,并且定义后不能随便转化,即使能转化也需要一定条件,比如强制转化。另外C语言对符号大小写是敏感的,即大小写变量不是同一个变量,比如A与a是两个变量。
C语言关键字
C语言中具有特殊含义的英文单词,通常用于构成语句,存储数据,定义数据类型等吗,我们定义变量或函数时不得与其相同!其中一些在上一篇中我们有见到过,有些是我们接下来马上要讲解的内容,其余的后面再实例分析,一共有32个关键字,内容见下表:
可以大致分类一下进行记忆。
if与switch
正如if是英文字面意思“如果”,在C语言中使用if作为判断语句,判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。和我们平时说话做假设一样,if可以单独使用,它的使用方法与流程图如下:
if (test expression)
{
//测试表达式为真时,执行的语句
}
另外,它也可以和else一起使用,可以为各判断条件设计程序块,也可以使用多个else分支,使用方法和流程图如下:
例一:
if (test expression)
{
//测试表达式为真时,要执行的语句
}
else
{
// 如果测试表达式为假,则执行的语句
}
例二:
if (test expression1)
{
// 语句
}
else if(test expression2)
{
// 语句
}
else if (test expression3)
{
// 语句
}
……
else
{
// 语句
}
另外if语句还可以进行嵌套,也就是在判断中再进行判断,如果有的话也可以接着继续嵌套下去,想想一下套娃就明白了,道理是一样的,这应该很容易明白吧。
在C语言中除了使用if进行判断也可以使用switch语句做条件判断,它也被称为开关语句,在某个判断逻辑下,如果有多个与之对应的结果,这时我们就可以使用它来实现出现那个结果就进入那个分支,这两种语法在一定条件下是可以互转的,并且各有优势,其中switch必须配合case关键字一起使用,通常也会搭配break,continu,default语言使用。我们看一下它的使用方法与流程图:
switch (expression)
{
case constant1:
// 语句
break;
case constant2:
// 语句
break;
……
default:
// 默认语句
}
和if一样它也可以进行嵌套,这要逻辑合理即可,在使用过程中,我们通常会根据实际的使用需求来决定具体使用它两中的那种,一般来时如果是简单的条件判断那肯定是使用if比较简介,如果应用场景中有很多相似分支,那我们就可以选择使用switch。
if (test expression1)
{
if (test expression)
{
//测试表达式为真时,要执行的语句
}
else
{
// 如果测试表达式为假,则执行的语句
}
}
else if(test expression2)
{
if (test expression)
{
//测试表达式为真时,要执行的语句
}
else
{
// 如果测试表达式为假,则执行的语句
}
}
……
当然以上都是典型的一些用法,在具体使用时还可以对它们进行相互嵌套,有了良好的编程逻辑后我们要学会灵活运用这些知识。
for与while
在C语言中当我们需要进行循环操作,这时就可以使用for或while语句了,这两个词的英文本意都有“直到xx才xx”的意思,只不过它们使用的语法各有差别,但两者都可以实现互换。我们来看一下它们的具体使用方法。
以下是while的循环流程图,如果条件成立就一直执行,不成立就退出。
while (testExpression)
{
// 循环体中的语句
}
while还有一种使用方法是与do配合使用,就是不管条件怎么先执行一遍再询问条件,其实就是换了一种说法而已,但它们的不同就是在于前者先判断后执行,后者先执行再判断,使用时序根据语意选择合适方式,它的具体方法和执行流程如下:
do
{
//循环体内的语句
}
while (testExpression);
for循环语句相对while和do…while使用格式有些不一样,但意思是差不多的,我们来看一下:
for (initializationStatement; testExpression; updateStatement)
{
//循环体内的语句
}
以上3中循环方式各有各的特点,使用时根据语境进行选择。for循环语句的流程图看起来比其他两者复杂,其实使用起来还是很方便的,后面我们在再分别举例对比测试。
循环语句也可以搭配break,continu对循环进行控制,甚至能与goto语句一起使用,但goto语句容易引起程序结构混乱一般不建议使用,我个人建议最好别用,所以不做讲解,有兴趣的朋友可以自行了解一下。
C语言定义函数
学会以上条件,和循环语句后,虽然你可能还是不会编程,但一些基本的编程的逻辑思维应该是清楚了吧,现在来讲解一下我们编程需要掌握的最后一个环节,它就是定义函数。我们肯定已经知道变量,常量是什么了,又知道了程序运行时的一些判断逻辑了,假设现在要你设计一个控制LED一闪一闪的程序,你脑海里应该有一个大概的想法了吧?先点亮LED,各一段时间再熄灭LED,然后再继续重复,对吧,程序逻辑就是这么简单!那么,我们要怎么执行这些程序段呢?这就需要我们设置一个函数了,在C语言中一段代码要能执行必须包含一个函数,这个函数就是main函数,也叫主函数。所有的程序运行都是从main函数开始,可能不好理解,简单来说就是,main函数是必不可少的,当程序编译成机器代码时编译器会先找程序中是main函数,找到了就进入函数继续编译,没找到就报错。
除了main函数之外,我们编程是可以将某个功能模块的代码封装成一个函数,然后在使用时直接调用,这样就可以让我们的代码可读性更强,可维护性更高。
我们来看一下函数的的基本内容:
●函数声明 :必须在C程序中全局声明函数,以告知编译器函数名称,函数参数和返回类型。
●函数定义:它包含要执行的实际语句。这是调用函数时控件所涉及的最重要方面。在这里,我们必须注意,该函数只能返回一个值。
●函数调用:可以从程序中的任何位置调用函数。参数列表在函数调用和函数声明中要相同。我们必须传递与函数声明中声明的函数数量相同的函数。
以上说明可能比较专业化,简单来说就是和变量的使用规则一样,所有函数都要先定义后使用,并且如果你定义的位置在调用的位置之后,或函数定义和调用不在同一个文件那就必须在函数调用的之前对定义好的函数进行声明。对于初学者来说这是函数的一个难点,我们后续会在使用案例中做更详细的讲解。
学会使用函数之后你就可以尝试写出自己的模块功能代码了,以后再使用相同功能时复制过去就可以进行使用测试了。
函数定义示例:
return_type function_name(data_type parameter...)
{
//要执行的代码
}
printf与scanf
屏幕和键盘是计算机与外界进行人机交互的主要工具,C语言中我们可以编程通过屏幕显示信息,也可以通过键盘进行输入信息。C语言中最基础的向屏幕输出信息的函数是printf,scanf是其对应的获取键盘输入信息的函数。但是它们时需要一定规则才能正确执行操作的。其中使用到的一些特殊字符进行转义再使用某些特定字符进行格式化输入,输出,具体如下表介绍:
这些是我们需要熟练使用的,编程练习的过程中多尝试就可以容易的记住了。在51电单片机中是不可能驱动得了电脑屏幕这么复杂的设备的,但我们可以应用串口连接电脑,在通过这些函数在串口助手这样的小工具上输入输出信息从而实现人机交换的目的。
C语言程序文件
C语言中编写的代码可能文件主要有.c和.h文件,.c文件就是我们存放代码的主要文件,.h文件叫头文件,它用来存放变量,函数的声明以及使用到的其他.h文件等。我们把定义的变量,函数以及其他一些实现代码功能必要的内容保持在.c文件里。如果是简单的程序,我们直接在一个.c文件里面编写就可以了,但以后需要写更复杂的程序时我们就要学会将代码分类,把个部分功能不相同的代码用不同的.c文件保存,并分别为它们添加一个名称相同的.h文件(名称也可以不同,只是为了方便管理,所以最好是保存一致),这种方法就是模块化编程方法,这是做项目开发时必须会使用的一种编程思维。现在不懂没关系,后面我们再一一讲解。
C语言库函数
前面我们说到了自己定义函数,分类打包函数,其实只要你安装了C语言编译器,在我们电脑系统里就会包含很多C语言源代码了,这些代码大多数都是官方编写的,我们称它们为官方库文件。这些文件中就包含了官方库函数,我们可以直接调用它们。有了官方库文件之后我们才能顺利执行我们自己编写的代码,事实上我们编写的最简单的例子都会使用到库文件,所以想快速学习模块化编程的朋友不妨看一下官方的代码时怎么写的。具体的知识我们后面子再一一讲解。
全部0条评论
快来发表一下你的评论吧 !