CSDN的各位uu们你们好,今天千泽燕山大学-面向对象程序设计实验 - 实验1 C++基础 相关内容,
接下来让我们一起进入c++的神奇小世界吧,相信看完你也能写出自己的实验报告!
实验一 C++基础
1.1 实验目的
1.了解并熟悉开发环境,学会调试程序;
2.熟悉C++中简单的标准输入输出函数的使用方法;
3.理解const修饰符的作用并学会应用;
4.理解内联函数的优缺点并学会其使用场合;
5.理解并学会函数重载;
6.理解并熟练掌握使用new和delete来分配内存;
7.理解并熟练掌握引用的使用方法。
1.2 实验内容
1.2.1 程序阅读
1.理解下面的程序并运行,然后回答问题。
#include <iostream.h>
int max_def(int x, int y)
{
return (x>y?x:y);
}
int max_def(int x, int y, int z)
{
int temp = 0;
return (temp=(x>y?x:y))>z?temp:z;
}
double max_def(double x, double y)
{
return (x>y?x:y);
}
int main()
{
int x1 = 0;
int x2 = 0;
double d1 = 0.0;
double d2 = 0.0;
x1 = max_def(5,6);
x2 = max_def(2,3,4);
d1 = max_def(2.1,5.6);
d2 = max_def(12.3,3.4,7.8);-----------------------------------------------------①
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"d1="<<d1<<endl;
cout<<"d2="<<d2<<endl;--------------------------------------------------------②
return 1;
}
问题一:上述程序的输出结果是什么?
问题二:①处调用的是哪个函数?
int max_def(int x, int y, int z)
{
int temp = 0;
return (temp=(x>y?x:y))>z?temp:z;
}
问题三:②处的输出结果为什么是d2=12,而不是d2=12.3?
答:d2的值为函数int max_def(int x, int y, int z)得出的,返回值为int型,故取整,丢失小数点后内容。
2.理解下面的程序并运行,然后回答问题。
#include <iostream.h>
int main()
{
int *p1 = new int; -----------------------------------------------------①
int *p2 = new int(0); -----------------------------------------------------②
char *p3 = new char[10]; -----------------------------------------------------③
return 1;
}
问题一:①、②、③处动态申请内存分别代表什么意思?
答:①处为给p1所在地址指向一个int型的内存空间,但不进行初始化。②处为给p2所在地址指向一个int型的内存空间,且初始化值为0。③处为给p3所在地址开始指向64个连续的char型内存空间,不进行初始化。
问题二:该程序存在什么不合理的地方?。
答:程序结束时没有将分配的空间释放,应该用delete函数释放内存
3.理解下面的程序并运行,然后回答问题。
#include <iostream.h>
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int i = 5;
int j = 10;
cout<<"Before swap: i="<<i<<",j="<<j<<endl;
swap(i,j); -----------------------------------------------------①
cout<<"After the first swap: i="<<i<<",j="<<j<<endl;
swap(&i,&j); -----------------------------------------------------②
cout<<"After the second swap: i="<<i<<",j="<<j<<endl;
return 1;
}
问题一:输出结果是什么?
问题二:①处函数调用不能实现两个数的交换,而②可以,原因是什么?
答:①处调用的函数只是交换了局部变量 a和b,并没有改变i和j的值;②处调用的函数使用了引用形参,i和j的值随着此处调用的函数中a和b的对换而对换
问题三:②处调用的是哪个函数?
答:
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
1.2.2 程序设计
1.定义两个重名函数,分别求出两点间平面距离和空间距离。
#include<iostream>
#include<cmath>
using namespace std;
int dis(int x1,int y1,int x2,int y2){
int ans=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return ans;
}
double dis(double x1,double y1,double x2,double y2){
double ans=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return ans;
}
int main(){
cout<<"请输入两个点的坐标,以空格分割"<<endl;
double x1,y1,x2=0,y2=0;
cin>>x1>>y1>>x2>>y2;
cout<<"整型数距离:"<<dis(int(x1),int(y1),int(x2),int(y2))<<endl;
cout<<"双精度距离:"<<dis(x1,y1,x2,y2)<<endl;
return 0;
}
运行结果:
2.设计一个函数:exch(),当调用exch (a,b,c)时,将a赋值给b,b赋值给c,c赋值给a,要求采用引用的方式来实现。
#include<iostream>
#include<cmath>
using namespace std;
void exchange(float &x,float &y,float &z){
float tmp=x;
x=z;
z=y;
y=tmp;
}
int main(){
cout<<"请输入三个数,以空格分割:";
float a,b,c;
cin>>a>>b>>c;
cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
cout<<"调用exchange函数后:"<<endl;
exchange(a,b,c);
cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
return 0;
}
运行结果:
1.3 思考题
1.自己设计一个程序,测试指向常量的指针,常指针,指向常量的常指针之间的区间。
#include<iostream>
using namespace std;
int main(){
int x=1;
int y=2;
int * const p1=&x;//指针本身是常量,不可变
*p1=1;//指向内容可变
cout<<*p1<<endl;
const int * p2;//指针所指向的内容是常量,不可变
p2=&x;//指针本身可变
int const * p3;//指针所指向的内容是常量,不可变
p3=&y;//指针本身可变
cout<<*p2<<" "<<*p3<<endl;
const int * const p4=&x;//指针本身和指向的内容两者都不可变
cout<<*p4<<endl;
return 0;
}
2.编写一个函数,实现两个字符串变量的交换。
`#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
void swap(string &s1,string &s2){
string tmp;
tmp=s1;
s1=s2;
s2=tmp;
}
int main(){
cout<<"请输入两个字符串,以空格分割:"<<endl;
string s1,s2;
cin>>s1>>s2;
cout<<"交换后变量为:"<<endl;
swap(s1,s2);
cout<<s1<<" "<<s2<<endl;
return 0;
}