写一个程式输入学生的学号(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);

评论