这是个求中位数的题目 (6-11 求自定类型元素序列的中位数 )
萌新想问一下既然这个定义的数组是A[10]为什么超过10个的数据也可以处理呢,我用visual C++ 的时候得出结果同时报错了,但是PTA还是算它通过了(只是超时了)
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));
return 0;
}
ElementType Median( ElementType A[], int N )
{int i,j,k;
float t;
for(i=0;i<N;i++)
{for(j=1;j<N-i;j++){
if(A[i]>A[i+j]){
t=A[i];
A[i]=A[i+j];
A[i+j]=t;
}
}}
k=N/2;
return A[k];
}
超出大小肯定是溢出的。个人理解是安全机制的不同。
简单来说,就是闯红灯未必会出事故,但是可能会出事故。
C语言不会对溢出检查,因此这么写代码合法,但是是否出错取决于你是否侵占了别的变量或者代码的内存。
好比闯红灯侵犯了别人的道路,但是碰巧没有车,所以没事,运气不好,人家的车过来了,你就撞了。
会,就看编译器能不能识别了,要知道溢出也是一种黑客攻击手段,而你知道它溢出了只是因为编译器提醒你了。
你的代码运行超时有可能是后台代码运行异常拖到了超时才处理,就像你电脑报错但你一直不点确定一样。