1、C 语音模拟题- C+期末考试题(二)void main( )char a=0,b=9;float x;x=(b-a)/(F-B);printf(“%dn“,(int)(3.14*x);22 以下程序的输出结果是 。 #includevoid main()int i;for (i=0;i#define N 100class CStackpublic:CStack() top=0;coutpush (10);ptr-push(50);cout pop( )class Bpublic:B()coutint a =2,5,6,8,10;int *p =a,a+1,a+2,a+3,a+4;void m
2、ain( )printf(“%dt%dt%dn“,a4,*(a+2),*p1);printf(“%dt%dt%dn“,*(p+1)+a2,*(p+4)-*(p+0),*(a+3)%a4);二、 问答题(每小题 5 分,共 20 分)1 在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?2 简述局部作用域、全局作用域和类作用域的异同。3 虚函数是否一定要有 virtual 关键字?什么叫纯虚函数和抽象类?多态调用需要满足怎样的条件?4 数组和链表是两种重要的线性数据结构,使用链表有什么优点?三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题 4 分,共 8 分)(1)程序功
3、能是将某年某月的几号转换成这一年的第多少天。#include struct date int y; int m; int d;int daytab2 =0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31; void main( )int n;struct date d;int days (struct date *pd);printf(“Input:Year=? Mouth=? Day=? n“);scanf(“%d%d%d“,y,m,d);n=days(printf(“N=%d daysn“,
4、n);int days (struct date *pd)int i,day,leap;day=pd.d;leap=pd.y%4=0for(i=1;im;+i)day+=daytableapi;return(day);(2)程序功能是打印 Object 类型变量的分量 a。#include struct Objectint a;int b;void main()ObjectObjectcout a = a;o-b = b;return o;四、 (8 分)下列 shape 类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函
5、数。请从 shape 类派生梯形类(trapezoid) 、圆形类(circle) ,并给出具体的求面积函数 class shape public: virtual float area( )=0 ; float total(shape *s ,int n) float sum=0.0; for(int i=0;iarea( ); return sum; 五、 (6 分)函数 binary()实现折半查找,即查寻给定的单词 word 是否在关键字表 tab 中(关键字按字典顺序排列) ,折半查找每次把 word 与 tab 表中相应部分的位于中间位置的关键字进行比较,最终结果:或者与某个关键字
6、相同,或者与所有关键字都不相同。 #include struct keychar *keyword; int count;struct key *binary(char *word,struct key tab,int n)/word: a searching word/tab: keyword table/n: the sum of keywordsint cond;struct key *low=tab;struct key *high=struct key *mid;while(lowkeyword)0) ;else return mid;return(NULL); 六、 (8 分)下面
7、程序实现汉诺塔游戏。规则是:三个立柱(分别为A、B、C) ,开始 A 上串有 n 个(用户输入值)大小不等的圆盘,大的在下,小的在上。要求借助于 B 把它们从 A 移到 C。每次只能移一个盘,而且三个柱上的盘总是大的在下,小的在上#include int i=0;void main( )int n;void movetower(int m,char from, char to,char usg);for (;)printf(“input the number of disks of hanoi tower:“);scanf(“%d“,if (n=0) ;printf(“nn“);printf(
8、“The moving step is as below:n“);movetower(n,A,C,B);printf(“tTotal:%dn“,i);void movetower (int m,char from, char to,char usg)void movedisk(char source,char destination);if ( )movetower(m-1,from,usg,to);movetower(m-1, );else movedisk(from,to);void movedisk(char source,char destination)i+;printf(“%c-%
9、cn“,source,destination); 五、 (6 分)函数 binary()实现折半查找,即查寻给定的单词 word 是否在关键字表 tab 中(关键字按字典顺序排列) ,折半查找每次把 word 与 tab 表中相应部分的位于中间位置的关键字进行比较,最终结果:或者与某个关键字相同,或者与所有关键字都不相同。 #include struct keychar *keyword; int count;struct key *binary(char *word,struct key tab,int n)/word: a searching word/tab: keyword table
10、/n: the sum of keywordsint cond;struct key *low=tab;struct key *high=struct key *mid;while(lowkeyword)0) _; /low=mid+1else return mid;return(NULL);六、 (8 分)下面程序实现汉诺塔游戏。规则是:三个立柱(分别为A、B、C) ,开始 A 上串有 n 个(用户输入值)大小不等的圆盘,大的在下,小的在上。要求借助于 B 把它们从 A 移到 C。每次只能移一个盘,而且三个柱上的盘总是大的在下,小的在上#include int i=0;void main(
11、)int n;void movetower(int m,char from, char to,char usg);for (;)printf(“input the number of disks of hanoi tower:“);scanf(“%d“,if (n=0) _; /break 或 returnprintf(“nn“);printf(“The moving step is as below:n“);movetower(n,A,C,B);printf(“tTotal:%dn“,i);void movetower (int m,char from, char to,char usg)void movedisk(char source,char destination);if (_) /m!=1 或 m1movetower(m-1,from,usg,to);_; /movedisk(from,to)movetower(m-1, _); /usg,to,fromelse movedisk(from,to);void movedisk(char source,char destination)i+;printf(“%c-%cn“,source,destination);