江苏广播电视大学“开放教育试点”

计算机科学与技术专业(专科)

《 C++语言程序设计》 课程综合练习题

说明:本综合练习题中的各数据类型长度均参照 16 位编译系统的相关规定。例如:整型 (int) 数据占用 2 个字节的存储单元。

一、语法判断题

1、若有说明int c;则while(c=cin.get());是正确的C++语句。 ( )

2、unsigned 和void 在C++中都是保留字。 ( )

3 、若有 int ⅰ =10, j=0; 则执行完语句 if (j=0) ⅰ + +; else ⅰ - -; ⅰ的值为 11 。( )

若有 int ⅰ =10, j=0; 则执行完语句 if (j==0) ⅰ + +; else ⅰ - -; ⅰ的值为 11 。( )

4 、若有 int i=10, j=2; 则执行完ⅰ * =j+8; 后ⅰ的值为 28 。 ( )

5 、若一个 C++ 程序中说明一个全局变量 int ⅰ ; ( 在所有函数之外说明的 ) ,则该程序任何一点都可引用全局变量ⅰ。( )

6 、若ⅰ为某函数 func 之内说明的变量,则当 func 执行完后,ⅰ值无定义。( )

7 、一个可执行的 C++ 语言程序可以包含若干个函数,但至少必须包含一个 main( ) 函数。( )

8 、一个 C++ 语言程序可由若干个源程序文件构成,每个源程序文件也必须包含一个 main() 函数。( )

9 、一个可执行的 C++ 语言程序总是从 main() 函数的入口地址处开始执行。( )

10 、在变量定义 int sum , SUM; 中 sum 和 SUM 是两个相同的变量名。( )

11 、字符串 ”china” 在内存中占据的存储空间是 5 个字节。( )

12 、在 C++ 语言中, ”A” 和 'A' 是等价的。( )

13  、 C++ 表达式 4/7 和 4.0/7 的值是相等的,且都为 double 型。( )

14 、关系表达式 a=b>c 等价于 a=(b>c) ,同时也等价于 a==b>c 。( )

15 、 (a=3)>(b=5) 是合法的关系表达式。( )

16 、逻辑表达式‘ c'&&'d' 的值为 1 。( )

17 、一个变量的地址就称为该变量的“指针”。( )

18 、 C++ 语言中直到型循环结构为: do 循环体 while( 表达式 ); 但这种循环是当表达式为真时反复执行循环体,表达式为假时结束循环。( )

19 、 for ( ; ; ) 语句 等价于 while (1) 语句 ,即不设初值、不判断条件、无终止地执行循环体。( )

20 、 break 语句不能用于循环语句和 switch 语句之外的任何其它语句中。( )

21 、 continue 语句和 break 语句的区别是: break 语句提前跳出 switch 结构或结束循环的执行; continue 语句只结束本次循环,而不是终止整个循环的执行。( )

22 、数组是一种构造型数据,即是若干相同类型的数据的集合。( )

23 、 C++ 语言中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。( )

24 、若有 int a[3][4]; 则 a[3][4] 是对二维数组的正确访问。( )

25 、一个 C++ 源程序文件由一个或多个函数组成,由此可见函数是一个独立的编译单位。( )

26 、在 C++ 语言中,所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数。( )

27 、 C++ 中,在定义函数时的参数是“形式参数”,在调用函数时的参数是“实际参数”。( )

28 、 #include “iostream.h” 的作用是将说明标准输入输出流对象的头文件包含到当前源文件中来。( )

29 、 C++ 语言中允许函数“嵌套调用”和“递归调用”,所谓“递归调用”就是指:在调用一个函数的过程中又出现直接或间接地调用该函数本身。( )

30 、 C++ 中,如果在定义函数时省略 extern ,则隐含为外部函数。( )

二、语法选择题

1 、由 C++ 源程序文件编译而成的目标代码文件的缺省扩展名为( )

A).cpp B).exe C).obj D).lik

2 、设 x 和 y 均为 bool 类型,则 x&&y 为真的条件是( )

A). 它们均为真 B). 其中一个为真

C). 它们均为假 D). 其中一个为假

3 、设有 int i ;则表达式 i=1,++i,++i||++i,i 的值为 ( )

A).1 B).2 C).3 D).4

4 、设有 int i ;则表达式 (i=1,i=10)?i++||++i:++i 的值为 ( )

A).1 B).2 C).3 D).10

5 、设有 int a[ ]={10,11,12},*p=&a[0] ;则执行完 *p++;*p+=1; 后 a[0],a[1],a[2] 的值依次是 ( )

A).10,11,12 B).11,12,12

C).10,12,12 D).11,11,12

6 、设有 int i, j, k; 则表达式 i=1,j=2,k=3, i&&j&k 的值为 ( )

A).1 B).2 C).63 D).0

7 、设有说明 int s[2]={0,1},*p=s; 则下列错误的 C++ 语句是 ( )

A).s+=1; B).p+=1; C).*p++; D). (*P)++;

8 、若有 char a[3]= {‘A','\0','D'},*P=a, i=2, j=4; 则下列表达式值不是 1 的有( )

A) . strlen (a); B) . j ‖ j; C) . * (P+1); D) . - - ⅰ ;

9 、表达式 4 ‖ 3 ‖ 2 ‖ 1 的值为( )

A) . 1 B) . 2 C) . 3 D) . 4

10 、表达式 1&3&5&7 的值为( )

A).1 B).3 C).5 D).7

11 、设 a 、 b 和 c 都是 int 型变量 , 且 a=3,b=4,c=5, 则下列表达式中 , 值为 0 的表达式是( )

A).'A'&&'B' B).a<=b

C).c>=b||b+c&&b-c D). a<=b+c&&c>=a+b

12 、若 x 和 y 都是 int 型变量 ,x=100,y=200, 则下面程序片段 cout<<(x,y)<<endl; 的输出结果是( )

A).200 B).100

C).100 200 D). 输出格式符不够 , 输出不确定的值

13 、下面各语句中 , 能正确进行字符串赋值操作的语句行是( )

A).char s[4][5]={"ABCDE"}; B). char s[5]={'A','B','C','D','E'}

C). Char *s; s="ABCDE"; D). char *s; cin>>s;

14 、若有 :int a[6]={4,5,6,9,5,7},*p=a, *q=p; 则对数组元素的错误引用是( )

A). a[4] B). *(p+4) C). *a++ D). *q++

15 、下列不正确的转义字符是( )

A).'\\' B).'\" C).'074' D).'\0'

16 、若有以下定义 :

char a; int b;

float c; double d;

  则表达式 a*b+d-c*b 值的类型为( )

A). float B). int C). char D). double

17 、表示关系 x<=y<=z 的 C++ 语言表达式为( )

A). (x<=y)&&(y<=z) B). (x<=y)AND(y<=z)

C). (x<=y<=z) D). (x<=y)&(y<=z)

18 、设 x 和 y 均为 int 型变量 , 则执行下面的循环后 ,y 值为( )

for(y=1,x=1;y<=50;y++)

{ if(x>=10))break;

if (x%2==1)

{ x+=5; continue;}

x-=3;

}

A).2 B). 4 C). 6 D). 8

19 、给出以下定义 :

char x[ ]="abcdefg";

char y[ ]={'a','b','c','d','e','f','g'};

  则正确的叙述为( )

A). 数组 X 和数组 Y 等价 B). 数组 x 和数组 Y 的长度相同

C). 数组 X 的长度大于数组 Y 的长度 D). 数组 X 的长度小于数组 Y 的长度

20 、以下叙述中不正确的是( )

A). 在不同的函数中可以使用相同名字的变量

B). 函数中的形式参数是局部变量

C). 在一个函数内定义的变量只在本函数范围内有效

D). 在一个函数内的复合语句中定义的变量在本函数范围内有效

21 、假定 a 和 b 为 int 型变量 , 则执行以下语句后 b 的值为( )

a=1; b=10;

do

{ b-=a; a++; }

while (b--<0);

A). 9 B). –2 C). -1 D). 8

22 、对于结构中定义的成员,其隐含访问权限为( )

A). public B). protected

C). private D). static

23 、设 P1 和 P2 是指向同一个 int 型一维数组的指针变量 ,k 为 int 型变量 , 则不能正确执行的语句是( )

A).k=*P1+*P2; B).p2=k; C).P1=P2; D).K=*P1 * (*P2);

24 、设有如下定义 :

int arr[]={6,7,8,9,10};

int * ptr;

  则下列程序段的输出结果为( )

ptr=arr;

* (ptr+2)+=2;

cout<<*ptr<<*(ptr+2)<<endl;

A).8,10 B).6,8 C).7,9 D).6,10

25 、执行以下程序段后 ,m 的值为( )

int a[2][3]={ {1,2,3},{4,5,6} };

int m,*p;

p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4));

A). 15 B). 14 C). 13 D). 12

26 、当使用 ifstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )

A). ios::in B). ios::out

C). ios::in | ios::out D). 没有

27 、设有定义 int (*ptr)( ); 则以下叙述中正确的是( )

A) ptr 是指向一维数组的指针变量

B) ptr 是指向 int 型数据的指针变量

C) ptr 是指向函数的指针 , 该函数返回一个 int 型数据

D) ptr 是一个函数名 , 该函数的返回值是指向 int 型数据的指针

28 、设有以下说明和定义 :

typedef union

{ long i; int k[5]; char c; }DATE;

struct date

{ int cat; DATE cow; double dog; } too;

DATE max;

  则下列语句的执行结果是( )

cout<<(sizeof (struct date ) +sizeof(max))<<endl;

A). 26 B). 30 C). 18 D). 8

29 、有以下程序

main()

{ char a[]="programming", b[]="language";

char *p1,*p2;

int i;

p1=a; p2=b;

for(i=0;i<7;i++)

if(*(p1+i)==*(p2+i)) cout<<*(p1+i);

}

  输出结果是( )

A). gm B). rg C). or D). ga

30 、执行以下程序后的输出结果为( )

viod fun (int a,int b,int c)

{ a=4; b=5; c=6;a=b+c;b=c+a;c=a+b;}

main()

{ int x=10, y=20,z=30;

fun (x,y,z);

cout<<x<<','<<y<<','<<z<<endl;

}

A).30,20,10 B).10,20,30

C).11,17,28 D).4,5,6

31 、执行以下程序后的输出结果为( )

int fun(int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y; }

main()

{ int a, b, c, d;

a=30; b=50;

fun(a,b,&c,&d);

cout<<c<<','<<d<<endl;

}

A).50,30 B).30,50 C).80,-20 D).80,20

32 、设 x 和 y 均为 int 型变量,则以下语句 x+=y; y=x-y; x-=y; 的功能是( )

A). 把 x 和 y 按从大到小排列  B). 把 x 和 y 按从小到大排列 

C). 无确定结果  D). 交换 x 和 y 中的值

33 、以下程序的输出结果是( )

main()

{ int a=12,b=12;

cout<<(--a)<<” ”<<(++b)<<endl;

}

A).10 10 B).12 12 C).11 10 D).11 13

34 、以下程序运行后,输出结果是( )

main()

{ char *s="abcde";

s+=2;

cout<<s<<endl;

}

A).cde B). 字符 c 的 ASCII 码值  C). 字符 c 的地址 D). 出错

35 、当执行以下程序段时( )

x=-1;

do { x=x*x;} while( !x);

A). 循环体将执行一次  B). 循环体将执行两次 

C). 循环体将执行无限次  D). 系统将提示有语法错误

36 、执行以下程序后,输出的结果是( )

main()

{ int y=10;

do {y--;} while(--y);

cout<<(y--)<<endl;

}

A).-1 B).1 C).8 D).0

37 、若有 int a; 则表达式语句 a+=a -=a*a; 等价于下列哪组表达式语句( )

A). a+a; a*a; B).a=a+a; a=a-a*a;

C). a=a+a-a*a; D).a=a-a*a; a=a+a;

38 、设有如下 C 语句:

struct node

{ int val;

struct node *next;

};

struct node sa[3]={ {5},{7},{9} },*sp;

sa[0].next=sa+1; sa[1].next=sa+2; sa[2].next=NULL;

sp=sa;

则下面哪个表达式的值是 6 ( )

A). ++sp->val B). sp->val++

C). (*sp).val++ D). sp++->val

39 、当需要把一个带初始化的变量定义为常值变量时,则应在该语句的前面加上关键字( )

A).static B).const C).continue D).extern

40 、假定一个字符串的长度为 n ,则定义存储该字符串的字符数组的长度至少为( )

A).n-1 B).n C).n+1 D).n+2

41 、假定 AB 为一个类,则该类的拷贝构造函数的正确声明是( )

A).AB(AB x); B). AB(AB &); C). AB(AB *); D). AB&(AB & x);

42 、当需要打开 A 盘上的 xxk.dat 文件用于输入时,则定义文件流对象的语句为( )

A). fstream fin(“A:\\xxk.dat”);

B). ofstream fin(“A:\\xxk.dat”);

C). ifstream fin(“A:\\xxk.dat” , ios::app);

D). ifstream fin(“A:\\xxk.dat” , ios::nocreate);

43 、当需要将一个函数 bool isnumber (char c) ; 声明为内联函数时,则此内联函数的函数原型为( )

A). enum bool isnumber (char c) ;

B). define bool isnumber (char c) ;

C). inline bool isnumber (char c) ;

D). extern bool isnumber (char c) ;

44 、在下面的函数声明中,存在着语法错误的是( )

A). void BC ( int a , int ); B). void BD ( int , int );

C). void BE ( int , int=5 ); D). void BF ( int x ; int y );

45 、假定要对类 AB 定义加号操作符重载成员函数,实现两个 AB 类对象的加法,并返回相加结果,则该成员函数的声明语句为( )

A).AB operator+(AB &a ,AB &b); B). AB operator+(AB &a );

C). operator+(AB a ); D). AB & operator+( );

三、语法填空题

1 、执行 cout<<char(‘A'+2)<<endl; 语句后得到的输出结果为 。

2 、描述命题“ A 小于 B 或小于 C” 的表达式为 。

3 、在 C++ 中有二种参数传递方式: 和 。

4 、定义重载函数时,应在参数个数、参数类型或参数次序上 。

5 、类是用户定义的类型,具有类类型的变量称作 。

6 、当建立一个新对象时,程序自动调用 。

7 、设 P 是指向具有 10 个元素的一维数组的指针变量,该数组元素类型 int ,则指针变量 P 的定义为 。

8 、若有 int i=3,j=7; 执行 cout<<( ⅰ + +)<<','<<(j=5,+ +j)<<endl; 的输出为 。

9 、当一个成员函数被调用时,该成员函数的 指向调用它的对象。

10 、拷贝初始化构造函数使用 来初始化创建中的对象。

11 、一个 C++ 函数由两部分组成,即: 和 。

12 、 C++ 中函数定义的格式是 ( ) 。

13 、已知一函数的定义是: char *Hi (const char *s ) {cout<<”Hi!”<<s ; return s ;} 则该函数的原型是 。

14 、一个 C++ 程序总是从 开始执行。

15 、 C++ 语言程序中出现的 /* …… */ 部分或 // ……部分所起的作用是: 。

16 、 C++ 语言中数组元素的访问方式有两种,即: 和 。

17 、假定 a 是一个二维数组,则 a[ i ][ j ] 的指针访问方式为 。

18 、执行 typedef int ABC[10] ; 语句把 ABC 定义为具有 10 个整型元素的 。

19 、假定要访问一个结构指针 p 所指对象中的 b 指针成员所指的对象,则表示方法为 。

20 、设 px 是指向一个类动态对象的指针变量,则执行 delete px ; 语句时,将自动调用该类的 。

21 、 C++ 规定:在每一个字符串的结尾加上一个 ,以便系统据此判断字符串是否结束。

22 、 C++ 语言中数据类型的转换有两种,即: 和 。

23 、 C++ 语言规定了运算符的优先级和结合性,其结合性分为: 和 。

24 、对一个类中的数据成员的初始化可以通过构造函数中的 实现,也可以通过构造函数中的 实现。

25 、假定 AB 为一个类,则执行 AB a[10] ; 语句时,系统自动调用该类构造函数的次序为 。

26 、假定类 AB 中有一个公用属性的静态成员 bb , 在类外不通过对象名访问该成员 bb 的写法为 。

27 、若有 int a=4; float b=14.70; 则 4/5 的值为 , 4.0/5 的值为 ;能正确表示 a+b 对 a 取余的表达式是 。

28 、若有 int x=4,y=7; 则表达式 x+=y,x*=x+y 的值为 。

29 、 x>1 && y!=0 的相反条件为 。

30 、过程化程序设计方法中,程序由三种基本结构,即: 、 、 。

31 、表达式 'c'&&'d' 的值为 ,表达式 'c'&&'\0' 的值为 ,表达式 !'c'||'c'<='d' 的值为 。

32 、分支语句 if(x>=y) max=x; else max=y; 用含条件运算符的赋值语句表示为 。

33 、 C++ 语言中所提供的循环控制语句有三种,即: 、 、 。

34 、在 C++ 中,若需要在程序文件中进行标准输入输出操作,则必须在开始加入预处理命令 , 若使用到数学库中的函数时,要在源程序的开始加入预处理命令 。

35 、 C++ 语言中用来存放变量地址的变量称作 。

36 、在 C++ 程序中,可以用两种方法实现一个字符串,即: 和 。

37 、假定用户没有给一个名为 AB 的类定义构造函数,则系统为其隐含定义的构造函数为 。

38 、 int *p[10]; 的含义是 。

39 、 int (*p)( ); 的含义是 。

40 、 int &p; 的含义是 。

41 、 int **p; 的含义是 。

42 、若有定义 int a[10], *p=a; 则 p++ 的含义是 。

43 、若有 int a[4]={10,11,12,13},b,* p=a; 则 执行语句 b=*p++; 后 b 的值是 ,接着执行语句 b=*++p; 后 b 的值是 ,再执行语句 b=++*p; 后 b 的值是 。

44 、定义一种新的类型 INTEGER, 使其与 int 等价,则正确的表示方式为 。

45 、定义一个符号常量 EOF , 使其与 -1 等价,则正确的表示方式为 。

46 、 C++ 语言中根据数据的组织形式,可以将文件分为: 和 。

47 、 OOP 是术语 的英文简称, OOP 方法是软件工程学中结构化程序设计,过程化、模块化、数据抽象、信息掩蔽、知识表示、并行处理等概念的积累和发展,它所依赖的最基本的概念是 、 和 。

48 、若需要把一个函数 void F( ); 定义为一个类 AB 的友元函数,则应在类 AB 的定义中加入一条语句: 。

49 、在 C++ 中用 代替了 C 语言中的带参数宏定义。

50 、 C++ 语言所提供的定义结构体、共用体和类等三种类型的关键字分别是: 、 、 。

四、语法简答题

1 、请用 C++ 语言的表达式表示下列代数式。


(1)

(2)

(3)

(4) (e=2.71828)

(5)

(6) (e=2.71828)

(7)

(8)

2 、根据要求完成下列各题。

(1) 定义一个 3 行 4列的整型 二维数组 array, 并为数组的每个元素都进行初始化。

(2) 用两种方法实现一个字符串 str ,并赋以初值 ”welcome to Nanjing !” 。

(3) 定义结构体类型 date, 该结构体包含的成员为 year ( 整型 ) 、 month ( 整型 ) 、 day( 整型 ) ,再使用 typedef

将结构体类型 date 等价成 DATE ,最后使用 DATE 定义一个变量 pdate 。

(4) 定义结构体类型 bookinfo ,该结构体包含的成员为 name ( 长度为 20 的字符数组 ) 、 writer ( 长度为

10 的字符数组 ) 、 publish ( 长度为 50 的字符数组 ) 、 price ( 实型 ) 、 count ( 整型 ) ,并用 bookinfo 定

义一个结构体变量 book1 和指向结构体类型的指针变量 p 。

(5) 定义一个函数模板,该函数模板能够实现求两个数据的最大值,并返回最大值。

(6) 定义一个函数模板,该函数模板能够实现交换两个引用形参 x 和 y 的值。

五、程序分析题

1 、写出下列程序执行后各 cout 的输出结果。

(1) #include "iostream.h"

int x=2,y=3,z=4;

void func1(int a , int b);

void main()

{int x=6;

y=5;

cout<<x<<','<<y<<','<<z<<';' ;

func1(x,y);

z*=x+y;

cout<<x<<','<<y<<','<<z<<'\n' ;

}

void func1(int a , int b)

{int z=10;

a=a+b+x;

b=a-b+y;

cout<<x<<','<<a<<','<<b<<','<<z<<';' ;

}

(2) #include "iostream.h"

void main( )

{static char a[ ]="Radio&TV University";

static int b[8]={6,8,9,2};

char *p=a;

int *q;

q=b;

cout<<endl<<a[1]<<','<<*p<<','<<*(a+6)<<','<<p[2]<<','<<*(p+3)-32;

*q=*(q+1)+2;

*(q+2)=*q*2;

q++;

cout<<endl<<b[5]<<','<<*b<<','<<b[1]<<','<<b[2]<<','<<*q++;

}

(3) #include "iostream.h"

void main( )

{int x=5,y=8,*px,*py;

px=&x,py=&y;

cout<<"num1=”<<*px<<','<<”num2="<<*py<<';';

if(x<y) swap1(x,y);

cout<<"num1=”<<*px<<','<<”num2="<<*py<<';';

if(x<y) swap2(px,py);

cout<<"num1=”<<*px<<','<<”num2="<<*py<<';';

if(x<y) swap3(px,py);

cout<<"num1=”<<*px<<','<<”num2="<<*py<<';';

}

swap1(int a,int b)

{int t;

t=a; a=b; b=t;

cout<<"num1=”<<a<<','<<”num2="<<b<<';';

}

swap2(int *p,int *q)

{int *t;

t=p; p=q; q=t;

cout<<"num1=”<<*p<<','<<”num2="<<*q<<';';

}

swap3(int *p,int *q)

{int t;

t=*p;*p=*q;*q=t;

cout<<"num1=”<<*p<<','<<”num2="<<*q<<';';

}

2 、给出下列程序运行后的输出结果。

(1) #define M 6

#include "iostream.h"

void main( )

{int i,j,k;

for(i=0;i<M;i++)

{ cout<<endl;

for(j=0;j<M-i;j++) cout<<' ';

for(k=0;k<=2*i;k++) cout<<'*';

}

}

(2) #include “iostream.h”

main(int argc,char *argv[ ])

{ int i;

cout<<”argc=”<<argc<<';' ;

for(i=0;i<=argc-1;i++) cout<<argv[i]<<';' ;

}

若上面的程序编译 ` 连接后生成可执行文件 ABC.EXE,

若输入以下命令行 abc filel file2 <enter> ( 表示回车 ) 注:文件的路径可以不考虑

(3) #include <iostream.h>

class A

{ int a, b;

public: A(){a=b=0;}

A( int aa , int bb ) : a(aa),b(bb)

{cout <<”a=”<<a<<”, ”<<”b=”<<b<<endl;}

~A() {cout<<”Destructor!”<<endl;}

};

void main( )

{ A x , y(2 , 3) ; } // 对象 x , y 消亡后分别自动调用析构函数 ~A( )

(4) #include <iomanip.h>

void main( )

{ int a[ 9 ]={2,4,6,8,10,12,14,16,18}

for (int i=0 ; i<9 ; i++)

{cout <<setw(5)<<*(a+i) ;

if ((i+1)%3==0) cout <<endl;

}

}

(5 ) #include <iostream.h>

#include <string.h>

struct worker

{ char name[15] ; // 姓名

int age ; // 年龄

float pay ; // 工资

};

void main( )

{ worker x ;

char *t=”liouting” ;

int d=38 ; float f=493 ;

strcpy (x.name , t);

x.age=d ; x.pay=f ;

cout<<x.name<<' '<<x.age<<' 'x.pay<<endl ;

}

3、试 分析下列程序或函数的功能。

(1) #include "iostream.h"

void main( )

{ char str[81],*sptr;

int i;

for(i=0; i<80; i++)

{ str[i]=cin.get( );

if(str[i]=='\n') break;

}

str[i]='\0';

sptr=str;

while(*sptr) cout<<(*sptr++);

}

(2) #include "iostream.h"

void swap(int *p, int *q)

{int t;

t=*p; *p=*q; *q=t;

}

void main( )

{int a,b,c,*p1,*p2,*p3;

cin>>a>>b>>c;

p1=&a; p2=&b; p3=&c;

if(*p1<*p2) swap(p1,p2);

if(*p1<*p3) swap(p1,p3);

if(*p2<*p3) swap(p2,p3);

cout<<endl<<a<<','<<b<<','<<c<<endl;

}

(3) float FH( )

{ float x , y=0 , n= 0 ;

cin>> x;

while (x!=-1)

{ n ++ ; y+=x ;

cin >>x ;

}

if (n==0) return y ;

else return y/n ;

}

(4) #include <iostream.h>

void WA(int a[ ] , int n)

{for (int i=0 ; i<n-1 ; i++)

{ int k=i ;

for (int j=i+1 ; j<n ; j++)

if (a[ j ]<a[ k ]) k=j ;

int x =a[ i ] ; a[ i ]=a[ k ] ; a[ k ]=x ;

}

}

(5) #include <iostream.h>

#include <fstream.h>

void JB( char *fname)

// 可把以 fname 所指字符串作为文件标识符的文件称为 fname 文件,

// 假定该文件中保存着一批字符串,每个字符串的长度均小于 20 。

{ ifstream fin (fname , ios::nocreate) ;

char a[20];

int i=0 ;

while (fin>>a)

{cout <<a<<endl ;

i++ ;

}

fin.close( ) ;

cout <<”i= ”<< i <<endl ;

}

六、程序改错题

请指出下列程序中的各处错误 ( 语法错误和逻辑错误 ) ,并予以改正。(直接在源程序中修改)

(1) 从键盘输入三角形的三条边长,并计算和输出它的面积。

Main

{ float a,b,c,s

cin>>a>>b>>c;

s=1.0/2*(a+b+c);

area=sprt(s*(s-a)*s-b)*(s-c));

cout<<”a=”<<a<<” b=”<<b<<” c=”<<c<<” s=”<<s<<endl;

cout<<”area=”<<area<<endl;

}

(2) 从键盘输入一个分数( 0~100 ),判断它属于哪个分数段,并输出分数段字母代号。

#include <iostream.h>

main( )

{int num; char grade;

cout<<“please input num:”;

cin>>num;

if((grade>=90)&&(grade<==100) grade=”A”; cout<<“The grade is:”<<grade;

if (grade>=80) grade=”B”; cout<<“The grade is:”<<grade;

if (grade>=70) grade=”C”; cout<<“The grade is:”<<grade;

if (grade>=60) grade=”D”; cout<<“The grade is:”<<grade;

else grade=”E”; cout<<“The grade is:”<<grade;

}

七、程序填空题

•  函数 func 的功能是:使一个字符串按逆序存放 , 请填空。

#include <iostream.h>

void func (char str[ ])

{ char m; int i, j;

for(i=0, ; ; i++,j--)

{ m=str[i];

;

;

}

cout<< <<endl;

}

(2) 以下程序用来对从键盘上输入的两个字符串进行比较 , 然后输出两个字符串中第一个不相同字符的 ASCII 码之差。例如:输入的两个字符串分别为 abcdef 和 abceef, 则输出为 -1 ,请填空。

#include

void main( )

{ char str1[50], ;

int i, s;

cout<<"\n input string 1:\n"; ;

cout<<"\n input string 2:\n"; cin.getline(str2,50);

i=0;

while(( &&(str1[i]!='\0'))

;

;

cout<<s<<endl;

}

(3) 以下程序通过调用自定义函数 scopy( ) 将字符串 s1 复制到字符串 s2 ,并输出显示,请填空。

#include “iostream.h”

void scopy ( , )

{while(*p!= '\0')

{ ; ; ; }

*q='\0';

}

void main( )

{ char *s1="Nanjing, China";

char s2[20];

cout<<"\nThe s1 is:"<<s1;

;

cout<<"\nThe s2 is:"<<s2;

}

(4) class A

{ int *a ;

int n;

public: A(int nn=0) : n(nn)

{ if(n==0) a=0;

else a= ; // 分配长度为 n 的动态数组

}

void seta(int *aa)

{for (int i=0; i<n; i++) a[i]=aa[i] ;}

// 定义析构函数,释放动态数组空间

} ;

八、实例编程题

1 、根据要求将下列程序进行修改调整,使其能完成与原来程序同样的功能。

(1) 将下列程序分别用 do …… while 和 for 循环结构进行改写。

#include <iostream.h>

main( )

{int i, sum=0; i=1;

while(i<=100)

{sum=sum+i;

i++;

}

cout<<“The sum is : ” <<sum<<endl;

}

2 、根据要求直接编写一个程序、一个函数或一个程序段。

(1) 编制一个函数:此函数能对一维数组内存放的 10 个学生成绩求平均成绩。 ( 形参数组名为 array)

(2) 编制一个函数:此函数能对一维数组内存放的 10 个学生成绩求平均成绩。 ( 形参为指向具有 10 个元素数组的指针变量 )

(3) 编写一个函数:统计出整数文件 a:\xc.dat 中的数据个数。

(4) 编制一个完整的程序:从键盘输入字符串 str1, 将字符串 str1 复制到字符串 str2 ,并统计字符串的长度。 ( 用字符数组实现 )

(5) 编制一个完整的程序:从键盘输入字符串 str1, 将字符串 str1 复制到字符串 str2 ,并统计字符串的长度。 ( 用字符指针实现 )

(6) 编制一个完整的程序:从键盘输入 10 个整型数组元素,调用自定义函数 void sort( int array[ ] , int n ) 对其进行由大到小排序 , 最后将排序结果输出到显示器终端,要求自定义函数 sort( ) 中用冒泡法实现排序。