c语言良好编程风格的形成,谈谈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

#include 

main()

{

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

if((a

{

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 

#include

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

{

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(“*********”);      //信息1else if(var == 1)

showmsg(“************”);   //信息2

….

else if(var == 40)

showmsg(“**************”); //信息41

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值