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() {//定义数组xint 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.63double t = 0.63;// 计算 zdouble 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。
由于博主才疏学浅,如有错误请多多指正,如有更好解法请多多交流!