2.2 处理零下温度
(1)要求柱状图能够处理多个零下温度的情况,以如下形式打印。(10 )
-2 **|
4 |****
-5 *****|
6 |******
3 |***
(2)求出现次数最多的温度,及其出现次数。(10 分)
例如:12 13 12 12 14 13 13 12 13 13 中,出现次数最多的是13 度,出现了 5 次。
#include<iostream>
#include<cmath>
using namespace std;
/*
一组温度数据 -3 -4 -7 8 6 15 14 13 -5 -2 11 14 11 11 12
输入n个温度 11 12 13 11 11 11 11 10 9 13 13 11 16 14 15
*/
void inputTemps(int temp[], int n) {
int i;
cout << "Please input the tempratures:" << endl;
for (i = 0; i<n; i++) {
cin >> temp[i];
}
cout << endl;
}
/*
寻找最小值,控制温度,输出格式
*/
int minTemps(int temp[], int n) {
int min = temp[0];
for (int i = 1; i < n; i++) {
if (min > temp[i]) {
min = temp[i];
return min;
}
}
}
/*
显示柱状图
*/
void displayTemps(int temp[], int n) {
int min = abs(minTemps(temp, n)) + 3;
cout << "显示柱状图如下:" << endl;
for (int i = 0; i < n; i++) {
cout.width(3); //设置温度所占域宽
cout << temp[i];
if (temp[i] < 0) {
for (int j = 0; j < min - abs(temp[i]); j++) {
cout << " ";
}
}
else //if(temp[i]>0)
{
for (int j = 0; j < min; j++) {
cout << " ";
}
cout << "|";
}
for (int k = 0; k < abs(temp[i]); k++){
cout << "*";
}
if (temp[i] < 0) {
cout << "|";
}
cout << endl;
}
cout << endl;
}
/*
寻找出现次数最多的温度
*/
int maxNum(int num[], int n) {
int max = num[0];
for (int i = 0; i < n; i++) {
if (max < num[i]) {
max = num[i];
}
}
return max;
}
/*
开辟动态数组
*/
void mostNum(int temp[], int n) {
int *point = new int[n](); //开辟动态数组,存放每个温度出现次数
for (int i = 0; i < n; i++) { //记录n个温度每个温度出现次数
int m = 1;
for (int j = 0; j < n; j++) {
if (i != j) { //可先判断下标,也可先判断温度
if (temp[i] == temp[j]) {
m++;
}
}
}
point[i] = m;
}
int b = maxNum(point, n);
point = NULL;
for (int q = 1; q < n; q++) {
int p = 1;
for (int r = 0; r < n; r++) {
if (temp[q] == temp[r]) {
if (r > q) {
p++;
}
}
}
if (p == b) {
cout << "出现次数最多的温度为" << temp[q] << ",出现了" << b << "次。" << endl;
}
}
cout << endl;
}
/*
主函数
*/
int main()
{
int temps[30];
inputTemps(temps, 15);
displayTemps(temps, 15);
mostNum(temps, 15);
return 0;
}