程序模板
C程序的一般组成部分
给计算机看的部分:头文件 + (宏定义 + 全局变量) + 主函数 (+ 子函数)
Ps: 1、括号内的内容不一定要有,一个简单的程序只需包含相关头文件和主函数即可;
2、一个程序有且只能有一个主函数main;而子函数可以有多个,由具体需求而定;
给人看的部分:注释,注释写在 // 后边或者 /* */ 里面,例如 ://注释 或 /*注释*/
1、头文件说明:所谓头文件,就是在为我们程序的书写做准备,事先把我们要用的东西拿过来,为下一步的使用做好准备;
就像我们炒菜时需要先准备好食材、炒锅、调味料等这些东西一样。
你只需要知道,你要用到什么东西就导入对应的头文件即可;例如我们要调用printf这个输出函数,我们就得导入它对应的头文件,标准输入输出头文件<stdio.h>,因为printf这个单词本身并没有打印这个神奇的作用,而是设计芯片的公司预先写好的一个函数 的函数名,而这个函数本身里包含着很多更基本的代码,此处只是给了我们一个接口来共给我们调用而已,这个接口就是函数名printf;
函数就像一个具有一定功能的工具,我们只需要知道拿来怎么使用即可,而不需要知道这个工具是怎么制造的,所谓的头文件就是帮我们制造这些工具、给我们提供工具的“厂家”。
并且往往一个头文件会包含很多不同功能的函数,例如<stdio.h>这个头文件还包括输入函数scanf,这个函数能够帮助我们从键盘获取到数据;此外还有很多很多函数和头文件,再例如与字符串相关函数strcmp,就存放在<string.h>这个头文件里。
我们要做的就是学会使用这些厂家给的基本函数,用来写出属于自己的更加复杂的、功能更好的函数;
2、宏定义:(此处略,因为这属于更高一级的内容了,前期暂时用不到)
3、变量:变量的实质是内存。
在计算机、单片机等等这些电子设备的世界里,所谓的代码都只是数据而已,只是我们把这些数据给组织了起来,形成了一套有规律的东西,形成了一门计算机能读懂的语言,这就是C语言、汇编、C++等这些机器语言,然后我们使用这些有一定结构的数据组成的语言去告诉计算机我们要做什么事,然后计算机就能够帮我们执行我们需要的动作了。
既然是数据,就需要有一定的空间来存放,这些空间是计算机、单片机等这些机器提供的;在需要存放一些数据的时候,我们就可以向系统申请一定的内存来进行存放数据,而所谓的变量就是指我们申请到的内存空间。
例如现在我们要存一个整型数3,我们就需要申请一片一定大小的内存来进行存放:
int a = 3;//向系统申请的一片内存,大小为4字节,并且给这片内存取个别名为a,
往后就可以通过a这个别名来访问这片内存;并且现在就把一个整数3
存到这片内存里,
例子:(下边的红色字体部分)
#include <stdio.h> //include是包含的意思,这条代码的意思是:让该程序包含我们所需的相关的
头文件;例如此处我们由于需要调用printf函数,所以导入其对应的标准输入出
处头文件<stdio.h>
int main(void) //主函数main(),是整个程序的入口,C语言里无论主函数main放在任何位置,程
序都会找到并从主函数 开始执行程序,此处的viod是为了增加代码的可读性,也可
不加
{
printf(“hello world!”);//用printf输出函数打印字符串 hello world!
return 0; //return 返回的意思,即将return后边的东西东西返回给调用该函数的人,并且函
数运行到这里结束了,即使后边还有程序也不会执行到,并且主函数main一旦结
束,整个程序也就结束了
}
拓展说明1:
一般而言都是主函数作为程序的主体,去调用其他子函数,但也有以下两者情况主函数会被调用:
1、命令终端调用主函数,并且主函数值返回给了终端
2、其他应用程序:由第一个应用程序调用第二个应用程序的时候,第二应用程序的返回值会返回给第一个应用程序。
拓展说明2:主函数也是可以接收形参的,并且形参最多只能为两个
例如,在linux里,现做如下定义
Int main(int argc, char *argv[ ])
这两个参数由linux终端传过来,argc代表传参个数,arg用来装所传的参数;argv[0]装第一个参数,argv[1]->装第二个参数,其余参数以此类推,且传参时要先输入命令:“./ ” ,而这命令本身也算参数,需用argv[0]来装,例如输入了 ./a b,则 argv[0] = ‘./a’; argv[1] = ‘b’;且编译一次就可以持续传参
程序逻辑过程
C语言逻辑(执行)过程自上而下的,也就是在运行一个程序的时候,系统会从主函数的第一条代码开始,一条一条的往下执行每一句程序,这称之为面向过程性。而任何一个大的过程都可以拆分为小的过程,大的过程即应用程序,小的过程即函数。
命名规范
在C语言里,一个合法的变量有以下两点要求:
1、只能用 _ 字母 数字 $ 这四个东西进行命名,并且不能以数字打头;
2、不能与系统关键字重名,注意!因为C语言里严格区分大小写,故只要大小写不同,就都不算是系统关键字,例如:可以 If,但不可以 if
基本程序结构设计
顺序结构
最简单的编程结构,在这种编程结构中,程序由低地址向高地址顺序执行指令代码;即会从上到下逐条执行每一句代码;
选择结构
这时程序会根据我们设立的条件进行判断,然后再决定要执行哪些语句;
而C语言里的分支选择语句关键字有if和switch两个,前者只有两个分支可选,而后者可进行多分支选择,它们选择依据是自己的设立的条件判断;
循环结构
这时程序会循环执行一部分代码。
需要注意的是,任何一个循环体最好都要设立一个出口,使得当程序满足一定条件时跳出循环体,否则程序将会一直卡在循环体里出不来,当然若是有意要人程序无限循环执行某段代码也是可以的,例如往往我们会在主函数里放上一个死循环 while(1),让芯片一直执行我们需要的主要的那部分程序。
而C语言里的循环语句有以下几种:
1、while(判断条件){...};//该结构为先判断再执行结构:即程序运行到该句代码时会先判
断括号里的条件是否为真,真则执行代码块{}里的内容,假则
跳过循环体往下执行剩余程序
2、do{...}while(判断条件);//该结构为先执行再判断结构:即程序运行到该句代码时不管
while(判断条件)后边的括号里的条件是否为真,都会先执行一
遍循环体,在进行条件判断,条件为真则继续执行循环体,假
则跳出循环
3、for(初始化表达式;判断表达式;补充表达式){...};
//for循环语句,首先会执行初始化表达式,然后对判断表达式
进行判断,真则执行{}内的程序,执行完后执行补充表达式,
然后再进判断表达式的判断,如此循环,一直到判断表达式为
假时跳出该循环
补充
C语言里还有一个特殊的跳转语句,其关键字是goto,执行goto跳转语句时不用进行条件判断,而是会直接跳转到goto后面的标签处,并从该标签处的语句往下继续执行剩余程序;
例如: goto A;//跳到A处往下执行
printf("sdds");//该语句不被执行到
.......
.......
A:
printf("kkk"); //从此处往下执行
算法——程序的灵魂
一个程序包括以下两方面的内容:
1、对数据的描述:在程序中要指定数据的类型和数据的组织形式,即数据结构。
2、对操作的描述:即操作步骤,也就是算法。
算法 —— 为了解决一个问题而采用的方法和步骤
过程+运算方法
分类
数值算法和非数值算法。
特性
- 有穷性:一个算法应包含有限的操作步骤,而不能是无限的。
- 确定性:算法中的每一个步骤都应当是确定的,而不应当是含糊不清的。
- 有零个或多个输入:所谓输入就是指在执行算法是需要从外界取得必要的信息。
- 有一个或多个输出:算法的目的就是为了求解,“解”就是输出。
- 有效性:算法中的每一个步骤都应当能有效的执行,并得到确定的结果
一些小知识点:
1、一个程序结束后关于它的东西都会被重置,例如变量所申请的内存会被释放,存在缓冲区里的东西会被清除;
2、看代码不要从第一行开始看,从主函数开始看!遇到子函数或其他东西在去对应寻找;
3、而C语言的进一步学习呢,我们要学的就是去掌握更多的变量类型,让我们能够存储和处理更多的不同类型的数据;而既然有数据呢当然还有运算方法,所以C语言里呢就给我们提供了丰富的运算符,例如我熟知的加减乘除等;然后还需要进一步学习分支语句和循环语句,帮助我们在数据处理的时候能有选择性的进行,让我们能更高效的去处理有效的数据,或者循环处理某部分数据;并且学习指针、数组、结构体、枚举等这些工具来帮我们更高效的访问和存储数据;此外还需要学习与函数有关的函数指针、回调函数、递归函数等关的东西帮助我们能进行更复杂的操作、实现更复杂的功能等等............
(以上所有仅为个人理解,如有不足,欢迎你的指正噢~感谢你的阅读!)