C 讲义
QJY
前言:
本讲义是本人在假期期间为了同学写的一份讲义,时间精力有限,有很多内容都没
有介绍,如果发现有错误,请发送到xdqjy@sina.cn,我将非常感谢。本讲义是针对计算机二级考试而写,所以介绍的内容都比较简单,如果有一定基础,那么再好不过了。其实计算机语言注重理解和练习,就是what is what的思想。讲义中大量使用截图,就是给读者以直观的执行感受,而不是一味的看书,全无上机实践的感觉。
在学校使用的是win7系统,在家使用的是xp,所以前后截图的程序框不一致。经
上机检验代码基本没有什么大问题。
因为不知道你的C语言水平,所以从最基础开始。
首先,C程序的所有执行单元都是以函数为基础的。函数的通用模式为:
类型 函数名(类型 参数)
本文是免费的,因为我喜欢免费的文库资源。
2012 02 16 于西电科大
Example:
int fun(char word)
再顺便提一下数据类型
数据类型主要有char int
float(double) void
而后续的struct(结构体) enum(枚举) union(联合)属于数据形式,而非数据类型。
这里考试可能会考到,当初我就错了。
接着讲函数。由上面的例子可知,一个函数主要由3个部分组成。分别是返回值类型,函数名,
参数。这里的返回值就是函数对参数处理完成后的返回结果。如果没有返回值,比如函数体中语句是
这样:
printf(”%c”,word);//只有这一句……
那么函数的声明就可以是:
void fun(char word);//分号表示声明
就是用void来表明返回值是空的。而如果需要返回一个值的话,比如将输入的字符变成一个对应的数字,则可以这样: {
return word-48;
int fun(char word)
/*这里的表示将word字符变成对应的整形数字然后输出。例如你传入一个字符值‘9’,那么根据标准信息交换码,减去48再赋给整形数据就是对应的整数9了,而非字符。如果不理解,一定要问我。*/ }
这样,这个函数的返回值就是int类型的数据了。
上面讲的意思可以理解为函数声明前面的那个类型不是什么函数的类型,而是函数返回值的类型,如果不需要返回值,那么用void声明后,不需要使用return返回一个值。 return用于返回一个值,使用形式可以为
return 1;
也可以是
return(1);
这个两种方式随便用可以接数字,数据(比如word),也可以是一个返回值对应的函数(比如return(fun(‘9’));/*这个不要求*/)。
这里需要注意的是你用return返回的值必须是和函数的返回值一致,不然编译器会报错。 另外,函数的参数必须和你传入的参数一致,比如下面的这个错误代码:
float a=0; fun(a);
这里的错误就在于传入的数据a是float型,而fun函数声明的时候是int类型参数。这样代码
在编译时会报错,内容基本就是数据类型不相符云云……
数据类型
上面的函数内容有讲过,五大基本类型,分别是char int float double void(这个很少用)。下面介绍一下他们占据内存空间的大小:
char 永远都是1B的大小。这主要是因为标准信息交换码只有256个信息,从0~255。所以一个8位大小的数据就足够了。表示字符时用单引号+字符,比如’a’。
int 这个根据系统而定。旧版的书用的是16位计算机,所以此时的int类型只有2B大小(16/8=2), 而我的计算机用的是32位系统,所以大小为4B。后面会有截图,你看了就清楚了。
float 这个类型是浮点数,因为技术方法不一样,所能表示更大的数据,能准确表示7位有效数字。这个类型的数据占用的内存空间和整型一致都是4B。
double 同样是浮点数,但是数据精度为15位有效数字。这里double占据的空间大小是float的2倍。也就是8B。
void 这个类型很少用于数据的定义,了解即可。 下面是代码演示:
配合着代码以及图片,你应该能体会得更深刻。
注:main主函数也是一个函数,因为前面标注的是int类型,所以理论上需要返回值。实际上这个可有可无,但是作为一个良好的习惯最好加上。当年我不是很理解这个习惯,不过现在已经理解了,因为C的编程是严谨的。 说明:
1B=8位=1字节,就是8个二进制,例如1010 1010这里就有8个二进制信息。 一个 字 等于两个字节。
然后在这方面还有一些关键字,比如unsigned signed。这些是用来表示一个数据在存储时有无符号。比如说int a=-4 在16位pc中其二进制储存为1000 0000 0000 0100
而int a=4的存储数据为
0000 0000 0000 0100
这里最左面数字的表示的就是这个数字的符号。1为负数,0为正数,在显示数据时,计算机会先判断这个数据有无符号,然后在换算后面的二进制数据。
如果声明:unsigned int b=a;那么b在显示时就是将一变成数据翻译的结果如下图所示:
这里就是在输出的时候,先用整数形式输出,然后再用无符号类型输出,得到了完全不同的结果。
用unsingn类型表明,所有位的数据都是用于存放数据的,输出时需要注意的是,必须用%u来输出(u代表unsigned),不然还是得不到预期的结果,你可以自己尝试一下。
而在long的使用上,可以声明long int,long float。而long类型数据是32位的,32位pc上的int也是32位。所以使用long类型声明int类型后,可以使用可能比int数据大的类型。 {
int a=-4; long a1=-4; float a2=-4; long double a3=-4;
printf(\ system(\ return 0; }
执行效果如下:
如下代码: int main()
这里你会发现,long是可以单独声明一个变量的,而且数据类型为整形,即等效为long int声明。另外需要注意的是,long可以用于int,以及double类型的声明,而float是不可以的,这点要注意。
剩下的一点我简要介绍一下:
short类型是16位数据 只能用在int上。另外long long是C99标准中新出的,用法和long