C中的委托的使用和讲解

C中的委托的使用和讲解
C中的委托的使用和讲解

C#中的委托引言

委托和事件在.NetFramework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.NetFramework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。

将方法作为方法的参数

我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语:

1publicvoid GreetPeople(string name){

2//做某些额外的事情,比如初始化之类,此处略

3EnglishGreeting(name);

4}

1publicvoid EnglishGreeting(string name){

2Console.WriteLine("Morning,"+name);

3}

暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好,当我们传递代表某人姓名的name参数,比如说“JiYF”,进去的时候,在这个方法中,将调用EnglishGreeting方法,再次传递name参数,EnglishGreeting则用于向屏幕输出“Morning,JiYF”。

现在假设这个程序需要进行全球化,哎呀,不好了,我是中国人,我不明白“Morning”是什么意思,怎么办呢?好吧,我们再加个中文版的问候方法:

1publicvoid ChineseGreeting(string name){

2Console.WriteLine("早上好,"+name);

3}

这时候,GreetPeople也需要改一改了,不然如何判断到底用哪个版本的Greeting 问候方法合适呢?在进行这个之前,我们最好再定义一个枚举作为判断的依据:

1publicenum Language{

2English,Chinese

3}

1publicvoid GreetPeople(string name,Languagelang){

2//做某些额外的事情,比如初始化之类,此处略

3swith(lang){

4case Language.English:

5EnglishGreeting(name);

6break;

7case Language.Chinese:

8ChineseGreeting(name);

9break;

10}

11}

OK,尽管这样解决了问题,但我不说大家也很容易想到,这个解决方案的可扩展性很差,如果日后我们需要再添加韩文版、日文版,就不得不反复修改枚举和GreetPeople()方法,以适应新的需求。

在考虑新的解决方案之前,我们先看看GreetPeople的方法签名:

1publicvoid GreetPeople(string name,Languagelang)

我们仅看stringname,在这里,string是参数类型,name是参数变量,当我们赋给name字符串“jimmy”时,它就代表“jimmy”这个值;当我们赋给它“张子阳”时,它又代表着“张子阳”这个值。然后,我们可以在方法体内对这个name进行其他操作。哎,这简直是废话么,刚学程序就知道了。

如果你再仔细想想,假如GreetPeople()方法可以接受一个参数变量,这个变量可以代表另一个方法,当我们给这个变量赋值EnglishGreeting的时候,它代表着EnglsihGreeting()这个方法;当我们给它赋值ChineseGreeting的时候,它又代表着ChineseGreeting()方法。我们将这个参数变量命名为MakeGreeting,那么不是可以如同给name赋值时一样,在调用GreetPeople()方法的时候,给这个MakeGreeting参数也赋上值么(ChineseGreeting或者EnglsihGreeting等)?然后,我们在方法体内,也可以像使用别的参数一样使用MakeGreeting。但是,由于MakeGreeting代表着一个方法,它的使用方式应该和它被赋的方法(比如ChineseGreeting)是一样的,比如:

1MakeGreeting(name);

好了,有了思路了,我们现在就来改改GreetPeople()方法,那么它应该是这个样子了:

1publicvoid GreetPeople(string name,***MakeGreeting){

2MakeGreeting(name);

3}

注意到***,这个位置通常放置的应该是参数的类型,但到目前为止,我们仅仅是想到应该有个可以代表方法的参数,并按这个思路去改写GreetPeople方法,现在就出现了一个大问题:这个代表着方法的MakeGreeting参数应该是什么类型的?

NOTE:这里已不再需要枚举了,因为在给MakeGreeting赋值的时候动态地决定使用哪个方法,是ChineseGreeting还是EnglishGreeting,而在这个两个方法内部,已经对使用“morning”还是“早上好”作了区分。

聪明的你应该已经想到了,现在是委托该出场的时候了,但讲述委托之前,我们再看看MakeGreeting参数所能代表的ChineseGreeting()和EnglishGreeting()方法的签名:

publicvoid EnglishGreeting(string name)

publicvoid ChineseGreeting(string name)

如同name可以接受String类型的“true”和“1”,但不能接受bool类型的true和int类型的1一样。MakeGreeting的参数类型定义应该能够确定MakeGreeting可以代表的方法种类,再进一步讲,就是MakeGreeting可以代表的方法的参数类型和返回类型。

于是,委托出现了:它定义了MakeGreeting参数所能代表的方法的种类,也就是MakeGreeting参数的类型。

NOTE:如果上面这句话比较绕口,我把它翻译成这样:string定义了name参数所能代表的值的种类,也就是name参数的类型。

本例中委托的定义:

1publicdelegatevoid GreetingDelegate(string name);

可以与上面EnglishGreeting()方法的签名对比一下,除了加入了delegate关键字以外,其余的是不是完全一样?

现在,让我们再次改动GreetPeople()方法,如下所示:

1publicvoid GreetPeople(string name,GreetingDelegateMakeGreeting){

2MakeGreeting(name);

3}

如你所见,委托GreetingDelegate出现的位置与string相同,string是一个类型,那么GreetingDelegate应该也是一个类型,或者叫类(Class)。但是委托的声明方式和类却完全不同,这是怎么一回事?实际上,委托在编译的时候确实会编译成类。因为Delegate是一个类,所以在任何可以声明类的地方都可以声明委托。更多的内容将在下面讲述,现在,请看看这个范例的完整代码:

1using System;

2using

3using System.Text;

4

5namespace Delegate{

6//定义委托,它定义了可以代表的方法的类型

7publicdelegatevoid GreetingDelegate(string name);

8class Program{

9

10privatestaticvoid EnglishGreeting(string name){

11Console.WriteLine("Morning,"+name);

12}

13

14privatestaticvoid ChineseGreeting(string name){

15Console.WriteLine("早上好,"+name);

16}

17

18//注意此方法,它接受一个GreetingDelegate类型的方法作为参数

19privatestaticvoid GreetPeople(string name,GreetingDelegateMakeGreetin g){

20MakeGreeting(name);

21}

22

23staticvoid Main(string[]args){

24GreetPeople("JimmyZhang",EnglishGreeting);

25GreetPeople("张子阳",ChineseGreeting);

26Console.ReadKey();

27}

28}

29}

输出如下:

Morning,JimmyZhang

早上好,张子阳

我们现在对委托做一个总结:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用

If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

将方法绑定到委托

看到这里,是不是有那么点如梦初醒的感觉?于是,你是不是在想:在上面的例子中,我不一定要直接在GreetPeople()方法中给name参数赋值,我可以像这样使用变量:

1staticvoid Main(string[]args){

2string name1,name2;

3name1="JimmyZhang";

4name2="张子阳";

5

6GreetPeople(name1,EnglishGreeting);

7GreetPeople(name2,ChineseGreeting);

8Console.ReadKey();

9}

而既然委托GreetingDelegate和类型string的地位一样,都是定义了一种参数类型,那么,我是不是也可以这么使用委托?

1staticvoid Main(string[]args){

2GreetingDelegatedelegate1,delegate2;

3delegate1=EnglishGreeting;

4delegate2=ChineseGreeting;

5

6GreetPeople("JimmyZhang",delegate1);

7GreetPeople("张子阳",delegate2);

8Console.ReadKey();

9}

如你所料,这样是没有问题的,程序一如预料的那样输出。这里,我想说的是委托不同于string的一个特性:可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下:

1staticvoid Main(string[]args){

2GreetingDelegatedelegate1;

3delegate1=EnglishGreeting;//先给委托类型的变量赋值

4delegate1+=ChineseGreeting;//给此委托变量再绑定一个方法

5

6//将先后调用EnglishGreeting与ChineseGreeting方法

7GreetPeople("JimmyZhang",delegate1);

8Console.ReadKey();

9}

输出为:

Morning,JimmyZhang

早上好,JimmyZhang

实际上,我们可以也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting:

1staticvoid Main(string[]args){

2GreetingDelegatedelegate1;

3delegate1=EnglishGreeting;//先给委托类型的变量赋值

4delegate1+=ChineseGreeting;//给此委托变量再绑定一个方法

5

6//将先后调用EnglishGreeting与ChineseGreeting方法

7delegate1("JimmyZhang");

8Console.ReadKey();

9}

NOTE:这在本例中是没有问题的,但回头看下上面GreetPeople()的定义,在它之中可以做一些对于EnglshihGreeting和ChineseGreeting来说都需要进行的工作,为了简便我做了省略。

注意这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。

我们也可以使用下面的代码来这样简化这一过程:

1GreetingDelegatedelegate1=new GreetingDelegate(EnglishGreeting);

2delegate1+=ChineseGreeting;//给此委托变量再绑定一个方法

看到这里,应该注意到,这段代码第一条语句与实例化一个类是何其的相似,你不禁想到:上面第一次绑定委托时不可以使用“+=”的编译错误,或许可以用这样的方法来避免:

1GreetingDelegatedelegate1=new GreetingDelegate();

2delegate1+=EnglishGreeting;//这次用的是“+=”,绑定语法。

3delegate1+=ChineseGreeting;//给此委托变量再绑定一个方法

但实际上,这样会出现编译错误:“GreetingDelegate”方法没有采用“0”个参数的重载。尽管这样的结果让我们觉得有点沮丧,但是编译的提示:“没有0个参数的重载”再次让我们联想到了类的构造函数。我知道你一定按捺不住想探个究竟,但再此之前,我们需要先把基础知识和应用介绍完。

既然给委托可以绑定一个方法,那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”:

1staticvoid Main(string[]args){

2GreetingDelegatedelegate1=new GreetingDelegate(EnglishGreeting);

3delegate1+=ChineseGreeting;//给此委托变量再绑定一个方法

4

5//将先后调用EnglishGreeting与ChineseGreeting方法

6GreetPeople("JimmyZhang",delegate1);

7Console.WriteLine();

8

9delegate1-=EnglishGreeting;//取消对EnglishGreeting方法的绑定

10//将仅调用ChineseGreeting

11GreetPeople("张子阳",delegate1);

12Console.ReadKey();

13}

输出为:

Morning,JimmyZhang

早上好,JimmyZhang

早上好,张子阳

让我们再次对委托作个总结:

使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

C语言基础知识_测试题

C语言程序设计基础测试题 一、单选 [1] 下面叙述中错误的是____。 A. 复合语句中定义的函数只在该复合语句中有效 B. return( )语句中的括号中,可以是变量,常量或有确定值的表达式 C. 形式参数也是局部变量 D. 主函数中定义的变量在整个程序中都是有效的 [2]下列说法中正确的是____。 A.带参数的宏定义中的参数是没有类型的 B.宏展开将占用程序的运行时间 C.宏定义命令是C语言中的一种特殊语句 D.使用#include命令包含的头文件必须以“.h"为后缀 [3.] 若函数的形参为一维数组,则下列说法中正确的是____。 A.调用函数时的对应实参必为数组名 B.形参数组可以不指定大小 C.形参数组的元素个数必须等于实参数组的元素个数 D.形参数组的元素个数必须多于实参数组的元素个数 [4]. 系统的标准输出设备是____。 A.键盘 B.硬盘 C.内存 D.显示器 [5] 下面叙述中正确的是____。 A.全局变量在定义它的文件中的任何地方都是有效的 B.全局变量在程序的全部执行过程中一直占用内存单元 C. C语言的switch语句中case后可为常量或表达式或有确定值的变量及表达式 D. 说明函数时必须明确其参数类型和返回类型 [6]. C程序的基本结构单位是____。 A.文件 B.语句 C.函数 D.表达式 [7] 对于定义,char *aa[2]={"abcd","ABCD"},选项中说法正确的是____。 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 [8]. 任何一个C语言的可执行程序都是从____开始执行的。 A.程序中的第一个函数 B.main( )函数的入口处

C语言基础知识总复习考前突击专用

C语言基础知识总复习(考前突击专用) 总体上必须清楚的: 1)程序结构是三种:_顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式?数据存放的位置就是他的地址. 4)bit是位是指为0或者1。byte是指字节,一个字节=八个位? 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 & break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第0

第一章C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉VC++ 1、VC是软件,用来运行写的C语言程序。 2、 每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---?.obj---?.exe ) 这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。

谭浩强C语言知识点总结

谭浩强C语言知识点总 结 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

C语言最重要的知识点总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI ; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个C语言程序有且只有一个main函数,是程序运行的起点。

第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---?.obj---?.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!) 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)

最新c语言基础知识总结汇总

c语言基础知识总结

C语言知识要点复习资料 总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---→.obj---→.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!) 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数

c语言基础知识总结

C语言最重要的知识点复习资料 这个a版本,还会进行改正和补充,请大家认真熟悉这些基础知识! 总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI ; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 (.c---.obj---.exe) 2、每个C语言程序写完后,都是先编译,后链接,最后运行。 这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次) a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没

C语言基础知识

常量和变量 1.常量: 程序执行过程中,值不变的量。 3 ,'a' 变量:值可以改变的量。 一个变量有一个名字,在内存中有一定的存储单元,存放变量的值。 2.常量类型: a.整型:12,0,-3 b.实型:4.6,-1.2 c.字符型: 'a','d' d.符号常量: #define PRICE 30 (PRICE不能再被赋值且要大写) 3.变量: 先定义,后使用。一个变量只能被指定为一确定类型。 4.标识符:标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符数列。 a.由字母、数字、下划线三种字符组成,第一个字符必须为字母或下划线。 b.大写字母、小写字母被认为是两个不同的字符。 c.长度一般小于8个。 数据类型 一.整型: 1.整型常量 a.十进制:12,-3,0 b.八进制:以0开头。 c.十六进制:以0x开头。 2.整型变量 a. int -32768——32767 b. short int -32768——32767 c. long int d. unsigned int 0——65535 e. unsigned short 0——65535 f. unsigned long int、short int、long int 第一位为符号位 0000001 (0为正,1为负) unsigned 第一位不是符号位 0000001 所以int型和unsigned型的000001不是同一个值。 二.实型: 1.实型常量:

a.十进制数:数字和小数点组成。0.12,.12,12.0,0.0 b.指数:e之前必须有数字,e后面必须为整数。12e3 2.实型变量: a.单精度:float 7位有效数字 111111.1可,111111.11不可。 b.双精度:double 15—16位有效数字。 三.字符型: 1.字符常量: a. 'a' , 'x' , '*' ,'$' 。 b. 转义字符:‘\n'换。 '\t'从第九列开始。'\r'回车。 '\b'退一格。 2.字符变量: char char='a' 一个字符变量在内存占一个字节。 。将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的ASC码 放到存储单元中,所以字符型数据和整型数据之间可以通用。一个字符型数据既可以以字符形式输出, 又可以以整数形式输出。 四.字符串常量: "how are you", "a","&12" 。不能把一个字符串赋给一个字符变量。 char c='a'对,char c="how" 错。 。'a' :在内存中存a。 “a”:在内存中存a\0。 ‘\0’是C语言中判断字符串是否结束的标志。 变量赋初值 a. int a=3; float f=7.2; char c='a'; b. int a,b,c=5; 相当于 int a,b,c; c=5; c. int a=3;b=3;c=3; 不可写: int a=b=c=3;

《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

大学c语言必背基础知识_c语言基础知识大全

大学c语言必背基础知识_c语言基础知识大全 对于刚学计算机编程的同学来说,没一个编程知识都觉得很重要,其实不是的。下面小编为大家整理了相关大学c语言必背基础知识,希望大家喜欢。 大学c语言必背基础知识举例说明: printf(“-”,123 ); 第二部分有三位,大于指定的两位,原样输出123 printf(“]”,123 ); 第二部分有三位,小于指定的五位,左边补两个空格123 printf(“f”,1.25 ); 小数要求补足6位的,没有六位的补0,。结果为1.250000 printf(“%5.3f”,125 ); 小数三位,整个五位,结果为1.250(小数点算一位) printf(“%3.1f”,1.25 );小数一位,整个三位,结果为1.3(要进行四舍五入) 第三节数据输入1、scanf(“a=%d,b=%d”,">2、scanf(“%d,%d”,x,y);这种写法绝对错误,scanf的第二个部分一定要是地址!scanf(“%d,%d”,注意写成这样才可以! 3、特别注意指针在scanf的考察例如:int x=2;int *p=scanf(“%d”,x); 错误scanf(“%d”,p);正确scanf(“%d”,错误scanf(“%d”,*p)错误 4、指定输入的长度(考试重点)终端输入:1234567scanf(“-M%d”,x为12,y为3456,z为7终端输入:1 234567 由于1和2中间有空格,所以只有1位给xscanf(“-M%d”,x 为1,y为2345,z为67 5、字符和整型是近亲:int x=97;printf(“%d”,x); 结果为97printf(“%c”,x); 结果为a 6、输入时候字符和整数的区别(考试超级重点) scanf(“%d”,这个时候输入1,特别注意表示的是整数1 scanf(“%c”,这个时候输入1,特别注意表示的是字符‘1’ASCII为整数48。 补充说明: 1)scanf函数的格式考察: 注意该函数的第二个部分是scanf(“%d%d%*d%d”,跳过输入的第三个数据。 2)putchar ,getchar 函数的考查:

C语言基础知识测试题

基础知识测试题一.单项选择题 1.以下不正确的C语言标识符是() A.ABC B.abc C.a_bc D.ab.c 2.以下正确的C语言标识符是(C) A.%x B.a+b C.a123 D.test! 3.一个C语言程序的执行是从()。 A.main()函数开始,直到main()函数结束 B.第一个函数开始,直到最后一个函数结束 C.第一个语句开始,直到最后一个语句结束 D.main()函数开始,直到最后一函数结束 4.在C语言程序中,main()的位置()。 A.必须作为第一个函数 B.必须作为最后一个函数 C.任意 D.必须放在它所调用的函数之后 5.一个C语言程序是由()。 A.一个主程序和若干个子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 6.C语言源程序的基本单位是()。 A.过程 B.函数 C.子程序 D.标识符 7.编辑程序的功能是()。 A.建立并修改程序 B.将C源程序编译成目标程序 C.调试程序 D.命令计算机执行指定的操作 8.C编译程序是()。 A.C语言程序的机器语言版本 B.一组机器语言指令. C.将C源程序编译成目标程序的程序 D.由制造厂家提供的一套应用软件 9.不属于字符型常量的是() A.'A' B."B" C.'\n' D.'\x72' 10.设char ch;以下正确的赋值语句是:() A.ch='123'; B.ch='\xff'; C.ch='\08'; D.ch="\"; 11.以下使i的运算结果为4的表达式是() A.int i=0,j=0; (i=3,(j++)+i);

B.int i=1,j=0; j=i=((i=3)*2); C.int i=0,j=1; (j==1)?(i=1):(i=3); D.int i=1,j=1; i+=j+=2; 12.若t为double类型,表达式t=1,t+5,t++的值是() A.1 B.6.0 C.2.0 D.1.0 13.设整型变量m,n,a,b,c,d均为1,执行“(m=a>b)&&(n=a>b)”后m,n的值是() A.0,0 B.0,1 C.1,0 D.1,1 14.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为() A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2 15.若a=1,b=2,c=3,d=4,则条件表达式a

C语言基础知识(详细版)

C语言程序的结构认识 用一个简单的c 程序例子,介绍c 语言的基本构成、格式、以及良好的书写风格,使小伙伴对 c 语言有个 初步认识。 例1:计算两个整数之和的c 程序: #include main() { int a,b,sum; /* 定义变量a,b ,sum 为整型变量*/ a=20; /* 把整数20 赋值给整型变量a*/ b=15; /* 把整数15 赋值给整型变量b*/ sum=a+b; /* 把两个数之和赋值给整型变量sum*/ printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); /* 把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c 语言程序都必须包括以下格式: main() { } 这是c 语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main() - 在c 语言中称之为“主函数” ,一个c 程序有且仅有一个main 函数,任何一个c 程序总是从 main 函数开始执行,main 函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main 函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(; ),在c 语言中,我们把以一个分号结尾的一句话叫做一个 c 语 言的语句,分号是语句结束的标志。 5、printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); 通过执行这条c 语言系统提供给我们直接使用的屏幕输出 函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头 (2)不以分号结尾这一行没有分号,所以不是语句,在c 语言中称之为命令行,或者叫做“预编译处理命令” 。 7、程序中以/* 开头并且以*/ 结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为.c ,目标程序的扩展名为.obj , 可执行程序的扩展名为.exe 。

c语言基础知识总结

c语言基础知识总结 C语言最重要的知识点复习资料 这个a版本,还会进行改正和补充,请大家认真熟悉这些基础知识!如有错误,请拨打! 总体上必须清楚的: 1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数....文档交流仅供参考... 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址。 4)bit是位是指为0 或者1。byte是指字节, 一个字节 = 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。...文档交流仅供参考... 2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号. 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句. 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位. 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行. 3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序. 2、每个C语言程序写完后,都是先编译,后链接,最后运行.

(。c-——.obj---。exe)这个过程中注意。c和.obj 文件时无法运行的,只有.exe文件才可以运行。(常考!)...文档交流仅供参考... 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了. 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main definescanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。...文档交流仅供参考... 预定义标识符:背诵define scanf printf inclu de。记住预定义标识符可以做为用户标识符。...文档交流仅供参考... 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理.(考过两次)...文档交流仅供参考... a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没有8的,逢8进1。 b、C语言中的十六进制规定要以0x开头。 2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写. 1.0在C语言中可写成1. 0.1在C语言中可以写成.1。 3)实型数据的合法形式: a、2。333e—1 就是合法的,且数据是2。333×10—1。 b、考试口诀:e前e后必有数,e后必为整数。请结合书上的例子. 4)整型一般是4个字节,字符型是1个字节,双精度一般是8个字节:

C语言基础知识整理

C 语言基础知识 1. 每个C 程序有且只有一个主函数main() ,且程序必须从main() 函数开始执行,并在main() 函数中结束。 2. 在C语言中,用e来表示科学计数法时,规定在e的前面必须有数字,后面必须为整数。 3. 用单引号括起来的一个字符常量只能存放一个字符;C 语言中没有字符串变量,只能用字符数组来存储字符串。 4. 外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。 5. 在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内有效。 6. 用sizeof(int) 计算int 类型数据的字节数。 7. C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。 8. 预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空 间。 9. feo f函数的作用是检查文件是否结束,当结束时返回的值为非零,否则为零。 10. 当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。 11. 在赋值表达式中,赋值运算符"=”右侧不能为表达式;在求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。 12. 静态局部变量,只有当程序结束后,其值才释放。 13. 当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元素的地址。 14. 算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入时,其结果相同;算法 正确的程序最终一定会结束。15. 在 C 语言中,预处理命令行都以“#”开头;当需要时才用 #include; 预处理的作用就是实现宏定义和条件编译。16. 当数组元素的下标超出了定义 的下标范围时,系统不给出“下标越界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。 17. 共用体变量不能作为函数的参数,也不能使函数带回共用体变量。 18. 指向函数的指针变量的定义形式为:数据类型(* 指针变量)();,因此其为指向函数的 指针变量。 19. 用C 语言编写的代码程序是源程序,只有通过编译、连接才能进行。 20. 在说明为static 时,其生存期得到延长,而其作用域并没有改变,在定义后系统会自动帮它赋值为0,static 为关键字不能被用作它用。 21. 频繁地使用空语句会降低程序的可读性和运算速度。22. 运算符%两边都应是整数,赋值语 句左边应该是变量,而非表达式,强制转换语句强制类型应加括号。 23. 在逻辑运算符中,其两侧的运算符对象为任意合法的表达式即可。 24. 函数fread (&larray,2,16,fp)的功能是,从fp所指的数据文件中读取16次2字节的数据 存储到数组larray中。25.整个流式文件也可以随机存取数据,C语言文件中有好多函数可以达 到写入数据时,未经输入数据,达到不覆盖的目的,在进行写操作时,系统会自动关闭文件。 26. 使用putchar、getchat、puts、gets、printf、seanf函数时,必须在程序的开头岀现包含头文件 #inelude "stdio.h ”的命令行,而使用字符串处理函数时,必须在程序的开头岀现包含头文件 #include”string.h ”命令行,而使用数学函数时,必须在程序的开头岀现包含头文件#include”math.h” 的命令行。 27. 一个斜杠与小于等于127 任意数字按一个字符计算,一个斜杠与任意一个字符按一个字符计 28. 一个C 程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C 语言程序可以实现

c语言基础知识总结

C语言最重要的知识点复习资料 总体上必须清楚的 : 1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。 2) 读程序都要从main() 入口 , 然后从最上面顺序往下读( 碰到循环做循环, 碰到选择做选择) ,有且只有一个main 函数。 3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址. 4)bit 是位是指为0或者1。byte是指字节,一个字节= 八个位 . 概念常考到的: 1、编译预处理不是 C 语言的一部分,不占运行时间,不要加分号。 C 语言编译的程序称为源程序,它以ASCII 数值存放在文本文件中。 2、 define PI 3.1415926;这个写法是错误的,一定不能出现分号。 3、每个 C 语言程序中main 函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、 break 可用于循环结构和switch 语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C 语言的基础知识 第一节、对 C 语言的基础认识 1、 C 语言编写的程序称为源程序,又称为编译单位。 2、 C 语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个 C 语言程序有且只有一个main 函数,是程序运行的起点。 第二节、熟悉 vc++ 1、 VC 是软件,用来运行写的 C 语言程序。 2、每个 C 语言程序写完后,都是先编译,后链接,最后运行。(.c---.obj---.exe)这个过程中注意 .c 和 .obj 文件时无法运行的,只有.exe 文件才可以运行。(常考!)第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。 main define scanf printf 都不是关键字。迷惑你的地方 If 是 可以做为用户标识符。因为 If 中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C 语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二

C语言基础知识归纳

C 语言基础知识 1.每个C 程序有且只有一个主函数main() ,且程序必须从main() 函数开始执行,并在main() 函数中结束。 2.在C 语言中,用e 来表示科学计数法时,规定在e 的前面必须有 数字,后面必须为整数。 3.用单引号括起来的一个字符常量只能存放一个字符;C 语言中没有 字符串变量,只能用字符数组来存储字符串。 4.外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型 不是自动存储类别。 5.在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内 有效。 6.用sizeof(int) 计算int 类型数据的字节数。 7.C语言运行时,首先系统检查语法的正误,再运行程序的语法; C语言中,可以在一个函数中嵌套一个函数,但是不能在一 个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。 8.预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可 以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。 9.feo f函数的作用是检查文件是否结束,当结束时返回的值为非 零,否则为零。 10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。

11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运算 符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。 12.静态局部变量,只有当程序结束后,其值才释放。 13.当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元 素的地址。 14.算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入 时,其结果相同;算法正确的程序最终一定会结束。 15.在C 语言中,预处理命令行都以“ #”开头;当需要时才用 #include; 预处理的作用就是实现宏定义和条件编译。 16.当数组元素的下标超出了定义的下标范围时,系统不给出“下标越 界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。 17.共用体变量不能作为函数的参数,也不能使函数带回共用体变量。 18.指向函数的指针变量的定义形式为:数据类型(* 指针变量) ();,因此其为指向函数的指针变量。 19.用C 语言编写的代码程序是源程序,只有通过编译、连接才能进 行。 20.在说明为static 时,其生存期得到延长,而其作用域并没有改 变,在定义后系统会自动帮它赋值为0,static 为关键字不能被用作它用。 21.频繁地使用空语句会降低程序的可读性和运算速度。

第1章 C语言基础知识

第一章 C语言基础知识 一、选择题 1.算法具有五个特性,以下选项中不属于算法特性的是______。 A)有穷性B)简洁性C)可行性D)确定性 【答案】B 【解析】本题考查的是算法的特性。一个算法应当具有以下5个特性:有穷性;确定性;可行性;有零个或多个输入:由一个或多个输出。简洁性不属于这5个特性,所以本题应该选择B。 2.以下叙述中错误的是 A)用户所定义的标识符允许使用关键字 B)用户所定义的标识符应尽量做到“见名知意” C)用户所定义的标识符必须以字母或下划线开头 D)用户定义的标识符中,大、小写字母代表不同标识 【答案】A 【解析】本题考查C语言中标识符的概念。用用户标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,并且不能与C语言关键字相同。所以本题应该选择A。 3. 以下4组用户定义标识符中,全部合法的一组是() A)_main B)If C)txt D)int enclude -max REAL k_2 sin turbo 3COM _001 【答案】A 【解析】本题考核的知识点是C语言中的标识符命名规则。标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列(例如,-max含非法字符-),并且用户标识符不能与C语言中的32个关键字同名(例如,int是关键字,不是合法的用户标识符)。选项B中-max不是字母、数字或下划线组成的字符序列,故选项B不正确;选项C中3COM 不是由字母或下划线开头,故选项c不正确;选项D中int为C语言中的关键字,故选项D不正确;选项A中全部为合法的标识符,所以,4个选项中选项A符合题意。 4. 以下选项中,合法的一组c语言数值常量是( ) A)028 B)12. C).177 D)0x8a .5e-3 0Xa23 4e1.5 10,000 -0xf 4.5e0 0abc 3.e5 【答案】B 【解析】本题考查的知识点是:数值常量。 数值常量分为整型和实型两类。其中,整型有十进制、八进制和十六进制三种表示法;实型有小数形式和指数形式两种表示法。十进制和书面使用的数据表示一样;八进制是以数字O开头,后面跟由0~7组成的八进制数组成;十六进制是以0x(或OX)开头,后面跟由0~9与A~F(或a~f)组成的十六进制数组成;小数形式由数字和小数点组成,其整数部分或小数部分如果为0可省略,但不能同时省略。指数形式由小数形式或十进制形式开头,后面跟e(或E),再跟一个十进制整数组成。选项A中,028是八进制形式,但后面跟的8不在0~7之内,所以非法;选项c中,4e1.5是指数形式,但e后面所跟的不是整数,所以非法;选项D中,10,000中不能有?,?,所以非法。故本题应该选择B。 5. 以下叙述中正确的是() A)C语言的源程序不必通过编译就可以直接运行 B)C语言中的每条可执行语句最终都将被转换成二进制的机器指令

C语言基础知识基础总结

第一章 C语言概述 [考点一] C语言概述 C语言是一种结构紧凑、使用方便、程序执行效率高的编程语言,它有9种控制语句、32个关键字和34种运算符。C语言的数据结构也非常丰富,它的多种数据类型可以实现如链表、树、栈等复杂的运算,并且用结构化控制句来实现函数的模块化。C语言的语法不太严格,程序的设计自由度大,它可以直接访问物理地址,还可以直接对硬件操作。C语言也是一种移植性比较好的语言。 [考点二] C语言程序的构成 (1) C语言的源程序是由函数构成的,每一个函数完成相对独立的功能,其中至少包括一个主函数。 (2) C程序总是从main()函数开始执行 (3) C语言规定每个语句以分号结束,分号是语句组成不可缺少的部分,它在每条语句的最后出现。 (4)程序的注释部分应括在 /* 和 */ 之间不能有空格,注释部分允许出现在程序的任何位置。 [考点三] C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件,源程序的扩展名为.c,目标文件的扩展名为.obj,可执行程序的扩展名为.exe [考点四] 标识符 在编写程序时,必须为函数、变量等命名,这个名字称为标识符。标识符可以是一个或多个字符,标识符的第一个字符必须是字母或下划线,随后的字符只能是字母、数字或下划线。要区分字母的大小写。 标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。选择变量名和其他标识符时,应注意做到“见名知义”。 [考点五] 常量

在程序运行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字符型常量、字符串常量和符号常量。 (1)整型常量 整型常量有3种:十进制整型常量、八进制整型常量和十六进制整型常量。 (2)实型常量 实型常量有两种型式:小数形式和指数形式。 (3)字符常量 一个字符常量代表ASCII码字符集里的一个字符,在程序中用单撇号括起来,以便区分。 除了形式上的字符常量外,C语言还有特殊的字符常量——转义字符常量 (4)字符串常量 字符串常量是用双撇号括起来的一个或一串字符。 (5)符号常量 符号常量由宏定义“#define”定义的常量,在C程序中可用标识符代表一个常量。 [考点六] 变量 变量就是其值可以改变的量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值。不同类型的变量其存储单元的大小不同,变量在使用前必须定义。 (1)整型变量 整型变量分为4种:基本型、短整型、长整型和无符号型。 (2)实型变量 实型变量分为单精度类型和双精度类型。 在一般的系统中,float型数据在内存中占4个字节,double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供15-16位有效数字。实型常量不分float开和

相关文档
最新文档