1、 华中科技大学c++第5次上机作业 精品文档 华 中 科 技 大 学 《计算机基础与程序设计(C++)》 实 验 报 告 实验名称:第五次上机实验 实验学时:4 姓名: 学号: 班级:电气 实验日期: 2017/4/27 教师批阅签字: 一、实验目的 l 掌握字符型数组、字符型指针和数值型数组的异同 。 l 掌握自定义函数的定义,声明和调用。 l 掌握函数参数的值传递和地址传递的区别。 l 掌握递归算法的意义。 l 明确变量的作用域和生存期的意义。
2、
二、实验内容
1.阅读程序
1)#include 3、eturn 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 4、math>
using namespace std;
int main()
{ int age ;
char name[11];
cin>>age;
cin.getline(name,11);
cout< 5、序:
#include 6、 )
{
char rstr[10 ]="abcdefgh", dstr[10];
char * p=rstr, *q=dstr;
strcpy(dstr,rstr);
cout<<"输出字符串rstr:"< 7、 )
{
char *rstr="abcdefgh", *dstr;
strcpy(dstr,rstr);
cout<<"输出字符串rstr:"< 8、原因是指针*rstr和*dstr未指向安全的位置。更改会使程序无法运行。
修改:
#include 9、位置即可。
2. 编程题
1)编写两个函数,分别求两个整数的最大公约数和最小公倍数,在主函数中调用这两个函数,计算两个数的最大公约数和最小公倍数并输出结果。
要求:
1) 程序原代码。(直接粘贴在此)
#include 10、cout<<"最小公倍数为"< 11、 if(a%i==0&&b%i==0)
m=i;
}
s=a*b/m;
return s;
}
2) 解决本题的算法思路描述
编写计算最小公倍数的函数
编写计算最大公约数的函数
在主函数中使用这两个函数
得出结果
3) 调试过程的记载(包括出现的错误,以及修改)
函数声明方式错误
4) 归纳本题应用的知识点或算法
计算最大公约数和最小公倍数的方法
函数的声明与使用
2)编写程序随机生成50个100-200之间的随机整数,找出其中的素数。要求判断素数的功能利用函数实现,在main函数中调用该函数输出所有的素数。
12、要求:
1) 程序原代码。(直接粘贴在此)
#include 13、 if(t==1)
i--;
}
cout<<"生成的50个随机数为:"< 14、ss (int b)
{
int a=1,n;
for (n=2;n 15、记载(包括出现的错误,以及修改)
编写求素数的函数时,i从0开始,导致循环无法实现。
4) 归纳本题应用的知识点或算法
For循环,break语句的使用
函数的调用
生成随机数函数的使用
if语句及数组
3)编写一个函数实现将一个十六进制整数转换为一个十进制整数。例如,输入”A2”转换为162。
提示:循环对读入的每个字符转换成对应的十进制数字,比如’1’的值为1,’A‘为10,’F’为15,将转换后得到的数字进行计算处理。
函数的原型可以声明为:
int funChange(char s[]); //函数的功能是将s数组存放的字符串转换为十进制数值返回,参数应采 16、用数组名传递方式,即形参数组与实参数组共用同一地址空间。
要求:
1) 程序原代码。(直接粘贴在此)
#include 17、se if(s[i]>='A'&&s[i]<='F')
b[i]=int(s[i])-55;
}
m=i;
for(i=0;i 18、
将该数的每一位分别转换为十进制数并用数组b[100]记录,
用一重循环对其进行求和即可
3) 调试过程的记载(包括出现的错误,以及修改?)
头文件的int funchange (char s[])括号中忘记加char s[];
4) 归纳本题应用的知识点或算法
数组的使用,if-else语句的使用,for循环的使用,函数的调用
4 )编写函数验证哥德巴赫猜想,任意一个充分大的偶数均可表示成两个素数之和。要求定义两个函数,一个函数判断一个整数是否是素数,另一个函数验证哥德巴赫猜想,即将一个偶数分解为两个素数,并返回这两个素数。利用函数的嵌套调用完成(即在验证哥德巴赫猜想的函数 19、中调用判断素数函数)。例如 8=3+5这样的显示信息在主函数中完成。
要求:
1) 程序原代码。(直接粘贴在此)
#include 20、 if(su(i)&&su(b-i))
{
k=1;
break;
}
}
if(k==1)
{
*c=i;
*d=b-i;
}
}
int main()
{
int b,c,d;
cout<<"请输入一个偶数"< 21、量和引用返回这两个素数
输出
3) 调试过程的记载(包括出现的错误,以及修改?)
在指针变量和引用的时候出现错误
4) 归纳本题应用的知识点或算法
函数的定义调用
函数的嵌套
循环语句
求素数的方法
5) 编写函数,求出任意一个一维数组元素中的最大值和最小值的下标。要求在主函数中输入数组元素的值,输出最大值和最小值。
提示:本题要求将一维数组的元素传入到函数进行处理,对于大量的数据的传递,最好的方式是使用数组名作为实际参数传递,在这种情况下,形参可以是指针也可以是数组,通过形参能直接对实参数组的数据进行处理。本题的问题是获取数组元素的最大值和最小值,在函数中有两个值需要 22、返回到主函数,因此不能用return语句,需使用指针或引用参数进行回传。
函数的原型可以声明为:
void funMaxMin(int a[], int n, int *max, int *min) //函数的功能获取数组元素的最大值和最小值下标。
要求:
1) 程序原代码。(直接粘贴在此)
#include 23、)
{
if(a[i]>a[*max])
*max=i;
}
for(j=0;j






