Presentation is loading. Please wait.

Presentation is loading. Please wait.

C语言及C++程序设计课件.

Similar presentations


Presentation on theme: "C语言及C++程序设计课件."— Presentation transcript:

1 C语言及C++程序设计课件

2 C语言真难学。 不知道怎么复习, 也不清楚考试的难度。 死 人 了! 别着急,让我来帮你。

3 基本知识 第一部分 基本知识 程序结构 基本概念 C的语句 函数和类 数组及指针

4 基本概念---数据类型 基本知识 基本数据类型: 布尔型 bool 字符型 char 整型 int,short,long,unsigned
实型 float,double,long double 非基本数据类型: 数组 type [] 指针 type * 空类型 void 结构 struct 联合 union 枚举 enum 类 class 说明 ①标准数据类型由系统给出,用户在程序中可以直接使用。 ②除标准类型之外,其它类型要由用户自己定义, 定义类型的格式:TYPE <类型标识符>=<类型>;

5 基本概念---标识符、常量、变量、表达式
基本知识 基本概念---标识符、常量、变量、表达式 标识符:由字母和数字组成,以字母开头。 常量:在程序执行过程中,其值不变的量。 变量:在程序执行过程中,其值可变的量。 要求所有的变量必须先说明后使用。 变量说明: <类型> <变量标识符表>; 表达式:表达式由常量,变量,函数,各种类型的运算符及括号组成。 运算顺序: 按运算符优先级15个等级排序。如 括号>一目>算术>位移>关系>逻辑>条件>赋值>逗号

6 基本概念---运算符和运算顺序 基本知识 主要运算符: (1)算术运算符:-(负),+,-,*,/,%
(2)关系运算符:<,<=,>,>=,!=,== (3)逻辑运算符:!,&&,|| (4)位运算符:~,<<,>>,&,^,| (5)条件运算符:? : (6)赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= (7)增量运算符:++,-- 运算顺序: 按运算符优先级15个等级排序。如 括号>一目>算术>位移>关系>逻辑>条件>赋值>逗号

7 基本概念--- C++的输入输出 基本知识 源程序开始应使用 #include<iostream.h> 输入:
cin >>v1>>v2>>…>>vn; 功能:输入n项数据 输出:cout<<p1<<p2<<…<<pn; 功能:输出n项的值 注意:输出项可以是常量、变量、函数、字符串或表达式

8 C语言的语句 基本知识 (1)表达式语句 (2)函数调用语句 (3)块语句 (4)空语句 2. 控制语句
1。简单语句 (1)表达式语句 (2)函数调用语句 (3)块语句 (4)空语句 2. 控制语句 (1) if语句 (2)switch语句 (3)while语句 (4)do while语句 (5)for语句 (6)break语句 (7)continue语句 (8)return语句 (9)goto语句

9 C语句---if语句 基本知识 如果(if)语句 格式: (1)if(表达式)语句 (2)if(表达式)语句1 else 语句2
C 中,条件语句有两种,if语句,switch语句 如果(if)语句 格式: (1)if(表达式)语句 (2)if(表达式)语句1 else 语句2 注意:① 第二种结构中的之间一般有分号“;” ② 判断条件可以是任意表达式,并且表达式要用括号括起来。

10 C语句---switch语句 基本知识 情况(switch)语句: 格式: switch( <表达式>)
{case <常量1>:<语句1> break; case <常量2>:<语句2> break; : case <常量n >:<语句n > break; default:<语句n+1> } 执行过程:当执行到开关语句时,首先计算表达式的值,如果表达式 的值等于某个常量,则执行这个 常量后的语句,并经break 跳出开关语句

11 C语句---do while语句 基本知识 重复性语句 有三种:do while语句、while语句、for语句
<语句1>; : <语句n > }while( <表达式>); 特点: ① 先执行循环体,然后再判断条件 ② 当条件为真时,继续执行重复体,条件为假时, 跳出do while 语句 ③ 循环体至少被执行一次

12 C语句---while语句 基本知识 (2)while 语句 格式: while( <表达式>) <语句>;
特点:① 先判断条件,然后执行循环体 ② 当条件为真时,执行循环体,条件为假时,跳出while语句 ③ 重复体可能一次也不执行 注意:do while与while语句,在循环体内要有改变条件的语句, 否则就会构成死循环

13 C语句---for语句 基本知识 (3)for 语句 格式: for(表达式1;表达式2;表达式3) <语句>
例: for(int i=1,s=0;i<=10;i++) s+=i; 特点: 表达式1只执行一次,一般用作设置循环初值,表达式2作为判断 条件,表达式3一般用作循环变量的增值。 注: (1)三种循环可以互相转换。 (2)可以通过break语句跳出循环,还可以通过continue语句跳过本次循环的剩余语句,继续循环。

14 C语句---break语句 基本知识 (3)break 语句 格式: break; 使用场合:switch语句或循环语句的语句体。
功能:跳出语句体。 注: (1)switch语句需通过break语句跳出; (2)在嵌套switch或循环结构时,break只能跳出一层。

15 C语句---continue语句 基本知识 (3)continue 语句 格式:continue; 使用场合:循环语句的语句体。
功能:跳过语句体中剩余语句,即结束循环体的一次重复。

16 C语句---return语句 基本知识 (3)return语句 格式:(1)return ; (2)return 表达式;
使用场合:函数体。 功能:(1)把程序运行的流程跳转到该函数的调用点, (2)计算返回表达式,并把表达式的值作为该函数的返回值。

17 程序结构(1) 基本知识 程序结构: 三种基本结构:顺序结构、选择结构、循环结构。 可以证明:任何结构化程序都可用这三种基本结构来构成。
三种基本结构的特点:① 单入口 ② 单/多出口 ③ 结构内没有死循环

18 基本知识 程序结构(2) 了解程序结构,才能对程序设计的整体有明确的概念,在设计稍微复杂一点的程序时就需要用到多文件结构。头文件用来联系组成程序的各个部分,说明外部变量和函数。在进行具体程序开发时,一般需要借助于一个“项目”文件来记录组成整个程序的各个部分以及这些部分之间的关系。

19 基本知识 程序结构(3) 在程序结构设计的过程中,要遵循高内聚和低耦合的原则。文件模块之间的关系尽量少,文件模块内部的各个部分尽量相关。在面向对象程序设计中,一般会将一个或几个相关的类的实现放在一个cpp文件中,它们的定义放在一个头文件中。在结构化程序设计中,一般会将具有相关功能的函数放在一个文件中,它们的函数原型放在一个头文件中。

20 基本知识 程序结构(4) 但是文件之间的联系不可避免。外部(extern)存储类型用来引入在其他文件中定义的变量或函数,使得在一个文件中可以用到在其他地方定义的变量或函数。静态全局变量可以限制变量或函数只能在一个文件中使用。

21 基本知识 程序结构(5) 文件、函数、类等自然约束了变量和函数的作用区域。在一个文件中定义的变量和函数如果没有说明,不能为其他地方所用;在函数体中定义的变量作用范围只是在函数体内;类的成员只能通过类的对象调用,而且私有成员只能由类的成员函数使用。学员应该理解作用域并在程序设计中灵活掌握。

22 基本知识 程序结构(6) 编译预处理命令是C++语言比较特殊的一个语言成分。它们并不遵循C++的语法,而是具有自己独特的语法结构。编译预处理命令可以控制编译器的行为,在有些情况下非常有用。如#include是最常用的命令。#if,#define等命令在进行程序调试、建立与编译器有关的程序时非常有用。

23 数组(1) 基本知识 数组是一个简单而又常用的数据结构,可以模拟现实世界中具有同一类型对象的聚集现象。在数学上也非常有用(如矩阵运算)。
字符数组(字符串)是程序设计中经常用到的数据类型,C++专门有一个库(string.h)来支持有关字符串的操作。字符串可以用来表示名字、地址等文字性的信息。

24 基本知识 数组(2) 数组与指针有着非常相似的地方,数组名本身就是一个指针,除了它不能作为一般变量使用。在程序设计中,经常用指针指向动态分配的数组空间以减少一般数组在空间上的不灵活。 指针数组中数组的每个元素都是指针,这种情况一般用于数组元素是字符串的情况。C++程序的命令行参数就是作为字符串数组传递给main()函数的。

25 1)所有指针在使用前需要确保已经指向合法空间 2)在不指向任何空间时将指针赋值为NULL
基本知识 指针(1) 指针使得C++语言使用起来非常灵活,它是C++语言的难点,但也是C++程序产生错误的最大的源泉。在使用过程中,要注意以下几点: 1)所有指针在使用前需要确保已经指向合法空间 )在不指向任何空间时将指针赋值为NULL

26 基本知识 指针(2) 指针与内存空间的分配密切相关。程序中经常利用new来动态申请内存空间并赋给一个指针来实现内存空间的动态分配。使用时,注意以下两点: 1)所有通过new申请的空间(赋值给了指针)在不再使用时一定要释放。 2)在对象析构时释放所有该对象申请的空间,在程序结束时释放所有程序中申请的空间。

27 指针(3) 基本知识 指针的掌握不太容易,要抓住关键。了解指针经常使用的场合,就可以比较容易理解指针了。指针常用于以下情形:
函数参数 用指针作为函数参数有两个好处: 1)可以避免按值传递参数带来的空间浪费, 2)可以通过指针间接修改形式参数所指向的地址空间。 字符串 就是字符指针(和字符数组一样),字符串非常常用。

28 基本知识 指针(4) 动态空间申请 很多时候,要使用的内存空间在设计程序无法知道(如需要用户输入),需要在运行过程中,通过new来动态申请空间,new返回的就是指针。动态申请的空间可以是简单数据类型,也可以是数组、结构或是类等复杂数据类型。 链表结构 指针通常和结构一起使用,组成链表、树、图等各种复杂的数据结构。这些结构对于描述各种现实问题非常有用。

29 基本知识 函数(1) 函数是构成C++程序的重要单元,是模块化程序设计中的基本模块,也是实现传统的结构化程序设计的重要语言机制。掌握好如何划分程序模块,用函数实现它,是程序员的基本素质。 main()函数是系统中最特殊的一个函数,它是整个系统运行的第一个函数。 函数分为程序员自定义函数和系统提供的库函数。库函数的使用可以大大减轻程序员的负担,提高工作效率和程序的正确性。

30 基本知识 函数(2) 函数调用实现了函数之间的联系。是程序得以运行起来的纽带。理解函数调用的机制、参数传递的方式、函数返回信息的手段等,都是对学员的基本要求。 重载实现了同名函数对于不同数据类型的不同操作,对于实现面向对象思想有一定帮助。 函数原型一般放在头文件中说明,作为一个公共的服务,提供给包含该头文件的其他文件中的函数调。 简单数据类型、数组、指针、引用、结构以及类的对象作为函数的参数和返回值的含义各有不同,需要仔细区分。

31 基本知识 函数(3) 在参数传递上,简单数据类型和结构按值传递;数组是地址传递;指针间接实现了按地址传递;引用直接将形式参数和实在参数联系在一起,使用同一内存空间;类的实例—对象则通过对象的拷贝构造函数构造一个临时对象作为传递给函数的参数。结构和类等复杂数据类型又可以借助于指针或引用来减少函数调用过程中的时间和空间消耗。函数的返回值也有讲究。数组不能作为函数的返回值。其他数据类型都可以。函数指针不是很常用,但是在某些情形下非常有用。在需要时,要能够利用这一语言特点。

32 引用(1) 基本知识 引用是一种数据形式,使用场合有引用变量、引用参数、引用函数返回值等。
引用最大的作用就是作为函数的参数与返回值。引用作为函数参数,有以下好处: 引用参数传递的就是实在参数本身,而不是实在参数的一个副本,这样减少了建立副本的消耗。 引用作为参数还可以作为函数返回值的一种有效途径。可以通过将引用定义为是const引用来限制在函数中对引用所代表的实在参数做修改。

33 引用(2) 基本知识 引用 作为返回值,有以下好处: 函数返回的是所返回的变量或对象本身,而不需要建立临时的对象。这样减少了程序运行的开销;
返回一个引用使得一个函数调用的表达式可以成为一个左值表达式,可以为其赋值。

34 基本知识 引用(3) 引用的作用和指针类似,但是它摆脱了使用指针可能带来的程序错误,也提高了程序的可读性和可理解性。推荐在能使用引用的地方尽量不要用指针。 在函数中通过申请堆空间再通过指针或引用返回的方法不提倡使用,应通过定义类,借助于类的封装机制来改善程序结构。

35 基本知识 类(1) 类是实现C++面向对象程序设计的基础,理解类的含义、定义和使用方式是本课程的重中之重,前面学习的各个内容都将融合到类定义的各个部分,都是为类的讲解而准备的: 1)类封装了操作和数据,用函数来实现类的操作成员,用各种数据类型表示类的数据成员; 2)一个纯粹的面向对象的程序就是由若干类的定义组成。构成程序的各个文件就是用于定义各个类。头文件就是类的定义文件。

36 基本知识 6. 类(2) 类学习的难点有: 首先是思想观念的转变。要从传统的面向过程的思想中摆脱出来,用面向对象的观点来分析问题。要将程序看成就是由一个个对象组成的。程序设计的过程就是设计这些类并设计如何以及何时产生这些类的对象的过程。

37 基本知识 类(3) 成员的访问控制。要理解访问控制的含义:私有成员只能由类自己的成员函数访问;保护成员只能由类自己的成员函数和其派生类的成员函数访问;公有函数可以通过类的实例—对象访问。公有成员反映了类对象可以提供的服务或是对外呈现的行为,是对象可以发挥其作用的窗口。

38 基本知识 类(4) 保护和私有成员的目的有二:一是保护隐私,不对外公布类对象的内部结构;二是使类的内部实现独立于对外的接口,外界只需要知道该类对象可以提供哪些服务并用它,而不必要了解复杂的内部实现,减少了程序员的负担,也便于代码的维护,提高稳定性。保护成员又为其派生类提供了可以访问其部分具体细节的权利,为派生类提供了一定的开放空间。

39 类(5) 基本知识 这三种访问级别提供了灵活的成员访问控制。 存取方式基类的成员在派生类中的访问控制又受继承类型的限制,如下图所示:
存取方式 public protected private 继承类型 public public protected 不可见 protected protected protected 不可见 private private private 不可见

40 类(6) 基本知识 格式特殊、使用方式特殊,发挥的作用也比较特殊。
从定义格式要求讲,构造函数和析构函数都没有返回值,都必须定义为公有成员函数(如果仅仅作为某些类的基类而不实例化,则可以定义为保护成员函数),析构函数还不能有参数。可以定义多个构造函数,但析构函数只能定义一个。构造函数的名字与类名相同,析构函数的名字是符号‘~’加上类的名字。

41 基本知识 类(7) 从使用方式讲,构造函数在类的对象生成时由系统自动调用,析构函数在类的对象消亡时由系统自动调用。需要注意的是,用new创建的以及系统在进入对象的作用域自动创建的对象也自动调用构造函数,对应的对象释放机制也类似,用delete释放用new创建的对象以及系统自动为退出作用域的对象将会自动调用析构函数。

42 基本知识 类(8) 构造函数和析构函数的作用也非常特殊。就象学生刚入学校,需要办理入学手续(学校需要为其分配学号、班级,需要发给他学生证、借书证),当学生离开学校时,需要办离校手续(如他需要归还学生证、借书证)一样,类的构造函数和析构函数的作用分别类似于办入学手续和离校手续。构造函数为类对象的生成做一些初始化工作(如赋予对象的初始状态),析构函数在对象消亡以前做一些清理工作(如释放对象生存期间申请的内存空间)。

43 基本知识 类(9) 构造函数的重载为对象的生成提供了各种灵活的手段,其中缺省构造函数和拷贝构造函数又比较特殊。缺省构造函数在构造一个具有默认特征的对象或者在构造一组同样的对象时非常有用,而当用一个对象构造另一个对象、或者类对象作为函数参数和返回值时,需要使用拷贝构造函数。

44 基本知识 类(10) 构造函数的成员初始化表非常重要,该表为类的对象成员、常量成员、引用成员、基类提供了初始化的机会(也是唯一的机会)。

45 基本知识 类(11) 在构造类对象时,首先为其各个数据成员分配空间,然后调用其各个成员对象的构造函数,最后才调用类自身的构造函数。成员对象的构造在类对象构造的前面进行,成员对象构造函数的参数由类的初始化参数表传递。在析构类对象时,首先调用类的析构函数,然后才调用各成员对象的析构函数。

46 基本知识 类(12) 在定义派生类的构造函数时,先调用基类的构造函数,然后再构造派生类本身。析构时则顺序相反。当有多个基类时,需要按照一定顺序依次激活这些基类的构造函数。

47 基本知识 类(13) 静态成员。 静态成员独立于具体的类对象而存在,是从属于类的属性。静态成员变量一般用于以下几种情形:1)用来保存该类对象的个数;2)用来管理该类的各个对象共享的一些资源,如各个对象都从同一空间分配,或者各个对象使用同一文件资源等;3)在链表类中,指向链表节点的指针。类的每个对象是链表中的一个节点。静态成员函数则用来对这些静态成员变量操作,如返回对象个数,查找链表中的某一节点,或者判断某一共享文件是否被某一对象使用等。

48 基本知识 类(14) 静态成员函数与一般成员函数的不同点有:定义方式不同(加static);使用限制不同(静态成员函数只能访问静态成员变量);调用方式不同(用classname::staticFunc()来调用)。而根本的区别在于静态成员函数没有this指针,所以它不能访问属于某个具体对象的数据成员。 静态成员的使用可以消除破坏封装性的全局变量。为真正面向对象程序设计提供了必要手段。

49 基本知识 类(15) 友元 友元本身是破坏封装性的,但是又有其现实背景和必要性。它将类的内部实现对一部分类或者函数公开,就象一个人的秘密有时候不能对家人讲,却可以告诉好朋友一样。使用友元的主要目的是提高程序效率,方便编程。在重载插入和析取操作符时,一般定义成友元函数,以便可以方便地存取内部的数据成员。

50 基本知识 继承(1) 继承是面向对象程序设计的关键。它带来的好处非常多,最重要的是:1)抽取对象类之间的共同点,消除冗余。仅仅用处于同一层次的类来构建软件是不可取的,实际上很多类之间都存在共同点,忽略这些共同点将会带来很大的冗余;2)继承带来了软件的复用。用已经实现的类为基类,派生出新的类,可以做到“站在巨人的肩膀上”,能快速开发出高质量的程序。

51 继承(2) 基本知识 继承虽然有三种方式,但一般是公有继承,私有和保护继承基本上没有什么实际用途。
多继承和单继承都非常有用,但是由于实现的复杂性,多继承在有些编译器中不支持。可以采用一定的补偿方法来模拟多继承。多继承会带来二义性问题,可以用虚拟继承来解决。在继承路径上,所有通过虚拟继承的同一基类不管被间接继承多少次,该虚基类在派生类中都只有一份。

52 基本知识 运算符重载(1) 使用运算符重载,可以使程序易于理解,并且易于对对象进行操作。几乎所有的C++运算符都可以被重载,但是不能定义新的运算符。重载不改变运算符的优先级和执行顺序,也不能改变操作数的数据个数。

53 基本知识 运算符重载(2) 重载时,以对象作为参数,一般定义为引用,但什么时候该返回引用,什么时候该返回值,与具体的运算符和使用方式相关。后缀++,后缀—,+,-,*,/等返回的一般是临时对象,前缀++,前缀--,=,等返回的一般是引用,类型转换运算符不需要说明返回类型,因为操作符名本身就是返回类型。

54 Static的含义 基本知识 . static 的含义: 用的地方 含义 全局变量 该变量和或函数的作用域仅仅是定义它 和函数 们的文件。
用的地方 含义 全局变量 该变量和或函数的作用域仅仅是定义它 和函数 们的文件。 函数内的 变量的生存期和程序的生存期一样, 局部变量 并且只有一个实例,在退出函数时能保 持值。但作用域仍在 定义它的函数里。 类的静态 从属于类的特性,生命期和程序一样。 成员和变 作用域仍在类中。与具体对象无关。

55 基本知识 虚函数和多态性(1) C++中,允许用指向基类的指针来指向子类的对象,当用该指针来访问类继承层次中定义的虚拟函数时,系统可以根据该指针实际指向的对象类型来调用该对象的相应函数,这就是多态性。

56 基本知识 虚函数和多态性(2) 多态性的表现形式是:接受同一消息的不同对象可以有不同的反应,发送消息的程序不需要知道谁是具体的消息接受者。多态性也是面向对象程序设计的好处之一,它简化了程序,带来了程序的可扩展性和可维护性。

57 基本知识 虚函数和多态性(3) 虚函数的实现是通过滞后联编(或动态联编)实现的。在程序运行时动态地根据对象的实际类型来调用该对象的成员函数。与之对应的是静态联编,没有说明为虚拟的成员函数和一般函数都是在编译时就静态确定了的。

58 基本知识 虚函数和多态性(4) 纯虚函数就是没有实现体的函数,使用纯虚函数的类称为虚基类。虚基类的存在为其派生类提供了许多可重定义的公共接口,为它们提供了统一的访问接口。

59 虚函数和多态性(5) 基本知识 派生类必须为每个纯虚函数给出定义。
虚拟析构函数是一种特殊的虚函数。它为类继承层次中类对象的正确析构提供了可靠的保证。静态成员函数、内联函数和构造函数不能是虚函数。

60 内存管理(1) 基本知识 系统为每个程序建立一虚拟的内存空间,这一空间可以分为划分为三个区域:
1)代码与数据区。用于存放程序代码和预先需要分配空间的数据(如全局变量、静态变量); 2)栈区。由系统保留使用,组织的方式和栈一样,遵循后进先出的规则。用语存放程序的临时状态数据,如进行函数调用时存放返回地址、传递的参数以及局部变量等,这些空间在退出函数作用域时将会释放。

61 基本知识 内存管理(2) 3)堆,也称自由存储区。程序运行期间由程序员动态申请的空间在堆中分配。如用new或malloc分配的空间。这些空间需要程序员显式地用delete或free释放并归还给堆。

62 基本知识 内存管理(3) 需要注意的是,堆栈的大小一般是有限制的,如果在程序中使用了递归函数,尤其要保证递归的深度不要太深,递归的结束条件要能保证递归结束。程序中可以使用的堆空间也是有限的,在编制程序时需要时刻牢记:及时释放没有用的堆空间。否则,随着程序的运行,内存会越来越小,最后可能导致系统无法正常运行。

63 基本知识 内存管理(4) 在堆中分配与释放空间一般有两种方法:1)malloc和free;2)new和delete。前者是C语言中使用的;后者是C++语言中提供的内存分配与回收机制。两者不同之处在于:malloc直接在堆中找到满足所要大小的一段空间,返回这一空间的首地址供使用,而new不仅仅完成空间的分配,还执行一定的初始化工作,如调用对象的构造函数,在用delete释放一个对象时,会自动调用对象的析构函数。

64 重点要求 第二部分 重点要求 !

65 重点要求 第一部分 程序设计基础(第一、二章) [复习要求]: 理解:C++程序的基本组成 应用:能够编写简单的程序,能完成简单数据类型 数据输入、利用变量存放输入数据,利用运算符进 行简单的运算,并能够将结果输出 应用:能进行比较复杂的表达式运算 [重点练习]:练习题2-5~2-9

66 重点要求 第二部分 语句与程序流程(第三章) [复习要求]: 应用:能够根据程序要求选择合适的流程控制语句, 应用:能够用多种循环语句实现一种循环的程序要求。 综合应用:综合运用各种语句完成比较复杂的程序逻辑 [重点练习]:练习题3-1~3-4

67 第三部分 函数(第四章) 重点要求 [复习要求]: 理解:模块化程序设计与函数的关系 理解:缺省参数的含义与用法。能够在程序中正确
第三部分 函数(第四章) [复习要求]: 理解:模块化程序设计与函数的关系 理解:缺省参数的含义与用法。能够在程序中正确 使用缺省参数值 应用:利用函数重载来优化程序设计 应用:根据给定要求编制满足功能需求的函数 [重点练习]:4.2.2例,4.4例,4.5例,练习4-1,4-2,4-3

68 重点要求 第四部分 类与对象(第五、六、七、九章) [复习要求]: 掌握类的定义以及对象的定义 理解类成员的访问控制带来的封装性 了解内联函数和友员函数的作用 掌握类的构造函数与析构函数的功能和使用 掌握带缺省参数值的成员函数与成员函数名的重载 掌握全局变量和局部变量静态局部变量 掌握标识符作用域、可见性和生成期的概念,作用域和可见性之间的关系。能够指出给定程序中标识符的作用范围

69 重点要求 第四部分 类与对象(第五、六、七、九章) [复习要求]: 理解类对程序结构产生的根本性影响,能初步掌握用面向对象的思想方法思考问题 理解编译预处理的概念,能在程序中合理使用#include预处理指令,看懂#define,#if,#elif等指令 [重点练习]: 5.2例,5.3例,5.5例6.2.2例,6.2.5例,6.3例,7.2例,9.4例,练习5-1,5-2,6-2,6-3,7-1

70 第五部分 数组、指针和引用(第八章) 重点要求 [复习要求]: 掌握数组的概念、定义、初始化 掌握指针的概念、定义、初始化
第五部分 数组、指针和引用(第八章) [复习要求]: 掌握数组的概念、定义、初始化 掌握指针的概念、定义、初始化 了解引用的定义和初始化 理解:数组、指针和引用各自的含义和适用场合。能够在程序设计中根据需要选择合适的数据类型。

71 重点要求 第五部分 数组、指针和引用(第八章) [复习要求]: 理解:多维数组的含义和其元素在内存中的存放顺序,能够在程序中选择使用多维数组。 理解动态申请空间的意义,知道实现方法 理解this指针的作用 综合应用:在程序中综合应用数组、指针和引用。 [重点练习] : 8.2例,8.3例,8.5例,8.9例

72 重点要求 第六部分 操作符重载(第十章) [复习要求]: 掌握操作符重载的含义与定义方式,理解操作符重载的必要性 了解友元重载操作符和成员重载操作符的区别 [重点练习]: 例,10.1.2例,10.2例,10.3例

73 第七部分 串(第十一章) 重点要求 [复习要求]: 掌握串的基本运算,熟悉字符数组和字符指针的使用 掌握命令行参数的定义和使用
第七部分 串(第十一章) [复习要求]: 掌握串的基本运算,熟悉字符数组和字符指针的使用 掌握命令行参数的定义和使用 了解string类的构造函数和基本操作 [重点练习]: 11.1例,11.1.1例,11.1.2例,11.3例

74 重点要求 第八部分 继承性和派生类(第十二、十三章) [复习要求]: 理解结构化程序设计和面向对象程序设计思想的不同 理解继承的含义和使用条件,继承对面向对象的程序设计的影响 理解派生类构造过程中的类成员的访问控制,保护成员在类继承中的作用。 了解单继承的定义格式、成员存取控制和向基类构造函数传递阐述的方法 [重点练习]: 例,12.2.2例,12.3例,12.4例

75 题型综述 第三部分试题类型及规范解答举例 判断题样例 填空题样例 选择题样例 阅读理解样例 简述题样例 编程题样例

76 1. C++语言中,VAR和var看作是 两个不同的标识符。 ( ) 2 . 一个类的析构函数可以有多个。 ( )
题型综述 判断题样例 1. C++语言中,VAR和var看作是 两个不同的标识符。 ( ) 2 . 一个类的析构函数可以有多个。 ( ) 答案: 1. √ 2. × 考核知识点: 1. C语言中,字符的大小写是有别的。 2. 一个类的构造函数可以有多个,但析构函数只能有一个。

77 题型综述 选择题样例 1.表达式 1 | 2 | 3 | 4 的值是( ) A B C D. 7 考核知识点: 对位运算,要把操作数转换成二进制数后再进行运算。 答案: 1. D

78 考核知识点:增1运算,其后缀表达式的值是加1前的值,因此循环条件执行了3次。
题型综述 选择题样例 2. 以下程序的输出结果是 ( ) #include <iostream.h> void main() { int i=0; while (i++<=1) cout<<i; cout<<i<<endl; } A B C D 考核知识点:增1运算,其后缀表达式的值是加1前的值,因此循环条件执行了3次。 答案: B

79 题型综述 简述题样例 在C++中,类Location的构造函数的一般形式是什么,其功能是什么? Location(): 构造函数是特殊的成员函数,它没有返回值, 不定义数据类型,不能随意调用。构造函数的 作用是在对象被创立时使用特定的值构造对象, 或说将对象初始化为一个特定的状态。 答案: 考核知识点:构造函数的概念 。

80 题型综述 填空题样例 .在C++程序中,声明 int &a=b; 的含义是表示_________________________。 答案: a是b的引用变量

81 题型综述 填空题样例 下面是一个求数组元素之和的程序。主程序中定义了并初始化了一个数组,然后计算该数组各元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。

82 int sum(int array[],int len) {int iSum = 0; for(int i = 0; C ; D ) E ;
题型综述 填空题样例 _______A__________ int sum(int [],int); void main() { int ia[5] = {2,3,6,8,10}; B ; sumOfArray = sum(ia,5); cout << "Sum of array:” << sumOfArray << endl; } int sum(int array[],int len) {int iSum = 0; for(int i = 0; C ; D ) E ; return iSum; A.#include <iostream.h> B.int sumOfArray; C.i < len D.i++ E.iSum += array[i]; . 答案:

83 (两个ValueX,两个ValueY),解释这种现象。
题型综述 阅读理解样例 分析教材中的5.5例,完成 1 ) 写出程序的运行结果; 2)类Location中出现了同名函数 (两个ValueX,两个ValueY),解释这种现象。 . (1)15 5 6 4 (2)重载函数 考核知识点: 1. 带缺省参数值的成员函数 2 .成员函数名重载 答案:

84 题型综述 编程题样例 编写一个求一元二次方程ax2 +bx+c=0的根的程序。 当a=0且b=0 方程无根 当a=0且b!=0 方程有一个根 –c/b 当a!=0且b=0 设 Δ=b2 -4ac 1)Δ>0 有两个不同实根 2)Δ=0 有两个相同实根 3)Δ<0 有两个不同复根 re+imI,re-imI a,b,c在程序运行时读入。 答案: 见下一页

85 题型综述 编程题样例 答案:#include <iostream.h> #include <math.h> void main() {double a,b,c; cout<<”Please input the a,b,c:”<<endl; cin>>a>>b>>c; if(a= =0&&b= =0) cout<<”The equation is degenerate.”<<endl; else if(a= =0) cout<<”The single root is:” <<-c/b<<endl;

86 题型综述 编程题样例 else{ double delta,re,im; re=-b/(2*a); delta=b*b-4*a*c; im=sqrt(fabs(delta))/(2 *a); if(delta>0) cout<<’’the roots are”<<re+im<<”and”<<re-im<<endl; else{ cout<<”the roots are complex”<<re<<”+”<<im<<”i”; cout<<”and”<<re<<”-“<<im<<”i”<<endl; }

87 自测练习 自测练习 第四部分 自测练习 判断题 填空题 选择题 阅读理解 简述题 编程题

88 if x>0 cout<<”ok”;是正确C语句。
自测练习 判断题 if x>0 cout<<”ok”;是正确C语句。 × 答案

89 自测练习 判断题 一个类的析构函数可以有多个。 × 答案

90 自测练习 判断题 若有说明:int a[4]={1,2,3,4};且未修改a中各元素的值,则语句cout<<a[1]+*(a+2);执行后输出为5。 答案

91 自测练习 判断题 若有int px;及px=&x;则分别执行(*px)++与*px+=1 后,可使x具有相等的值。 答案

92 自测练习 判断题 5. 表达式10<<2+1 的值为41。 × 答案

93 自测练习 判断题 一个类的构造函数可以有多个。 答案

94 自测练习 判断题 每一个类都有一个拷贝初始化构造函数。 答案

95 自测练习 判断题 C++程序是在执行过程中对预处理命令进行处理的。( ) × 答案

96 自测练习 判断题 .运算符“+”的优先级高于运算符“!”。( ) 答案

97 自测练习 判断题 × 2/3*3的值为2。( ) 答案

98 自测练习 判断题 .int i,*p=&i;是正确的说明。( ) 答案

99 自测练习 判断题 C++语言中,VAR和var看作两个不同的标识符。( ) 答案

100 自测练习 判断题 .若有说明 char a[5]={‘A’,‘B’,’\0’,’C’,’\0’};则执行cout<<a ;后输出为AB C。( ) × 答案

101 自测练习 选择题 D 表达式1|2|3|4的值是  (    ) A B C D. 7 答案

102 选择题 答案 自测练习 设有以下的宏定义 #define name2(a,b) a##b #define stri(a) #a A
#define pr(type,var) \ cout<<stri(type)”var=”<<sizeof(name2(type,var))<<endl 则 pr(char,a)的替换结果为:(    ) A. cout<<”char””var=”<<sizeof(chara)<<endl B. cout<<”char””a=”<<sizeof(chara)<<endl C. cout<<#char”var=”<<sizeof(char##a)<<endl D. cout<<#char”a=”<<sizeof(char##a)<<endl 答案 A

103 选择题 答案 自测练习 以下函数的功能是 ( ) B int f(char x[]) {char *y=x;
以下函数的功能是  (   ) int f(char x[]) {char *y=x; while(*y!=’\0’) y++; return y-x; } A. 比较两个字符串的大小。 B. 求一个字符串的长度。 C. 求一个字符串的存储字节数。D. 复制一个字符串。 答案

104 选择题 答案 自测练习 以下程序的输出结果是 ( ) D #include <iostream.h>
以下程序的输出结果是 (    ) #include <iostream.h> void func(int &p,int q) { int t; t=p;p=q;q=t; } void main() { int x=1,y=2; func(x,y); cout<<x<<”,”<<y<<endl; A. 1,2 B. 2,1 C. 1,1 D. 2,2 D 答案

105 选择题 答案 自测练习 设有以下语句: int n; char s[]=”123\\\123”; n=sizeof(s);
A B C D. 6 C 答案

106 自测练习 选择题 C 以下不合法的常量是: (   ) A e3 B ’\\’ C ’BASIC’ D xfdaL 答案

107 选择题 答案 自测练习 以下程序的输出结果是 ( ) B #include <iostream.h> void main()
以下程序的输出结果是 ( ) #include <iostream.h> void main() { int i=0; while(i++<=1) cout<<i; cout<<i<<endl; } A B C D. 1 2 2 2 答案

108 选择题 题接:下一页 自测练习 以下程序的输出结果是 ( ) #include <iostream.h>
以下程序的输出结果是 ( ) #include <iostream.h> #define FD(k) k #define PR(n) cout<<”n=”<<(int)(n)<<endl #define PRINT(m) PR(m);cout<<endl #define PRINT2(a,b) PR(a);PRINT(b) void main() { int x=2; PRINT(x*FD(2)); for(x=0;x<=100;x+=50) PRINT2(x,9.0/5*x+32); } 题接:下一页

109 选择题 答案 自测练习 A .n=7 n=0 n=50 n=100 n=302 .B n=14 .C . n=7
D. n=14 A 答案

110 选择题 题接:下一页 自测练习 以下两个程序的输出结果是 ( ) (一)#include <iostream.h>
以下两个程序的输出结果是 ( ) (一)#include <iostream.h> void main() {int i=9; cout<<i<<’,’; for(;i>0;i/=3) {static int i=5; cout<<++i<<’,’; } cout<<i<<endl; 题接:下一页

111 选择题 题接:下一页 自测练习 (二)#include <iostream.h> void main() { int i=9;
cout<<i<<’,’; while(i>0) {static int i=5; cout<<++i<<’,’; i/=3; } cout<<i<<endl; 题接:下一页

112 选择题 答案 自测练习 A.两个程序的输出都是 9,6,7,8,0 B. 两个程序的输出都不是 9,6,7,8,0
C. (一)输出不是9,6,7,8,0 (二)是 D.(一)输出是 9,6,7,8,0 (二)不是 D 答案

113 在C++中,类Location的构造函数的一般形式是什么,其功能是什么?
自测练习 简述题 在C++中,类Location的构造函数的一般形式是什么,其功能是什么? 答案:

114 在C++中,类Location的析构函数的一般形式是什么,其功能是什么?
自测练习 简述题 在C++中,类Location的析构函数的一般形式是什么,其功能是什么? 答案:略

115 在C++中,break语句可以用在什么地方,其功能是什么?
自测练习 简述题 在C++中,break语句可以用在什么地方,其功能是什么? 答案:

116 在C++中,continue语句可以用在什么地方,其功能是什么?
自测练习 简述题 在C++中,continue语句可以用在什么地方,其功能是什么? 答案:

117 试述在C++中,增量运算符的作用对象以及前缀和后缀表达式的异同。
自测练习 简述题 试述在C++中,增量运算符的作用对象以及前缀和后缀表达式的异同。 答案:

118 试述在C++中,增量运算符的作用对象以及前缀和后缀表达式的异同。
自测练习 简述题 试述在C++中,增量运算符的作用对象以及前缀和后缀表达式的异同。 答案:

119 自测练习 简述题 举例说明静态成员和非静态成员的区别。 答案: 略

120 设有指针对象p,解释表达式p和*p的语义。
自测练习 简述题 设有指针对象p,解释表达式p和*p的语义。 答案: 略

121 数组对象是怎样进行声明的,怎样在堆中建立数组对象。怎样标识数组对象的元素对象。
自测练习 简述题 数组对象是怎样进行声明的,怎样在堆中建立数组对象。怎样标识数组对象的元素对象。 答案: 略

122 自测练习 简述题 this指针的作用是什么? 答案: 略

123 友员与静态成员函数相似和不同之处是什么?
自测练习 简述题 友员与静态成员函数相似和不同之处是什么? 答案: 略

124 自测练习 简述题 解释char类型int 类型的异同。 答案: 略

125 public,private,protected
自测练习 填空题 在一个类中,成员按访问控制可分为____________、______________和______________三类。 答案: public,private,protected

126 operator+(123),operator(x,123)
自测练习 填空题 设有表达式x+123,若x是某个类complex的对象,如果将“+”操作符重载为complex的成员函数,则以上表达式可解释为(表示成)_________________,若将“+”操作符重载为complex的友员函数时,以上表达式可解释为(表示成)_________________。 答案: operator+(123),operator(x,123)

127 #include<iostream.h>
自测练习 填空题 下面是一个求数组元素之和的程序。主程序中定义了并初始化了一个数组,然后计算该数组各元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。 __________________ int sum(int [],int); void main() { int ia[5] = {2,3,6,8,10}; _ ; sumOfArray = sum(ia,5); cout << "Sum of array:" << sumOfArray << endl; } int sum(int array[],int len) int iSum = 0; for(int i = 0; _____ ; _______ ) ____ ; return iSum; 答案: #include<iostream.h> int sumOfArray i<len, i++ , isum

128 自测练习 填空题 在C++中,对类成员的三种调用方式是____________、_________________和、________________。 案: 通过对象访问 通过指针访问 通过引用访问

129 填空题 答案:略 自测练习 在C++语言中,函数原型的一般说明形式是
___________________________________。 答案:略

130 填空题 答案 自测练习 设int i=1; char *s=“a\045+045\’b”; 执行语句
(1) for(i=0;*s++;i++); 后,i的值是_____________; (2) while(i++<5); 后,i的值是_____________。 答案 (1)8 (2)6

131 自测练习 填空题 .在C++基本数据类型中,其对象占存储最大的类型是_________________,存储量为___________字节。 答案: long double;

132 填空题 答案: 自测练习 .设int a=4,b=8,c=2;则执行 a*=b-=c+=c+c;
8, 2,

133 填空题 答案: 自测练习 .从一个基类派生的继承被称为________________,它形成一个___________,被称为类层次。
单继承 倒挂的树

134 填空题 答案: 自测练习 .C++中,计算顺序从右到左的三类运算符是____________、__________和__________。
一目;赋值;三目

135 自测练习 填空题 2 表达式 a=1,a+=1,a+1,a++的值是______。 答案:

136 自测练习 填空题 .在C++中,成员函数的内联实现的一种方式是_________________________。 答案:略

137 自测练习 填空题 .在C++的类定义中,__________缺省,则类的成员是私有的,如果需要供外部使用,则成员必须定义成__________。 答案: private;public

138 (1)||(2);(3)&&(4)‘Z’(5)’0’
自测练习 填空题 . .下面程序的功能是从标准输入中读入一个数字串,将其转换成相应的整数(如“-1234”转换成-1234)。填充程序中不完整的部分。 #include <iostream.h> void main() { char s[20]; int i,n,sign; cin>>s; for(i=0;s[i]==’ ’ (1)___s[i]==’\t’||s[i]==’\n’;i++) \\skip white spaces (2) sign=(s[i]=’+’)?1:-1; if (s[i]=’+’||s[i]=’-’) \\skip sign i++; for(n=0;s[i]>=’0’(3) s[i]<= (4) ;i++) n=10*n+s[i]-_(5)__________; cout<<”result=”<<n*sign<<endl; } 答案: (1)||(2);(3)&&(4)‘Z’(5)’0’

139 填空题 答案: 自测练习 .C++中,计算顺序从右到左的三类运算符是____________、__________和__________。
一目、条件、赋值

140 自测练习 填空题 9 表达式 i=2,i--<2?i+10:i+8的值为________。 答案:

141 填空题 答案: 自测练习 设 int x=0,y=0,z=0; 表达式 x++&&++y||z++ 的值是__________;
0;1 ,0 ,1

142 自测练习 填空题 404 表达式 a=101,a<<1+1的值为________。 答案:

143 自测练习 填空题 60 表达式 i=12,i*=2+3 的值为________。 答案:

144 填空题 答案: 自测练习 设宏定义 #define p(x) cout<<“x*x=“<<x*x

145 阅读理解 答案: 自测练习 (1) zhang is 31 years old destrctor is called!
#include <iostream.h> #include <string.h> class person { int age; char *name; public: person(char *str,int) {int j; j=strlen(str)+1; name=new char[j]; strcpy(name,str); age=i+1; } ~person() delete name; cout<<”destructor is called!”<<endl; void display() { cout<<name<<”is”<<age<<”years old.”<<endl; } }; void main() { person demo(“zhang”,30); demo.display(); (1) 写出程序的运行结果; (2)程序中 new char[j] 的功能是什么? 答案: (1) zhang is 31 years old destrctor is called! (2)创建一个字符数组类型的对象。

146 阅读理解 答案 自测练习 指出下面程序中(1)函数what的功能;(2)程序执行结果(程序中函数fabs(x)是求x的绝对值)。
#include<iostream.h> #include<math.h> int what(int i,int j) {int s,t; s=fabs(i);t=j>0?j:-j; while(s-t) if(s>t) s-=t; else t-=s; return fabs(i/s*j)); } void main() {int i=-45,j=-60; cout<<‘[‘<<i<<‘,’<<j<<“]=“<<what(i,j)<<endl; (1)求最小公倍数 (2)[-45,-60]=180 答案

147 阅读理解 答案: 自测练习 (1)判断两个串是否相等 #include<iostream.h>
int func(char *s1,char *s2) {for(;*s1==*s2;s1++,s2++) if(*s1==‘\0’) return 0; return *s1-*s2; } void main() {char a[]=“beijing”,b[]=“beidouxing”; cout<<func(a,b)<<endl; (1)分析函数func(x,y)的功能; (2)写出程序的运行结果。 (1)判断两个串是否相等 (2)6 答案:

148 阅读理解 答案: 自测练习 (1)求最小公倍数 (2)[-45,-60]=180 .分析以下程序
#include <iostream.h> void f(int *m,int &n) {int i,j,t=0; i=*m; j=n; while(i>=j) {t++; i-=j; } *m=t;n=i; oid main() {int i;=100,j=9; f(&i,j); cout<<i<<”,”<<j<<endl; (1)写出程序的运行结果; (2) 指出f的功能。 (1)求最小公倍数 (2)[-45,-60]=180 答案:

149 阅读理解 答案: 自测练习 (1)11、1 .分析以下程序 #include <iostream.h>
void f(int *m,int &n) {int i,j,t=0; i=*m; j=n; while(i>=j) {t++; i-=j; } *m=t;n=i; oid main() {int i;=100,j=9; f(&i,j); cout<<i<<”,”<<j<<endl; (1)写出程序的运行结果; (2) 指出f的功能。 (1)11、1 (2)求两个参数i,j相除后的商和余数 答案:

150 阅读理解 答案: 自测练习 (1) 1 2 3 4 5 6 7 8 9 10 .分析以下程序
#include <iostream.h> int a[]={1,2,3,4,5,6,7,8,9,10}; void f(int *s,int n) {int i,j,t; for(i=0,j=n-1;i<j;i++,j--) {t=*s;*s=*(s+n-1);*(s+n-1)=t; } void main() {int i; for(i=0;i<10;i++) cout<<a[i]; cout<<endl; f(a,5); 1)写出程序的运行结果; 2)指出f的功能。 (1) (2)将数组中指定范围 的数据逆转。 答案:

151 编写程序 答案: 自测练习 #include<iostream.h> bool prim(int x); void main()
{int a,b,c; do{ cin>>a; while(a<6||a%2!=0); for(b=3;b<a;b+=2) if(prim(b)) break; cout<<a<<“=“ <<b<<“+”<<a-b<<endl; } bool prim(int x) {for(int y=2;y<x;y++) if(x%y==0) break; if(y<x)return false; else return true; } 设计一个函数prime(x), 这个函数带有一个整型参数,当这个参数的值是素数时,该函数返回true,否则返回false。利用这个函数编写一个程序来验证哥德巴赫猜想:任何一个充分大的偶数(大于等于6)总可以表示成两个素数之和。 答案:

152 编写程序 答案: 自测练习 #include<iostream.h> void main()
{int value1,value2; cout<<“请输入两个整数“<<endl; cin>>value1<<value2; cout<<“大于“<<value1; cout<<“且是”<<balue2<<“倍数的数是:”; cout<<value1+value2-value1%value2<<endl; } 编写一个程序,用户输入两个整数,程序输出稍大于第一个整数而又是第二个整数的倍数的数,计算公式是: value1+value2-value1%value2 答案:

153 编写程序 答案: 自测练习 #include<iostream.h>
void main() {int value,sum=0; cout<<“请输入一个整数:“<<endl; cin>>value; cout<<value<<“的各位数字之和为:”; while(value>0) { sum+=value%10; value/=10; } cout<<sum<<endl; 编写一个程序,计算并显示正整数各位数字之和。例如,正整数1992各位数字之和 ,等于21。 答案:

154 编写程序 答案: 自测练习 #include<iostream.h> 编写一个程序,给一个不多于5位的正整数,要求:
void main() {int value,n=0; cout<<“请输入一个整数:“<<endl; cin>>value; cout<<endl; cout<<value<<“的逆序为:”; while(value>0) { cout<<value%10; value/=10; n++; } cout<<“\n该数是 ”<<n<<“位数\n”; 编写一个程序,给一个不多于5位的正整数,要求: (1)求它是几位数; (2)分别打印出每一位数字; (3)按逆序打印出各位数字(例如原数为321,应输出123)。 答案:

155 编写程序 答案: 自测练习 #include<iostream.h> 编写一个程序,产生下列输出: void main() 1
{int i,j; for(i=1;i<=9;i++) { for(j=1;j<=40-i;j++) cout<<‘ ‘; for(j=1;j<=i;j++) cout<<i<<‘ ‘; cout<<endl; } 编写一个程序,产生下列输出: 1 2 2 3 3 3 答案:

156 编写程序 答案 自测练习 编写一个求一元二次方程ax2 +bx+c=0的根的程序。 当a=0且b=0 方程无根
当a=0且b!=0 方程有一个根 –c/b 当a!=0且b=0 设 Δ=b2 -4ac 1)Δ>0 有两个不同实根 2)Δ=0 有两个相同实根 3)Δ<0 有两个不同复根 re+imI,re-imI a,b,c在程序运行时读入。 答案

157 第五部分 往年试题 往年试题 1998年期末考试C语言程序设计试题 1998年期末考试C语言程序设计试题参考答案
第五部分 往年试题 1998年期末考试C语言程序设计试题 1998年期末考试C语言程序设计试题参考答案 1997 年期末考试C语言程序设计试题 1997年期末考试C语言程度设计试题参考答案 1997 年期末补考C语言程序设计试题 1997年期末C语言程序设计试题参考答案

158 往年试题 计算机应用九八级第一学期C语言程序设计试题 一、选择题(每项3分,共30分)
下列各题A)B)C)D)四个选项中,只有一个选项是正确的,请将正确选项填在[ ]中。 (1)设有说明char*p1[10];其中标识符p1表示[ ] 10个指向 char型变量的指针 指向10个char型变量的函数指针 具有10 个指向char型量的指针元素的一维数组 一个指向由10个char型元素组成的一维数组的指针 (2)设有如下语句: int n; char s[]=”thischar\xfaris\75ff”; n=sizeof(s); 则n的值是[ ]。 A) B)15 C) D)18 (3)以下程序的输出结果是[ ] #include<stdio.h> main( ) { char a=’a’, b=’j’; float x; x=(b-a)/(‘F’-‘A’) printf( “%d\n” ,(int)(3.14*x)); } A) B) C) D)5

159 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 (4)以下程序的输出结果是[ ]。 #include<stdio.h> main( ) { int i; for(i=0;i<=5;i++){ if(i%2) printf( “**”); else continue; printf(“#”); } printf(“$\n” ); A)#**#**#**$ B)**#**#**#$ C)**#**#**# D)#**#**# (

160 往年试题 计算机应用九八级第一学期C语言程序设计试题 5) 以下程序的输出结果是[ ]。 #includde<srdio.h>
5) 以下程序的输出结果是[ ]。 #includde<srdio.h> main( ) { static char s[ ]=”\1AB\11CDE\1LASTER”; int i,c; for(i=0;(c=s[i])!=’\0’;i++){ switch(c){ case ’A’:putchar(c+1);continue: case ’ 9’:break; case 1:while((c=s[++i])!=’\1’&&c!=’0’); case 9:putchar(‘A’); i++; case ‘E’: case ‘L’:continue; default:putchar(c);continue; } putchar(‘.’ ); putchar(‘\n’); A)ABCDELASTER B)A*ST*R C)ACDA D)ABSTR (6)以下程序的输出结果是[ ] #include <stdio.h> main( ) { int a,b,c; a=b=c=-1 ++a||++b&&++c; printf(“%d*%d*%d\t”,a,b,c); a=b=c=1; ++a||++b||++c; printf(“%d*%d*%d\n”,a,b,c); } A)0*0*0 2*2* B)0*0*-1 2*1*1 C)0*--1*0 2*2* D)0*0*-1 2*2*2

161 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 (7)以下程序的输出结果是[ ]。 #include <stdio.h> #include <string.h> main( ) { char str[15],*sp=”Your name\?\n” ; strcpy(str,sp); printf(“%d\n” ,strlen(str)); } A) B)15 C) D)11 (8)下面C程序的输出结果是[ ]。 struct mm{int a;char *name;}; struct mm *p, bb[2]={{1, “XYZ” },{2,”ABC”}}; p=bb+1; bb[1]=*p-- ;*p=bb[1]; p ->a++;p->name++; printf(“%d##%s\n” ,p->a,p->name); printf(“%d**%s\n”,bb[1].a,bb[1].name); A)3# #BC B)2# #YZ 2** ABC **xyz C)程序有错,无法运行 D)输出结果为随机数 (9)设有以下语句: struct node {int vel;struct node *next;}; static struct node sa[3]={{1,sa+2},{3,sa},{5,sa+1}}, *sp; sp=sa+1; 则表达式[ ]的值是4。 A)sp++->val B)sp->val++ C)(*sp).val D)++sp->val

162 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 (10)下面程序的输出结果是[ ] #include <stdio.h> #define FD(k) k #define PR(n) printf(“n=%d\t”,(int)(n)) #define PRINT(m) PR(m); putchar(‘\n’) #define PRINT2(a,b) PR(a); PRINT(b) main() { int x=2; PRINT(X*FD(2)); for(x=0;x<100;x+=50) PRINT2(x,9./5*x+32); } A)n= B)n=14 n=0 n=50 n=100 n= n=0 n=50 n=100 n=302 C)n= D)n=14 n=0 n=50 n=100 n=212 n=0 n=50 n=100 n=212

163 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 二、找出下面程序(或程序段)中的语法错误,并予以纠正。(每题6分,共12分) (1)倒序输出各给定的字符串。 main( ) { char str[5][]={“First”,”Second”,”Third”,”Forth”,”Fifth”}; char*cp[ ]={str[4],str[3],str[2],str[1],str[0]}; int i; while(i<5){ printf(“%c”,*(cp+i)); i++; } (2)将各个平方根值放人数组中。 main( ) int max,a,i; scanf(“%d%d”,&max,&a); double x[max]; for(i=0;i<max;i++) x[i]=sqrt(a*i); }

164 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 三、写出以下程序或程序段的输出结果(或它们的功能)。(每题5分,共10分) (1)写出下面程序执行后的输出结果。 #include<stdio.h> int a[ ]={1,3,5,7,9}; int a[ ]={a,a+1,a+2,a+3,a+4}; main( ) { printf(“%d\t%d\t%d\n”,a[4],*(a+2),*p[1]); printf(“%d\t%d\t%d\n”,**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]); }

165 往年试题 计算机应用九八级第一学期C语言程序设计试题 (2)写出下面程序执行后的输出结果。 #include <stdio.h>
main( ) { static struct str1 {char *s,c[4];}astr={“ABCDE”,”FGH”}; static struct str2{char *cp; struct str1 ss1;}bstr={“IJK”,{“MNOP”,”XYZ”}}; printf(“astr.c[0]=%c\t*astr.s=%c\n”,astr.c[0],*astr.s); printf(“++bstr.cp=%s\t++bstr.ss1.s=%s\n”,++bstr.cp,++bstr.ss1.s); 四、填空题(前面5小题,每题2分;后面题每个空3分。共34分) (1)C语言中计算顺序严格从左到右的三个运算符是______、 _________、_____。 (2)在C 语言中,调用函数时一般应保证实参和形参在________、_________和______________一致。 (3)在C++中,类的一般定义形式是__________________________。 (4)在C++中,类complex的构造函数的一般定义形式是____________________ ,其功能是___________。 (5)在C程序中,数据说明double (*pf)( );表示pf是____。

166 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 (6)顺序查找函数f_seq( ).其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查完整个表仍未找到所需对象,则查找失败。 void f_seq(list,obiect,len) char list[ ]; /*指针数组,指向字符串*/ char obiect[ ]; /*模式串*/ int len; /*表的长度*/ { char **p; p=list; while(_______________) if(strcmp(*p,object)==0) break; else _________________; if(p<list+len) printf(“Success!**%d\n”,p—list); else printf(“Unsuccess! \n”); }

167 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 int strcmp(s,t) char *s, *t; { for(;*s==*r;s++,t++) if(*s==’\o’) return(0); return( ); } (7)下面程序实现汉若塔游戏。规则是:三个立柱(分别为A、B、C),开始A上串有n个(用户输入值)大小不等的圆盘,大的在下。要求把它们从A移到C,借助B。每次只能移一个盘,而且三个柱上的盘总是大的在下,小的在上。 int i=0; main( ) int n; void movetower( ) for(;;){ printf(“input the number of disks of hanoi tower:”) scanf(“%d”,&n);

168 往年试题 计算机应用九八级第一学期C语言程序设计试题 if(n==0)__________; printf(“\n\n”);
printf(“the moving step is as below:\n”); movetower(n,’A’,’C’,’B’); printf(“\tTotal:%d\n”,i); } void movetower(m,from,to,using) int m; char from,to,using; { void movedusk( ); if(m==1) movedisk(from,to); else{ movetower(m-1,from,using,to); ____________________; movetower(m-1,_____________) void movedisk(source,destination) char source,destination; { i++; printf(“%c……>%c\n,source,destination); }

169 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 (8)使用筛选法求出1000以内的素数,并按每行放10个素数的格式把它们打印出来。 其基本思想是:把某范围内的自然数从小到大依次排列好。宣布1不是素数,把它除;然后从余下的数中取走最小的数2,宣布它是素数,并去掉它的倍数;这样一直做下去,当晒中为空时过程结束。 #clude<stdio.h> #define SIZE 1000 #define LS 10 main( ) { static short sieve[SIZE+1];/*处理标记,处理 int i,p,nprt; sieve[0]=1; prt=0; for(n=1;n<=SIZE;n++) if(sieve[n-1]==0){ printf(“%5d”,n); if(____________) putchar(‘\n’); }

170 计算机应用九八级第一学期C语言程序设计试题
往年试题 计算机应用九八级第一学期C语言程序设计试题 for(i=n;i<=SIZE;_________ ) sieve[i-1]=1; } if(prt!=0) putchar(‘\n’); putchar(“\n”) 五、编程题(共14分) 写一个读入一串正文行并印出其中最长行的程序。其大致过程是: 取得各正文行;每取得一行则判断是否为当前最大行,若是,则保留它及其长度;最后打印最长行。 设允许的最长行不超过100个字符。

171 往年试题 1998年期末考试C语言程度设计试题参考答案 一、选择题(每个选项3分,共30分)
(1)C (2)A (3)C (4)B (5)D (6)B (7)D (8)A (9)D (10)A 二、找出并纠正程序(或程序段)中的错误(每6分,共 政分) (1)1) static char str[5][10]={.....}; 其中列长10可换为大雨7的任意整数。 2)i应赋初值:i=0; 3)输出字符串的格式控制符是%s: printf(“%s”,*(cp+i)); (2) 1)#define MAX 100 double x[MAX]; 2)scanf(“%d%d”,&max,%a); 或者 scanf(“%d”,&a); for(i=0;i<MAX;i++) 3)#include <math.h> 三.写出程序或程序段的输出结果或它们的功能(5分,共10分) 8 4 7 (2) astr.c[0]=F *astr.s=A ++bstr.cp=JK ++bstr.ss1.s=NOP 四.填空题(5小题,2分;后面题每空3分。共34分) (1) 从 —— || ?: 及函数调用运算副()中任意取三个。 (2) 个数 顺序 类型

172 往年试题 1998年期末考试Cl语言程度设计试题参考答案 (3) class 类名 { private: 私有数据和函数 public:
公有数据和函数 }; (4) complex ::complex(类型 变量名,类型 变量名,...) { 语句 } 其功能是完成类对象的初始化的工作 (5)指向一个返回double 量函数的指针变量 (6)三个空依次为: 1) p<list +len )p++或 ++p或p=p+1 )*s- *t )1)break 2)movedisk(from,to) )using,to,from )1)++prt>=LS 2)i+=n i=i+n

173 往年试题 1998年期末考试C语言程度设计试题参考答案 #include <stdio.h>
#define MAXLINE 100 main() { int len,max; char line[MAXLINE],save[MAXLINE]; max=0; while((len=getline(line,MAXLINE))>0) if(len>max){ max=len; copy(line,save); } if(max>0) printf(“%s”,save); 五、编程题(共14分) int getline(s,lim) char s[]; int lim; {int c,i; for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!=’\n’;i++) s[i]=c; if(c==’\n’){ i++; } s[i]=’\0’; return(i); copy(s1,s2) char s1[],s2[]; { int i=0; while((s2[i]=s1[i])!=’\0’)

174 北京广播电视大学1997年期末考试C语言程度设计试题
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题 一、判断题(每小题1分,共5分) 1、C函数的形参变量值的改变不会影响实参。( ) 2、结构体中所有成员的存储地址都不相同。 ( ) 3、表达式~1的值是0。( ) 4、while(1) s;中循环体s必将陷入死循环。( ) 5、C语言中任何一条表达式后加上分号就可变成一条语句。( ) 二、选择题(每小题2分,共10分) 1、设int x,a[10],*p; 下列正确的语句是( )。 A)p=x; B)p=a; C)p=a[0]; D)p=&(a[0]+1); 2、下列外部数组的定义正确是( ) A)a1[3]; B)auto int a2[3]; C)register int a3[3]; D)static int a4[3]; 3、下列对a是奇数的错误判断是( ) A)a%2!= B)a%2==1 C)a/2!=INT(a/2) D)a%2 4、C语言主函数main()最多允许有参数的个数为( ) A)0 B)1 C)2 D)无限制 5、以下正确的赋值语句为(设char b[5],*p=b;) A) b="abcd"; B) *b="abcd"; C) p="abcd"; D) *p="abcd";

175 北京广播电视大学1997年期末考试C语言程度设计试题
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题 8、逗号表达式x=1,x+=1,x+1,x++的值是(16)____________。 9、2πr2的C的表达式为(17)__________。 10、数组元素a[i][j]用*运算符可表示为(18)______________。 11、设x=20,y=12,z=8,分别求以下表达式的值: (1)x+y%z/z (19)_________; (2)y+=y-=y*=y (20)_________; (3)x>y&&y<z||1 (21)_________; (4)x/z*y (22)_________; (5)x=y!=z?y:z (23)_________。 12、写出下列流程图所对应的程序段。 (24) ┏━━━━━━━━━━┓ (25)┏━━━━━━━━━━┓ ┃T a<b F┃ ┃T a<b F┃ ┠─────┬────┨ ┠─────┬────┨ ┃T c≠d F│ ┃ ┃T c≠d F│ ┃ ┠──┬──┤ u=v ┃ ┠──┬──┤ ┃ ┃x=y │ │ ┃ ┃x=y │u=v │ ┃ ┗━━┷━━┷━━━━┛ ┗━━┷━━┷━━━━┛ ─────────── ────────────

176 北京广播电视大学1997年期末考试C语言程度设计试题
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题 f(b,*p) struct node b; char *p; { b.x=20; *p='T'; } main() struct node a={10,'S'}; f(a,&a.c); printf("%d,%c",a.x,a.c); 3、 #define N 100 #define A1 printf("%d\t",N) #define A2 printf("%o\t ",N) #define A3 printf("%x\n",N) A1;A2;A3; 四、写出以下程序的输出结果(每小题6分, 共30分) 1、 main() { int a,b,i; a=0,b=1; for(i=0;i<10;i+=2) { a+=i; b*=i+1; } printf("a=%d b=%d",a,b); 2、 struct node { int x; char c; };

177 北京广播电视大学1997年期末考试C语言程度设计试题
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题 4、 main() { static int a[]={ 1,2,3,3},b[]={2,3,1,3}; int i,c=1; for(i=0;i<4;i++) { switch(a[i]+b[i]) case 5: c+=1; case 3: c*=a[i]+b[i];break; case 4: c=a[i]<b[i]?a[i]+b[i]:a[i]-b[i]; } printf("c=%d\t",c); {int i=100,j=9; f(&i,&j); printf("%d,%d\n",i,j);

178 北京广播电视大学1997年期末考试C语言程度设计试题
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题 5、 f(x,y) int *x,*y; {int i,j,q=0; i=*x;j=*y; while(i<=j) {q++;j-=i+1; } *x=q;*y=i; 五、编程题(每小题10分,共20分) 1、求以下多项式前30项的和值 S=─ + ─ + ─ + ─ + ─ + ─ + ... 2、输入三个字符串,输出其中串值最大的字符串。

179 北京广播电视大学1997年期末考试C语言程度设计试题答案
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题答案 一、判断题(每小题1分,共5分) 1、T 2、T 3、F 4、F 5、T 二、选择题(每小题2分,共10分) 1、B 2、D 3、C 4、C 5、C 三、填空题(前15空每空1分,后每空2分,共35分) 1、(1)构造类型(2)指针类型(3)空类型 2、(4).c (5).obj (6).exe 3、(7)double 4、(8) 1 5、(9) 1 (10)23 (11) 456 6、(12)打印a,b的极大值 7、(13)-1 (14)0 (15)-1 8、(16)2 9、(17)2*3.14*r*r 10、(18)*(*(a+i)+j) 11、(19)20 (20)0 (21)1 (22)24 (23)12 12、(24)if(a<b) (25)if(a<b) if(c!=d) x=y; if(c!=d) x=y; else ; else u=v; else u=v; 四、写出以下程序的输出结果(每小题6分,共30分) 1、a=20 b=945 2、10,T 3、 4、c=3 c=20 c=2 c=2 5、0,100

180 北京广播电视大学1997年期末考试C语言程度设计试题答案
往年试题 北京广播电视大学1997年期末考试C语言程度设计试题答案 五、编程题(每小题10分,共20分) 1、main() { int n,number=30; float a=1,b=2,s=0; for(n=1;n<number;n++) {s=s+a/b; t=a;a=b;b=t+b; } printf("s=%f\n",s); 2、main() {char str1[20],str2{20],str3[20],*p; scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); p=strcamp(str1,str2)?str1:str2; p=strcamp(p,str3)?p:str3; printf("最大串值为%s",p);

181 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 一、判断题(每小题1分,共5分) 1、可以将一个结构体变量作为一个整体赋给另一个具有 相同类型 的结构体变量。 ( ) 2、表达式8>>2+1的值是3。( ) 3、表达式x+=1和++x的值相同。( ) 4、C语言中每个数据都要属于一个特定的类型。( ) 5、宏替换是在程序执行时开始替换的。( ) 二、选择题(每小题2分,共10分) 1、设int x,a[10],*p; 下列不正确的语句是( ) A)P=a+3; B)p=&a; c)*p=a[1]; d)a[1]=*p; 2、a和b中至少有一个数大于0的正确判断是( ) A)a&&b>0 B)a||b>0 C)a>0&&b>0 D)a>0||b>0 3、以下正确的命题是( ) A)break语句只能用于switch语句中。 B)在switch语句中可以根据需要使用或不使用break语句中。 C)在switch语句中必须使用break语句。 D)swich语句只有靠break才能中止。 4、在C语言中,从计算机内存中将数据写入文件中称为( )。 A.输入 B.输出 C.修改 D.删除 5、主函数main(argc,argv)中的参数argv的说明应当为( )。 A) char *argv[]; B) char argv[][] ; C) char argv[]; D) *argv;

182 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 5、 y=0; 当x=2时,y=(13)________; if(x>=0) 当x=0时,y=(14)________; if(x!=0) 当x=-2时,y=(15)_______。 y=1; else y=-1; 6、设 char *s="ABCD";则语句 while(*s++) printf("%c",*s++); 的输出结果是(16)_________。 7、串长函数strlen("abcd\0ef\0g\0")的值是(17)___________。 8、 代数式 1─ 2 ( xy+ 2─ 3x ) 的C的表达式为 ( 18 )____________________________。 三、填空题(前15空每空1分,后每空2分,共35分) 1、在C语言中十进制数100的八进制表示为(1 )___________,16 进制表示为(2)__________。 2、 C的流程控制语句中, 具有跳跃、 转移功能的语句有 ( 3 )_____________、(4)_________ 、 ( 5) _______________ 和 ( 6 )_____________。 3、上机时进入Turbo C 的命令是(7)___________,脱离 Turbo C 回到操作系统的组合键是(8)____________。 4、C语言中变量的存储类别共有四种,它们是(9)__________、 (10)________、(11)__________和(12)___________。

183 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 9、设x=20,y=12,z=8,分别求以下表达式的值 (1)!x>y 值为:(19)_________; (2)z+=z+z (20)_________; (3)x*=y+z; (21)_________; (4)x>y?(z>y?y:z):y (22)_________; (5)x%y%z (23)_________。 ┏━━━━━━━━━━┓ ┏━━━━━━━━━━┓ ┃T a<b F┃ ┃T a<b F┃ ┠─────┬────┨ ┠─────┬────┨ ┃T c≠d F│ ┃ ┃T c≠d F│ ┃ ┠──┬──┤ s=t ┃ ┠──┬──┤ u=v ┃ ┃x=y │u=v │ ┃ ┃ │x=y │ ┃ ┗━━┷━━┷━━━━┛ ┗━━┷━━┷━━━━┛ 写出以上程序所对应的程序段 (24) ─────────── (25) ────────────

184 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 四、写出以下程序的输出结果(每小题6分,共30分) 1、 f(i,j) int i,j; {int a,b; a=i>-i?i:-i; b=j>0?j:-j; while(a-b!=0) if(a>b) a-=b; else b-=a; return (i/a*j); } main() {int i=-45 , j=-60; printf("%d",f(i,j)); 3、以下正确的命题是( ) A 2、 int a[]={1,2,3,4,5,6}; f(b,n) int *b,n; {int t,i=0; while (i<n/2) {t=*b;*b=*(b+3);*(b+3)=t; b++;i++; } main() {int i; f(a,6); for(i=0;i<6;i++) printf("%2d",a[i]);

185 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 3、 main() {int a,b; a=b=1; do {a+=b; b+=a; }while(a+b<100); printf("a=%d,b=%d\n",a,b); } 4、 {unsrgned int a=0xff,n=4; int b,c; b=a<<(16-n); c=a>>n; c|=b; printf("\na=%4x n=%d",a,n); printf("\nc=%4x",c); 5、 fun(int n) { if(n<=1) printf("A"); else {fun(n-1); printf("B"); fun(n-2); printf("C"); } main() {printf("\n"); fun(2);

186 北京广播电视大学1997年期末补考C语言程度设计试题
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题 五、编程题(每小题10分,共20分) 1、打印前30项斐波那契(Fobnacci)数,要求 (1) 编写无值函数f(b,n)完成前n项斐波那契数的生成,并赋值给 b数组。 (2) 编写主函数完成调用及打印数组中的n项菲 波那契数。 2、通过键盘输入三个数,输出其中的最小值。

187 北京广播电视大学1997年期末补考C语言程度设计试题答案
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题答案 一、判断题(每小题1分,共5分) 1、T 2、F 3、T 4、T 5、F 二、选择题(每小题2分,共10分) 1、B 2、D 3、B 4、B 5、A 三、填空题(前15空每空1分,后每空2分,共35分) (1)0144 (2)0x64 (3)break (4)continue (5)goto (6)return (7)tc (8)Alt+x (9)auto (10)static (11)extern (12)registe (13)1 (14)-1 (15)0 (16)BD (17)4 (18)1/2*(x*y+2/(3*x)) (19)0 (20)24 (21)400 (22)8 (23)0 (24) if(a<b) (25) if(a<b) if(c!=d) x=y; if(c!=d) else u=v; ; else s=t; else x=y; else u=v; 四、写出以下程序的输出结果(每小题6分,共30分) 1、180 2、 3、a=89,b=144 4、a=ff n=4 c=f00f 5、ABAC

188 北京广播电视大学1997年期末补考C语言程度设计试题答案
往年试题 北京广播电视大学1997年期末补考C语言程度设计试题答案 五、编程题(每小题10分,共20分) 1、f(b,n) int b[],n; {int i; b[0]=b[1]=1; for(i=2;i<n;i++) b[i]=b[i-1]+b[i-2]; } main() {int a[50],n,i; scanf("%d",&n); f(a,n); for(i=0;i<n;i++) { printf(%d\t",a[i]); if(i%10==0)printf("\n"); 2、 main() {int a,b,c,man; scanf("%d%d%d",&a,&b,&c); min=a<b?a:b; min=min<c?min:c; printf("最小值为%d\n",min); }


Download ppt "C语言及C++程序设计课件."

Similar presentations


Ads by Google