预编译语句#include
第一个程序中使用了一项功能,在屏幕窗口中显示字符串“Hello World"(当然也可以输出其他的包括特殊符号、中文等),这里涉及到操作硬件,其实是一项非常复杂的工作。但是屏幕输出、键盘输入等等功能又是常用的功能,要求初学者掌握这样的能力是不现实的。所以,系统提供了一些通用的功能,供大家调用。
当然,要使用这些功能,还是需要”付出代价的“,这就是#include语句的功能,包含:stdio.h这一个系统头文件(std-->标准 io---> 输入输出 标准输入输出头文件)。头文件的功能可以简单描述为提供功能共享的”菜单“,到饭店吃饭,当然先点菜!菜单上当然对每项菜品进行了描述!
包含了stdio.h头文件(拿到了菜单),就可以调用printf函数(点菜),该函数能够实现屏幕输出的功能。
结构化编程思想
”从顶而下,逐步求精“,”模块化编程“等等都是结构化编程的思想,虽然落后,很多概念还在经常使用。简单地来说,结构化编程可以理解为”没办法一口吃下一张饼,怎么办?切开了一块块吃!”问题来了:
1、依据什么来切?怎么切?切到什么程度?答案是按照功能切,切成一个个的“独立”功能的模块!一个复杂的图书管理系统,如何切成登录、验证、借书、还书等等独立功能,是不是压力小一点点?再说这些功能还能够进一步的细分!切到什么程度?达到功能独立,一般一个程序员能够完成的程度即可,应该是没有具体的标准。重点规则是:功能作为标准,保证独立
2、有什么好处?当然很多!首先是可以多个程序员合作每个人吃一块,合并起来就可以了,然后,功能独立可以减低程序的冗余,当然,调试也方便了!登录功能不正常,当然不会取借书等功能模块里找问题!
3、为什么不够?按照上面的介绍,结构化编程思想是非常符合程序开发的,它致命的弱点是只从功能着手(动作、行为、作用等等),而忽略了从数据(静态的属性,比如书价格、状态等等)分析系统的设计!面向对象编程则很好的解决了这个问题,这里不做深入探讨,只举一个例子,如果你想打篮球,是先考虑如何实现运球、投篮、传球等等行为呢(结构化编程),还是先设计出篮球、篮筐等等物品呢(面向对象)?篮球都没有,设计出一套动作?
功能模块
在程序设计中,功能模块称为函数,它到底是什么?
家里的电视机是不是一个功能模块?当然是,具备播放电视的功能!
它有四个要素:
1、名称(电视),函数名-----不能冲突,否则打架了!
2、输入(电源、电视信号等等),函数的参数
3、输出(电视画面),函数的类型(标准用语,可以理解为函数输出、返回)
4、从输入到输出的加工过程,函数体
这也是C语言中函数的四要素!
先说说函数的定义:其实就是实现了上面的四个要素,取一个名(标识符要求),定义它有什么输入(可以是多个或者没有),它有什么返回(只能是一个或者没有),最后完成函数体。这里可以看前面的例子:
int main()
{
printf("Hello World!\n");
return 0;
}
函数名:main (函数名后跟一对小括号,可以理解为函数的标志,必须有!)
输入:没有
输出、返回(函数类型):int 整数类型 (后面讲)
函数体:一对大括号里面两行语句。
函数的调用,两个问题:
1、谁来调用程序的功能?当然是操作系统!双击QQ图标,就是告诉操作系统要运行QQ了,具体怎么运行,操作系统来完成!这点很重要,因为还存在一个返回的问题,谁调用,当然返回给谁!主函数里的return 0;也就是返回0给调用者操作系统了,为什么是0,不是其他的呢?可以这样理解,操作系统需要获取程序的运行状态,比如是否异常等等,而0则是正常结束。
2、怎么调用?操作系统当然可以获取程序的执行权(所有硬件软件资源都由它管理),但是没有一个预定,不知道从哪里开始执行,在C/C++控制台应用程序中,默认就是名称为main的函数,这个函数很特殊,称为主控函数(主函数 ),所以,一个程序中main函数必须有而且只能有一个!
C语言程序执行过程
回到项目,了解了结构化编程思想和函数相关的东西,就得整理一下C语言程序的执行过程了:
1、C程序由一个个的功能模块组成!外部提供的功能在链接过程中利用预编译语句导入;
2、有一个唯一的主控函数main是程序的入口,在它的函数体中依据需求对相应的功能模块进行调用,当然它只能被操作系统调用;
3、每个功能模块在调用时,被调用的功能模块活动进度,调用的功能模块则进入暂停状态,等待被调用功能的完成(异步调用除外),有点类似于学习过程中突然取接个电话;
4、其他功能模块不管有没有调用,主函数执行完毕程序就结束了。
从以上也可以得到一些拓展:
1、函数定义(自己写函数)需要完成四大要素的设计,尤其是函数体。但调用外部的功能模块(函数)只需要关注,它能够做什么,然后怎么调用它,函数体的具体实现不需要了解;
2、一个程序里可以定义很多个功能模块(函数),除主函数外它们应该属于语法平等的地位,也就是可以相互调用。
3、在一个程序中可以有很多个函数,可以把它们分布在许多个不同的CPP文件中。这类似于把不同的文件放到了不同的文件夹,为了解决不同CPP文件中函数的调用,可以把某个CPP文件中所有的函数申明统一放到对应的头文件中(.h)。
4、函数的申明是语句,其实就是把函数定义中的函数名、参数、类型三大要素提取出来。为尽快掌握C语言程序设计,函数定义、函数申明、函数调用,这些概念还是需要做一个初步了解,比较函数是C语言程序的基本组成。
语法干货
1、C语言程序的基本组成是函数;
2、预编译语句是编译链接的时候执行的,它在程序运行前;
3、每个程序有一个唯一的main主控函数(有很多种写法);
4、每行语句(暂时理解为函数体里)都以分号结束;
5、程序从main函数开始执行(也不一定!)到最后一行代码结束;
6、C语言有自己的字符集(语法上可以用的符号),并且严格区分大小写;
7、标识符是用来取名字的,比如函数名,变量名等等,规则有:必须由字母数字下划线组成;必须由字符或者下划线开头;不能冲突(不能用系统保留的关键字、不能在同一作用域内与其他符合冲突)
8、注释是用来阅读程序的,没有具体的程序功能(编译运行过程种忽略),C/C++有行注释和块注释,//是行注释,注释本行中后面的内容 /* */ 斜杠*之间是块注释
9、程序书写过程中,要注意空格、换行、TAB等分割符的使用,原则是引起歧义的肯定要分开,一个空格和多个空格语法意义一样,比如 int a; a与前面的int分开
10、一行可以写多行代码,一行代码也可以分多行写(字符串需要符号 \ 来接上一行 )