C++程序设计基础实验-实验五 数组、指针与字符串

一、实验目的

  1. 学习使用数组处理相同类型的批量元素。
  2. 学习使用指针操作元素。
  3. 学习动态分配内存new和delete运算符。
  4. 学习用动态数组vector方式创建动态数组,学习使用指针5. 和引用传递参数。
  5. 学习string类的常用方法。

二、实验内容

  1. 创建两个包含5个整数元素一维数组a[5]、b[5],及一个包含10个元素的数组c,实现以下操作(30分):
    (1). 手动输入元素(数值范围在1-100之间)初始化两个数组中的元素。
    (2). 编写选择法排序函数order(int a[],int n)。将a、b两个数组元素按照升序排序,然后打印到屏幕。
    (3). 复制数组a,b元素依次填充数组c。

  2. 使用new运算符创建具有10个元素的一维数组,实现以下操作(20分):
    (1) 编写子函数bubbleSort(int arr[],int x)实现用冒泡排序算法将数组升序排序。
    (2) 统计在排序过程中元素有多少次交换。

  3. 创建点的对象数组,包含10个点,编写函数对数组元素排序(按照各点距离原点的远近排列),在主函数中输出排序后的点及其距离值(25分)。10个点的坐标分别为: (-1,-3),(-2,-4),(1,3),(7,8),(-2,5),(3,-4),(5,3),(1,7),(6,3),(4,4)

  4. 用vector创建字符串数组对象,长度为5(30分)。
    (1)手动输入以下5个英文句子,存入数组对象:
    Do one thing at a time, and do well.
    vAction speak louder than words.
    Never put off what you can do today until tomorrow.
    Like author, like book.
    Knowledge makes humble, ignorance makes proud.
    (2)编写函数,使得数组中的字符串按大小排序(按字符串比较的规则)。
    (3)输出排序后的句子,并显示其长度。

三、实验步骤及结果

  1. 创建两个包含5个整数元素一维数组a[5]、b[5],及一个包含10个元素的数组c,实现以下操作(30分):
    (1)手动输入元素(数值范围在1-100之间)初始化两个数组中的元素。
    (2)编写选择法排序函数order(int a[],int n)。将a、b两个数组元素按照升序排序,然后打印到屏幕。
    (3)复制数组a,b元素依次填充数组c。
#include<iostream>
using namespace std;
void oeder (int array[],int length){
	int some = 0;
    bool judge = false;//简单优化(如果排序本身正确,执行一次i循环)
    for (int i = 0; i <length-1 ; i++) {
        for (int j = 0; j <length-1-i; j++) {//一次j循环会把最大的放在最右边,所以可以减去i
            if(array[j]>array[j+1]){
                some=array[j];
                array[j]=array[j+1];
                array[j+1]=some;
                judge = true;
            }
        }
        if(judge==false)break;
    }   
	for (int i = 0;i <length;i++){
		cout<<array[i]<<"\t"; 
	}
	cout<<endl;
}
int main(){
	int a[5]={45,12,31,22,8},b[5]={23,11,73,45,55},c[10];
	oeder(a,5);
	oeder(b,5);
	for(int i=0;i<10;i++){
		if(i<5)
			c[i]=a[i];
		else
			c[i]=b[i-5];
	}
	for(int i=0;i<10;i++)
		cout<<c[i]<<"\t";
	return 0;
}

运行结果:
在这里插入图片描述

  1. 使用new运算符创建具有10个元素的一维数组,实现以下操作(20分):
    (1) 编写子函数bubbleSort(int arr[],int x)实现用冒泡排序算法将数组升序排序。
    (2) 统计在排序过程中元素有多少次交换。
#include<iostream>
using namespace std;
int func(int a[]){
	for(int i=0;i<10;i++){  
		int x;
		cin>>x;
		a[i]=x;
	}
} 
void bubbleSort(int arr[],int x){
	int c=0;
	for(int i=0;i<9;i++){
	for(int j=0;j<9-i;j++){
		if(arr[j]>arr[j+1]){
			c=c+1;
			int xx;
			xx=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=xx;
		}
	}
}
	cout<<"交换后的数组为:"<<endl; 
	for(int n=0;n<10;n++){
		cout<<arr[n]<<"  ";
	}
	cout<<"一共交换了"<<c<<"次。"<<endl; 
}
int main (){
	int *p=new int [10];
	cout<<"请输入p数组的值:"<<endl; 
	func(p);
	bubbleSort(p,10);
	delete []p;
	return 0;
} 

运行结果:
在这里插入图片描述

  1. 创建点的对象数组,包含10个点,编写函数对数组元素排序(按照各点距离原点的远近排列),在主函数中输出排序后的点及其距离值(25分)。10个点的坐标分别为: (-1,-3),(-2,-4),(1,3),(7,8),(-2,5),(3,-4),(5,3),(1,7),(6,3),(4,4)
#include<iostream>
using namespace std;
#include<cmath>
class point {
public:
	double s;
	point() {
	};
	point(int a, int b) {
		x = a;
		y = b;
	}
	double lenth() {
		s = sqrt(x * x + y * y);
		return s;
	}
	void show() { 
		cout<< "其距离为:" << s <<"\t";
		cout<< "坐标为:" << "(" << x << "," << y << ")" << " " << endl;
	}
private:
	int x,y;
};
void px(point(&p)[10]) {
	point xx;
	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9 - i; j++) {
			if (p[j].s > p[j + 1].s) {
				xx = p[j + 1];
				p[j + 1] = p[j];
				p[j] = xx;
			}
		}
	}
}
int main() {
	point p[10] = { point(-1,-3),point(-2,-4),point(1,3),point(7,8),point(-2,5),point(3,-4),point(5,3),point(1,7),point(6,3),point(4,4) };
	for (int i = 0; i < 10; i++) {
		p[i].lenth();
	}
	px(p);
	for (int i = 0; i < 10; i++) {
		p[i].show();
	}
	return 0;
}

运行结果
在这里插入图片描述

  1. 用vector创建字符串数组对象,长度为5(30分)。
    (1)手动输入以下5个英文句子,存入数组对象:
    Do one thing at a time, and do well.
    vAction speak louder than words.
    Never put off what you can do today until tomorrow.
    Like author, like book.
    Knowledge makes humble, ignorance makes proud.
    (2)编写函数,使得数组中的字符串按大小排序(按字符串比较的规则)。
    (3)输出排序后的句子,并显示其长度。
#include <iostream>
using namespace std;
#include<string>
#include<vector>
void px(vector<string>& a) {
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4 - i; j++) {
			if (a[j] > a[j + 1]) {
				string xx;
				xx = a[j];
				a[j] = a[j + 1];
				a[j + 1] = xx;
			}
		}
	}
}
int main(){
	cout<<"请手动输入5个英文句子:"<<endl;
	vector <string> a(5);
	for (int i = 0; i < 5; i++) {
		getline(cin, a[i]);
	}
	px(a);
	cout << "冒泡排序比较排序,显示长度为:" << endl;
	for (int i = 0; i < 5; i++) {
		cout << a[i] << " " << a[i].size() << endl;
	}
	return 0;
}

运行结果:
在这里插入图片描述

四、实验小结

问题与解决办法:

编译出错 :[Error] ‘Car’ does not name a type

解决办法:当一个类用到下一个类时,需要提前声明下一个类。如在表头声明类 class Car;

编译出错,提示“[Error] expected before return”

解决办法:语句结束时的英文下的分号“;”输成了中文下的分号。改正后,错误消失。

心得体会:感谢老师与助教的细心讲解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子书棋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值