C语言编译通过,输入后报错

找了些题做,编译通过,但在输入后就报错中止,不知道哪里有问题,请大家帮帮忙看下哪里出错了

 #include <stdio.h>

//10名学生考试,根据考试成绩判定及格线,及格线为10的整数倍,至少保证60%的学生及格,若所有人均高于60分,则及格线为60

int main(void)
{
    float score[10];
    int i, k, level;

    for (i = 0; i < 10; i++)     /*依次输入学生成绩*/
    {
        scanf_s("%.1f", &score[i]);
    }

    for (level = 90; level >= 0; level -= 10)     /*从90分开始向下递减*/
    {
        k = 0;
        for (i = 0; i < 10; i++)     /*判定高于此分数线的人数*/
        {
            if (score[i] > level)
                k++;
        }
        if (k >= 6)
            break;
    }

    if (level > 60)     /*如果所有学生分数大于60,则及格线为60*/
        level = 60;

    printf("level is %d", level);

    system("pause");
    return 0;
}

图片说明

大概按照你的意思改了一下
程序有很多细节没有处理好
首先是输入时数组越界
其次循环控制条件
最后输出的结果可能不是你想要的结果
你可以自己去思考一下是怎么回事
希望对你有帮助
#include
#include

int main(void)
{
float score[10];
int i, k, level;
//循环控制条件应为i for (i = 0; i {
scanf("%1f", &score[i]);
}
k = 0;//应放在程序外面 否者每次循环都会初始化为零
for (level = 90; level >= 0; level -= 10) /*从90分开始向下递减*/
{
for (i = 0; i < 10; i++) /*判定高于此分数线的人数*/
{
if (score[i] > level)
k++;
}
if (k >= 6)
break;
}

if (level > 60)     /*如果所有学生分数大于60,则及格线为60*/
    level = 60;

printf("level is %d", level);

system("pause");
return 0;

}

 for (i = 0; i = 10; i++) 
->
for (i = 0; i < 10; i++) 
 for (level = 90; level = 0; level - 10) 
->
for (level = 90; level >= 0; level -= 10) 

可以先排序。得到第六名。按照第六名来判断。

 #include"stdio.h"
#include"windows.h"
int main(void)
{
    double score[10];
    int  k=0, level;    /* k=0 在这里初始化 */ 

    for (int i = 0; i < 10; i++)     /* i=10 改成 i<10 */
    {
        scanf("%lf", &score[i]);
    }

    for(int i=0;i<10;i++)
    {
        for(int j=i;j<10;j++)
        {
            if(score[j]<score[i])
            {
                double temp=score[i];
                score[i]=score[j];
                score[j]=temp;
            }
        }
    }
    for(int i=0;i<10;i++)
    {
        printf("%lf\t",score[i]);
    }
    /* level[5] 是第六名 (因为已经从小到大排序)*/ 
    if(score[5]>=60)
    {
        level=60;
    }
    else
    {
        level=score[5];
    }

    printf("level is %d", level);

    system("pause");
    return 0;
}
 #include 
#include

int main(void)
{
float score[10];
int i, k, level;
//循环控制条件应为i for (i = 0; i {
scanf("%1f", &score[i]);
}
k = 0;//应放在程序外面 否者每次循环都会初始化为零
for (level = 90; level >= 0; level -= 10) /*从90分开始向下递减*/
{
for (i = 0; i < 10; i++) /*判定高于此分数线的人数*/
{
if (score[i] > level)
k++;
}
if (k >= 6)
break;
}

if (level > 60)     /*如果所有学生分数大于60,则及格线为60*/
    level = 60;

printf("level is %d", level);

system("pause");
return 0;
}

我的思路是 先进行了排序 之后再进行计算

图片说明

#include

#define STUDENTNUMBERS 10

void dealtheresult(float *presult, int num);

int main(void)
{
int i = 0;
int num = 0;
float testResult[STUDENTNUMBERS];
printf("输入学生成绩,数目为10个\n");
while( i <10)
{
scanf("%f",&testResult[i++]);
}
dealtheresult(testResult , 10);
return 0;
}

void dealtheresult(float *presult, int num)
{
int i;
int k = 0;
int levelTemp = 0;
float scoreTemp = 0;

/*! scan all of result and rank the array*/
for(k = 0; k < (num - 1); k++)
{
    for(i =(k+1); i < num; i++)
    {
        if(presult[k] > presult[i])
        {
            scoreTemp = presult[k];
            presult[k] = presult[i];
            presult[i] = scoreTemp;
        }
    }
}
printf("您需要计算的成绩排列后:\n");
for(i =0 ; i < num; i++)
{
    printf("%f\n", presult[i]);
}
/*! 如果最小的数值是60 说明全部学生成绩都大于60分*/
if(presult[0] >= 60)
{
    levelTemp = 60;//及格线定为60
}
else
{
   levelTemp = (int)(presult[4]/10) * 10;
}

printf("及格线为 %d 分\n", levelTemp);

}
源码双手奉上