C程序设计实践报告_第1页
C程序设计实践报告_第2页
C程序设计实践报告_第3页
C程序设计实践报告_第4页
C程序设计实践报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 实 践 报 告设计题目:程序设计(VC++)实践设计时间 2013-1-至2013-1-学院(系):计算机科学与工程学院2013年1月一. 实践任务选择题目,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)。对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。二.实验步骤及记录(题目,源程序代码及运行结果)与学号对应的题(必做题):基础题12题目:建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。具体要求如下:(1)私有数据成员charstr1[60]:存放被插入的字符串。charstr2[40] :存放待插入的字符串。charstr3[100] :存放插入后的字符串。(2)公有成员函数STRING(char*s1,char*s2) :构造函数,用s1voidprocess() :将str2 中的字符串插入到 str1

和s2初始化str1 和中,存放到str3 中。

str2

。voidprint() :输出插入后的字符串。(3)在主程序中定义 STRING类的对象test 对该类进行测试。源程序代码:#include<>#include<>classSTRING{charstr1[60];charstr2[40];charstr3[100];public:STRING(char*s1,char*s2){strcpy(str1,s1);strcpy(str2,s2);}voidprocess(){char*p1=str1,*p2=str2;for(inti=0;*p2;i=i+2){for(intk=strlen(str1);k>=i;k--){str1[k+1]=str1[k];}*p1=*p2;p1=p1+2;p2++;}}voidprint(){strcpy(str3,str1);cout<<str3<<endl;}};voidmain(){chars1[60]="ABCDEFG";chars2[40]="abcde";cout<<"原字符串:"<<s1<<""<<s2<<endl;cout<<"交叉插入后的字符串: ";STRINGtest(s1,s2);();();}运行结果:2-6为选做题,其中 2,3,4为基础题;5,6为提高题。基础题4题目:建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。具体要求如下:(1)私有数据成员int*array :一维整型数组。intn :数组中元素的个数。(2)公有成员函数MOVE(intb[],intm) :构造函数,初始化成员数据。voidexchange() :输出平均值,并将数组中的元素按要求重新放置。voidprint() :输出一维数组。~MOVE():析构函数。(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55} 对该类进行测试。源程序代码:#include<>classMOVE{int*array;intn;public:MOVE(intb[],intm){n=m;array=newint[m];for(inti=0;i<n;i++)array[i]=b[i];}voidexchange(){intb[10];for(intk=0;k<n;k++)b[k]=array[k];for(inti=0;i<n;i++)for(intj=i+1;j<n;j++)if(b[j]>=b[i]){inttemp=b[i];b[i]=b[j];b[j]=temp;}intmax=b[0],min=b[n-1];for(intp=0;p<n;p++){if(array[p]==max)array[p]=min;elseif(array[p]==min)array[p]=max;}}voidprint(){for(inti=0;i<n;i++)cout<<array[i]<<'\t';cout<<endl;}~MOVE(){delete[n]array;}};voidmain(){inta[10]={21,65,43,87,12,84,44,97,32,55};cout<<"原数组:"<<endl;for(inti=0;i<10;i++)cout<<a[i]<<'\t';cout<<endl;cout<<"交换最大值和最小值后的数组: "<<endl;MOVEa1(a,10);();();}运行结果:基础题16题目:定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。方阵的变换形式为:F=W*fT为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为1001110110001具体要求如下:(1)私有数据成员int(*a)[4] :a指向方阵数组。intw[4][4] :w为变换矩阵。intm :m表示方阵的行和列数。(2)公有成员函数CMatrix(inta[][4],intm) :用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求必须用循环实现。voidTransform() :根据上述变换算法,求出变换后的数组形式,存放在原始数组内。voidshow()l~CMatrix()

:在屏幕上显示数组元素。:释放动态分配的空间。(3)在主程序中定义数组int arr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}原始数组。定义一个 CMatrix 类对象test,用arr 初始化test,完成对该类的测试。

作为源程序代码:#include<>classCMatrix{int(*a)[4];intw[4][4];intm;public:CMatrix(inta[][4],intm){this->m=m;this->a=newint[this->m][4];for(inti=0;i<this->m;i++)for(intj=0;j<this->m;j++)this->a[i][j]=a[i][j];for(i=0;i<4;i++){for(intj=0;j<4;j++)if(i+j==3||i==j)w[i][j]=1;elsew[i][j]=0;}}voidTransform(){intb[4][4];for(inti=0;i<m;i++){for(intj=0;j<m;j++)b[i][j]=a[j][i];}for(intp=0;p<4;p++){for(intq=0;q<4;q++)a[p][q]=w[p][0]*b[0][q]+w[p][1]*b[1][q]+w[p][2]*b[2][q]+w[p][3]*b[3][q];}}voidshow(){for(inti=0;i<4;i++){for(intj=0;j<4;j++)cout<<a[i][j]<<'\t';cout<<endl;}}~CMatrix(){delete[m]a;}};voidmain(){intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};cout<<"原始方阵:"<<endl;for(inti=0;i<4;i++){for(intj=0;j<4;j++)cout<<arr[i][j]<<'\t';cout<<endl;}cout<<" 变换后的方阵:"<<endl;CMatrixtest(arr,4);();();}运行结果基础题17题目:17.定义一个类SIN,求sin(x)=x/1-x3/3!+x5/5!-x7/7!+....+(-1)n+1x(2n-1)/(2n-1)!具体要求如下:(1)私有成员数据。intx:输入公式中x的值,求sin(x)。intn:输入公式中n的值。(2)公有成员函数。SIN(intx,intn):构造函数,用于初始化x和n的值。intpower(intq):求q!的值。lintmi(intm,intn):求m的值。nlintfun() :用于求SIN(X)的值。lvoidshow() :输出求得的结果。(3)在主程序中定义对象test,对该类进行测试源程序代码:#include<>classSIN{private:intx;intn;public:SIN(intx,intn){this->x=x;this->n=n;}intpower(intq){ints=1;if(q<=1)return1;while(q>1){s=s*q;q--;}returns;}intmi(intm,intn){inttemp=1;for(inti=1;i<=n;i++){temp*=m;}returntemp;}intfun(){intresult=0;for(inti=0;i<=n;i++){result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);}returnresult;}voidshow(){cout<<"sin("<<x<<") 的结果为:"<<fun()<<endl;}};voidmain(){intx,n;cout<<"输入一个整数x"<<endl;cin>>x;cout<<"输入一个整数n"<<endl;cin>>n;SINtest(x,n);();}运行结果:5.提高题9题目:设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:(1)定义长方形类Rectangle保护的数据成员intl,w; 高题10题目:设计一个程序,查询2000年1月1日(星期六)后的某天是星期几,具体要求如下:(1)定义函数intleap(intyear) :判断某年year是否为润年。能够被400整除,或者能够被4整除但不能衩100整除的年份是润年。(2)定义函数intf(inty,intm,intd,int*m1,int*m2) :判断输入的日期是否合法,其中y、m、d分别表示年、月、日, m1表示非润年每月的天数, m2表示润年每月的天数。(3)定义类date,表示日期私有数据成员intyear,month,day;//

分别表示某年某月某日公有成员函数:date(inty,intm,intd) :构造函数,用形参分别初始化数据成员;intget_year() :访问私有成员year;intget_month() :访问私有成员month;intget_day() :访问私有成员day;voidshow() :以指定格式输出数据成员。(4)定义类week,判断某天是星期几私有数据成员dated1;// 日期类的对象,表示某日intm1[12];//存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31intm2[12];//存储润年每月的天数31,29,31,30,31,30,31,31,30,31,30,31intw;//表示用0表示星期天,1表示星期一,以此类推6表示星期六公有成员函数week(inty,intm,intd,int*p1,int*p2)

:构造函数,用

y,m,d

初始化日期,用p1,p2分别初始化m1,m2;intdays() :计算d1距2000年1月1日的时间间隔(天数);voidfun() :根据days()的计算结果判断d1是星期几(求以0~6

表示w

的值);voidprint()

:输出判断结果。(5)在主函数中对定义的类进行测试。从键盘输入一个日期,并检查输入数据的合法性,然后用输入的数据和表示每月天数的数组初始化week类的对象w,调用相关成员函数,输出判断结果。程序运行结果如下:请输入要查询的日期(年月日): 20099152009/9/15,是星期二。源程序代码:#include<>intleap(intyear){if(year%400==0||year%100!=0&&year%4==0)return1;elsereturn0;}intf(inty,intm,intd,int*m1,int*m2){if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)return0;elseif((m==4||m==6||m==9||m==11)&&d>30)return0;elsereturn1;while(leap(y))if(m==2&&(d==28||d>=30))return0;elsereturn1;while(!(leap(y)))if(m==2&&(d==29||d>=30))return0;elsereturn1;}classdate{intyear,month,day;public:date(inty,intm,intd){year=y;month=m;day=d;}intget_year(){returnyear;}intget_month(){returnmonth;}intget_day(){returnday;}voidshow(){cout<<year<<"/"<<month<<"/"<<day<<",";}};classweek{dated1;intm1[12];intm2[12];intw;public:week(inty,intm,intd,int*p1,int*p2):d1(y,m,d){for(inti=0;i<12;i++)m1[i]=p1[i];for(intj=0;j<12;j++)m2[i]=p2[i];w=0;}intdays(){inti,j,result=0;for(j=2000;j<();j++)result+=(leap(j)+365);for(i=1;i<();i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)result+=31;elseif(i==4||i==6||i==9||i==11)result+=30;elseif(i==2)result+=(28+leap(j));}result=result+()-1;returnresult;}voidfun(){switch(days()%7){case0:w=6;break;case1:w=0;break;case2:w=1;break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论