第一个程序
我是在Code::Blocks 中写的程序。
#include <stdio.h>
int main(){
printf("Hello,World\n");
return 0;
}
运行效果如下:
从第一行看:
(1)
“#include < stdio.h >” :这是编译预处理指令”# include”,这里是引入stdio.h ,这个系统的文件,
stdio 是standard input & output 的缩写,翻译过来就是标准的输入输出。”.h”后缀的文件表示的是头文件
(header file),之所以这样叫是因为这些文件都是放在程序个文件模块的开头。
(2)
“int main() { … }” :定义主函数,main 是函数名,表示这个函数的类型是int 类型的。
当主函数正常结束的时候返回一个int类型的值,这个值为0,当执行主函数过程中出现异常或者错误,
返回值是一个非0的整数。
好处是,程序员可以利用操作指令检查main函数的返回值,从而判断main函数是否已经正常执行。
(3)
printf();输出所指定的一行信息,这里可以调用这个函数是因为前面编译预处理了stdio.h这个头文件。
(4)
从结果看:
Process returned 0 (0x0) execution time : 0.125 s
Press any key to continue.
这两句话不是咱们带有的。这是自动输出的,告诉用户,如果想继续进行下一步,请按任意键。
像上图,如果我在按任意键,就会关闭这个窗口,并且回到程序窗口。
如何写注释
在C中,程序在进行预编译处理时候,会将每个注释替换为一个空格,一次在编译时注释部分不产生目标代码
,对于程序的运行没有影响。
(1)
以 // 开始的注释。但只是表示单行。这种形式是在C99之后开始支持的。
(2)
以 /* 开始,以 */ 结束。这种注释可以包含多行内容。
第二个程序
#include <stdio.h>
int main(){
int a,b,sum;
a = 123;
b =456;
sum = a + b;
printf("sum is %d\n",sum);
return 0;
}
运行结果:
分析:
(1)
这是一个求和的程序,运行main()函数,先定义三个int 类型变量,再给a、b赋值,然后采用运算符求和,并且将值赋值给sum,和Java语法类似。
(2)
printf(“sum is %d\n”,sum);
sum is 是用户希望输出的字符串形式。
%d中,d表示用“十进制整数”形式输出,在输出时候, 后面的sum就会代替%d
\n表示换行字符。
第三个程序
#include <stdio.h>
int main(){
int max(int x,int y);
int a,b,c;
scanf("%d,%d",&a,&b);
c = max(a,b);
printf("max = %d",c);
return 0;
}
int max(int x, int y){
int z;
if(x>y) z = x;
else z = y;
return(z);
}
发现在main()函数之外又定义了一个max 函数,下面进行解答:
(1)
int max(int x,int y); 对于被调用(在主函数之外的函数都可以称为被调用)函数进行声明。
因为C中对于程序的编译是自上而下进行的,而,代码中max()函数放在了main()函数下面,
所以要进行声明,如果这两个函数换换位置,就不用这句话了。
只有先声明了,那么编译系统就知道max是什么了。
(2)
scanf(“%d,%d”,&a,&b);
可以理解为是定义在stdio.h头文件中的读取输入的方法。
这里的作用是输入变量a 和 b。在括号中可以分为两部分,前面是指定输入的数据按什么格式输入。
后面是输入的数据准备放到哪里,即赋给那个变量,&在C语言中表示的是地址符,&a的含义是
变量a的地址。
执行scanf函数的效果是,从键盘读取两个整数,送到变量a和b 的地址处,然后把两个整形分别赋值。
如何在输入,如果你只输入一个值,那么如下:
只能这样输:
(3)
return(z)
将z 的值作为max函数值带回到主函数中并且赋值给c。
总结
通过上述几个例子,可以说,简单了解了C,更加具体的以后会单独讲:
(1)
一个程序有一个或多个源文件(.C文件)组成。
一个源文件可以分为:
(1)预处理指令:
C编译系统在对源程序就行”翻译”之前,先有一个预处理器对预处理指令进行预处理。
如 # include < stdio.h > 将stdio.h 中内容读进来放在了# include 指令行中。然后
和后面的程序组成一个完整的源程序,有编译系统对于改源程序就行编译。
(2)全局声明
这点和Java类似,在方法中声明的变量,只在函数范围内有效。
全局变量,则在整个源文件范围内有效,但需要注意是,要在使用它之前声明,
因为C是自上而下编译。
(3)函数定义
一个C程序中可以理解为一个或者多个函数组成。其中一定有一个main函数,且只有一个。
一个小程序有一个源程序文件,在一个源文件中包含若干函数。其中一个main
一个大程序,可以使一个程序包含若干的源程序文件,每个源程序文件又有若干个函数。
在进行编译时候是以源程序文件为对象进行。
如下面代码
test2.h (自定义的头文件)
#ifndef _TEST2_H_INCLUDED_
#define _TEST2_H_INCLUDED_
int addsss(int a,int b);
#endif // TEST2_H_INCLUDED
test3.h( 自己写的源程序文件,这里面是对于addsss方法的实现)
#include <test2.h>
addsss(int a, int b){
return a+b;
}
main.c(主源程序文件)
#include <stdio.h>
#include "test2.h"
int a,b,c;
int main(){
scanf("%d,%d",&a,&b);
c = addsss(a,b);
printf("max = %d",c);
return 0;
}
上述三个实现的是:在test2.h中定义一个方法,在test3.c中写具体实现,在main.c中调用方法,但是只是调用方法,具体咋实现,系统自己会去找你的代码。
(2)
函数的组成
函数的首部:函数名、函数类型、函数属性、函数参数名、函数类型
函数体:一般来说可以认为包含声明部分、执行部分、
(3)
程序都是从main函数执行的。
(4)
程序中对计算机的操作是由函数中的C语句完成的
(5)
在每个数据声明和语句的最后必须有一个分号。
(6)
C语言本身不提供输入输出语句,它是由库函数scanf 和 printf函数完成
Bug
由于我是使用Code::Blocks 来进行操作的,如图所示:
一般默认的建立Projects 时候,是带有Sources文件夹,里面自带一个main.c文件。
但是我在add 那个test2.h文件的之后,在运行,显示:
no such file or diercery
这个情况就是.h文件没有导入进工程中。
点击Project(项目)->Build Options(生成选项)->Search Directories(搜索目录)
点击Add(添加)后选择你当前项目所在的文件夹,一定要手选,不要用默认的绝对路径。
系统提示“Keep this a relative path?”(保持相对路径么?)
然后确定 ok.
具体参考链接:http://blog.csdn.net/mrbourne/article/details/26349743