C++基礎編程DAY17(day)

37、寫一個程序,進行體操評分,依次輸入10名評委所評分數,去除一個最高分和一個最低分,再算出平均分作爲選手的得分

//寫一個程序,進行體操評分,依次輸入10名評委所評分數,
//去除一個最高分和一個最低分,再算出平均分作爲選手的得分。

#include<iostream>
#include<stdlib.h>

using namespace std;

float get_Ave(int *arr)
{
	int max, min, s=0;
	int i,j;
	max = arr[0];
	min = arr[0];
	for(i=1; i<10; i++)
	{
		if(max<arr[i])
			max = arr[i];
	}
	for(j=1; j<10; j++)
	{
		if(min>arr[j])
			min = arr[j];
	}
	for(i=0; i<10; i++)
	{
		s += arr[i];
	}
	//cout << max << "," << min << "," << s << endl;
	return (s-max-min)/8.0;
}

int main()
{
	int a[10]={0}, i;
	for(i=0; i<10; i++)
		cin >> a[i];
	cout << get_Ave(a) << endl;
	system("pause");
	return 0;
}

38、寫一函數,將一數組中的元素反轉

//寫一函數,將一數組中的元素反轉
#include<iostream>
#include<stdlib.h>

using namespace std;

int reverse_arr(int arr[], int n)
{
	int i=0, t;
	//int &a;
	//int &b = arr[n-1-i];
	for(i=0; i<n/2; i++)
	{
		//int &a = arr[i];
		//int &b = arr[n-1-i];
		//t = a;
		//a = b;
		//b = t;
		t = arr[i];
		arr[i] = arr[n-1-i];
		arr[n-1-i] = t;
	}
	for(i=0; i<n; i++)
		cout << arr[i] << " ";
	cout << endl;
	return 0;
}

int main()
{
	int i, a[6] = {1,2,3,4,5,6};
	reverse_arr(a,6);
	//cout << sizeof(a)/sizeof(a[0]) << endl;//求數組a長度
	for(i=0; i<6; i++)
		cout << a[i] << " ";
	cout << endl;
	system("pause");
	return 0;
}

39、寫一函數,在一個數組中找出最大元素的位置

//寫一函數,在一個數組中找出最大元素的位置

#include<iostream>
#include<stdlib.h>

using namespace std;

int SearchMax(int a[], int n)
{
	int i, j, max=a[0];
	for(i=1; i<n; i++)
	{
		if(max<a[i])
		{
			max = a[i];
			j = i;
		}
	}
	return j+1;
}

int main()
{
	int a[10] = {1,2,5,4,3,8,10,7,9,6};
	cout << SearchMax(a,10) << endl;
	system("pause");
	return 0;
}

40、找出一個二維數組中的鞍點,即該元素在該行上最大,在該列上最小

//找出一個二維數組中的鞍點,即該元素在該行上最大,在該列上最小。

#include<iostream>
#include<stdlib.h>

using namespace std;

int main()
{
	int i, j, k, max, min, t=0, s=0;
	int a[3][3] = {3,2,1,4,5,6,9,8,1};
	//max = min = a[0][0];
	for(i=0; i<3; i++)
	{
		for(j=1; j<3; j++)
		{
			if(a[i][j]>a[i][t]) t=j;
		}
		//cout << i << "行最大元素:" << a[i][t] << endl;

		for(k=1; k<3; k++)
		{
			if(a[k][t]<a[s][t]) s = k;
		}
		//cout << t << "列最小元素:" << a[s][t] << endl;
		if(a[i][t] == a[s][t]) // if()後的表達式等號用"=="
		{
			cout << "該數組的鞍點爲:" ;
			cout << "a[" << s << "][" << t << "]:" << a[s][t] << endl;
		}
	}
		
	//cout << a[1][1] << a[2][2] << endl;
	system("pause");
	return 0;
}

題目來源:50道C/C++編程練習題及答案
在這裏插入圖片描述

總結

1、引用必須初始化 int &a = x; 參考:C++之引用&的詳解
2、題39參考代碼中取最大元素思路:比較前兩個數的大小,取最大值下標,後一個數再跟前兩個數中的最大值比較,如此循環,取得最大值元素;
3、題40編程思路:用兩個for()循環嵌套遍歷二維數組,先求第一行的最大值,獲得最大值的下標後求該列的最小值,如果最大值和最小值是同一個值則該值爲數組的鞍點,求最大、最小元素方法參考題39;

思考

Q: 通過交換、賦值可以交換數組中的兩個值,並且作用於函數內部和函數外部;交換兩個變量卻只作用於函數內部,爲什麼?兩者不同之處是什麼?
交換數組中的兩個值與指針做形參的交換兩個變量的函數有相似之處,有待深入瞭解數組與指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章