2008年苏州大学复试机试
题目
编写程序充成以下功能:
一、从键盘上输入随机变量x的 10个取样点。X0,X1—X9 的值;
1、计算样本平均值
2、判定x是否为等差数列
3、用以下公式计算z的值(t=0.63)
注。请对程序中必要地方进行注释
补充:个人觉得这个题目回忆不完整,应该再输入一组数据Y,以便完成第三项任务。
题目来自互联网,代码为原创
代码
#include <iostream>
//#include <numeric>
using namespace std;
bool Arithmetic_sequence(int x[]);
double Cal_z(const int x[], const int y[], double t);
int main() {
//定义数组x
int x[10];
int y[10];
//输入数字
cout << "请输入10个取样点:" << endl;
for (int i = 0; i < 10; ++i){
cout << "请输入第 " << (i + 1) << " 个数:";
cin >> x[i];
}
//打印数字
cout << "输入的取样点为:" << endl;
for (int i = 0; i < 10; ++i) {
cout << x[i] << " ";
}
cout << endl;
//计算数据和
double sum = 0;
for (int i = 0; i < 10; ++i) {
sum += x[i];
}
// 计算平均值
double average = sum / 10;
cout << "样本的平均值为: " << average << endl;
/************
* 这里可以直接使用accumulate函数来计算sum
* 但需要注意要引入#include <numeric>
***********/
//判断数组是否为等差数列
if (Arithmetic_sequence(x)){
cout << "x是等差数列。" << endl;
} else {
cout << "x不是等差数列。" << endl;
}
/*****************公式计算*************************/
//输入数字
cout << "请输入另一组10个取样点:" << endl;
for (int i = 0; i < 10; ++i){
cout << "请输入第 " << (i + 1) << " 个数:";
cin >> y[i];
}
//打印数字
cout << "输入的第二组取样点为:" << endl;
for (int i = 0; i < 10; ++i) {
cout << y[i] << " ";
}
cout << endl;
// 指定 t 值为 0.63
double t = 0.63;
// 计算 z
double z = Cal_z(x, y, t);
// 打印计算结果
cout << "计算得到的 z 值为: " << z << endl;
system("pause");
return 0;
}
//等差数列判断函数
bool Arithmetic_sequence(int x[]){
int Dif = x[1] - x[0];
for (int i = 2; i < 10; ++i) {
if (x[i] - x[i - 1] != Dif){
return false;
}
}
return true;
}
double Cal_z(const int x[], const int y[], double t){
double z = 0.0;
// 计算 ΣYi (其中i=5 到 8)
for (int i = 4; i <= 7; ++i) {
double Term = 1.0;
// 计算 Π[(t-Xj)/(Xi-Xj)] (其中j=5,j≠i,j到9)
for (int j = 4; j <= 8; ++j) {
if (j != i) {
Term *= (t - x[j]) / (x[i] - x[j]);
}
}
z += y[i] * Term;
}
return z;
}
测试
最后
此代码为个人编写,使用平台为Clion。
由于博主才疏学浅,如有错误请多多指正,如有更好解法请多多交流!