一、C语言的历史(1.1)java
起源:贝尔实验室开发的UNIX操做系统的副产品。标准化:C89和C99。基于C的语言:C++,Java,C#,Perl。程序员
二、C语言的优缺点(1.2)编程
优势:高效、可移植、功能强大、灵活、标准库、与UNIX和Linux集成;缺点:C程序更容易隐藏错误、C程序可能难以理解、C程序可能会难以修改。编辑器
高效使用C的方法函数
1.学习如何规避C语言的缺陷(C陷阱与缺陷);2.使用软件工具使程序更加可靠(lint工具和调试工具);工具
3.利用现有的代码库;4.采用一套切合实际的编码规范;5.避免“投机取巧”和极度复杂的代码;6.紧贴标准(C89和C99)学习
一、编写一个简单的C程序(2.1):编译和链接编码
预处理:执行以#开头的命令,相似于编辑器,能够给程序添加内容,也能够对程序进行修改;操作系统
编译:编译器将程序翻译成机器语言(即目标代码);翻译
连接:链接器把由编译器产生的目标代码和所需的其余附加代码整合在一块儿,附加代码包括库函数。
二、简单程序的通常形式(2.2):C程序由指令、函数和语句组成。
指令:通常是预处理器执行的命令,相似于#define,#include <stdio.h>;函数:程序员编写的函数和库函数;语句:程序运行时执行的命令,每条语句由分号结束。
main函数最后的return 0;语句。做用:一是使main函数终止,二是指出main函数返回值是0.
三、注释(2.3):每一个程序都应该包含识别信息,即程序名,编写日期,做者,程序的用途及其余相关信息。/* */和//
四、变量和赋值(2.4)
每一个变量必须有一个类型。使用变量以前必须对其进行声明。
float型变量运算比int型变量慢,float型变量所存储的数值只是实际值的一个近似值。
书写格式方面,建议在声明和语句之间留出一个空行。
给float型变量赋值时,最后在后面加一个f,例如float profit = 21.34f;
占位符%d用来指明在显示过程当中变量的值的显示位置。
没有默认值且还没有在程序中被赋值的变量是未被初始化的。
C语言通用原则:在任何须要数值的地方,均可以使用具备相同类型的表达式。printf("Volume (cubic inches): %d\n", height * lenght * width);
五、读入输入(2.5)
printf中的字母f和scanf中的字母f含义相同,都是表示“格式化”的意思。
scanf函数须要知道将得到的输入数据的格式,而printf函数须要知道输出数据的显示格式。
六、定义常量的名字(2.6)
C程序规范:#define宏定义的名字都使用大写字母表示。
#define SCALE_FACTOR (5.0f / 9.0f) 添加上f
七、标识符(2.7)
传统C中命名中间插入下划线,例如symbol_table,current_page
目前流行的java(C#及C++)用单词首字母大写,例如symbolTable,currentPage
八、C程序书写规范(2.8)
语句能够分开放在任意多行内;记号间的加空格能够更容易区分记号;每一个逗号后边也放一个空格;缩进帮助识别程序;空行能够把程序划分红逻辑单元;
一、printf函数(3.1)
printf函数用来显示格式串的内容,而且在该串中的指定位置插入可能的值。格式串包括普通字符和转换说明。
转换说明:%m.pX格式或者-m.pX格式来表示。m(最小字段宽度):指定要显示的最小字符数量;p(精度),+和-表示右对齐和左对齐。
转义序列:使字符串包含一些特殊字符而不会使编译器引起问题。警报(响铃)符:\a;换行符:\n;水平制表符:\t。
二、scanf函数(3.2)
检查转换说明数量是否与输入变量数量相匹配;检查每一个转换是否适合相对应的变量;scanf每一个调用变量前须要有&。
许多专业程序员避免使用scanf函数,而是采用字符格式读取全部数据,而后再把他们转换成数值形式。
scanf函数本质上使一种“模式匹配”,试图吧输入的字符组与转换说明相匹配。
用户从键盘输入时,程序并无读取输入,而是把用户的输入放在一个隐藏的缓冲区中,由scanf函数来读取。
一、算术运算符(4.1)
一元运算符什么都不作,在经典C中不存在这种运算符。
把int型操做数和float型操做数混合在一块儿时,运算结果时float型的。
运算符%要求操做数十整数。当运算符/和运算符%用于负操做数时,其结果难以肯定。
通用规则,C语言容许在全部表达式中用圆括号进行分组。
运算符的左结合和右结合。
二、赋值运算符(4.2)
表达式v=e,若是v和e的类型不一样,那么赋值运算发生时会把e的值转化为v的类型。
在C语言中,赋值就像+那样是运算符。即赋值操做产生结果。赋值表达式v=e的值就是赋值运算后v的值。
一、逻辑表达式(5.1)
关系运算符能够用于比较整数和浮点数,也容许比较混合类型的操做数。所以1<2.5的值为1。
关系运算符的优先级低于算术运算符。表达式i + j < k - 1的意思是(i + j)<(k - 1)。判等运算符的优先级低于关系运算符。
逻辑运算符所产生的结果时0或1。
二、if语句(5.2)
把==运算符与=运算符相混淆是最多见的C语言编程错误。
复合语句,经过在一组语句周围放置花括号,能够强制编译器将其做为一条语句来处理。
对于if else 语句在没必要要的状况下使用花括号有两个好处。首先,程序很容易修改,而后,能够避免忘记使用花括号而致使的错误。
条件表达式使程序更短小但也更难以阅读,因此最好避免使用。用于两种地方:1.return语句;2.某些类型的宏定义中。
if (i > j)
return i;
else
return j
替换为
return i > j ? i : J;
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
替换为
printf("%d\n", i > j ? i : j);
为了便于理解,C89的程序员一般使用TRUE和FALSE这样的名字定义宏:
#define TRUE 1
#define FALSE 0
C99中使用_Bool型,例如:_Bool flag;_Bool只能赋值为0或1
或者包含<stdbool.h>,能够写为bool flag,<sdbool.h>中提供了ture和false两个宏,分别表明1和0.
一、常见循环类型
while语句;do语句;for语句
二、for语句(6.3)
21.for语句的惯用法
从0向上加到n-1:for( i = 0; i < n; i++)
从1向上加到n:for( i = 1; i <= n; i++)
从n-1向下减到0:for(i = n - 1; i >= 0; i--)
从n向下减到1:for( i = n; i > 0; i--)
2.2 C99中的for语句
在C99中,在for语句的第一个表达式中能够替换为一个声明
for(int i = 0; i < n; i++)
2.3退出循环
break语句:跳出循环或者switch语句,可是不能从switch中跳出循环。
continue语句:跳过某次迭代的部份内容,但不会跳出整个循环。
goto语句:让程从一条语句跳转到另外一条语句。goto语句必须和goto标识符在同一个函数中。
goto语句的缺点:1.goto语句能够往前跳也能够日后跳,使程序难以阅读;2.goto语句使程序难以修改。
2.4空语句
语句能够为空,除了末尾处的分号之外什么符合也没有。
空语句有一个好处:编写循环体的循环。
C程序员习惯性把空语句单独放置在一行。
for(d = 2; d < n && n & d != 0; d++)
;
其余使用空语句的地方
for(d = 2; d < n && n & d != 0; d++)
continue;
for(d = 2; d < n && n & d != 0; d++)
{}