C语言题目求解答 50
输入有多行,第一行为一个整数N(0<N<10),表示今天有多少记录。接下来有N行,每行格式为:蛋糕名称(字符串,无空格,长度小于30),尺寸,送出数,评价为’A’的数量。...
输入有多行,第一行为一个整数N(0<N<10),表示今天有多少记录。
接下来有N行,每行格式为:蛋糕名称(字符串,无空格,长度小于30),尺寸,送出数,评价为’A’的数量。以空格分隔。
尺寸、送出数、’A’的数量均为正整数,不会超过int类型。
输出评价最不好的那条记录,末尾换行。
提示:何谓评价最不好?得’A’的比例最高,测试用例保证结果唯一性,同时,比例应为浮点数,建议用double类型表示
测试用例
6
Xueyibeizi 8 5 0
Deguoqieguo 6 10 10
Nimenzuibang 6 4 0
JitongZUINIU 6 4 0
JitongZUINIU 8 5 0
JitongZUINIU 10 100 0
样例输出
Deguoqieguo 6 10 10
这是我写的代码,为什么最后输出时多一串数字啊
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char mingzi[30];
int chicun;
int geshu;
int deA;
}dangao;
int main()
{
int n;
scanf("%d",&n);
dangao a[n];
int i;
for(i=0;i<n;i++)
{
gets(a[i].mingzi);
scanf("%d %d %d",&a[i].chicun,&a[i].geshu,&a[i].deA);
}
double b[n];
double c=-1.000;
for(i=0;i<n;i++)
{
b[i]=a[i].deA/a[i].geshu;
}
for(i=0;i<n;i++)
{
if(b[i]>=c)
{
c=b[i];
}
}
for(i=0;i<n;i++)
{
if(b[i]==c)
break;
}
printf("%s %d %d %d\n",a[i].mingzi,a[i].chicun,a[i].geshu,a[i].deA);
return 0;
} 展开
接下来有N行,每行格式为:蛋糕名称(字符串,无空格,长度小于30),尺寸,送出数,评价为’A’的数量。以空格分隔。
尺寸、送出数、’A’的数量均为正整数,不会超过int类型。
输出评价最不好的那条记录,末尾换行。
提示:何谓评价最不好?得’A’的比例最高,测试用例保证结果唯一性,同时,比例应为浮点数,建议用double类型表示
测试用例
6
Xueyibeizi 8 5 0
Deguoqieguo 6 10 10
Nimenzuibang 6 4 0
JitongZUINIU 6 4 0
JitongZUINIU 8 5 0
JitongZUINIU 10 100 0
样例输出
Deguoqieguo 6 10 10
这是我写的代码,为什么最后输出时多一串数字啊
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char mingzi[30];
int chicun;
int geshu;
int deA;
}dangao;
int main()
{
int n;
scanf("%d",&n);
dangao a[n];
int i;
for(i=0;i<n;i++)
{
gets(a[i].mingzi);
scanf("%d %d %d",&a[i].chicun,&a[i].geshu,&a[i].deA);
}
double b[n];
double c=-1.000;
for(i=0;i<n;i++)
{
b[i]=a[i].deA/a[i].geshu;
}
for(i=0;i<n;i++)
{
if(b[i]>=c)
{
c=b[i];
}
}
for(i=0;i<n;i++)
{
if(b[i]==c)
break;
}
printf("%s %d %d %d\n",a[i].mingzi,a[i].chicun,a[i].geshu,a[i].deA);
return 0;
} 展开
展开全部
从头到尾就一个printf,怎么会多一串数字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先不管程序结果怎么样,我记得数组的定义 应该是 数组名[常量表达式] ,常量表达式包括常量与符号常量,不能包含变量。而你在定义dangao a[n] 这个结构体数组的时候,n是变量吧,你这程序能编译得过?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道题主的一串数字是怎么来的,但这样写会有问题,前面scanf("%d",&n);后缓冲区里还是有换行符留着的,后面gets不会读到,gets后面的scanf也同理,单步调试下就能发现。在scanf后面加个getchar();或者都用scanf可以解决。其实既然题目要求没有空格,gets(a[i].mingzi);放到scanf里就好。还有后面 a[i].deA/a[i].geshu出来的结果肯定是0的,两个整形相除结果自动截尾了,强制转换下应该可以(double)a[i].deA/a[i].geshu。
后面的逻辑也帮题主简化了一下。
int main()
{
int n;
scanf("%d",&n);
dangao a[n];
int i;
for(i=0; i<n; i++)
scanf("%s %d %d %d",&a[i].mingzi,&a[i].chicun,&a[i].geshu,&a[i].deA);
int worst;
double c=-1.000,temp;
for(i=0; i<n; i++)
{
if((temp=(double)a[i].deA/a[i].geshu)>=c)
{
c=temp;
worst=i;
}
}
printf("%s %d %d %d\n",a[worst].mingzi,a[worst].chicun,a[worst].geshu,a[worst].deA);
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询