C++之数组、指针及引用(练手题)

下面是最近学C++到数组等时练手的两个题

1. 把有10个整数元素的数组用冒泡排序法按由小到大升序排列。

2. 二维数组:M个同学N门课成绩处理,字符数组存放姓名。

对学生信息实现简单的输入,查找,排序,输出操作

(PS:我排序的功能还有BUG......因为我太了,后期能想起来且有空的话会将改的功能实现!!)

  • 冒泡排序
#include<iostream>
#include<string>
using namespace std;

int arr[10] = {9,2,3,4,1,5,7,6,10,8};

void BubbleSort(int a[])
{
	int i = 0;
	int j = 0;
	int length = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < length-1; i++)
	{
		bool flag;
		for (j = 0; j < i+1; j++)
		{
			if (a[j] > a[j+1])
			{
				int tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
				flag = false;
			}
		}
		if (flag)
		{
			break;
		}
		//加入flag,来判断数组是否需要排序,但加入flag后的输出,会出现错误
	}
	for (i = 0; i < length; i++)
	{
		cout << a[i] << endl;
	}
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	BubbleSort(arr);
	system("pause");
	return 0;
}
  • 学生信息管理

#include<iostream>
#include<string>
using namespace std;

const int M = 2;
const int N = 3;
char name[M][20] = { "\0" };
int score[M][N] = { 0 };

class Student
{
public:
	void Stu_Score_Input();      //输入
	void Stu_Score_Output();     //输出
	void Stu_Score_Search();     //搜索
	void Stu_Score_Sort();		 //排序
public:
	char name[M][20];
	int score[M][N];
};

void Student::Stu_Score_Input()
{
	for (int i = 0; i < M;	i++) {
		cout << "输入学生姓名" << endl;
		cin>>name[i];
		cout << "分别输入" <<N<<"门课程的成绩" << endl;
		for (int j = 0; j < N; j++)
		{
			cin >> score[i][j];
		}
	}	
}

void Student::Stu_Score_Output()
{
	cout << "\t\t" << "姓名" << "\t"<<"高数"<<"\t"<<"政治"<<"\t"<<"英语"<<endl;

	for (int i = 0; i < M; i++)
	{
		cout <<"\t\t"<<name[i]<<"\t";
		for (int j = 0; j < N; j++)
		{
			cout << score[i][j]<<"\t";
		}
		cout << "\n" << endl;
	}
}

void Student::Stu_Score_Search()      
{
	char Find_name[20] = {0};
	cout << "输入你要查询的学生姓名:" << endl;
	cin >> Find_name;
	for (int i = 0; i < M; i++)
	{
		if (strcmp(Find_name, name[i]) == 0)     
		{
			cout << "查询结果:" << endl;
			cout << "\t\t" << "姓名"<<"\t"<<"高数" << "\t" << "政治" << "\t" << "英语" << endl;
			for (int j = 0; j < N; j++)
			{
				if (j == 0)
				{
					cout << "\t\t" << name[i] <<"\t"<<score[i][j]<< "\t";
				}
				else {
					cout << score[i][j] << "\t";
				}
			}
			cout << "\n" << endl;
			break;
		}
		if(i==(M-1))
		cout << "查询无果" <<"\t"<< endl;
	}
	
}
//出现问题一:判断字符串是否相等出现错误,strcmp函数使用不熟练
//问题二:查询时输出结果,只能查到第一个人的信息,除此以外的人即使姓名正确也显示查询不到,
//原因:判断出现错误,修改无果条件

void Student::Stu_Score_Sort()      //有BUG,如朋友解决后希望能给予一些指点,感激不尽
{
	int n = 0;
	cout << "请输入需要排名的成绩(高数->1,政治->2,英语->3):" << endl;
	cin >> n;
	//冒泡排序排序
	if (n == 1 || n == 2 || n == 3)
	{
		cout << "测试3" << endl;
		for (int i = 0; i < M - 1; i++)
		{
			cout << "测试1" << endl;
			bool flag;
			for (int j = 0; j < i + 1; j++)
			{
				if (score[i][n] > score[j][n])
				{
					swap(score[i][n], score[j][n]);
					swap(name[i], name[j]);
					flag = false;
					cout << "测试4" << endl;
				}
				cout << "测试2" << endl;
			}
			if (flag)
			{
				cout << "测试5" << endl;
				break;
			}
		}
		cout << "测试6" << endl;

		//打印排序后的
		for (int i = 0; i < M; i++)
		{
			cout << "\t\t" << name[i] << "\t";
			cout << score[i][n] << "\t";
		}
		cout << "\n" << endl;
	}
	else
		cout << "error" << endl;
}


int main()
{

	Student stu;

	//cout << "测试" << endl;

	stu.Stu_Score_Input();
	stu.Stu_Score_Output();
	stu.Stu_Score_Search();
	stu.Stu_Score_Sort();      //这个排序功能实现上有BUG
	stu.Stu_Score_Output();

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40846862/article/details/89053410
今日推荐