天天看点

从考试成绩中划出及格线

/******************************************************************
个学生考完期末试评卷成后,老师需要划出及格线,求如下:
(1)及格线是 10 的倍数
(2)保证至少有60%的学生及格;
(3)如果所有的学生都高于60分,则及格线为 60 分
输入10个整数:取值0~100
输出及格分数线,10的倍数
**********************************************************************/
#include<stdio.h>
#include<stdlib.h>

int comp(const void* a, const void* b)
{
	return *((int*)a) - *((int*)b);
}
int makesurePassLine(int* arr, int length)
{
	if(arr ==NULL || length<=0)
		return -1;

	int result = -1;
	qsort(arr,10,sizeof(int),comp);
	for(int i=0; i<length; ++i)
	{
		printf("%d\t",arr[i]);
	}

	if(arr[0] > 60)
		result = 60;
	else if(arr[4]%10 == 0)
		result = arr[4];
	else
		result = arr[4]/10*10;

	return result;
}

void test()
{
	const int length = 10;
	int arr[10] ={61,51,49,30,20,10,70,80,90,99};
	int passLine = makesurePassLine(arr,length);
	printf("%d\n",passLine);
}

void test1()
{
	const int length = 10;
	int arr[10] ={61,70,89,70,80,90,80,80,90,99};
	int passLine = makesurePassLine(arr,length);
	printf("%d\n",passLine);
}
int main()
{
	test();
	test1();
	return 0;
}
           

不足之处:改变了原来的输入数组,可通过辅助数组解决这个问题。

继续阅读