C语言新手,为什么不运行啊

B2095 白细胞计数

wuxiangtianbei @ 2022-12-09 10:18:46

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,m,x,z;
float a[100],s,p,c,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%f\n",&a[i]);
if(a[m]<a[i])m=i;
if(a[x]>a[i])x=i;
}
for(j=i;j<=n;j++)
{
if(j!=x&&j!=m)s+=a[j];
}
p=s/(n-2);
s=0;
for(z=1;z<=n;z++)
{
if(z!=x&&z!=m)
c=fabs(a[z]-p);
if(t<c)t=c;
}
printf("%.2f %.2f",p,t);
}

by VividCycle @ 2022-12-09 10:52:36

@tangrunxi 讨论中心点是

scanf("%f\n",&a[i]);没有这种写法。\n只能是在输出的时候有。

这句话是完全错误的。事实上

那么它们会是一个随机值

也是错的。


by tangrunxi @ 2022-12-09 10:53:36

@lovelyseele 随机值的表述我改,有限集合。不过新人可能还不了解这个,这个先不说了。

如果您的意思是,这样写并不会出现编译错误的话。那么我们的讨论可以就此结束。我们并不在同一个维度上。楼主这样写会导致自己在本地编译会有很大的麻烦,这是一个不好的习惯,我觉得并没有必要去说这样写不会影响编译这样的话。毕竟也没有哪道题就一定要加个\n吧。


by VividCycle @ 2022-12-09 11:00:59

@tangrunxi

随机值的表述我改,有限集合。

建议了解编译器相关知识。未赋值的局部变量并不等于任何一个值,比如视情况它可以同时 > 和 < 同一个数。不懂可以不回答,但不要误导他人。

如果您的意思是,这样写并不会出现编译错误的话。那么我们的讨论可以就此结束。我们并不在同一个维度上。楼主这样写会导致自己在本地编译会有很大的麻烦,这是一个不好的习惯,我觉得并没有必要去说这样写不会影响编译这样的话。毕竟也没有哪道题就一定要加个\n吧。

?scanf 中加 \n 并没有任何问题。它只是在做一件不同的事情。而您说的是“换行符不能出现在除输出以外的任何地方”。搞不懂。


by 凌木缘tzwerw @ 2022-12-09 11:05:43

@tangrunxi 建议重新学习一下,丢人现眼总是不好的


by tangrunxi @ 2022-12-09 11:08:42

@lovelyseele

首先。我说的只能在输出中有,我的本意是:

事件A \in scanf,printfscanf 不成立,而 printf 成立。

您的认为方式可能是:

事件A \in C语言,printf 成立,其他不成立。

至于有限集合的声明,,不同的定义型的值并不相同,看做是有限集合没啥问题吧。


by tangrunxi @ 2022-12-09 11:09:49

@凌木缘tzwerw 不是你搁这就放这么一句你来干嘛的。你要反驳可以随便说,不违反规则就行,我都可以接受,你这一句话搁这一摆是逗我玩呢?


by l_ucas_NB @ 2022-12-09 11:25:20

神贴预警


by __MEMZ__ @ 2022-12-09 11:25:52

试试这个

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,m=0,x=0,z;
float a[100],s,p,c,t;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("\n%f",&a[i]);
if(a[m]<a[i])m=i;
if(a[x]>a[i])x=i;
}
for(j=i;j<=n;j++)
{
if(j!=x&&j!=m)s+=a[j];
}
p=s/(n-2);
s=0;
for(z=1;z<=n;z++)
{
if(z!=x&&z!=m)
c=fabs(a[z]-p);
if(t<c)t=c;
}
printf("%.2f %.2f",p,t);
}

by __MEMZ__ @ 2022-12-09 11:26:23

虽然答案是错的,但是输入没有问题


by tangrunxi @ 2022-12-09 11:26:39

@l_ucas_NB 不至于不至于,除了这帖子有个xxs以外其他的讨论都还好吧(


上一页 | 下一页