您好,欢迎访问三七文档
实验1在小范围内用C++增强C的功能1.实验目的快速掌握C++语言编程的方法,在小范围内增强C++的功能,规范编程,复习常用调式技巧。主要内容有:(1)输入流、输出流的使用;(2)new和delete运算符分配内存。(3)函数的调用及按引用传递参数;(4)重载函数的定义及调用(5)常用调式方法2.实验内容(1)编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?以清晰的形式输出所有结果。建议3重for循环改用双重for循环,提高效率!#includeiostreamusingnamespacestd;voidmain(){intsum;while(cinsum)//输入以分为单位{intone,two,five,count=0;for(five=0;five=sum/5;five++){for(two=0;two=(100-five*5)/2;two++){for(one=0;one=100-five*5-two*2;one++)if(one+two*2+five*5==sum){count++;cout换法count:1分one个、2分two个、5分five个endl;}}}}}(2)用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入m*n整型数组的数据,m和n值由用户输入。利用一个函数计算出所有元素之和,以及最大值和最小值。在主函数中打印出所有结果。方法1:#includeiostream#includeclimitsusingnamespacestd;intm,n,max,min,sum,**arr;voidprocess();voidmain(){while(cinmn){inti;max=INT_MIN,min=INT_MAX,sum=0;arr=newint*[m];for(i=0;im;i++)arr[i]=newint[n];process();cout所有元素之和:sum、最大值:max、最小值minendl;for(i=0;im;i++)delete[]arr[i];delete[]arr;}}voidprocess(){inti,j;for(i=0;im;i++){for(j=0;jn;j++){cinarr[i][j];sum+=arr[i][j];if(arr[i][j]max)max=arr[i][j];if(arr[i][j]min)min=arr[i][j];}}}方法2:#includeiostream#includeclimitsusingnamespacestd;intm,n,max,min,sum,*arr;voidprocess();voidmain(){while(cinmn){inti;max=INT_MIN,min=INT_MAX,sum=0;arr=newint[m*n];process();cout所有元素之和:sum、最大值:max、最小值minendl;delete[]arr;}}voidprocess(){inti,j;for(i=0;im*n;i++){cinarr[i];sum+=arr[i];if(arr[i]max)max=arr[i];if(arr[i]min)min=arr[i];}}(3)假设我们班有50名同学,每个同学都报出自己的生日,每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725*10-7。相重复的概率如此之大与我们主观想象不同。编写程序,输入同学的人数n,计算出其生日不重复的概率。然后在用仿真的方法,利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。#includeiostream#includeiomanipusingnamespacestd;voidmain(){intn,i;while(cinn){doublef,a=1,b=1;for(i=0;in;i++){a*=(365-i);b*=365;}f=a/b;coutfendl;}}利用随机数仿真:#includeiostream#includestdlib.h#includectimeusingnamespacestd;intrandom(inta,intb)//随机产生从a到b之间的随机数{returnrand()%(b-a+1)+a;}voidmain(){srand((unsigned)time(NULL));intn,m;//测试次数,样本容量while(cinnm){inti,j,p,q,sum=0;//sum统计n次试验中有生日相重的样本数量boolchong=false;int*arr;for(i=0;in;i++){arr=newint[m];chong=false;for(j=0;jm;j++)arr[j]=random(1,365);for(p=0;pm;p++){for(q=0;qm;q++){if(p==q)continue;if(arr[p]==arr[q])chong=true;}}if(chong)sum++;delete[]arr;}cout测试n次,每次m个样本.endl;cout有生日相重的概率为(double)(n-sum)/nendl;}}(4)定义重载函数sort,可以对下列数据进行排序,intiArr[10];//数组元素值为1~100间的随机数charcArr[8];//数组元素值为随机英文字符char*name[]={“Gates”,“Kongzi”,“Obama”,”Micky”};在主函数中测试函数,并输出排序后的结果。#includeiostreamusingnamespacestd;voidsort(int*iArr,intsize);voidsort(char*cArr,intsize);voidsort(char*name[],intsize);voidmain(){intn,*iArr,i;char*cArr,**name;cout输入的整数的个数:endl;cinn;iArr=newint[n];for(i=0;in;i++)ciniArr[i];sort(iArr,n);cout---------------排序后---------------endl;for(i=0;in;i++)coutiArr[i];coutendl;cout输入的字符的个数:endl;cinn;cArr=newchar[n];for(i=0;in;i++)cincArr[i];sort(cArr,n);cout---------------排序后---------------endl;for(i=0;in;i++)coutcArr[i];coutendl;cout输入的字符串的个数:endl;cinn;name=newchar*[n];for(i=0;in;i++)name[i]=newchar[100];for(i=0;in;i++)cinname[i];sort(name,n);cout---------------排序后---------------endl;for(i=0;in;i++)coutname[i]endl;}voidsort(int*iArr,intsize){inti,j,temp;for(i=0;isize-1;i++){for(j=i;jsize;j++){if(iArr[i]iArr[j]){temp=iArr[i];iArr[i]=iArr[j];iArr[j]=temp;}}}}voidsort(char*cArr,intsize){inti,j;chartemp;for(i=0;isize-1;i++){for(j=i;jsize;j++){if(cArr[i]cArr[j]){temp=cArr[i];cArr[i]=cArr[j];cArr[j]=temp;}}}}voidsort(char*name[],intsize){inti,j;char*temp;for(i=0;isize-1;i++){for(j=i;jsize;j++){if(strcmp(name[i],name[j])0){temp=name[i];name[i]=name[j];name[j]=temp;}}}}
本文标题:实验1参考答案
链接地址:https://www.777doc.com/doc-2530594 .html