华中科技大学c++第5次上机作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中科技大学
《计算机基础与程序设计(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)