鱼C论坛

 找回密码
 立即注册
查看: 1047|回复: 15

[已解决]算法

[复制链接]
发表于 2020-12-10 10:25:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int n,a[]={0},i,f=0,g=0;
        float c=0,d=0,y,k;
        scanf("%d",&n);    //输入有几个成绩
        for(i=0;i<n;i++)
        {
                scanf("%d",&a[i]);   //输入成绩
        getchar();   //吸收回车
        }
        a[n]='\0';
        for(i=0;i<n;i++)
        {
                if(a[i]>=60)
                {
                f++;    //及格数
                }
                if(a[i]>=85)
                {
                        g++;    //优秀数
                }
        }
        c=(float)f/n;  //及格率
        d=(float)g/n;  //优秀率
        y=c*1000;    //将小数转变成整数
        k=d*1000;    //同上
        printf("%2.0f%\n",y);       //输出两位整数且不带小数
        printf("%2.0f%\n",k);       //同上   
        return 0;
}








//题目的要求是,先用一行来输入n(人数),然后每一行输入一个数表示其中一个人的成绩,然后输入及格率xx%(比如85%),优秀率xx%(69%)
最佳答案
2020-12-10 14:48:47
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int n,a[50],i,f=0,g=0;
  5.     float c=0,d=0,y,k;
  6.     scanf("%d",&n);    //输入有几个成绩
  7.     for(i=0;i<n;i++)
  8.     {
  9.         scanf("%d",&a[i]);   //输入成绩
  10.     }
  11.     for(i=0;i<n;i++)
  12.     {
  13.         if(a[i]>=60)
  14.         {
  15.         f++;    //及格数
  16.         }
  17.         if(a[i]>=85)
  18.         {
  19.             g++;    //优秀数
  20.         }
  21.     }
  22.     c=(float)f/n;  //及格率
  23.     d=(float)g/n;  //优秀率
  24.     y=c*100;    //将小数转变成整数
  25.     k=d*100;    //同上
  26.     printf("%2.0f%%\n",y);       //输出%要输入两个连续的%%
  27.     printf("%2.0f%%\n",k);       //同上   
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-10 10:26:13 | 显示全部楼层
我的问题在于,我输入n为7,然后下面七行,每一行输入了一个数,然后没有反应
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 10:46:33 | 显示全部楼层

int n,a[]={0},i,f=0,g=0;
        float c=0,d=0,y,k;
        scanf("%d",&n);  
改成
int n,i,f=0,g=0;
        float c=0,d=0,y,k;
        scanf("%d",&n);
       int  a[n];
试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 11:08:28 | 显示全部楼层
心驰神往 发表于 2020-12-10 10:46

int n,a[]={0},i,f=0,g=0;
        float c=0,d=0,y,k;

不行,会报错,系统说a【n】必须要是含有常量的表达式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 11:11:38 | 显示全部楼层
本帖最后由 心驰神往 于 2020-12-10 11:20 编辑
严凯 发表于 2020-12-10 11:08
不行,会报错,系统说a【n】必须要是含有常量的表达式


我用的Devc++可以,有截图吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 11:20:08 | 显示全部楼层
我这个2010vc++学习版不行,这个动态数组不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 11:23:12 | 显示全部楼层
行吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-10 11:23:43 | 显示全部楼层
来个人吧,我不行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 11:57:39 | 显示全部楼层
动态分配数组,包含头文件 #include <stdlib.h>
  1.   
  2.         int n,i,f=0,g=0;
  3.         int *a = 0;
  4.         float c=0,d=0,y,k;
  5.         scanf("%d",&n);    //输入有几个成绩
  6.         a = (int *)malloc(n*sizeof(int));
  7.         ....
  8.         free(a);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 13:44:58 | 显示全部楼层
顶一下顶一下怎么没有人来呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 14:04:59 | 显示全部楼层
本帖最后由 jitianmoshen 于 2020-12-10 14:07 编辑
严凯 发表于 2020-12-10 13:44
顶一下顶一下怎么没有人来呀


用楼上的malloc方法啊,VS系列都不支持变长数组(VLA),而且变长数组不安全
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 14:21:02 | 显示全部楼层
jitianmoshen 发表于 2020-12-10 14:04
用楼上的malloc方法啊,VS系列都不支持变长数组(VLA),而且变长数组不安全

现在不是变长数组的问题,你看看我的源程序,为什么没有输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 14:48:47 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int n,a[50],i,f=0,g=0;
  5.     float c=0,d=0,y,k;
  6.     scanf("%d",&n);    //输入有几个成绩
  7.     for(i=0;i<n;i++)
  8.     {
  9.         scanf("%d",&a[i]);   //输入成绩
  10.     }
  11.     for(i=0;i<n;i++)
  12.     {
  13.         if(a[i]>=60)
  14.         {
  15.         f++;    //及格数
  16.         }
  17.         if(a[i]>=85)
  18.         {
  19.             g++;    //优秀数
  20.         }
  21.     }
  22.     c=(float)f/n;  //及格率
  23.     d=(float)g/n;  //优秀率
  24.     y=c*100;    //将小数转变成整数
  25.     k=d*100;    //同上
  26.     printf("%2.0f%%\n",y);       //输出%要输入两个连续的%%
  27.     printf("%2.0f%%\n",k);       //同上   
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 14:52:25 | 显示全部楼层

漂亮!谢谢,但是我的代码和你的代码到底是因为哪里不同而结果不同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 14:57:00 | 显示全部楼层
严凯 发表于 2020-12-10 14:52
漂亮!谢谢,但是我的代码和你的代码到底是因为哪里不同而结果不同

int a[50]  ,你的a[] = {0},数组长度没有定义,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 15:01:02 | 显示全部楼层
当时,我觉得,我这个没有定义应该没有事,我后面有一个a[n]='\0',但是为什么不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-10 12:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表