Skip to content

Instantly share code, notes, and snippets.

@johnhmj
Created December 31, 2009 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnhmj/266724 to your computer and use it in GitHub Desktop.
Save johnhmj/266724 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#define RANDOMIZE srand((unsigned)time(NULL))
// Integrated Development Environment
// Visual C++
using namespace std;
//
struct students{
double scores[50];
double average;
double stdev;
double Me, Q1, Q3;
};
typedef struct students SStudent;
typedef struct ARR
{
double* p;
size_t length;
}SArr;
// C++ 同名 sort 函式
void sort(double scores[], int len);
void sort(SArr& arr);
double computeAverage(struct students X);
void OtherComputing(SStudent& s);
void Print(SStudent& s);
//
void main(int argc, char** argv)
{
RANDOMIZE;
SStudent s;
// Windows.h ZeroMemory 巨集
memset( (void*) &s, 0, sizeof(SStudent));
size_t len = sizeof(s.scores) / sizeof(s.scores[0]);
for (size_t i = 0; i < len; i ++)
{
s.scores[i] = rand()%len;
}
OtherComputing(s);
Print(s);
system("PAUSE");
}
void sort(double score[], int len)
{
SArr arr;
arr.p = score;
arr.length = len;
sort(arr);
}
void sort(SArr& arr)
{
for (size_t i = 0; i < arr.length; i ++)
{
for (size_t j = 0; j < arr.length; j ++)
{
if ( arr.p[i] < arr.p[j] )
{
double a = arr.p[i];
arr.p[i] = arr.p[j];
arr.p[j] = a;
}
}
}
}
double computeAverage(struct students X)
{
X.average = 0;
size_t len = sizeof(X.scores) / sizeof(X.scores[0]);
for (size_t i = 0; i < len; i ++)
{
X.average += X.scores[i];
}
X.average /= len;
return X.average;
}
void OtherComputing(SStudent& s)
{
// 平均數
s.average = computeAverage(s);
s.stdev = 0;
SArr arr;
arr.p = s.scores;
arr.length = sizeof(s.scores) / sizeof(s.scores[0]);
for (size_t i = 0; i < arr.length; i ++)
{
double a = s.average - arr.p[i];
a *= a;
s.stdev += a;
}
s.stdev /= arr.length;
s.stdev = sqrt(s.stdev);
sort(arr);
// 奇數長度
if ( (arr.length % 2) == 1 )
{
// 中位數
s.Me = arr.p[arr.length / 2];
}
// 偶數長度
else
{
// 中位數
s.Me = arr.p[arr.length / 2];
s.Me += arr.p[arr.length / 2 - 1];
s.Me /= 2;
}
// 四分位數
double pos = arr.length;
pos /= 4;
bool bMod = (arr.length % 4) != 0;
if ( bMod )
{
size_t f = (size_t)pos;
s.Q1 = arr.p[f];
f = (size_t)(pos * 3);
s.Q3 = arr.p[f];
}
else
{
size_t f = (size_t)pos;
s.Q1 = arr.p[f - 1] + arr.p[f];
f = (size_t)(pos * 3);
s.Q3 = arr.p[f - 1] + arr.p[f];
}
}
void Print(SStudent& s)
{
size_t len = sizeof(s.scores) / sizeof(s.scores[0]);
for (size_t i = 0; i < len; i ++)
{
cout<<" "<<s.scores[i];
}
cout<<endl;
cout<<"Average = "<<s.average<<endl;
cout<<"Median = "<<s.Me<<endl;
cout<<"Q1 = "<<s.Q1<<endl;
cout<<"Q3 = "<<s.Q3<<endl;
cout<<"Standard deviation = "<<s.stdev<<endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment