}
3.编译、链接和执行程序
实验习题
1.设计一个C++控制台应用程序,运行时,输入两个正整数,计算并输出这两个数之间所有不能被3和7整除的数的和。
2.设计一个利用下列公式计算圆周率π的C++程序,要求精度控制在0.0000001内。
π=4×(1/1-1/3+1/5-1/7+…)
提示:
括号中是一个数列的和,数列的第n项是1/(2n-1),奇数项为正,偶数项为负。
利用循环逐项求和,直到该项的绝对值小于0.0000001为止。
3.编写一个控制台应用程序,运行时输入10个整数,输出其中的最大数和次大数。
提示:
以数组存储逐个输入的10个整数,查找其中的2个最大的数时,首先将数组的前2个元素的较大者初始为最大数,较小的初始为次大数,然后从第3个数开始逐个与最大数和次大数比较,比较时仅有两种情形需考虑:
①当前元素比最大数大,则原最大数成为次大数,当前数为最大数;②当前元素仅比次大数大,则当前数为次大数。
4.编写一个控制台应用程序,输出一个6行的杨辉三角形。
提示:
以二维数组存储杨辉三角形的每个元,初始化其第1行第1列、第2行第1列、第2行第2列等3个元素的值为1,之后从第3行开始逐行计算各列元素的值,计算方法为:
第1列和最后一列(第i行有i列)的值为1,其余元素的值是上一行前一列和上一行上一列的数值的和。
最后逐行输出显示。
实验三指针、引用与函数
实验目的
●掌握指针的定义和依据指针访问数据的方法
●掌握引用的概念和用法
●掌握函数的声明、定义和调用
●掌握函数中指针或引用类型参数的用法
实验示例
[例3-1]编写一个C++控制台应用程序,将某个位数不确定的正整数进行三位分节后输出,例如输入1234567,则输出1,234,567。
解题思路:
自定义一个函数,其中实现将传递的整数转换成字符串,再定义另一个函数将字符串由后向前进行分节,即每3个字符插入一个逗号,利用指针的运算寻找插入的位置。
实现步骤:
1.新建Win32ConsoleApplication程序项目
2.在文件编辑区窗口编写如下程序代码:
#include
usingnamespacestd;
#include
char*separate(int);
char*inttostr(int);
voidmain()
{
intn;
char*p;
cout<<”输入一个正整数:
”;
cin>>n;
p=separate(n);
cout<<”分节输出:
”<
}
char*separate(intnum)
{
char*p1,*p2=inttostr(num),*p3,*pt;
intcount=1;
p1=p2;
while(*p2++!
=’\0’);
p3=p2-1;//p3指向最后一个字符
p2=p2-2;
while(p2>p1)//由后向前
{
if(count==3)
{
pt=p3++;
while(pt>=p2)*(pt+1)=*pt--;
*p2=’,’;
count=0;
}
count++;
p2--;
}
returnp1;
}
char*inttostr(intnum)//将整数转换成对应数字字符串
{
char*p,*p1,*p2,temp;
p=p1=p2=newchar[30];
while(num)
{
*(p2++)=num%10+’0’;
num/=10;
}
*(p2--)=’\0’;
while(p2>p1)
{
temp=*p2;
*p2--=*p1;
*p1++=temp;
}
returnp;
}
3.编译、链接和执行程序
[例3-2]编写程序,实现两个字符串变量的交换。
解题思路:
使用引用来交换两个字符串指针的值。
实现步骤:
1.新建Win32ConsoleApplication程序项目
2.在文件编辑区窗口编写如下程序代码:
#include
usingnamespacestd;
#include
voidswap(char*&x,char*&y)
{
char*temp;
temp=x;x=y;y=temp;
}
voidmain()
{
char*ap,*bp;
cout<<”输入一个字符串:
”;cin>>ap;
cout<<”输入另一个字符串:
”;cin>>bp;
swap(ap,bp);
cout<<”第一个字符串:
”<cout<<”第二个字符串:
”<}
3.编译、链接和执行程序
[例3-3]例4-3的斐波那契数列:
0、1、1、2、3、5、8、13、…。
除第1项为0和第2项为1外,数列的任一项是其前2项的和。
编写计算数列的第n项的函数,调用函数输出数列的第30项。
解题思路:
斐波那契数列可以如下形式的函数表示:
0当n=1时,
f(n)=1当n=2,
f(n-1)+f(n-2)其它
自定义一个递归函数,返回参数n指定的数列项,计算方法是:
当n=1时,函数返回0;当n=2时,函数返回1;否则,返回用参数n-1调用自身函数的值与用参数n-2调用自身函数的值的和。
实现步骤:
1.新建Win32ConsoleApplication程序项目
2.在文件编辑区窗口编写如下程序代码:
#include
intFib(intn)
{
switch(n)
{
case1:
return0;
case2:
return1;
default:
returnFib(n-1)+Fib(n-2);//递归调用函数
}
voidmain()
{
cout<<”数列的第30项是:
”<}
3.编译、链接和执行程序
实验习题
1.编写一个控制台应用程序,运行时输入一个字符串,然后逆序输出该字符串。
2.将实验四习题1中查找n个元素的一维数组中的最大值和次大值的算法定义成一个函数,改造并完成该题。
实验四类与对象
实验目的
●掌握类和对象的概念、定义和访问方法
●掌握不同类型成员的访问限制
●掌握构造函数和析构函数的使用方法
实验示例
[例4-1]运用面向对象程序设计方法编写一个程序,计算两个给定长方形的面积,其类中设计一个用于计算两个长方形的总面积成员函数。
解题思路:
设计一个类Rect,包含数据成员len(表示长度)、wid(表示宽度),以及求面积的公有成员函数area()、求两个长方形的总面积成员函数addarea(),并设计两个重载的构造函数。
实现步骤:
1.新建Win32ConsoleApplication程序项目
2.在文件编辑区窗口编写如下程序代码:
#include
usingnamespacestd;
#include
classRect
{
floatlen,wid;
public:
Rect(){};//默认的构造函数(内联的)
Rect(float,float);//构造函数
floatarea(){returnlen*wid;};//求面积(内联的)
voidaddarea(Rect,Rect);//求两个长方形的面积
};
Rect:
:
Rect(floata,floatb)
{
len=a;wid=b;
}
voidRect:
:
addarea(Rectr1,Rectr2)
{
cout<<”总面积:
”<}
voidmain()
{
RectA