C 我不能完美地完成这个循环
编写一个程序,输入五个分数,并通过取其平均百分比,仅使用嵌套if-else根据以下条件确定成绩: 90岁及以上:A级 如果80-70:B级 如果70-80:C级 如果50-70:D级 如果低于50:失败 我确实使用ifavg>=50尝试了从后退开始的循环,但它没有给我所需的输出,因为它总是停留在您失败的位置,我将它保持在else状态C 我不能完美地完成这个循环,c,algorithm,C,Algorithm,编写一个程序,输入五个分数,并通过取其平均百分比,仅使用嵌套if-else根据以下条件确定成绩: 90岁及以上:A级 如果80-70:B级 如果70-80:C级 如果50-70:D级 如果低于50:失败 我确实使用ifavg>=50尝试了从后退开始的循环,但它没有给我所需的输出,因为它总是停留在您失败的位置,我将它保持在else状态 if ( avg <= 90 ) { if ( avg <= 80 ) { if ( avg <= 70 )
if ( avg <= 90 )
{
if ( avg <= 80 )
{
if ( avg <= 70 )
{
if ( avg <= 50 )
{
printf( "Fail" );
}
else
{
printf( "D" );
}
}
else
{
printf( "C" );
}
}
else
{
printf( "B" );
}
}
else
{
printf( "A" );
}
如果我输入的分数高于90,那么我希望输出结果为A,但结果是您失败了如果出现梯形图,您应该尝试使用else
if(avg>=90)
{
printf("A");
}
else if(avg>=80)
{
printf("B");
}
else if(avg>=70)
{
printf("C");
}
else if(avg>=50)
{
printf("D");
}
else{
printf("Fail");
}
这应该起作用:
int main()
{
int marks[5];
int i,j;
float avg;
int total=0;
for(i=0;i<5;i++)
{
scanf("%d",&marks[i]);
}
for(j=0;j<5;j++)
{
total = total+marks[j];
}
avg = total/5;
if(avg<50)
{
printf("Fail");
}
else
{
if(avg>=50 &&avg<70)
{
printf("C");
}
else if(avg>=70)
{
if(avg>=80)
{
if(avg<90)
{
printf("B");
}
else if (avg>=90)
{
printf("A");
}
}
}
}
}
在您的情况下,我认为switch语句可能是最好的解决方案
# include <stdio.h>
const char * mark(int grade){
switch (grade/10){
case 10:
case 9:
return "A";
case 8:
return "B";
case 7:
case 6:
case 5:
return "C";
default:
return "Fail";
}
}
int main(int argc, char* argv[]){
int grade;
for(int i = 1; i < argc; ++i){
if (sscanf(argv[i], "%d", &grade) < 1){
fprintf(stderr, "\"%s\" can not be converted to an int.\n", argv[i]);
return -1;
}else{
printf("%s\n", mark(grade));
}
}
return 0;
}
您能提供完整的代码吗?如果int avg=90,您的代码将按预期打印一个。您不必在else中包含ifavg>=50&&的内容,else已经涵盖了这一点。此外,你的70-80-90连锁店很混乱,容易出错。看看奥马尔的答案,看看他干净利落的做法。