c的详细学习(1)C语言概述
本节用来简要介绍c语言。
(1)C语言的特点:
C语言是一种集汇编语言及高级语言为一身的,面向过程的结构化和模块化的程序设计语言。
特点:
兼具高级语言与低级语言的双重能力。C语言允许直接访问内存地址,能进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作,所以又被称为中级语言。
生成的目标代码质量好,程序的执行效率高。
语言简洁,结构清晰。C语言强大的函数功能为程序的模块化和结构化提供了保证。
语言表达能力强。
程序的通用性和可移植性好。C语言没有依赖于硬件的输入输出语句,而是采用系统库函数进行输入和输出操作,因此C语言不依赖任何硬件系统,这种特性使得C语言编写的程序很容易移植到其他环境中。
C语言的不足:语法限制不严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不做检查等。
(2)介绍C语言的程序结构:
1 #include<stdio.h> /*编译预处理*/ 2 3 float area(float h,float w){ /*定义函数*/ 4 double s; 5 s=h*w; 6 return s; 7 } 8 9 int main(){ 10 double h1,h2,w1,w2,s1,s2; 11 h1=10.5;w1=20.5; 12 h2=1.5*h1;w2=1.5*w1; 13 s1=area(h1,w1); 14 s2=area(h2,w2); 15 printf(“area=%6.2f”,s1+s2); 16 }
程序运行结果:
第一次注意到这个提醒错误:
问题原因: 应该是编译器需要文件最后有一个回车,作为文件结尾。
解决方法:在*.c文件最后面添加上一个回车,独立成一行。(在程序代码的最后面多敲一个空行,也就是说在右括号后打个回车键。因为gcc对你的源文件有要求,就是.c or .cpp文件后面要有一个空行)
*编译预处理: 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。编译预处理是C语言区别于其它高级程序设计语言的特征之一,它属于C语言编译系统的一部分。C程序中使用的编译预处理命令均以#开头,它在C编译系统对源程序进行编译之前,先对程序中这些命令进行“预处理”。编译预处理命令的三种不同形式:宏定义、文件包含和条件编译。
*宏定义(也叫宏替换):#define PI 3.14
宏名一般用大写;宏定义结尾不加分号;
宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
宏展开不占运行时间,只占编译时间
可以用#undef终止宏定义的作用域;
例子1:#define S(a,b) a*b
area=S(3,2);第一步被换为area=a*b;第二步被换为area=3*2;
例子2.#define S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) ((r)*(r))
(3)编译源程序:
为了使计算机能够执行高级语言源程序,必须把源程序转换为二进制形式的目标程序,这个过程称为编译源程序。
编译是以源程序文件为单位分别进行的,每个源程序文件对应生成一个目标文件,目标文件的扩展名为“.obj”。编译结束之后,得到一个或多个目标文件,此时要使用系统提供的“连接程序(linker)”讲一个程序的所有目标文件和系统的库文件以及系统提供的其他信息连接起来。
(4)算法与程序设计基础:
程序=算法+数据结构+程序设计方法+语言工具+环境
算法分为数值运算算法和非数值运算算法两种。数值运算算法是对问题的数值求解,例如对微分方程的求解,对一元二次方程求解等;费数值运算算法包括非常广泛的领域,如信息检索,事务管理,数据处理等。
程序设计的经典算法:
穷举法:百元买百鸡问题(假设每只小鸡0.5元,每只公鸡2元,每只母鸡3元,现在有100元买100只鸡,问:有几种买法。)
x+y+z=100;
3x+2y+0.5z=100;
代码如下:
1 #include<stdio.h> 2 3 int main(){ 4 int x,y,z;//分别代表小鸡,公鸡和母鸡数量 5 int flag=1; 6 for(x=0;x<=100;x++){ 7 for(y=0;y<100-x;y++){ 8 z=100-x-y; 9 if(3*x+2*y+0.5*z==100){ 10 printf("第%d种买鸡方案是:%2d只小鸡,%2d只公鸡,%2d只母鸡\n",flag,x,y,z); 11 flag++; 12 } 13 } 14 } 15 return 0; 16 }
运行结果如下:
输出1到100间的素数:
代码如下:
1 #include<stdio.h> 2 3 int main(){ 4 int i,m; 5 int flag=0; 6 for(i=2;i<=99;i++){ 7 for(m=1;m<=i;m++){ 8 if(i%m==0){ 9 flag++; 10 } 11 } 12 if(flag<=2){ 13 printf("%2d是素数\n",i); 14 } 15 flag=0; 16 } 17 return 0; 18 }
运行结果如下: