现在的位置: 首页 > 综合 > 正文

谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯

2014年04月05日 ⁄ 综合 ⁄ 共 2779字 ⁄ 字号 评论关闭

    今天比较空,翻了下前几天的技术支持记录,有一个QQ对话记录比较出乎意料之外:一位同学快毕业了,还不太会或者不习惯写独立函数。仔细想想,感觉也不能怪学生,问题可能出在书本和老师上。回顾一下以前看过的C语言教程,很多示例,功能代码都写在main函数中,输出的系列信息字符串也是直接写在代码中,虽然这样比较简单,对于初学者来说,也比较容易理解,但我认为这对从一开始就培养学生的良好编程习惯是很不好的。我们与很多大学有合作关系,据我了解,在多数大学,学生所学的第一个语言就是C语言。学第一个语言养成的风格和习惯,对未来的学习和工作都会产生重要影响,因此,从一开始就应该培养学生良好的编程风格和习惯。写教程的大牛们也应该注意这一点。

    以下是对话录。同学所写的代码,反映了C语言教学中存在的一些问题,我们的当班技术支持修改后的代码,正好可以反映我们的建议。为了保护这位同学,记录中将学生的QQ用户名替换为A同学。

 

A同学 11:43:54
我想问下为什么我的代码测试不了呢

 

凯乐技术支持 11:44:10
您用的是什么版本的VU?

 

A同学 11:44:17
2.6

 

凯乐技术支持 11:44:26
具体是什么问题?

 

A同学 11:45:03
就是在VC++6.0下写了一段代码,但是用VU测试时无法输入用例啊

 

A同学 11:45:26
可能是我不太会用VU吧,所以想问问

 

凯乐技术支持 11:45:50
通过编译了吗?

 

A同学 11:46:10
是啊 在VC++6.0下可以运行结果

 

凯乐技术支持 11:46:56
先在用例代码窗口,点击“生成输入输出代码”:

 

A同学 11:47:28
我能将代码发给你帮我看看吗?

凯乐技术支持 11:47:50
好的

 

A同学 11:48:25
#include <stdio.h>
#include <math.h>
main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if((a<(b+c))&&(b<(a+c))&&(c<(a+b)))
    {
        if (a==b||b==c||a==c)
        {
            if (a==b&&b==c)
                printf("等边三角形");
            else if(a==b||a==c||b==c)
               printf("等腰三角形!");
        }
        else
            printf("一般三角形!");
    }
    else
        printf("不能构成三角形/n");
}

A同学 11:48:29
麻烦你了

 

凯乐技术支持 11:50:10
呵呵,你这样的代码怎么测试呢,实际项目中不会这样写代码的。
要把三角形函数独立出来,a b c为参数,返回值为一个表示三角形类型的整数。

 

A同学 11:50:38
那怎么修改啊

 

凯乐技术支持 11:51:12
把判断三角形的代码独立成一个函数呀

 

A同学 11:52:10
您能帮我修改下吗?谢谢

 

凯乐技术支持 11:52:30
你还是个学生吧?

 

A同学 11:52:51
是的

 

凯乐技术支持 11:53:48
我觉得你还是先学好写代码吧,单元测试迟一些再学。

 

A同学 11:54:33
不瞒您说 这是我的毕业课题

 

凯乐技术支持 11:55:27
毕业了还不会写独立函数啊?你平常写代码,都是把所有代码都写在main函数中的吗?

 

A同学 11:56:31
我没有好好学习行吗

 

A同学 11:56:47
您有必要非要这么说话吗

 

凯乐技术支持 11:59:37
这样的话就受不了啦?我也是善意啊。现在就业环境那么恶劣,我是为你着急呀。

 

(我的点评:当班技术支持是程序员而不是专职客服,说话不够婉转,这一点应该批评,不过用心是好的。帮学生修改代码也不是技术支持的职责。)

 

A同学 12:02:01
那您能帮我修改吗

 

凯乐技术支持 12:03:01
修改是小事情,这不是帮你,是害你。

 

A同学 12:04:13
您就先帮我修改一下吧

 

凯乐技术支持 12:06:31
如果你时间很急,我可以帮你改。如果还有时间,我建议你自己解决这些简单问题,并且要养成自己解决问题的习惯,否则以后怎么办呀?等你走上社会,你就会明白我的话了。

 

A同学 12:07:18
恩 我下午就要交的

 

凯乐技术支持 12:07:41
那行,我帮你改一下。

 

A同学 12:07:52
谢谢

 

凯乐技术支持 12:28:19
收一下文件

 

凯乐技术支持 12:29:08
然后测试triangle()

 12:30:56
成功发送文件“triangle.c”(1.00KB)。

triangle.c文件的内容如下:
#include <stdio.h>
#include <math.h>

enum {
TR_NOT, //非三角形
TR_EQU, //等边
TR_ISO, //等腰
TR_NOR  //一般
};

 

const char* msgs[] =
{
    "不能构成三角形/n",
    "等边三角形/n",
    "等腰三角形/n",
    "一般三角形/n"
};

int triangle(int a, int b, int c)
{
    if((a<(b+c))&&(b<(a+c))&&(c<(a+b)))
    {
      if (a==b||b==c||a==c)
      {
          if (a==b&&b==c)
             return TR_EQU;
           else if(a==b||a==c||b==c) //这个判断多余,感谢yboy8指出这一点
              return TR_ISO;
      }
      else
         return TR_NOR;
    }

    return TR_NOT;
}

 

int main()
{
    int a,b,c, ret;
    scanf("%d%d%d",&a,&b,&c);
    ret = triangle(a, b, c);
   
    printf(msgs[ret]);
    return 0;
}

    良好的可测试性和可维护性是代码的基本要求,应该一开始就培养学生这方面的意识。我在《电脑编程技巧与维护》杂志上看过一篇文章,其中有这样的代码:
if(var == 0)
  showmsg(“*********”);      //信息1
else if(var == 1)
  showmsg(“************”);   //信息2
….
else if(var == 40)
  showmsg(“**************”); //信息41

 

    如果把信息字符串独立出去,这七八十行代码,就可以用一行代码来代替。这可是在一个老牌的编程杂志上发表的文章,也许可以进一步说明,从一开始培养良好的编程风格和习惯是很重要的,要不然,这个很糟糕的风格和习惯可能很长时间都改不掉。

抱歉!评论已关闭.