找了些题做,编译通过,但在输入后就报错中止,不知道哪里有问题,请大家帮帮忙看下哪里出错了
#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);
}
源码双手奉上