c语言 计蒜客 基因相关性
没看出自己哪里有问题,希望大家帮忙看下。
#include<stdio.h>
#include<string.h>
int main()
{
double n,b;
int i,num=0;
char s[500]={0},t[500]={0};
scanf("%lf",&n);
gets(s);//输入第一条碱基链
gets(t);//输入第二条碱基链
for(i=0;i<strlen(s);i++)//两个数组长度相等,s、t都行
{
if(s[i]==t[i])
num=num+1;
}
b=num*1.0/strlen(s);//求所占比例
if(b>=n)
printf("yes");
else printf("no");
return 0;
}
运行结果是no,与答案不符。
输入字符串改用 scanf(), 修改如下,供参考:
#include<stdio.h>
#include<string.h>
int main()
{
double n,b;
int i,num=0;
char s[500]={0},t[500]={0};
scanf("%lf %s %s",&n ,s ,t);// 修改
//gets(s);//输入第一条碱基链
//gets(t);//输入第二条碱基链
for(i=0;i<strlen(s);i++)//两个数组长度相等,s、t都行
{
if(s[i]==t[i])
num=num+1;
}
b = num*1.0/strlen(s);//求所占比例
if(b >= n)
printf("yes");
else
printf("no");
return 0;
}
【以下回答由 GPT 生成】
#include <stdio.h>
#include <string.h>
int main()
{
double n, b;
int i, num = 0;
char s[500] = {0}, t[500] = {0};
printf("请输入相关性阈值:");
scanf("%lf", &n);
printf("请输入第一条碱基链:");
scanf("%s", s);
printf("请输入第二条碱基链:");
scanf("%s", t);
if(strlen(s) != strlen(t)){
printf("两条碱基链长度不一致\n");
return 0;
}
for (i=0; i<strlen(s); i++)
{
if (s[i] == t[i])
num = num + 1;
}
b = num * 1.0/strlen(s); //求所占比例
if (b >= n)
printf("yes");
else
printf("no");
return 0;
}
首先,上述代码的问题是基于输入数据的读取和比较计算逻辑错误。具体问题和解决方法如下:
在读取输入时,您可以使用scanf
函数代替gets
函数来读取输入的两条碱基链。这样可以避免潜在的缓冲区溢出问题。
在用gets
函数读取输入时,需要将输入的碱基链存储到char
类型的数组中。因此,您需要将n
、s
和t
的类型从double
改为char
数组。
在比较和计算相关性时,您需要确保使用strcmp
函数来比较两个字符串是否相等,并且使用strlen
函数来获取字符串的长度。
在计算相关性比例时,需要将num
变量和strlen(s)
都转换为double
类型,以便得到正确的比例。
最后,建议通过提示用户输入的方式,获取相关性阈值、第一条碱基链和第二条碱基链,以提高代码的交互性和易用性。
通过以上优化,您的代码应该能够正确运行并输出预期的结果。如有其他问题,请提供更多详细信息以便我们能够更好地帮助您。
【相关推荐】