returna+b;
}
运行该程序,得到执行结果。
分析得到的结果,说明为什么得到这样的结果。
3、递归函数与非递归函数。
编写一个函数,求从n个不同的数中取r个数的所有选择的个数。
其个数值为:
n!
Crn=
r!
*(n-r)!
其中:
n!
=n*(n-1)*(n-2)*……..*1。
要求:
(1)分别用递归和非递归两种方式完成程序设计;
(2)主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入00时,程序结束;
(3)能检查输入数据的合法性,要求n>=1并且n>=r;
(4)注意整数能存放的数据范围有限,如何解决
提示:
(1)可以用double数据类型来存放函数的计算结果。
(2)递归结束条件:
如果r=0,则C(n,r)=1;
如果r=1,则C(n,r)=n。
测试数据:
输入:
53
输出:
10
输入:
1020
输出:
IputInvalid1
输入:
503
输出:
1.#IND
输入:
00
IputInvalid1
程序结束
思考问题:
(1)对各种数据类型的字长是否有了新的认识
(2)递归函数的书写要点是什么
(3)递归和非递归函数各有哪些好处
1、求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个函数求最小公倍数。
(提示:
可以用下面的方法求:
一、利用辗除法或其它方法求得最大公约数;
二、最小公倍数等于两数之积除以最大公约数。
)
要求:
两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。
实验八结构和联合
一、实验目的
1、掌握结构体类型变量的定义和使用。
2、掌握结构数组的概念和使用。
3、掌握链表的概念,初步学会对链表进行操作。
4、掌握联合体的概念与应用。
二、试验内容与步骤
1、输入和运行以下程序。
#include<>
uniondata
{
shortints[2];
floata;
intb;
charc[4];
}u;
voidmain()
{
cin>>[0]>>[1];
cout<<"s[0]="<<[0]<<"s[1]="<<[1]<<<"a="<<<<"b="<<<<<"c[0]="<<[0]<<"c[1]="<<[1]<<<"c[2]="<<[2]<<"c[3]="<<[3]<}
输入两个整数10000、20000给[0]和[1],分析运行结果。
然后将cin语句改为:
cin>>;输入60000给b,分析运行结果。
2、打印学生成绩单,内容包括学号、姓名、三门课(数学MT、英语EN、计算机COMPU)的成绩。
计算每个学生三门课程的总分SUM和平均分AVER。
若三门课成绩都在90分以上者,输出“Y”;否则输出“N”,并打印学生成绩单,格式如下:
NUMNAMEMTENCOMPSUMAVER>=90
9501Liufan9598Y
9502Zhanghua9582N
9503Liming688985242N
输入以下程序并调试运行。
#include<>
structstudent
{
intnum;
charname[15];
floatscore[3];
floatsum;
floataver;
charch;
};
voidmain()
{
studentstu[3];
inti,j;
for(i=0;i<3;i++)
{
cin>>stu[i].num;
cin>>stu[i].name;
for(j=0;j<3;j++)
cin>>stu[i].score[j];
}
for(i=0;i<3;i++)
{
stu[i].sum=0;
stu[i].ch='Y';
for(j=0;j<3;j++)
{
stu[i].sum+=stu[i].score[j];
if(stu[i].score[j]<90)
stu[i].ch='N';
}
stu[i].aver=stu[i].sum/3;
}
cout<<"NUMNAMEMTENCOMPSUMAVER>=90"<for(i=0;i<3;i++)
{
cout<<<<}
}
3、设计一个单向链表。
从标准输入读取若干整数,建立链表,每次读入的数放入链表结尾。
当用户输入0时,结束链表的建立工作。
然后从前往后依次输出链表结点中的内容。
提示:
(1)链表结点空间动态申请。
(2)因为每次新结点插入在表尾,所以应设一个指针总是指向当前的表尾。
(3)处理申请不到空间的情况。
测试数据:
程序输出:
请输入若干整数建立链表(输入0结束):
用户输入:
12345670
程序输出:
1234567
思考问题:
如果是双向链表,程序要做哪些改动
4、有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课的平均成绩,以及最高分学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
要求:
用input函数输入10个学生的数据;用average函数求平均分;用max函数找出最高分的学生数据;平均分和最高分学生的数据都在主函数中输出。
5、建立一个链表,每个结点包括:
学号、姓名、性别、年龄、。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
实验九类与对象
一、实验目的
1、掌握类和对象的定义和使用。
2、理解构造函数和析构函数的作用。
3、学习使用静态成员和内联成员函数。
4、掌握从现有类派生出新类的方式。
5、了解基类成员在派生类中的访问控制。
6、了解虚函数对多态性的支持。
二、实验内容与步骤
1、构造函数和析构函数的调用。
输入和运行以下程序。
#include<>classA{int*a;public:
A(intx)
{
a=newint(x);
cout<<”Constructor:
”<<*a<}
~A(){cout<<”Destructor:
”<<*a<};voidmain()
{
Ax(3),*p;
p=newA(5);
deletep;}
2、派生类构造函数和析构函数的调用。
输入以下程序并调试运行。
#include<>classA{inta;public:
A(intaa=0):
a(aa)
{cout<<”ConstructorA:
”<~A(){cout<<”DestructorA:
”<};
classB:
publicA{
intb;
public:
B(intaa,intbb):
A(aa),b(bb)
{cout<<”ConstructorB:
”<
~B(){cout<<”DestructorB:
”<
{
Bx(2,3),y(4,5);
}
3、多态性的实现。
(1)输入以下程序并调试运行,分析其执行结果。
#include<>
promote(3);ay();
m1.displayStatus();
cout<<"\n这是一个兼职技术人员:
";
techniciant1;
(2);ay();
t1.displayStatus();
cout<<"\n这是一个销售经理:
";
salesmanagersm1;
sm1.promote
(2);ay();
sm1.displayStatus();
cout<<"\n这是一个兼职推销员:
";
salesmans1;
s1.pay();
s1.displayStatus();
}
撰稿人:
2009-9-26