搜档网
当前位置:搜档网 › 华中科技大学c++第5次上机作业教学资料

华中科技大学c++第5次上机作业教学资料

华中科技大学c++第5次上机作业教学资料
华中科技大学c++第5次上机作业教学资料

华中科技大学c++第5次上机作业

华中科技大学

《计算机基础与程序设计(C++)》

实验报告

实验名称:第五次上机实验实验学时:4

姓名:学号:班级:电气

实验日期: 2017/4/27 教师批阅签字:

一、实验目的

●掌握字符型数组、字符型指针和数值型数组的异同。

●掌握自定义函数的定义,声明和调用。

●掌握函数参数的值传递和地址传递的区别。

●掌握递归算法的意义。

●明确变量的作用域和生存期的意义。

二、实验内容

1.阅读程序

1)#include

#include

using namespace std;

int main()

{ int a=10, *p=&a;

char ch=’a’, *q=&ch;

char str[ ]=”abcd”,*qq=str;

cout<<*p<

cout<<*q<

cout<<*qq<

cout<

cout<

cout<

return 0;

}

运行上述的程序,并解释每个输出结果。

解释:1.指针变量*p指向a的地址,所以直接输出a的值。

2.指针变量*q指向ch的地址,所以输出ch的值。

3.指针变量*qq指向数组str的首地址,故只输出首个数据

4.因为a的类型为int,所以输出了a的地址

5.有一个元素的字符数组,没有\0,所以直接输出时不能停止,只能输出乱码,而字符串可以直接输出是因为它会自动添加\0,输出时遇到\0停止,所以可以正常输出;

6.用字符数组给指针初始化,所以qq相当于str,而字符数组可以整体输出

2)#include

#include

using namespace std;

int main()

{ int age ;

char name[11];

cin>>age;

cin.getline(name,11);

cout<

cout<

return 0; }

运行上述的程序,其结果是否正确,如不确请修改正确,并解释原因。

错误:1.cin>>age后面的分号为中文

2.cin.getline会将输入的回车作为其结束的标志,故直接跳过了输入字符数组这一步骤。只需要用cin.get吸收这个回车即可。

修改后的程序:

#include

#include

using namespace std;

int main()

{ int age ;

char name[11];

cin>>age;

cin.get();

cin.getline(name,11);

cout<

cout<

return 0; }

3) #include

#include

using namespace std;

int main( )

{

char rstr[10 ]="abcdefgh", dstr[10];

char * p=rstr, *q=dstr;

strcpy(dstr,rstr);

cout<<"输出字符串rstr:"<

cout<<"输出字符串dstr:"<

cout<<"输出字符串p:"<

cout<<"输出字符串q:"<

return 0;

}

阅读上述程序并运行,分析其结果。若将上述程序修改如下,重新运行,结果如何?请解释原因。

int main( )

{

char *rstr="abcdefgh", *dstr;

strcpy(dstr,rstr);

cout<<"输出字符串rstr:"<

cout<<"输出字符串dstr:"<

return 0;

}

上述程序的功能是将字符串rstr复制到目标串dstr中,运行该程序结果是否正确,如不正确请修改正确,并解释原因。

原程序的结果:

Srtcpy将rstr中的数据复制到了dstr中,所以会输出abcdefgh,输出p和q相当于间接输出,也可以输出abcdefgh。

第二个程序:

此程序无法运行,原因是指针*rstr和*dstr未指向安全的位置。更改会使程序无法运行。

修改:

#include

#include

using namespace std;

int main( )

{

char a[10]="abcdefgh",b[10];

char *rstr=a, *dstr=b;

strcpy(dstr,rstr);

cout<<"输出字符串rstr:"<

cout<<"输出字符串dstr:"<

return 0;

}

解释:

将指针指向安全的位置即可。

2.编程题

1)编写两个函数,分别求两个整数的最大公约数和最小公倍数,在主函数中调用这两个函数,计算两个数的最大公约数和最小公倍数并输出结果。

要求:

1)程序原代码。(直接粘贴在此)

#include

using namespace std;

int gys (int,int);

int gbs (int,int);

int main( )

{

int a,b;

cout<<"请输入两个正整数"<

cin>>a>>b;

cout<<"最大公约数为"<

cout<<"最小公倍数为"<

return 0;

}

int gys (int a,int b)

{

int i,n,m;

if (a>=b)

n=a;

else

n=b;

for(i=2;i<=n;i++)

{

if(a%i==0&&b%i==0)

m=i;

}

return m;

}

int gbs (int a,int b)

{

int i,n,m,s;

if (a>=b)

n=a;

else

n=b;

for(i=2;i<=n;i++)

{

if(a%i==0&&b%i==0)

m=i;

}

s=a*b/m;

return s;

}

2)解决本题的算法思路描述

编写计算最小公倍数的函数

编写计算最大公约数的函数

在主函数中使用这两个函数

得出结果

3)调试过程的记载(包括出现的错误,以及修改)

函数声明方式错误

4)归纳本题应用的知识点或算法

计算最大公约数和最小公倍数的方法

函数的声明与使用

2)编写程序随机生成50个100-200之间的随机整数,找出其中的素数。要求判断素数的功能利用函数实现,在main函数中调用该函数输出所有的素数。

要求:

1)程序原代码。(直接粘贴在此)

#include

#include

#include

using namespace std;

int ss (int);

int main( )

{

int a[50],i,t=0,j;

srand(time(0));

a[0]=(rand()%100+100);

for(i=1;i<50;i++)

{

t=0;

a[i]=(rand()%100+100);

for(j=0;j

if(a[i]==a[j])

t=1;

if(t==1)

i--;

}

cout<<"生成的50个随机数为:"<

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

{

cout<

if ((i+1)%5==0)

cout<

}

cout<<"其中的素数为:"<

for(i=0,j=0;i<50;i++)

{

if(ss(a[i]))

{

cout<

j++;

if(j%5==0)

cout<

}

}

cout<

return 0;

}

int ss (int b)

{

int a=1,n;

for (n=2;n

{

if (b%n==0)

{

a=0;

break;

}

}

return a;

}

2)解决本题的算法思路描述

编写一个求素数的函数

主函数中定义一个含50个元素的数组

当该变量的值位于100到200之间时,将该变量的值赋给数组中的元素,并与前面所有值进行比较,

相关主题