ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:22.08KB ,
资源ID:16986629      下载积分:6 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16986629.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(初学者学习C语言中常见问题的探讨.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

初学者学习C语言中常见问题的探讨.docx

1、初学者学习C语言中常见问题的探讨初学者学习 C 语言中常见问题的探讨摘要: C 语言是编程领域中很有影响力的一种程序设 计语言。它简洁、紧凑,使用方便、灵活,并且具备高级语 言和低级语言的特征。 由于 C 语言的编译系统对语法的检查 不如其他语言那么严格, 因此 C 语言对使用者的要求比较高 . 笔者结合实际教学中的经验, 分类列举出 C 语言中常见的错 误进行分析与探讨,以此对初学者给予借鉴。关键词: C 语言; 初学者; 常见错误; 解决方法 中图分类号: TP311 文献标识码: A 文章编号: 1009-3044(2014)13-3012-04Study of Common Probl

2、ems in C Language BeginnersHUO Zhuo-qun( Lecturer of Electronic Information Department of Anhui Finance and Trade Vocational College ,Hefei 230601 , China)Abstract : C language is a very influential programming language in the field . It is concise , compact, easy, flexible , and has both the charac

3、teristics of high and low level languages. Because the examine of grammer by the compiling system of C language is not as strict as others , it has higher standard for its users . Combined with my teaching experience , I list common mistakes in C language, then analysis and discuss, hoping helpful f

4、or beginners.Key words : C language; beginner; common errors ; solution在计算机教育方面, C 语言是为数不多的国内外能同步 的程序设计语言之一,可见,它在高校理工类专业基础课程 中的重要地位。对于刚进入大学生活的学生们,开始学习 C 语言课程,会感觉 C 语言的知识点多、理论性强、具有严密 的逻辑性,学习难度较大。授课教师在课堂教学和实训环节 中,发现学生们常易出现许多同性的问题,而这些或多或少 的问题给学生们带来了很大的麻烦,甚至产生较强的挫败 感。该文结合了笔者多年 C 语言教学经验,将常见问题进行 分析与探讨。如下将

5、以“陷阱”分类阐述,重点让初学者能 够通过具体示例,吸取他人所犯错误的经验教训。1 词法“陷阱” 试想下,当我们阅读一个句子时,我们并不去考虑组成 这个句子的单词中单个字母的含义,而是会把单词作为一个 整体来理解。的确,字母本身并没有什么意义,而是我们将 字母组成单词,然后给单词赋予一定的意义。对于 C 语言编 写程序,也是一样的道理。“符号”是程序的一个基本组成单位,作用相当于一个句子中的单词。如下将讨论符号以及符号间的一些常见问 题。1.1“ =”不同于“ =”在 C 语言中,符号“ =”为赋值运算符,符号“ = ”为 比较运算符。一般的,赋值运算相对于比较运算出现得更频 繁,以此字符数较

6、少的“ =”被赋予了赋值运算的含义。学 生在程序设计中,往往本意想用作比较运算,却可能无意中 误写成赋值运算。如示例 1:main() inta ,b; scanf(%d%d ,&a,&b );if (a=b) printf (a, b 相等 n);else printf (a, b 不相等 n) ; 执行程序时会发现即使输入 a, b 的值不相同, 输出结果 仍然是“ a, b 相等”。此问题的原因就在于 if 中的条件误将 赋值运算符“ = = ”写成了比较运算符“ =”。1.2“ xyz ”与“ xy&ybc) printf (a 最大 n);if (bac) printf (b 最大

7、n);if (cba) printf (c 最大 n) ; 执行程序时,输入“ 1 2 3”或“ 3 2 1”,没有输出结果。此问题在于对“ abc”关系运算符应用的误解。比如:输 入“1 2 3”,分析“if( cba)”的结果,由于关系符“ ” 的结合性自左向右,即“ 32”比较的结果为“真” 。在 C 语 言关系运算中,以“ 1”代表“真” ,以“ 0”代表“假”,所 以最终比较的是“ 11”,自然运算结果为“假” ,也就不会 出现预期的输出“ c最大”。因此,正确代码应将三段条件结 构依次修改为: if (ab&ac )、if (ba&bc )、if( cb&ca )。1.3scanf

8、 ()函数的几点注意问题1.3.1输入数据的方式与要求不符因 C 语言规定: 如果在“格式控制” 字符串中除了格式 说明以外还有其它字符则在输入数据时应输入与这些字符 相同的字符。比如: scanf(%d, %d, &a, &b);输入时, 如果用空格作两个数据间的分隔符输入: 4 5,则不合法。 合法的输入形式应是: 4, 5再如: scanf(a=%d, b=%d, &a, &b); 正确的输入形式应是: a=3, b=41.3.2输入数据中的空格和回车scanf ()函数,在用“ %c”格式声明输入字符时,有不 同于其他格式类型需注意的地方。 字符格式类型中, 空格符、 转义字符都作为有

9、效字符;而对于数值型数据,空格符、回 车键、Tab键或非法数值字符均认为数值字符输入的终止符。如下示例 3:main()char c1 ,c2; int d1,d2;scanf( %c%c , &c1 , &c2 );scanf( %d%d ,&d1 ,&d2 );printf (c仁。,c2=%cn, cl, c2);printf(dl=%d,d2=%dn,di,d2); 输入:ab123 45输出:c1=a, c2=bd1=123, d2=45输入:a b12345 78输出:c1=a, c2=d1=12345, d2=78如下示例 4:main() chargender , ms;pri

10、ntf (请输入性别(f/m ) n);scanf(%c,&gender);printf (请输入婚姻状况(y/n) n); scanf(%c,&ms);printf (性别是:%c,婚姻状况:cn, gender, ms); 执行时输入“ f ”,结果没有等输入(y/n)就显示结果如 下图 1。不难发现字符变量 ms得到的字符为“回车”,即输入“f” 后用户敲入的“回车键” 。如何避免此种现象的产生,可以 采取以下几种方法。方法一:规避编译器误将回车键作为字符存储至字符变量 ms 中,可以使用 scanf ( n%c, &ms );方法二:在两次输入语句中间加入清除缓冲流的语句, fflus

11、h(stdin);改进后,正确执行结果如图 2。图1 示例 4运行错误结果图 图2 示例 4-2运行正确结 果图1.4字符与字符串C 语言中,单引号和双引号含义迥异,在某些情况下如 果把两者弄混,编译器并不会检测报错,从而在运行时会产 生难以预料的结果。用单引号引起来的一个字符实际上代表一个整数,整数 值对应该字符在编译器采用字符集中的序列集。用双引号引 起来的字符串,代表着一个指向无名数组起始字符的指针, 该数组被双引号之间的字符以及一个空字符、 0初始化。具体不同,如下示例 5:main() printf (n); printf (n); printf ( 101); 运行结果如下图3,如

12、果语句换成 printf (n);虽编 译时没有异常,但运行时应用程序错误,具体问题如图 4。图 3 示例 5运行结果图 图 4 示例 5错误截图2语法“陷阱”要理解一个 C 程序,仅仅理解组成该程序的符号是不够 的。初学者还必须理解这些符号是如何组成表达式、语句和 程序的,有时候这些定义和直觉相悖,容易引起混淆。下面 就讨论一些容易产生问题的语法结构。2.1语句结束符:分号的使用在 C 程序中如果不小心多写了一个分号可能不会造成不 良后果,因为这实际上产生一个空语句。但是也有重要的例外,在 if 或者 while 子句之后需要紧跟一条语句时,如果此 时多加了一个分号,就会产生出人意料的结果。

13、示例 6:main() int x=2 ;if (x2)printf (x2 ); 程序运行结果没有输出。 但如果if (x2)条件后面加上分号,则输出“ x2 ”同样的道理,如下,正常输出结果为“ 543”;而如果 while 子句后加上分号,此程序变成了“死 循环”。示例 7:main() int x=5 ;while (x2) printf ( %d , x);x ; 2.2switch 语句C 语言的 switch 语句控制流能够依次通过并执行各个case部分,这一点是 C语言的不同之处。如下分析有无“ break ”语句的效果,示例 8:main() int color=1 ;swi

14、tch( color) case 1: printf ( red ); break; case 2: printf (blue ); break; case 3: printf (yellow ); break; 程序运行结果为:red。如果将程序中三个“ break”全 部删除,程序运行结果为: redblueyellow 。原因是 C 语言中 的 switch 语句在执行了控制流程中的第一个之后, 会自然而 然地顺序执行下去,直到最后一个 case语句。 实际中,C语言中switch语句的这种特性,既是它的优点,又是 它的一大弱点。说到弱点是因为初学者很容易遗漏各个 case 后面的 br

15、eak 语句,造成难以理解的程序结果。说到优势是 因为当程序员有意的略去一个 break 语句,则可以实现多个 分支共同作用处理,重要的是看程序员如何应用。2.3else “悬挂”引发的问题此问题是大多数初学者很容易弄错, 而且并非 C 语言独 有,其他语言也会让程序员们常常失误。在应用多支路的程 序设计中,往往会用到 if 的嵌套结构,常常容易出现错误。如实现如下的分段函数。程序代码示例 9:int main () int x , y ;scanf(%d , &x );y=0;if ( x=0 )if (x0)y=5;elsey=-5;printf (y=%d n, y); 如上代码在执行测

16、试时会发现实际输出结果与编程者 的愿望相去甚远。原因在于 C 语言中有这样的规则, else 总 是与同一对括号内最近的缺少对于 else 部分的 if 结合匹配。 也就是说,并不单单是 x=0)if ( x0) y=5 ; else y=-5;此时, else 并没有同离它更近的第二个 if 匹配,而是与 第一个 if 结合,因为第二个 if 已经被括号“封闭”起来了, 构成了 if 的嵌套结构。3语义“陷阱”3.1整数溢出C 语言提供的数据类型有许多,其中整型数据提供了三 种不同长度的类别: short int、int 和 long i nt 。不管是哪种数 据类型都有一个固定的长度,它能

17、存储的最大值是一个固定 的整数,当尝试去存储一个大于这个固定最大值时,将会导 致整数溢出 .例如:求满足条件 1+2+3+, +n 32767的最大整数n, 如下实例 10:main()int n=1 , sum=0;while (sumy ), 此时即使 n=0 时,也不会出现“ 0 作为除数”的错误。原因 就是因为当 n=0 时, n! =0 的表达式为 0,不会再运算到后 面的表达式。C 语言中某些运算符总是以一种已知的、规定的顺序来对其操作数进行求值,而另外一些则不是这样的。再如: ab&cd ;C 语言中 ab 应该首先被求值,如果 a 小于 b, 则进一步对 c2? 3: 4,由于

18、12结果为假,则最 终表达式值为 4 。而逗号运算符,首先对左侧操作数求值, 然后该值被“丢弃” ,再对右侧操作数求值。如: a=1 , 2, 3; 最终 a 的值为 3。4总结 本文笔者通过多年的教学经验总结出一些应用性实例, 针对初学者在学习 C 语言时易犯的错误, 分类讨论后给予错 误分析,并提出相应的解决方案。如想熟练掌握 C 语言,需 要学生们不断地总结分析,大量的上机实践,这样才能积累 更多的程序设计经验。参考文献:1张悦 . 一种基于程序结构的程序主变元分析与确定 方法研究 D. 北京:北京化工大学, 2008.2常鑫.C语言程序设计的输入输出J.内蒙古科技与经济, 2012(1).3雷萌. C 语言疑惑经验谈 J .软件导刊, 2011( 3) .4朱一峰.C语言常见错误分析及解决方法 J.辽宁师 专学报, 2009,11( 4).5张海燕.C语言学习中的难点浅析J.科技资讯,2008 (29).

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2