注:下文仅为个人理解
目录
1.C程序组成结构
组成:
(1)C预处理
(2)函数声明
(3)main()函数
(4)main()函数的函数体(由各种语句构成)
注:整体大致可划分为程序头部与程序体部分。程序头部由C预处理与函数声明构成(仅有C预处理可以,但不能仅有函数声明),程序体由main()函数及其包含的语句内容构成。
便于理解,举个例子说明一下:
举例说明
#include<stdio.h> //*预处理
int main(void) //*main函数调用(可以不只一个函数,但必须有main()函数)
{ //花括号内为函数体内容
int A; //声明
int A=2; //赋值运算
printf("The result of A is %d"); //*printf语句
return 0; //不理解,书上说是一个好习惯,代表程序正常退出
} //函数调用结束
//标有*的为切题的内容
这样写好像有点不严谨了,因为ASCII码中有A的对应数值,不过C允许二次定义,应该问题不大
重点解读:
(1)C预处理
1.C预处理由C预处理指令“#include”与头文件(如stdio.h)组成,其中头文件的作用是帮助编译器吧程序正确的组合在一起,总之,C预处理是编译器在编译前对源代码的一些处理
(2)函数
1.函数的作用
是可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用。
2.C程序中的函数的运行顺序
C程序一定从main()函数开始执行,除了main()函数以及C标准库规定的函数外,可以自定义函数,前提条件是必须保证main()函数的存在。
3.函数结构
在C程序中特定位置出现的函数称呼不同(如函数定义,函数原型...),书写结构也不同,就随便说一个咯.
函数定义结构:函数类型 函数(参数类型 参数,参数类型 参数,........);
{函数体}
如int max(int x,int y);
{........}
注:无参数时可以写为如int max(void);这样的形式,函数无返回值可以写为如void max(....)
,既无参数又无函数返回值可以写为如void max(void)的形式.
(3)5种语句
语句:语句是构成程序的基本行 每行(语句)用;结束
分类:1、 表达式语句 2、 函数调用语句 3、 控制语句 4、 复合语句 5、 空语句
1. 表达式语句
表达式语句由表达式加上分号“;”组成。其一般形式为:
表达式;
执行表达式语句就是计算表达式的值。例如 c=a+a;
2. 函数调用语句
由函数名、实际参数加上分号“;”组成。其一般形式为:
函数名(实际参数表);
例如 printf("Hello !");
3. 控制语句
控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。 可分成以下三类:
条件判断语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句。
4.复合语句
把多个语句用括号{}括起来组成的一个语句称复合语句。
在程序中应把复合语句看成是单条语句,而不是多条语句。例如:
{ x=y+z; a=b+c; printf("%d%d", x, a); }
5. 空语句
只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。
注:书上说的
(4)包含在函数中的声明
声明也是一种语句(表达式语句),只不过我认为它的分类,结构组成等方面分的很多,很细致,单独拉出来说,方便自己以后更好回顾
2.C的错误类型
(1)语法错误
语法错误时会出现编译器会报错的情况
(2)语义错误
编译器能正常运行但运行结果不对
语义错误情况下编写的程序可以正常运行但不能达到预期的结果,比如说:
//计算n'3的值
#include<stdio.h>
int main(void)
{
int n,n'2,n'3;
n=2;
n'2=n*n;
n'3=n'2*n'2; //语义错误,n'3应为n'2*n
printf("The result of n'3 is %d",n'3);
return 0;
}
注意:第二种情况有时很致命,你可能找半天都找不到哪里出错,因此,对于如用合适转换说明来匹配待打印值之类可能犯第二种语法错误的情况时,一定要细心。
解决方法:很老套,就是把自己当成一个计算机把整个程序重走一遍。
但是还有个方法
呢就是
3.标识程序状态
原理:标识程序状态通过跟踪程序执行步骤,以实现监视程序状态。
方法:
(1)在程序的关键点插入printf()语句
在程序的关键点插入printf()语句来监视指定变量值的变化,在对程序运行满意后再将多余的printf()语句删除。这就好比你接单视频剪辑,给视频打上水印以防止客户白嫖是一个道理的。
(2)使用调试器
调试器是一种程序,然后............
水平太低,书上讲的看不懂,日后再说。
4.提高程序可读性的方法
(1)使用有意义的函数名
比如说要声明一个变量表示宽度可以用width表示,让人一目了然
注意:变量名不能以关键字命名,这样的话编译器会把它当作语法错误。
(2)写注释
在程序的不同部分添上注释能够帮助自己和他人在看程序时明了程序各个部分内容,让程序看起来更有条理,同时也方便在程序出错时快速定位
(3)用空格划分程序的不同的部分
按照字面意思理解即可
(4)每条语句各占一行
按照字面意思理解即可,我可不是敷衍.
5.零碎知识
(1)程序报错时,在报错行找不到时请检查上一行
(2)变量的命名(标识符)可以用小写字母,大写字母,数字,下划线_来命名,并且不同的操作系统可能对字符数量有不同的要求,还有,尽量不要以下划线_为开头命名避免与C库中标识符冲突,因为C库中经常使用以下划线_为开头命名的标识符。
(3)转义序列用于表示难以表示或无法输入的字符
(4)return语句在某些操作系统(如Linus鱼UNIX)中有实际用途。