Created
December 31, 2009 13:28
-
-
Save johnhmj/266724 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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