2005-12
24

程序渐进

By xrspook @ 22:16:06 归类于: 烂日记

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带动它们变化的。

我不是什么天才,太难的程序我不单不会写,也看不懂,但我会循序渐进,程序就需要我一点一点地啃。路是一步一步走的,程序是一点一点渐进的。

有话要说

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress