下面是最近学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;
}