燕山大学-面向对象程序设计实验 - 实验1 C++基础-实验报告

CSDN的各位友友们你们好,今天千泽为大家带来的是
燕山大学-面向对象程序设计实验 - 实验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;
}

问题一:输出结果是什么?

答: Before swap: i=5,j=10
After the first swap: i=5,j=10
After the second swap: i=10,j=5

问题二:①处函数调用不能实现两个数的交换,而②可以,原因是什么?

答:①处调用的函数只是交换了局部变量 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;
 
}
 
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;
 
 
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;  
 
}

在这里插入图片描述
感谢你的观看,祝你学习进步

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千泽.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值