| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 828 人关注过本帖, 2 人收藏
标题:【转】谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯
只看楼主 加入收藏
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
结帖率:100%
收藏(2)
 问题点数:0 回复次数:3 
【转】谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯

    今天比较空,翻了下前几天的技术支持记录,有一个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

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


搜索更多相关主题的帖子: C语言 风格 学生 习惯 培养 
2010-05-27 23:37
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
还是跟这个帖子有意思 ,/
明天我来转载一篇 "如此垃圾竟然是国家级规划教材"

[ 本帖最后由 BlueGuy 于 2010-5-28 12:30 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-05-28 11:57
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
那您还是别转了,万一转来看见教材是我写的那就杯具了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-28 15:12
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 3楼 forever74
这个工程得延期几天了 ,/

我就是真命天子,顺我者生,逆我者死!
2010-05-28 18:21
快速回复:【转】谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024900 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved