1.三数论大小(使用引用)
题目描述:
输入三个整数,然后按照从大到小的顺序输出数值。
要求:定义一个函数,无返回值,函数参数是三个整数参数的引用,例如int &a, int &b, int &c。在函数内对三个参数进行排序。主函数调用这个函数进行排序。
要求:不能直接对三个整数进行排序,必须通过函数而且是引用的方法。
要求:输出必须在主函数进行。
输入:
第一行输入t表示有t个测试实例
第二行起,每行输入三个整数
输入t行
输出:
每行按照从大到小的顺序输出每个实例,三个整数之间用单个空格隔开
输入样例:
3
2 4 6
88 99 77
111 333 222
输出样例:
6 4 2
99 88 77
333 222 111
结果代码:
#include <iostream>
using namespace std;
void swap(int& x, int& y);
int main()
{
int t, i, a, b, c;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> a >> b >> c;
if (a < b)
swap(a, b);
if (a < c)
swap(a, c);
if (b < c)
swap(b, c);
cout << a << " " << b << " " << c << endl;
}
return 0;
}
void swap(int& x, int& y)
{
int temp;
temp = x;
x = y;
y = temp;
}
2.求最大值最小值(使用引用)
题目描述:
编写函数void find(int *num,int n,int &minIndex,int &maxIndex),求数组num(元素为num[0],num[1],...,num[n-1])中取最小值、最大值的元素下标minIndex,maxIndex(若有相同最值,取第一个出现的下标。)
输入n,动态分配n个整数空间,输入n个整数,调用该函数求数组的最小值、最大值下标。
改变函数find功能不计分。
要求:在main函数中按样例格式输出结果,不能直接在find函数中输出。
输入:
测试次数
每组测试数据一行:数据个数n,后跟n个整数
输出:
每组测试数据输出两行,分别是最小值、最大值及其下标。具体格式见样例。多组测试数据之间以空行分隔。
输入案例:
2
5 10 20 40 -100 40
10 23 12 -32 4 6 230 100 90 -120 15
输出案例:
min=-100 minindex=3
max=40 maxindex=2
min=-120 minindex=8
max=230 maxindex=5
结果代码:
#include <iostream>
using namespace std;
void find(int* num, int n, int& minIndex, int& maxIndex);
int main()
{
int k, t, n,i;
cin >> t;
for (k = 0; k < t; k++)
{
cin >> n;
int* p = new int[n];
for (i = 0; i < n; i++)
cin >> p[i];
int max = 0;
int min = 0;
find(p, n, min, max);
cout << "min=" << p[min] << " " << "minindex=" << min << endl;
cout << "max=" << p[max] << " " << "maxindex=" << max << endl;
delete[] p;
}
return 0;
}
void find(int* num, int n, int& minIndex, int& maxIndex)
{
int i;
for (i = 0; i < n; i++)
{
if (num[minIndex] > num[i])
{
num[minIndex] = num[i];
minIndex = i;
}
if (num[maxIndex] < num[i])
{
num[maxIndex] = num[i];
maxIndex = i;
}
}
}
3.职工信息(使用结构体)
题目描述:
编写程序,定义一个职工信息结构包括职工姓名、工作年限、工资总额。定义一个存放职工信息的结构数组
程序实现初始化5名职工的信息,并对工作年限大于等于30年的职工每人加100元工资,分别输出工资变化之前和之后的所有职工的信息。
输入:
输入5个员工的职工姓名、工作年限、工资总额,姓名的最大长度不超过20
输出:
输出两部分,第一部分输出工资变化之前所有职工的信息,第二部分输出工资变化之后的所有职工的信息
输入案例:
zhang1 5 1000
zhang2 10 2000
zhang3 20 3000
zhang4 40 4000
zhang5 50 5000
输出案例:
原始工资
姓名 年限 工资
zhang1 5 1000
zhang2 10 2000
zhang3 20 3000
zhang4 40 4000
zhang5 50 5000
加薪后工资
姓名 年限 工资
zhang1 5 1000
zhang2 10 2000
zhang3 20 3000
zhang4 40 4100
zhang5 50 5100
结果代码:
#include <iostream>
using namespace std;
struct message
{
char name[20];
int year;
int money;
};
int main()
{
int k, i;
message person[5];
for (i = 0; i < 5; i++)
{
cin >> person[i].name >> person[i].year >> person[i].money;
}
cout << "原始工资" << endl;
cout << "姓名" << " " << "年限" << " " << "工资" << endl;
for (i = 0; i < 5; i++)
{
cout << person[i].name << " " << person[i].year << " " << person[i].money << endl;
}
cout << "加薪后工资" << endl;
for (i = 0; i < 5; i++)
{
if (person[i].year >= 30)
person[i].money += 100;
cout << person[i].name << " " << person[i].year << " " << person[i].money << endl;
}
return 0;
}
4.谁是老二(使用结构体)
题目描述:
定义一个结构体,包含年月日,表示一个学生的出生日期。然后在一群学生的出生日期中找出谁的出生日期排行第二
要求:出生日期的存储必须使用结构体,不能使用其他类型的数据结构。
要求程序全过程对出生日期的输入、访问、输出都必须使用结构。
输入:
第一行输入t表示有t个出生日期
每行输入三个整数,分别表示年、月、日
依次输入t个实例
输出:
输出排行第二老的出生日期,按照年-月-日的格式输出
输入案例:
6
1980 5 6
1981 8 3
1980 3 19
1980 5 3
1983 9 12
1981 11 23
输出案例:
1980-5-3
结果代码:
#include <iostream>
using namespace std;
struct birth {
int year;
int month;
int day;
};
int main()
{
int k, t, i, j;
cin >> t;
struct birth* p = new struct birth[t];
//输入日期
for (k = 0; k < t; k++)
{
cin >> (p+k)->year >> (p + k)->month >> (p + k)->day;
}
//排序年份
int temp;
for (i = 1; i < t; i++)
{
for (j = 0; j < t - i; j++)
{
if ((p + j)->year > (p + j + 1)->year)
{
temp = (p + j)->year;
(p + j)->year = (p + j + 1)->year;
(p + j + 1)->year = temp;
}
}
}
//在相同年份中排序月份
int m=0;
for (k = 0; k < t; k++)
{
if ((p + k)->year == (p + k + 1)->year)
m++;
int mon;
for (i = 0; i < m; i++)
{
for (j = 0; j < m - i; j++)
{
if ((p + j)->month > (p + j + 1)->month)
{
mon = (p + j)->month;
(p + j)->month = (p + j + 1)->month;
(p + j + 1)->month = mon;
}
}
}
}
//在相同年份,相同月份中排天数
int d;
for (k = 0; k < t; k++)
{
if (((p + k)->year == (p + k + 1)->year) && ((p + k)->month == (p + k + 1)->month))
{
if ((p + k)->day > (p + k + 1)->day)
{
d = (p + k)->day;
(p + k)->day = (p + k + 1)->day;
(p + k + 1)->day = d;
}
}
}
cout << "-----------------" << endl;
//输出日期
for (k = 0; k < t; k++)
cout << (p + k)->year << "-" << (p + k)->month << "-" << (p + k)->day << endl;
cout << "---------------" << endl;
cout << (p +1)->year << "-" << (p + 1)->month << "-" << (p + 1)->day << endl;
return 0;
}
以上是结构体相关习题,下一章节是关于指针的习题练习。