gpt4 book ai didi

c - 在 C 中实现两个样本 t 检验

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:12 26 4
gpt4 key购买 nike

我正在制作一个函数,该函数将从两个样本 t 检验中计算检验统计量并返回它的值。但是,我得到的结果不正确。我以前使用 scanf 并得到了很好的答案,但它随机停止工作。所以我决定切换到 fgets ,它应该更可靠,但是,它返回的值不正确。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define VAL 10

double tstat(int x1,int x2,int s1,int s2,int n1,int n2);

int main()
{
char mean1[VAL] = {0};
char sd1[VAL] = {0};
char n1[VAL] = {0};

char mean2[VAL] = {0};
char sd2[VAL] = {0};
char n2[VAL] = {0};

printf("Enter mean 1: \n");
fgets(mean1, 10, stdin);
printf("Enter sd 1: \n");
fgets(sd1, 10, stdin);
printf("Enter sample size 1: \n");
fgets(n1, 10, stdin);

printf("Enter mean 2: \n");
fgets(mean2, 10, stdin);
printf("Enter sd 2: \n");
fgets(sd2, 10, stdin);
printf("Enter n2: \n");
fgets(n2, 10, stdin);

printf("t value is: %lf", tstat(atoi(mean1),atoi(mean2),atoi(sd1),atoi(sd2),atoi(n1),atoi(n2)));
}

double tstat(int x1,int x2,int s1,int s2,int n1,int n2)
{
double t = 0;

t = (x1 - x2)/(sqrt(pow(s1,2)/n1+pow(s2,2)/n2));

return t;
}

例如,设置mean1 = 1.3sd1 = 0.5n1 = 22mean2 = 1.6,sd2 = 0.3, n2 = 24 应该产生 -2.44 的值,然而,将其插入返回 -1 后跟#IND00。我想我的问题是要么我误解了如何正确使用 fgets,要么数据类型有些不对劲,尽管我是 C 的初学者,但我无法发现任何明确的问题错误。

最佳答案

您的变量都是 int 类型,并且您正在使用 atoi 将字符串转换为 int。但是,您输入的值不是整数,而是浮点值,因此只解释每个数字的整数部分。例如,atoi("1.3") 结果为 1。

您需要将数据类型更改为 double 并改为使用 atof

double tstat(double x1, double x2, double s1, double s2, double n1, double n2)
{
double t = 0;

t = (x1 - x2)/(sqrt(pow(s1,2)/n1+pow(s2,2)/n2));

return t;
}

...

printf("t value is: %lf", tstat(atof(mean1),atof(mean2),atof(sd1),atof(sd2),atof(n1),atof(n2)));

关于c - 在 C 中实现两个样本 t 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56344340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com