C语言 帮忙检查程序错在哪,怎么改?谢谢
答案:3 悬赏:20 手机版
解决时间 2021-03-02 10:51
- 提问者网友:辞取
- 2021-03-02 03:08
C语言 帮忙检查程序错在哪,怎么改?谢谢
最佳答案
- 五星知识达人网友:迟山
- 2021-03-02 03:35
数组的名字本身就是地址,所以不用加。单个变量需要加取地址。
scanf("%d",a[i]);
如有疑问请您追问,满意的话记得采纳哦~~~追问还是不行,编译行但运行不行追答兄弟,我知道了,对不起,刚刚告诉你错了。数组名确实不加取地址符,但是你这个是数组中的某一个,所以你的没错。
你的问题出现在输入,我看你输入是用逗号分隔,你改用空格或回车进行分隔就行了。
追问不行一样的结果追答#include
int main(void) {
int i,n=0,sum=0,a[50];float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0||a[i]>100) break;
else { sum+=a[i];n++; }
}
average=sum/n;
for(i=0;i variance+=(a[i]-average)*(a[i]-average);
printf("%5f,%5f,%d",average,variance,n);
return 0;
}
你看我这个运行成功了啊
追问奇怪你的我的怎么不行 都一样追答我把你的代码原样复制到我的编译器里,用空格做分隔符输入,结果输出正常,所以你的代码没问题。你能给我发一下你用空格做分隔符的运行过程吗?
追问好
好像可以了我在试试谢谢你,为什么,不行呢用","不行空格行追答如果scanf的格式控制没有逗号,则逗号不作为分隔符。
如果scanf的格式控制没有空格,则空格和回车作为分隔符能终止scanf。追问
格式控制是什么不懂不知道为什么之前运进行,现在都行了之前都不行好奇怪啊我老师讲scanf""就原样输入就行空格不影响追答格式控制就是括号里引号里的东西,比如
%d就是格式控制。
你这个逗号为什么比前面那个逗号空格大?看起来像是中文符号呢。
追问是中文(简体)追答事实证明,逗号也可以,与空格一样,是你的逗号有问题,英文逗号才行。
追问
这是英文吗追答你按ctrl+空格或ctrl+shift把下面调整成什么都没有就行了。
没有输入法的时候就是英文输入。
这样格式控制的时候:printf("%5f")代表输出至少5位,如果不够5位,前面加空格。
这样格式控制的时候:printf("%.5f")代表输出小数点后5位,如果不够5位,补充0或随机数(不同编译器不一样)追问懂了,谢谢追答事实证明,不能用逗号做分隔符,否则逗号就会被当做不是0至100的数,执行break了,不信你试试多输入几个数
scanf("%d",a[i]);
如有疑问请您追问,满意的话记得采纳哦~~~追问还是不行,编译行但运行不行追答兄弟,我知道了,对不起,刚刚告诉你错了。数组名确实不加取地址符,但是你这个是数组中的某一个,所以你的没错。
你的问题出现在输入,我看你输入是用逗号分隔,你改用空格或回车进行分隔就行了。
追问不行一样的结果追答#include
int main(void) {
int i,n=0,sum=0,a[50];float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0||a[i]>100) break;
else { sum+=a[i];n++; }
}
average=sum/n;
for(i=0;i
printf("%5f,%5f,%d",average,variance,n);
return 0;
}
你看我这个运行成功了啊
追问奇怪你的我的怎么不行 都一样追答我把你的代码原样复制到我的编译器里,用空格做分隔符输入,结果输出正常,所以你的代码没问题。你能给我发一下你用空格做分隔符的运行过程吗?
追问好
好像可以了我在试试谢谢你,为什么,不行呢用","不行空格行追答如果scanf的格式控制没有逗号,则逗号不作为分隔符。
如果scanf的格式控制没有空格,则空格和回车作为分隔符能终止scanf。追问
格式控制是什么不懂不知道为什么之前运进行,现在都行了之前都不行好奇怪啊我老师讲scanf""就原样输入就行空格不影响追答格式控制就是括号里引号里的东西,比如
%d就是格式控制。
你这个逗号为什么比前面那个逗号空格大?看起来像是中文符号呢。
追问是中文(简体)追答事实证明,逗号也可以,与空格一样,是你的逗号有问题,英文逗号才行。
追问
这是英文吗追答你按ctrl+空格或ctrl+shift把下面调整成什么都没有就行了。
没有输入法的时候就是英文输入。
这样格式控制的时候:printf("%5f")代表输出至少5位,如果不够5位,前面加空格。
这样格式控制的时候:printf("%.5f")代表输出小数点后5位,如果不够5位,补充0或随机数(不同编译器不一样)追问懂了,谢谢追答事实证明,不能用逗号做分隔符,否则逗号就会被当做不是0至100的数,执行break了,不信你试试多输入几个数
全部回答
- 1楼网友:像个废品
- 2021-03-02 04:56
你把代码复制粘贴出来下,这样也方便帮你修改呀。追问帮我看看追答你把代码复制粘贴出来啊,光看图我没法修改啊,我跟你说还不如直接在你的代码里指出哪里出错了,然后帮你修改啊。追问发了追答没有啊,怎么回事??追问有一个已送达,再发,不知道为什么发不出去#include
int main()
{
int i,n=0,sum=0,a[50];float average,variance=0;
for(i=0;i<50;i++)
{scanf("%d",&a[i]);
if(a[i]<0||a[i]>100) break;
else {sum+=a[i];n++;
}
}
average=sum/n;
for(i=0;i variance+=(a[i]-average)*(a[i]-average);
printf("%5f,%5f,%d",average,variance,n);
return 0;
}追答#include
int main()
{
int i,n=0,sum=0,a[50];
float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0 || a[i]>100)
{
// break; //这里你输入错误的话,应该是要结束程序的吧,break只是退出for循环,会继续往下执行
printf("Input Error! ");
return -1; //直接退出程序
}
else
{
sum+=a[i];
i++; //这里应该是i++,而不是n++
}
}
//下面的部分没什么问题
}追问直接退出程序 怎么还能计算方差追答输入错误的情况下,直接退出程序啊追问是if(里)错误退程序 但退方差怎么办要同时计算方差和平均数追答#include
int main()
{
int i,n=0,sum=0,a[50];
float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0 || a[i]>100)
break; //输入结束
else
{
sum+=a[i];
n++;
}
}
average=(1.0*sum)/n;
for(i=0;i variance+=(a[i]-average)*(a[i]-average);
printf("%5f,%5f,%d",average,variance,n);
return 0;
}
现在应该是没问题了的。
追问我的和你的都一样啊追答我的运行结果是:
10 10 -1
10.000000,0.000000,2
跟你的不一样哦追问%5f是输出小数点后5位追答不是的,如果要输出小数点后5位,应该写成这样:
%.5f追问%5f为什么是输入小数点后6位 那%5f代表什么意思呢追答%5f表示输出域宽为5,右对齐,如果实际长度大于5,就按实际长度的输出出来,如果不足5,则用空格补齐。
int main()
{
int i,n=0,sum=0,a[50];float average,variance=0;
for(i=0;i<50;i++)
{scanf("%d",&a[i]);
if(a[i]<0||a[i]>100) break;
else {sum+=a[i];n++;
}
}
average=sum/n;
for(i=0;i
printf("%5f,%5f,%d",average,variance,n);
return 0;
}追答#include
int main()
{
int i,n=0,sum=0,a[50];
float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0 || a[i]>100)
{
// break; //这里你输入错误的话,应该是要结束程序的吧,break只是退出for循环,会继续往下执行
printf("Input Error! ");
return -1; //直接退出程序
}
else
{
sum+=a[i];
i++; //这里应该是i++,而不是n++
}
}
//下面的部分没什么问题
}追问直接退出程序 怎么还能计算方差追答输入错误的情况下,直接退出程序啊追问是if(里)错误退程序 但退方差怎么办要同时计算方差和平均数追答#include
int main()
{
int i,n=0,sum=0,a[50];
float average,variance=0;
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]<0 || a[i]>100)
break; //输入结束
else
{
sum+=a[i];
n++;
}
}
average=(1.0*sum)/n;
for(i=0;i
printf("%5f,%5f,%d",average,variance,n);
return 0;
}
现在应该是没问题了的。
追问我的和你的都一样啊追答我的运行结果是:
10 10 -1
10.000000,0.000000,2
跟你的不一样哦追问%5f是输出小数点后5位追答不是的,如果要输出小数点后5位,应该写成这样:
%.5f追问%5f为什么是输入小数点后6位 那%5f代表什么意思呢追答%5f表示输出域宽为5,右对齐,如果实际长度大于5,就按实际长度的输出出来,如果不足5,则用空格补齐。
- 2楼网友:狂恋
- 2021-03-02 04:41
#include
int main()
{
int i;
float n=0;
float sum=0,a[50];
float ave=0,var=0;
for(i=0;i<50;i++)
{ scanf("%f",&a[i]);
if(a[i]>=0 && a[i]<= 100)
{
sum=sum+a[i];
n++;
}
else
break;
}
ave = sum/n;
for(i=0;i {
var=var + (a[i]-ave)*(a[i]-ave);
}
printf("%f %f",ave,var);
return 0;
}
你整型都改成浮点型即可追问n是学生成绩个数用int也可行吧追答不行,因为你的n参与了除法运算,如果设置成int型会将结果强制转换成int型,小数部分会丢失。
当然你也可以把n设置成int型,但是要在运算中将n强制转换成浮点型,就是将n写为(float)n即可追问如果average(int)=sum(int)/n(float)ave值是f还是int值是小数还是整数
int main()
{
int i;
float n=0;
float sum=0,a[50];
float ave=0,var=0;
for(i=0;i<50;i++)
{ scanf("%f",&a[i]);
if(a[i]>=0 && a[i]<= 100)
{
sum=sum+a[i];
n++;
}
else
break;
}
ave = sum/n;
for(i=0;i
var=var + (a[i]-ave)*(a[i]-ave);
}
printf("%f %f",ave,var);
return 0;
}
你整型都改成浮点型即可追问n是学生成绩个数用int也可行吧追答不行,因为你的n参与了除法运算,如果设置成int型会将结果强制转换成int型,小数部分会丢失。
当然你也可以把n设置成int型,但是要在运算中将n强制转换成浮点型,就是将n写为(float)n即可追问如果average(int)=sum(int)/n(float)ave值是f还是int值是小数还是整数
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯