usingnamespacestd;
voidmain()
{
inti=1;
intp=&i;
cout<
i=i+1;
cout<
}
4.6:#include
#include
usingnamespacestd;
intmain()
{
stringa;
inti,j;
chart;
cout<<"pleaseenterastring:";
cin>>a;
j=a.size();
for(i=0;i
{
t=a[i];
a[i]=a[j-i-1];
a[j-i-1]=t;
}
cout<
return0;
}
实验5函数与重载
一、实验目的
掌握函数的声明、调用、实参与形参的值传递关系、返回值;
理解函数重载,掌握函数重载的方法;
理解递归的概念,掌握递归函数的定义与使用;
实验内容及步骤
1.求三个数中最大的数(分别考虑整数、双精度数、长整数的情况)。
2.定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。
声明函数judge;
实现函数judge,根据输入的三个边长判断是否可以构成一个三角形;
在main中调用judge;
在main中根据judge的返回值判断是否是三角形,如果构成三角形则判断是否为直角三角形,并给出结论。
3.用重载函数实现两个整数和三个整数的排序,按照从小到大的顺序将排序结果输出。
声明函数sort为重载函数,并根据参数个数的不同分别进行定义;
在main中用cin分别输入两个整数和三个整数;
根据参数个数的不同,调用不同的函数,从而实现重载。
4.用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
5.在主函数中输入一个字符串str,调用函数统计字符串中出现的字母,(含大小写)、数字、空格以及其他字符出现的次数,在主函数中输出统计结果。要求写两个版本的程序:(1)用指针作参数带回统计结果。(2)用引用作参数带回统计结果。
调试步骤和运行过程:
一:在功能函数中返回经过排序后的最大数,即三个数中的最后一个,其值返回主函数;
二:有数学知识知三角形的三边关系,在judge函数中用来判断能否构成三角形,返回的flag值若为真用来作为分辨是否为直角三角形,若假,则输出不能构成三角形。
三:使用交换两个数的方法来达到排序,在功能函数sort的类型定为void型则编译不能通过,改为int型后,能够输出,但是出现返回值0.
四:用fun函数专门用来将数字转化成字符,因为要一个一个的转化,所以要用到递归调用,递归调用的条件是此数字是否为个位数字,若是,直接转化为字符,不是的话,就把它除以10,再调用,直到为个位数。
五(一):刚开始时,没有“gets(s);”这句,在运行时没有输入,就直接出现了奇怪的结果”inputastring:letter:0letter:0digit:0space:0other:41”,还有实在for语句中的循环控制,原来写的是:“P!=’\n’,编译时总是出错,后来,经过改正,达到了实验要求。
五(二):引用与指针的关系是什么样子的,起初在上个实验的上略微改动一下,可是根本就运行不了,经过查阅资料书,得知声明引用时必须对齐初始化,而且两者的数据类型必须一致。知道了这些,还是忽略了对变量i赋初值0,忽略的结果是虽然输入了字符串,但是停止了运行。经改正后,可以达到实验要求。
实验结果:
一:915
9.62.31.1
654654632145654321
Intmax=9
Doublemax=9.6
Longmax=654654
二:pleaseinputabc
51213
Zhijiaosanjiaoxing
三:pleaseenter3numbers:
915
159
0
Pleaseenter2numbers:
42
24
0
四:inputnumbers:
456
Outputchar:
456
五(一):inputastring:todayis2013/05/07
Letter:7
Digit:8
Space:2
Other:2
五(二):inputastring:todayis2013/05/07
Letter:7
Digit:8
Space:2
Other:2
疑难小结:
一:在求数的大小时,原来编写的好像只能对后两个数进行比较大小,
二:在一个程序中有可能不止一个函数,多的函数的放置位置也重要,不然编译就不能通过,可是怎样才能够只通过改变函数的放置位置,就能让编译通过;
三:怎样消除输出结果的第四行与第八行的0,是输出的界面更美观;
四:递归调用函数不了解是怎么调用它本身,又是何时结束调用。调用的流程不清楚。
五(一):关于字符串的处理,而且用指针处理字符串,难度较大。输入的字符串可以像数组一样处理?可很多例题没有按照数组中的按数组下标处理。
五(二):引用既然相当于一个隐形指针,但是又与指针有区别,指针可以一针么多用,而引用只针对一个,在功能上它相当给变量起了一个别名而已。
主要算法和程序清单:
一:#include
usingnamespacestd;
intmax(inta,intb,intc)
{
intmax;
if(a>b){max=b;b=a;a=max;}
if(a>c){max=c;c=a;a=max;}
if(b>c){max=c;c=b;b=max;}
returnc;
}
doublemax(floata,doubleb,doublec)
{
doublemax;
if(a>b){max=b;b=a;a=max;}
if(a>c){max=c;c=a;a=max;}
if(b>c){max=c;c=b;b=max;}
returnc;
}
longmax(longa,longb,longc)
{
longmax;
if(a>b){max=b;b=a;a=max;}
if(a>c){max=c;c=a;a=max;}
if(b>c){max=c;c=b;b=max;}
returnc;
}
voidmain()
{
intai,bi,ci,i;
cin>>ai>>bi>>ci;
i=max(ai,bi,ci);
doublead,bd,cd,d;
cin>>ad>>bd>>cd;
d=max(ad,bd,cd);
longal,bl,cl,l;
cin>>al>>bl>>cl;
l=max(al,bl,cl);
cout<<"intmax="<
cout<<"doublemax="<
cout<<"longmax="<
}
二:
#include
usingnamespacestd;
intjudge(intx,inty,intz)
{
intflag;
if((x+y>z)&&(x+z>y)&&(y+z>x))
flag=1;
else
flag=0;
returnflag;
}
voidmain()
{
intjudge(intx,inty,intz);
floata,b,c,cosA,cosB,cosC;
intflag;
cout<<"pleaseinputabc"<
cin>>a>>b>>c;
flag=judge(a,b,c);
cosA=(bb+cc-aa)/(2bc);
cosB=(aa+cc-bb)/(2ac);
cosC=(aa+bb-cc)/(2ab);
if(flag==1)
{
if(cosA==0||cosB==0||cosC==0)
cout<<"zhijiaosanjiaoxing"<
Else cout<<"feizhijiaosanjaioxing"<
}
else
cout<<"bunenggouchengsanjiaoxing"<
}
三:#include
usingnamespacestd;
intsort(intm1,intm2,intm3)
{
intt;
if(m1>m2)
{t=m1;m1=m2;m2=t;}
if(m1>m3)
{t=m1;m1=m3;m3=t;}
if(m2>m3)
{t=m2;m2=m3;m3=t;}
cout<
return0;
}
intsort(intn1,intn2)
{
intp;
if(n1>n2)
{p=n1;n1=n2;n2=p;}
cout<
return0;
}
intmain()
{
inta,b,c;
intx,y;
cout<<"pleaseenter3numbers:"<
cin>>a>>b>>c;
cout<
cout<<"pleaseenter2numbers:"<
cin>>x>>y;
cout<
return0;
}
四:
#include
usingnamespacestd;
intmain()
{
voidfun(intn);
intnumbers;
cout<<"inputnumbers:"<
cin>>numbers;
cout<<"outputchar:"<
fun(numbers);
cout<
return0;
}
voidfun(intn)
{
inti;
charc;
if((i=n/10)!=0)
fun(i);
c=n%10+''0'';
cout<<""<
}
五(一):#include
#include
usingnamespacestd;
intmain()
{
intletter=0,digit=0,space=0,other=0;
chars[37];
charp;
cout<<"inputastring:";
gets(s);
for(p=s;p!=''\0'';p++)
if(''a''<=p&&p<=''z'')
++letter;
elseif(p>=''0''&&p<=''9'')
++digit;
elseif(p=='''')
++space;
else++other;
cout<<"letter:"<
cout<<"digit:"<
cout<<"space:"<
cout<<"other:"<
return0;
}
五(二):#include
#include
usingnamespacestd;
intmain()
{
intletter=0,digit=0,space=0,other=0,i=0;
int&le=letter;
int&di=digit;
int&sp=space;
int&ot=other;
chars[37];
cout<<"inputastring:";
gets(s);
for(s[0];s[i]!=''\0'';i++)
if(''a''<=s[i]&&s[i]<=''z'')
++letter;
elseif(s[i]>=''0''&&s[i]<=''9'')
++digit;
elseif(s[i]=='''')
++space;
else++other;
cout<<"letter:"<
cout<<"digit:"<
cout<<"space:"<
cout<<"other:"<
return0;
}
实验6类与对象(一)
一、实验目的
掌握类的声明和使用.
掌握对象的声明
掌握具有不同访问属性的成员的访问方式
二、实验内容及步骤
声明一个Circle类,有
数据成员Radius(半径)
成员函数GetValue()用来给半径赋值
成员函数GetArea()计算圆的面积
在主函数中创建一个Circle类的对象进行测试,显示出面积。
声明一个tree类,有
数据成员ages(树龄)
成员函数grow(intyears)对ages加上years
成员函数age()显示对象的数据成员ages的值
构造函数tree(intn=0)进行初始化
在主函数中创建一个tree类的对象进行测试(创建一个树龄为18的对象,调用age()显示树龄,之后调用grow(4),生长4年,再显示树龄)。
3.改正以下程序中的错误,并分析错误原因。提示:该程序中point类的构造函数定义不正确,在main()中对数据成员的访问不正确。要求修改程序后,在主函数中创建一个对象并初始化为坐标(5,5),然后输出这个点的X,Y坐标。
#include
usingnamespacestd;
classpoint
{intx1,x2;
public:
point(intx,inty);
//…
};
voidmain()
{pointdata(5,5);
cout<
cout<
}