C++实验5

合集下载

C 实验五 多态程序设计

C  实验五 多态程序设计

C++实验五多态程序设计福建工程学院实验报告面向对象程序设计(C++)专业电子信息工程班级1303 座号姓名日期20XX-11-26实验五多态程序设计一、实验目的:理解运算符重载的概念和实质,掌握运算符重载函数的定义方法,掌握运算符重载为类的成员函数的方法。

掌握虚函数的定义方法及其在实现多态性中的应用,理解静态连编和动态链编的区别。

二、实验时间:20XX-11-26 三、实验地点:-- 四、实验内容:1.已知基类:class Base{public : virtual void iam {cout using namespace std; class Base { public: };class Base1 : public Base { public: };class Base2 : public Base { public: };int main {Base b; Base1 b1; void iam { }coutiam ; return 0;2. 编写程序,写一个Shape抽象类,该类有求表面积和体积两个纯虚函数;该类派生出圆柱体Cylinder,球体(Sphere),正方体(Cube),计算圆柱体,球体,正方体的表面积和体积。

要求用抽象类实现。

#include using namespace std; const float PI = ; class Shape { public:virtual double get_surface =0; virtual double get_volume =0; };class Cylinder : public Shape { public:Cylinder(double h,double r) : height(h),radius(r) { }double get_surface { }double get_volume { } private:double height,radius; };class Sphere : public Shape { public:Sphere(double r) : radius(r) { }double get_surface { }double get_volume { } private:return /*PI*radius*radius*radius; return 4*PI*radius*radius;cout using namespace std; const float PI = ; class Shape { public:virtual double get_surface =0; virtual double get_volume =0; };class Cylinder : public Shape { public:Cylinder(double h,double r) : height(h),radius(r) { }cout using namespace std; class Base { public: };class Base1 : public Base { public: };class Base2 : public Base { public: };int main {Base b; Base1 b1; void iam { }coutiam ; return 0;2. 编写程序,写一个Shape抽象类,该类有求表面积和体积两个纯虚函数;该类派生出圆柱体Cylinder,球体(Sphere),正方体(Cube),计算圆柱体,球体,正方体的表面积和体积。

c程序设计实验、辅导与习题解答实验五

c程序设计实验、辅导与习题解答实验五

实验五任务1:程序调试。

函数调用、函数定义及函数说明的情况。

(1)下列程序有错误吗?请思考函数定义在后,且调用前没有函数说明的情况。

答:有错误。

“f”找不到标识符。

修改后程序如下:(2)下列程序有问题吗?请思考函数定义在后,且调用前对函数进行说明的情况。

注意函数说明的形式。

答:会显示未定义y。

修改后程序如下:(3)下列程序有问题吗?请思考函数定义在后,且调用前对函数进行说明的情况。

答:没有问题。

(4)下列程序有问题吗?请思考:函数定义在调用前,是否一定需要函数说明?答:程序没有问题。

不一定需要函数说明。

(5)下列程序调用系统函数进行计算。

当程序运行时,如输入a>0,则计算a的b次方;如果输入a<0,则计算(-a)的b次方。

程序有多处错误,请改正。

修改后代码如下:任务2:程序调试与程序设计。

字符串系统是strlen、strcat、strcpy、strcmp在程序设计中的应用。

仿照下列程序,调用有关字符串的系统函数对字符串进行长度测试、连接、复制、比较。

(1)调试程序。

程序如下:运行结果如下:(2)重新定义str,其功能是字符串长度。

程序如下:运行结果如下:(3)程序功能是比较字符串的大小,请定义str。

程序如下:运行结果如下:(4)程序的功能是连接两个字符串。

程序如下:运行结果如下:任务3:程序设计。

默认参数的构造函数的设计。

程序如下:任务4:程序设计。

重载函数的设计。

设计一个函数。

调用add,可以完成整型、双精度及混合数的加法。

如果是字符串,则表示字符串的连接。

设计代码如下:任务5:程序设计。

重载构造函数的设计。

设计代码及运行结果如下:(2)仿照程序,把整型改成字符串并达到相同效果。

设计代码及运行结果如下:程序如下:任务7:程序调试与设计。

递归函数的应用。

(1)调试程序。

程序如下:(2)重新设计,功能是将十进制转化成八进制。

设计代码如下:(3)程序功能是把十进制转化为十六进制。

设计代码如下:。

C语言程序设计实验五

C语言程序设计实验五

1 C语言程序设计实验五——函数 【实验目的与要求】 1、 掌握C语言函数调用的规则及变量的作用域。 2、 理解参数传递的过程。 【实验一】 1、题目:写一个简单交互式猜数游戏。程序自动生成一个位于某范围里的随机数,要求用户猜这个数。用户输入一个数后,程序有三种应答:too big,too small,you win。 2、设计指导:用随机数生成器产生随机数。在程序开始时要求,人提供一个范围(例如 0 到 32767 之间的整数),而后进入游戏循环。每次用户猜出一个数后询问是否继续。这个程序的主要部分是一系列交互式的输入和输出。

第一步:考虑整个程序的工作流程。——main() 函数 从用户得到数的生成范围 ---------------------------------------int getrange(); do { 生成一个数m 交互式地要求用户猜数,直至用户猜到 ---------------int getnumber() } while(用户希望继续); -------------------------------------------int next(); 结束处理 第二步:各函数及问题解决。 ◆生成一个数m 的工作:可以直接调用标准库函数 rand。假设希望随机数的

范围为 0 到 m-1,那么可以采用如下语句得到所需的随机数: unknown = rand() % m; ◆判断用户希望继续的工作定义为函数: int next(); 将它定义为一个返回 0/1值的函数,用于控制程序大循环的继续或者结束。 ◆取得工作范围的工作分别定义为函数:int getrange(); 要求用户提供一个 2 到 32767的值,如果用户提供的值超出范围,应该要求重新输入。 考虑用一个常量限定用户出错的次数,函数里的读入循环的重复次数用这个数值控制,以免无穷无尽地在这里打转。对于每个输入,都应该检查其合法性:是不是数,是否位于合法范围之内?如果得到一个合适的数就返回它;如果有问题,就要求用户重新输入。当重复次数超过 ERRORNUM 时返回一个负数。 ◆读入猜测数的工作定义为函数: int getnumber(int limit); 取得的猜测值应该在给定范围内,否则也应提示用户重新输入。这里给用户几次重新输入的机会,如果超过一定次数仍然不对,函数就返回一个负值,通知调用处出现了异常情况,使调用函数的程序段可以处理这种情况。 3、C库函数指导 2

C语言实验五数组程序设计解答

C语言实验五数组程序设计解答

C语言实验五数组程序设计解答本次实验旨在让学生熟悉和掌握C语言中关于数组的使用方法,通过编写一些数组程序来加深对数组的理解和应用。

在本次实验中,我们将涵盖一些常见的数组操作,例如数组的声明、初始化、遍历、元素访问、排序等。

通过实际编程练习,学生们将更加深入地理解数组的基本概念和用法。

以下是本次实验的具体内容和解答:一、数组的声明和初始化1. 编写一个程序,声明一个整型数组arr,包含10个元素,然后初始化数组中的元素为1到10的数字。

解答:```c#include <stdio.h>int maiint arr[10];for (int i = 0; i < 10; i++)arr[i] = i + 1;}for (int i = 0; i < 10; i++)printf("%d ", arr[i]);}return 0;```二、数组的遍历和元素访问2. 编写一个程序,声明一个字符数组str,包含5个元素,然后输入5个字符,并遍历输出这5个字符。

解答:```c#include <stdio.h>int maichar str[5];printf("请输入5个字符:\n");for (int i = 0; i < 5; i++)scanf(" %c", &str[i]);}printf("输入的字符为:\n");for (int i = 0; i < 5; i++)printf("%c ", str[i]);}return 0;```三、数组的排序3. 编写一个程序,声明一个整型数组arr,包含5个元素,然后输入5个整数,并对这5个整数进行从小到大的排序输出。

解答:```c#include <stdio.h>int maiint arr[5];printf("请输入5个整数:\n");for (int i = 0; i < 5; i++)scanf("%d", &arr[i]);}//冒泡排序for (int i = 0; i < 5; i++)for (int j = 0; j < 5 - 1 - i; j++)if (arr[j] > arr[j + 1])int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}printf("排序后的数组为:\n");for (int i = 0; i < 5; i++)printf("%d ", arr[i]);}return 0;```通过以上实验内容,学生们将能够熟练掌握C语言中关于数组的基本操作,并能够灵活运用在实际的编程任务中。

C语言程序设计实验五 参考答案

C语言程序设计实验五  参考答案
5-2、以下程序的功能:输出3—1000之间的素数。选择合适的内容填入空白处,并调试运行程序。
答案:
#include<stdio.h>
void main()
{
int i,j,num=0;
for(i=3;i<=1000;i++)
{
for(j=2;j<=1000;j++)
if(i%2==0)
break;
5-4从键盘输入一个整数n,计算2n+1与++n之和。要求计算两数之和用函数实现。
答案:
#include<stdio.h>
void main()
{
int a;
int sum(int n);
printf("input n:\n");
scanf("%d",&a);
sum(a);
}
int sum(int n)
if(i%2!=0)
{
printf("%5d",i);
num++;
if(num%10==0)
printf("\n");
}
}
printf("\n");
}
*************************************************************************************************************实验三*******************************************
c语言程序设计实验五参考答案实验解答实验五参考答案编程语言c语言吧c语言答案

c语言 实验5 函数答案

c语言 实验5 函数答案

一、实验目的(1) 掌握C语言中定义函数的方法(2) 掌握通过“普通值传递”和“地址值传递”调用函数的方法。

(3) 掌握函数嵌套调用和递归调用的方法。

(4) 理解变量作用域和生存期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法。

二、实验内容步骤(按要求设计以下程序,并调试分析运行结果,此部分完成在实验报告上)1.编写函数fun,函数首部为void fun(int a[],int n),其功能是将数组a进行倒序,即a[0]和a[n-1]交换,a[1]和a[n-2]交换。

Main函数中定义数组a[10]={1,2,3,4,5,6,7,8,9,10},调用fun函数,然后将倒序后的数组a输出。

(文件名存为sy5-1.c)#include<stdio.h>#include<conio.h>main(){void fun(int a[],int n);int i,array[10]={1,2,3,4,5,6,7,8,9,10};clrscr();printf("before swap:\n");for(i=0;i<10;i++)printf("%d ",array[i]);printf("\n");fun(array,10);printf("after swap:\n");for(i=0;i<10;i++)printf("%d ",array[i]);}void fun(int a[],int n){int i,j,m,t;m=n/2;for(i=0,j=n-i-1;i<m;i++,j--){t=a[i];a[i]=a[j];a[j]=t;}2,编写函数fun,函数首部定义为void fun(int a[][4]),其功能是实现二维数组的转置。

C数学建模实验五

1.下面的程序是完成从键盘上输入若干行长度不一的字符串把其存到一个文件名为ttt.txt 的磁盘文件上去,再从该文件中输出这些数据到屏幕上, 将其中的小写字母转换成大写字母。

然而,该程序是一个不完整的程序,有一个错误需要改正以及两处需要填空,请将程序补充完整。

#include <stdio.h>#include<stdlib.h>main( ){int i,flag;char str[80],c;FILE *fp;if((fp=fopen("TTT","w"))==NULL){printf("can't create file\n");exit(0);}for(flag=1;flag;){printf("请输入字符串\n");gets(str);fprintf(fp,"%s\n",str);printf("是否继续输入?\n");if((c=getchar())=='N'|| (1) )flag=0;getchar();}fseek(fp,0,0);while(fscanf(fp,"%s",str)!=EOF){for(i=0;str[i]!='\0';i++)if((str[i]>='a')&&(str[i]<='z'))str[i]=(2)printf("%s\n",str);}fclose(fp);}2.编程题编写程序判断一个文本文件(data.txt)(这个文件大家可以自己先创建好)是否是前后对称.(所谓对称指:文件的第一个字符等于最后一个字符,第二个字符等于倒数第二个字符,依次类推)3.编程题:编写程序在主函数中从文件in.dat(这个文件大家可以自己先创建好)中读入10个不等长的字符串,编写函数对它们排序,然后在主函数中输出排好序的字符串,并将结果写入文件out.dat中。

C实验五

/*题一: 理解一:如果把负数当做结束标志 */ #include #define LEN 1000 void main() { inti=0,counter=0,score[LEN]; int data; float average=0,sum=0; printf("请输入若干个成绩:"); do { scanf("%d",&data); counter++; score[i]=data; if(score[i]<0) { score[i]=0; counter--; } sum=sum+score[i]; i++; } while(score[i-1]>0); average=sum/counter; printf("平均成绩为%.2f\n",average); printf("低于平均分学生的成绩为:\n"); for(i=0;i{ if(score[i]printf("%-3d",score[i]); } printf("\n"); } /*题一: 理解二:把负数当做结束标志,只算负数前面的成绩 */ #include #define LEN 1000 void main() { inti,len,score[LEN]; float average=0,sum=0; printf("请输入学生的人数:"); scanf("%d",&len); printf("请输入%d个成绩:",len); for(i=0;i{ scanf("%d",&score[i]); if(score[i]<0) { printf("有无效成绩,程序结束,请重新输入\n"); while(1);//如果一旦检测到负数就让它死掉从而无法往下执行 } sum=sum+score[i]; } average=sum/len; for(i=0;i{ if(score[i]printf("低于平均分学生的成绩为:%d\n",score[i]); } } /*题二:方法一*/ #include #define N 5 void main() { inti,j,data[N][N]; for(i=0;i{ data[i][0]=1;//第一列全部置一 data[i][i]=1;//对角线也置一 } for(i=2;i{ for(j=1;j{ data[i][j]=data[i-1][j-1]+data[i-1][j];//第i行的第j列等于 } } for(i=0;i{ for(j=0;j<=i;j++) { printf("%-3d",data[i][j]); } printf("\n"); } } /*题二:方法二*/ #include #define N 5 void main() { int data[N][N],i,j; for(i=0;i{ for(j=0;jdata[i][j]=0;//给初值 } for(i=0;i{ for(j=0;j<=i;j++) { if(j<1) { data[i][j]=1;//开头的第一个数为1 } else if(i==0) { break; } else data[i][j]=data[i-1][j-1]+data[i-1][j];//规律 } } for(i=0;i{ for(j=0;j<=i;j++) printf("%d ",data[i][j]); printf("\n"); } }

C语言实验5-7参考答案

实验五函数和预处理命令四、设计流程(算法描述)(请写出上机内容1的算法描述)利用循环将m乘n次五、程序清单m的值。

利用此函数编程序实现:从1.编写自定义函数long power(int m,int n),计算nm的值。

键盘输入两个整数m和n,计算出n#include<stdio.h>long power(int m,int n)//要返回的是long型{int i;long s;//因为是要返回的数,所以这里也定义为long型s=1;for(i=1;i<=n;i++){s *=m;}return s;}int main(void){int m,n;scanf("%d%d",&m,&n);printf("s=%ld\n",power ( m,n));return 0;}2、写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。

1.源程序如下:#include <stdio.h>int zdgys(int n1,int n2){int i;for(i=n2;i>=1;i--)if(n1%i==0&&n2%i==0){break;}return i;}int zxgbs(int n1,int n2){int i;for(i=n1;i<=n1*n2;i++)if(i%n1==0&&i%n2==0){break;}return i;}main(){int n1,n2,t;scanf("%d %d",&n1,&n2);if(n1<n2){t=n1;n1=n2;n2=t;}printf("zdgys=%d zxgbs=%d",zdgys(n1,n2),zxgbs(n1,n2)); }3、改错题正确程序如下:#include <stdio.h>double fact(int n);double multi(int n);main(){int i;double sum,item,eps;eps=1E-6;sum=1;item=1;for(i=1;item>=eps;i++){item=fact(i)/multi(2*i+1);sum=sum+item;}printf("PI=%0.5lf\n",sum*2);return 0;}double fact(int n){int i;double res=1;for(i=1;i<=n;i++)res=res*i;return res;}double multi(int n){int i;double res=1;for(i=3;i<=n;i=i+2)res=res*i;return res;}六、调试和测试结果1、输入:2 3输出:s=82、输入:n1=24 n2=16输出:zdgys=8 zxgbs=482.3、输出结果为:实验六数组四、设计流程(算法描述)(请写出上机内容1的算法描述)设置两个变量分别指示头和尾。

c实验题目(实验1-5及答案)

实验一顺序结构的程序设计1.输入x的值,根据下面的多项表达式求y的值:y=34x5+83+2x-4(1)编程,注意要有输入数据的提示语句。

#include ""main(){double x,y;printf("please input x:\n");scanf("%lf",&x);y=4*x*x*x*x*x+12*x*x*x**x*x*x+2*x-4;printf("y=%\n",y);}(2)x取下列值时,分别运行此程序2.任意输入一个三位整数,然后逆序输出。

如输入为123,则输出为321。

(1) 编程,注意要有输入数据的提示语句(2) 用八进制的形式输出各位数字的ASCII码。

(3) 输入取下列值时,分别运行此程序main(){int x,inversed,hundred,ten,indiv;printf("please input x:\n");scanf("%d",&x);hundred=x/100;ten=(x-hundred*100)/10;indiv=x%10; /*indiv=(x-hundred*100)-ten*10;*/inversed=indiv*100+ten*10+hundred;printf("the original number is %d\n",x);printf("the inversed number is %d\n",inversed);printf("the oct number is %0,%0,%0\n",indiv+'0',ten+'0',hundred+'0');}#include <>main(){int x,inversed,hundred,ten,indiv;printf("please input x:\n");scanf("%d",&x);indiv=x%10;ten=((x-indiv)/10)%10;hundred=(((x-indiv)/10-ten)/10)%10;inversed=indiv*100+ten*10+hundred;printf("the original number is %d\n",x);printf("the inversed number is %d\n",inversed);printf("the oct number is %0,%0,%0\n",indiv+'0',ten+'0',hundred+'0');}实验二选择结构的程序设计1.编程计算下面的分段函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C++面向对象程序设计》实验报告 实验序号:5 实验项目名称:模板与异常处理 学 号 姓 名 专业 实验地点 1#307 指导教师 实验时间 2013-5-30 一、实验目的及要求 (1)正确理解模板的概念; (2)掌握函数模板和类模板的声明和使用方法; (3)学习简单的异常处理方法; 二、实验设备(环境)及要求 Micorsoft Visual C++ 6.0 三、实验内容与步骤(题目、算法和结果描述) 1、调试下列程序,写出程序的输出结果并分析原因。 (1) #include using namespace std; template T max(T x,T y) { return x>y?x:y;} int max(int a,int b) { return a>b?a:b;} double max(double a,double b) { return a>b?a:b;} int main() { cout<<"max('3','7') is "<

return 0;

} 【运行结果截图】:

【运行结果分析】 上述代码定义了函数模版,当执行max('3','7')时,它就调用函数模版,生成具体的函数即模版函数,上述例子中生成的模版函数返回值类型为char类型。 (2) #include using namespace std; int max(int a,int b) { return a>b?a:b;} double max(double a,double b) { return a>b?a:b;} int main() { cout<<"max('3','7') is "

【运行结果截图】:

【运行结果分析】: 上述代码没有定义函数模版,又没有定义返回值类型为char的函数,所以执行max('3','7') 时,编译器自动比较他们的ASCII码,即调用函数int max(),最后输出的55是字符’7’的ASCII码。 2、编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。 【运行结果截图】: 3、编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。 【提示】:设计一个类模板。 Template Class Array{ … } 具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double类型的两个模板类,分别对整型数组和双精度数组完成所要求的操作

【运行结果截图】: 4、编写程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。 【运行结果截图】:

5、结合数据结构“线性表”的知识和课本例题6.8,采用C++面向对象程序设计实现“线性表”。

四、分析与讨论(记录实验过程中出现的主要问题和心得体会)

五、教师评语 签名: 日期: 成绩 附:程序源代码 1、 #include using namespace std; template T max(T x,T y) { return x>y?x:y;} int max(int a,int b) { return a>b?a:b;} double max(double a,double b) { return a>b?a:b;} int main() { cout<<"max('3','7') is "<

return 0; } 2、 #include using namespace std; template T getmaxmin(T *array,int size=0) { int i=0; T max=array[0]; T min=array[0]; for(i=0;i{ max=max>array[i]?max:array[i]; min=min>array[i]?array[i]:min; } cout<<"the max is: ">n; switch(n) { case 1: { int i,j=0; int x[9999]; cout<<"请输入数组长度: "; cin>>j; cout<<"请输入数组元素: "; for(i=0;icin>>x[i]; getmaxmin(x,j); break; } case 2: { int i,j=0; cout<<"请输入数组长度: "; cin>>j; double y[9999]; cout<<"请输入数组元素: "; for(i=0;icin>>y[i]; getmaxmin(y,j); break; } case 3: { int i,j=0; cout<<"请输入数组长度: "; cin>>j; char z[9999]; cout<<"请输入数组元素: "; for(i=0;icin>>z[i]; getmaxmin(z,j); break; } case 0: exit(0); default:cout<<"非法输入!!!"<} }while(1); return 0; }

3、 #include using namespace std; template class Array { public: Array(T *p,int k) { n=k; int i; for(i=0;ib[i]=p[i]; } void sort() { for(int t=0;ta[t]=b[t]; int i,j; T temp; for(i=0;ifor(j=0;jif(a[j]>a[j+1]) { temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } cout<<"从小到大排序后为: "; for(i=0;icout=0;i--) cout>i; cout<<"该元素为: "; cout<} void sum() { for(int t=0;ta[t]=b[t]; T s=0; for(int i=0;is+=a[i]; cout<<"该数组的和为: "<} private: T a[9999],b[9999]; int n; }; int main() { cout<<"\t\t#############################">x; switch(x) { case 1: { int y,a[9999];

相关文档
最新文档