C语言学习中几个常见典型错误分析
2017-07-12杨冬云
杨冬云
摘要:C语言是一门优秀,应用广泛的结构化程序设计语言,是中职计算机、机电和电子技术等专业一门理论和实践相结合的课程,教学实践中,学生常觉得c语言难学,难懂。程序不会读,也不会写,原因是多方面的,其中一个方面便是对c语言的有关编程规定不能正确理解并掌握,下面就通过把赋值运算符当成等于号、混淆break语句和contniue语句的适用范围和功能和函数的递归调用只知递不知归三个读写程序,来说明一下在读或写程序时,学生常犯的错误。指导学生如何按照C语言的有关编程规定读写程序。
关键词:C语言;中职;编程规定
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)13-0065-02
C语言是一门优秀,应用广泛的结构化程序设计语言,它具有简洁、紧凑、灵活和可移植性强等优点,深受广大编程人员的喜爱,并得到广泛的应用。《C语言程序设计》是中职计算机、机电和电子技术等专业一门理论和实践相结合的课程,学生要在学懂基本理论的前提下,学会程序设计的基本思想和问题求解方法,学会从多个角度思考和分析问题、并能解决问题。教学实践中,学生常觉得C语言难学,难懂。程序不会读,也不会写,原因是多方面的,其中一个方面便是对c语言的有关编程规定不能正确理解并掌握,下面就通过几个例子来说明一下在读或写程序时,学生常犯的错误。
1把赋值运算符当成等于号
在长期的数学学习中,我们已经习惯将“=”看成是等于号,表示等式两边相等,等式两边可以是变量,也可以是表达式。但是在C语言中,“=”是赋值运算符,它的作用是将右边表达式的值赋给左边的变量。赋值号左边一定是变量,右边是表达式。而学生如果还将其看成是等于号,则就会出现编程错误。
如例1:为满足用水量增长的需求,市里最近新建甲乙丙三个水厂,这三个水厂日供水量共计11.8万立方米。其中乙水厂的供应量是甲水厂的3倍,丙水厂的日供应量比甲水厂供水量的一半还多1万立方米。编程实现:计算并输出这三个水厂的日供水量分别是多少立方米。学生在习惯性思维的作用下,经常会随手写出这样的程序。
按我们以前的思维方式,这样解决问题是没有错的,但是程序编译执行的结果是429496704.000000-32212528.000000—102374176.000000
这个结果显然是错误的,错误的原因就是将赋值号“=”看成是等于號去编写程序。而在程序执行时的实际过程是:由于未给x、y、z赋初值,x的值就是随机数。程序执行时是将内存中x的随机值的3倍赋给了y,又将x+l赋给了x,最后又将11.8-y-z赋给x了,根本不是我们所想的是等于号,求方程解。程序应该如何修改呢?题目中只有总水量是确定的值,其余都是未知量,我们应该分析出这三个量和总水量的关系,根据题意分析,假设总水量用m表示,则x=(m-1)/4.5,则编辑程序如下:
2混淆break语句和continue语句的适用范围和功能
break语句和continue语句适用范围不同,功能也不同。C语言中规定break语句可以在switch语句和循环语句中使用。Break语句在switch语句中使用时,当语句中遇到switch语句时,即跳出switch语句。即中断语句。当Break语句在循环语句中的时候,作用是终止当前的循环语句,转去执行当前循环语句的后面语句。continue语句只能使用在循环语句中,其作用是结束本次循环,即不再执行循环体中continue语句之后的语句,直接转入下一次循环执行。学生在读写程序时往往会混淆break语句和continue语句的适用范围和功能。下面就通过一个程序阅读题,来分析一下这个问题:
例2:阅读程序,写出程序运行结果:
3函数的递归调用只知递不知归
函数的嵌套调用:函数的嵌套调用是指,在执行被调用函数时,被调用函数又调用了其他函数。主调函数调用被调函数时,执行被调函数,当被调函数执行结束时,回到主调函数调用被调函数处继续执行主调函数的后续语句。
函数的递归调用:函数的递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。
学生在不同函数的嵌套调用时,都知道执行完被调用函数后,要回到调用函数处继续执行,而一到递归调用时,就容易犯糊涂,不知道归哪去。下面就通过一个程序阅读题,来分析一下这个问题:
综上,在读写程序时,要明确C语言的规定,按照规定读写程序,才能得到正确结果。