C不是一天就能攻陷的,要经过不懈加不懈的努力,甚至要来个for(i=0;;i++)无限循环来达成。于是今天我就从1:00AM不知不觉努力到4:00AM,在Turbo C的世界里我的右下脚没有时间,我的桌面也从来没有钟,于是努力就在不知不觉中进行着。
今天凌晨,当我正要睡觉的时候来了道如此的题目:
某班有5个学生(含学号sno,姓名name),三门课(English, C, Math)。分别编写4个函数实现一下要求:
1. 求各门课的平均分。
2.找出有两门以上课程不及格的学生,并输入其学号、姓名和不及格课程的成绩。(我觉得这句话有歧义,到底是只3门课都不及格的人呢还是指那些在English,C和Math有2门或以上不及格的人呢?莫名其妙。于是我就在完工之后写多了个函数来满足编者两个不清不楚的要求)
3.找出三门课平均成绩85到90分的学生,并输出其学号和姓名。
4.找出每门课的最高分所对应的学生学号、姓名和分数。
5.主函数输入5个学生的成绩,然后调用上述函数输出结果。
这个题目看上去很庞大,但不难,于是我就先写了主函数,然后用/**/把没有用到的函数先注释起来,一个一个函数去攻陷。里面用到的知识都很全面,但我都会。要筛选就是要有条件,把符合条件的找出来,要算平均分其实就是要先算总分,一切都思路清晰,这里运用得最多的就是循环语句,所以如果循环语句你不过关你就不用活了。这是这个单元的一个函数编程应用题,它的难度系数是5,我是第一次没有碰什么大钉子就搞定5的题目。
char a[5][5]={"No.1","No.2","No.3","No.4","No.5"};
char b[5][5]={"stua","stub","stuc","stud","stue"};
int i;
ave(int score[])
{
int sum=0;
for(i=0;i<5;i++)
sum+=score[i];
return(sum/5);
}
f2a(int c[],int d[],int e[])
{
printf("\n\n /*Three Courses in Red*/");
for(i=0;i<5;i++)
if(c[i]<60&&d[i]<60&&e[i]<60)
printf("\n %s %s English:%d, C program:%d, Math:%d",a[i],b[i],c[i],d[i],e[i]);
}
f2b(int c[],int d[],int e[])
{
printf("\n\n /*At Least Two Courses in Red*/");
for(i=0;i<5;i++)
{
if(c[i]<60&&d[i]<60&&e[i]>=60) printf("\n %s %s English:%d, C program:%d",a[i],b[i],c[i],d[i]);
else if(c[i]<60&&d[i]>=60&&e[i]<60) printf("\n %s %s English:%d, Math:%d",a[i],b[i],c[i],e[i]);
else if(c[i]>=60&&d[i]<60&&e[i]<60) printf("\n %s %s C program:%d, Math:%d",a[i],b[i],d[i],e[i]);
else if(c[i]<60&&d[i]<60&&e[i]<60)
printf("\n %s %s English:%d, C program:%d, Math:%d",a[i],b[i],c[i],d[i],e[i]);
}
}
f3(int c[],int d[],int e[])
{
int ave[5];
printf("\n\n /*The Average Score of 3 Courses is between 85 to 90*/");
for(i=0;i<5;i++)
{
ave[i]=(c[i]+d[i]+e[i])/3;
if(ave[i]>=85&&ave[i]<=90)
printf("\n %s %s",a[i],b[i]);
}
}
max(int score[])
{
int m;
m=score[0];
for(i=1;i<5;i++)
if(m for(i=0;i<5;i++)
if(score[i]==m) printf(" %s %s %3d\t",a[i],b[i],score[i]);
}
main()
{
int c[5],d[5],e[5];
clrscr();
for(i=0;i<5;i++)
scanf("%d%d%d",&c[i],&d[i],&e[i]);
printf("\n");
for(i=0;i<5;i++)
printf(" %s %s %3d %3d %3d\n",a[i],b[i],c[i],d[i],e[i]);
printf("\n\n /*Average*/\n English:%d\tC program:%d\tMath:%d",ave(c),ave(d),ave(e));
f2a(c,d,e);
f2b(c,d,e);
f3(c,d,e);
printf("\n\n /*The Highest Score of Each Course*/");
printf("\n English:\t");
max(c);
printf("\n C program:\t");
max(d);
printf("\n Math:\t\t");
max(e);
getch();
}
程序好长,但不难。开始的时候我没有想到把i、a[][](储存学号的二维数组)和b[][](储存姓名的二维数组)设计为全局变量,但在后面的运作之中,每个函数都要用到循环,都要用到i与其个个函数都设计不如来个全局变量方便,因为i只用于循环语句,所以每次都会给它个初始值,所以自己觉得定义这个全局变量是我的一个十分明智的选择。当然a[][]和b[][]的定义也使我方便好多,它们的方便之处就随着i的增多而增多,因为是i带动它们变化的。
我不是什么天才,太难的程序我不单不会写,也看不懂,但我会循序渐进,程序就需要我一点一点地啃。路是一步一步走的,程序是一点一点渐进的。