写一个程式输入学生的学号(number)于3次考试的成绩(S1,S2,S3),先检查成绩是否为负数,若有负数就 输出**Invalid Data**;如果符合规定,计算平均成绩,并输出信息:
平均成绩 消息
___________________ ___________________
average<60 Sorry! Retaking
60<=aveage<70 pass but marginal
70<average Good!
_______________________________________________
第一次编写
main()
{
long int number,s1,s2,s3,sum; /*我没有注意s1,s2,s3 是浮点数,而number printf("enter your student's ID No.: \n"); 不 是,应该用float 另外宣告*/
getch(number);
if (number<0)
printf("**Invalid Data** \n");
else printf("enter your resort of text: \n");
scanf ("%3.1f,%3.1f,%3.1f \n",s1,s2,s3);
sum == (s1+s2+s3)/3;
{
if(sum<60)
printf("Sorry! Retaking \n");
if(sum>=60&&sum<70)
printf("pass but marginal \n");
if(sum>70)
printf("!Good \n");
}
}
————————————
第2次编写
main()
{
long int number,s1,s2,s3,sum;
printf("enter your student's ID No.: \n");
getch(number); /* getch 只接受字元,我没有学好,这方面的问题*/
if (number<0)
printf("**Invalid Data** \n");
else printf("enter your resort of text: \n");
scanf ("%3.1f,%3.1f,%3.1f \n",s1,s2,s3);
sum == (s1+s2+s3)/3;
if(sum<60)
printf("Sorry! Retaking \n");
if(sum>=60&&sum<70)
printf("pass but marginal \n");
if(sum>70)
printf("!Good \n");
}
————————————————————
第3次编写
main()
{
long int number;
float s1,s2,s3,sum; /*这里解决了 输入后没有反映就直接跳入的问题*/
printf("enter your student's ID No.: ");
scanf("%d",number);
if (number<0)
printf("enter your resort of text: \n");
else
printf("**Invalid Data** \n");
scanf ("%3.1f,%3.1f,%3.1f \n",s1,s2,s3);
sum == (s1+s2+s3)/3;
if(sum<60)
printf("Sorry! Retaking \n");
if(sum>=60&&sum<70)
printf("pass but marginal \n");
if(sum>70)
printf("!Good \n");
getch();
}
明天在接着调试。。。。。。。。由于第2天,一天都无法打开本网站,所以今天晚上(2、12、06)发出。
第4次
main()
{
long number;
float s1,s2,s3,sum; /*这里解决了 输入后没有反映就直接跳入的问题*/
printf("enter your student's ID No.: ");
scanf("%d", &number);
printf("enter your resort of text: ");
scanf ("%1f,%1f,%1f \n",s1,s2,s3); /*这里大家注意我的s1,s2,s3于float一样,不应该是这样的,应该取地址,所以,&s1,&s2,&s3 这样,调试的时候出现的 警告s1,s2,s3被提前使用问题得到解决了*/
if (s1>=0&&s2>=0&&s3>=0)
{
sum = (s1+s2+s3)/3;
printf("%d sum is %f \n", number , sum);
if (sum<60) printf("Sorry! Retaking \n");
else if (sum>=60&&sum<70) printf("pass but marginal \n");
else if (sum>70) printf ("!Good \n");
}
else printf("**Invalid Data** \n");
getch();
}
第5次
main()
{
long number;
float s1,s2,s3,sum; /*这里解决了 输入后没有反映就直接跳入的问题*/
printf("enter your student's ID No.: ");
scanf("%d", &number);
printf("enter your resort of text: ");
scanf ("%1f,%1f,%1f \n",s1,s2,s3);
if (s1>=0&&s2>=0&&s3>=0)
{
sum = (s1+s2+s3)/3;
printf("%d sum is %f \n", number , sum);
if (sum<60) printf("Sorry! Retaking \n");
else if (sum>=60&&sum<70) printf("pass but marginal \n");
else if (sum>70) printf ("!Good \n");
}
else printf("**Invalid Data** \n");
getch();
}
感觉还有问题,接着调试,问题现在不在程式的结构了,感觉定义的数据有问题,因为输入2,2,2 回来的结果是。。。。。。。小数
第6次修改
main()
{
long int number;
float s1, s2, s3, average;
printf("enter your student's ID No.: ");
scanf("%ld", &number);
printf("enter your resort of text: \n");
scanf ("%f %f %f",&s1,&s2,&s3);
if (s1>=0 && s2>=0 && s3>=0)
{
average = (s1+s2+s3)/3;
printf("Student %ld average is %f\n", number , average);
if (average<60) printf("Sorry! Retaking \n");
else if (average>=60&&average<70) printf("pass but marginal \n");
else if (average>70) printf ("!Good \n");
}
else printf("**Invalid Data** \n");
getch();
}
这次,应该没有大的问题了!
第5次的问题在:
scanf("%d", &number);这句应该是有问题的,因为number是long int 应该用scanf("%ld",&number);当然如果int 跟 long int 大小一样就没事
可能是编译器下number溢出了
所以
有两处错误:
1. scanf("%d", &number);
改成:
scanf("%ld", &number);
2.printf("Student %d average is %f\n", number , average);
改成:
printf("Student %ld average is %f\n", number , average);
评论