_Phoebe__ 2022-02-28 20:37 采纳率: 96.9%
浏览 41
已结题

这个代码输出结果是0 想知道哪里错了怎么改

小蓝给学生们组织了一场考试,卷面总分为100 分,每个学生的得分都是一个0 到100 的整数。
如果得分至少是60 分,则称为及格。如果得分至少为85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
输入格式
输入的第一行包含一个整数n,表示考试人数。
接下来n 行,每行包含一个0 至100 的整数,表示一个学生的得分。
输出格式
输出两行,每行一个百分数,分别表示及格率和优秀率。
百分号前的部分四舍五入保留整数。
输入样例
7
80
92
56
74
88
100
0
输出样例
71%
43%


#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[1000];
    int cnt1=0,cnt2=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        if(a[i]>60){
            cnt1++;
        }
        else if(a[i]>=85){
            cnt2++;
        }
    }
    double res1=(double)(cnt1/n);
    double res2=(double)(cnt2/n);
    res1=res1*100;
    res2=res2*100;
    printf("%d%\n",(int)res1);
    printf("%d%",(int)res2);
    return 0;
} 
  • 写回答

2条回答 默认 最新

  • 谛凌 2022-02-28 20:49
    关注

    修改已经在注释中写了
    参考:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n;
        cin>>n;
        int a[1000];
        int cnt1=0,cnt2=0;
        for(int i=0;i<n;i++){
            cin>>a[i];
            if(a[i]>60){
                cnt1++;
            }
            if(a[i]>=85){    //不能写else,不然大于85的只会在前面if语句中
                cnt2++;
            }
        }
        double res1=(double)cnt1/n;    //这两句的后面不要加括号,加了就是先做整数之间的除法再转浮点数,此时已经变成0了
        double res2=(double)cnt2/n;   
        res1=res1*100;
        res2=res2*100;
        printf("%d%%\n",(int)res1);
        printf("%d%%",(int)res2);
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)