【发布时间】:2011-11-06 08:09:32
【问题描述】:
我正在努力做到这一点:
编写一个接受三个用户输入的程序:作业分数、期中分数和期末考试 标记。
这些输入的类型为浮点型,值应介于 0 和 100 之间。
程序 应该将最终成绩计算为百分比和字母成绩。
• 期末成绩计算为:作业 20%,期中 30%,期末考试 50%。字母等级 计算为:A(最终成绩 ≥ 80%),B(80 > 最终成绩 ≥ 70%),C(70 > 最终成绩 ≥ 60%), D(60 > 最终成绩 ≥ 50%)和 F(50 > 最终成绩)。
显示最终成绩和字母成绩。
使用以下代码:
#include <stdio.h>
int checkMark(int);
float getMark();
float computeFinalGrade(float assign, float midterm, float finalExam, float finalGrade);
int computeLetterGrade(float);
int checkMark(int x)
{
while(x<0 || x>100) //While x is a negative number:
{
printf("Invalid entry.Try again:");
scanf("%d",&x);
}
if(x>0 && x<=100)//If x is a positive number:
x=x;
return x;
}
float getMark(void)
{
float mark=0,assignMark=0,midMark=0,examMark=0,finalMark=0;
char letterGrade;
printf("Enter assignment grade:");
scanf("%d",mark);
checkMark(mark);
assignMark=mark;
printf("\nEnter midterm mark:");
scanf("%f",&mark);
checkMark(mark);
midMark=mark;
printf("\nEnter exam mark:");
scanf("%f",&mark);
checkMark(mark);
examMark=mark;
finalMark=computeFinalGrade(assignMark,midMark,examMark,finalMark);
letterGrade=computeLetterGrade(finalMark);
printf("The final grade for the course is %.1f, and the letter grade is %c.\n",finalMark,letterGrade);
return 0;
}
float computeFinalGrade(float assign, float midterm, float finalExam, float finalGrade)
{
assign=(float)0.2*assign;
midterm=(float)0.3*midterm;
finalExam=(float)0.4*finalExam;
finalGrade=(float)assign+midterm+finalExam;
return finalGrade;
}
int computeLetterGrade(float finalGrade)
{
int grade;
if(finalGrade>=80)
grade=65;
if(finalGrade<80)
if(finalGrade>=70)
grade=66;
if(finalGrade<70)
if(finalGrade>=60)
grade=67;
if(finalGrade<60)
if(finalGrade>=50)
grade=68;
if(finalGrade<50)
grade=70;
return grade;
}
int main()
{
getMark();
return 0;
}
当我调试上面的程序并输入一个负数时,它给了我这个:
Enter assignment grade:123
Segmentation fault (core dumped)
我到底做错了什么?
【问题讨论】:
-
学习使用调试器,如gnu.org/s/gdb
-
它在哪里崩溃?将核心文件加载到 gdb 并进行一些事后分析。然后,当您知道它崩溃的哪一行时,这个主题就容易一些了。
-
123 不是负数...
-
@NickLH:在这种情况下,我认为它是 错误 中的“负面”。
-
他说“并输入一个负数”,即数字
标签: c segmentation-fault coredump