2022年如何学习C语言 .pdf
1 怎样学习C 语言.1几点建议.2编程者说c 语言.3亲密接触C 语言.4初学者的困惑.6C 语言常见错误.7怎样学习 C 语言很多人对学习C 语言感到无从下手,经常问我同一个问题:究竟怎样学习C 语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是 C 语言。经过这些年的开发,我深深的体会到C 语言对于一个程序设计人员多么的重要,如果不懂C 语言,你想写底层程序这几乎听起来很可笑,不懂C 语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C 语言如此重要呢?第一:C 语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C 语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。第二:C 语言能够让你深入系统底层,你知道的操作系统,哪一个不是C 语言写的?所有的 windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C 语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。第三:很多新型的语言都是衍生自C 语言,C+,Java,C#,J#,perl.哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C 语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C 语言,你想加入it 行业,那么就一定要掌握好C 语言。那么究竟怎样学习C 语言呢?1:工欲善其事,必先利其器这里介绍几个学习C 语言必备的东东:一个开发环境,例如 turbo C 2.0,这个曾经占据了DOS 时代开发程序的大半个江山。但是现在 windows 时代,用turbo C 有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C+,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。一本学习教程,现在 C 语言教材多如牛毛,但推荐大家使用C 语言程序设计谭浩强主编 第二版清华大学出版社,此书编写的很适合初学者,并且内容也很精到。除此以外,现在有很多辅助学习的软件,毕竟现在是Window 时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C 语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows 下的 trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C 语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 11 页 -2 2:葵花宝典学习计算机语言最好的方法是什么?答曰:读程序。没错,读程序是学习C 语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。3:登峰造极写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io 函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有 10 个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10 个人问:“谁叫张三”。第 2 种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map 数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的数据结构清华大学出版社,希望每一个想成为程序设计高手的人研读此书。几点建议初学 C 语言的同学应该首先了解C 语言关键的核心概念(结构化、三个执行流程、优先级、指针、文件、共用体、函数、作用域、重载等),只有弄明白了这些才能在今后的学习中游刃有余的把握C 语言的精髓。这几个概念就像逻辑线一样,把整个C 语言的体系贯穿起来,给人一种“结构化”的思想体系。下面我简要谈一下这几个核心概念。1、从宏观角度来看,结构化是C 语言的编程思想基础,就是说C 语言每一个功能模块就是一个结构,每一个结构实现一个运算或一个算法,这个结构就用大括号表示“”,大括号里面的就是算法。尤其注意的是大括号的“”括在那里,就决定在哪里结束算法功能。这些是初学者经常犯的错误,往往会把算法功能的结束点弄错。2、三个执行流程就是顺序流程、条件流程、循环流程。三个流程都是计算机通用的执行流程,是必须了解的流程,每一个算法都基于这三个流程执行顺序。3、优先级是对多个函数并列时候优先算法的特权,没有注意优先级的顺序就会把算法出错,这些优先级是必须记住的。4、指针是C 语言的重要特点,是对运算速度加快运算的重要精髓。它是对数据地址的操作,而不是对数据的操作。5、文件和共用体是很简单的概念,不用多说了。文件顾名思义和日常概念一样,学过名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 11 页 -3 数据软件的都对共用体了解不是太难。6、从微观角度来看,函数是C 语言的驱动机制,所有的语句都由函数驱动来实现的。记住函数命令和相关的配置参数,就能好好的利用C 的优势。注意的是,函数不能记错,不然你将得出错的结果。如果能学会调试,那就会更深一层了解函数功能的作用。7、作用域就像使用期限一样,说明从那里到那里所起的作用,在这之外的就不起作用了(过期的东西就不值钱一样)。把握好作用域的使用方式,就能明确函数的关系,不会在巨大的函数名里面迷失方向。8、重载就是为了方便用户,使用类似于调用的机制给用户减少写入时间的功能。就像查字典一样,你不懂一个字,就要去查字典(相当于调用别的工具来实现你要做的事),而查字典是你已经学会的东西,就可以做这件事了。学习 C 语言从大体上了解还不够,要把各种原理在脑海里模拟一遍,实现把计算机C的功能在人脑里运作,就能从宏观上把握C 的步骤。编程者说 c 语言谈及 C 语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C 语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!”,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C 语言犹如“少林武功”一般博大精深,太难学了。其实就笔者认为C 语言并非是“difficult(困难)”的,只要你能理清思路,掌握它的精髓,那么自学C 语言是一件非常容易且又其乐无穷的事。今天本人就与大家一起谈谈如何学习C 语言或者说学习C 语言应从哪几方面着手。了解一些基本知识一 C 语言的背景就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,也可以说它的发展史。C 语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗W卡尼汉和丹尼斯 M利奇。C 语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C 语言逐渐脱离UNIX。1987 年美国标准化协会制定了C 语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C 语言的优点很多,主要的有如下四点:1兼备高级语言与低级语言的优点,属于一种中间语言。2它是一种结构化程序设计语言,非常适合结构化程序设计。3有较丰富的数据类型、运算符以及函数供以选用。4直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。二二大语系二种不同的学习方法笔者学习过很多程序语言,例如:C,C(C 语言的扩展),QBASIC,VB(BASIC的可视化),JAVASCRIPT,JSCRIPT,VBSCRIPT,JAVA,ASP,FOXPRO,PERL 等等,就本人实践所得,其实高级程序语言分为两大语系。一路是以C 为主的程序语言,例如:JAVASCRIPT,JAVA 等,这类语言在函数的调用,程序语句的书写,循环的控制都极为相似。另一路是以BASIC 为首的程序语言,例如:FOXPRO,VBSCRIPT 等,此类语言同样具有相似的函数调用,程序语句书写以及循环控制,但与C 语系是不同的。因此若是您以前是从 QBASIC 起家的,那么在学习C 语言前最好是先洗洗脑,千万不要把学习BASIC 的方法以及思路用在C 身上。讲到这里,我想大家对C 语言一定有了感性认识吧!下面让我们再升华一下,全方位名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 11 页 -4 亲密接触它。学习C 语言必须从以下四点入手,也就是说,只要你能掌握这四点的内容,那么基本上就大功告成了。亲密接触 C 语言一输入输出C 语言的输入输出是非常严格的,或许在其他程序语言中我们可以不关心这个问题,但在 C 语言中,我们必须要彻底了解它。由于篇幅有限,因此笔者不能详谈,有兴趣的朋友可以参考由著名程序语言教授谭浩强先生主编,由清华大学出版社出版的C 程序设计第二版。不过这里笔者还是有几点要谈一下。1二维浮点数数组的输入二维浮点数数组的输入(即:通过键盘给二维浮点数数组赋值)在很多专业书中都没有详细讲过这个问题。在给二维浮点数数组赋值时一定要先声明一个变量,接着把数值赋予这个变量,最后把变量数值赋予二维浮点数数组赋值。实例如下:#include stdio.hmain()float a23,x;int i,j;for(i=0;i2;i+)for(j=0;j3;j+)scanf(%f,&x);aij=x;不能写成:#include stdio.hmain()float a23;int i,j;for(i=0;i2;i+)for(j=0;j3;j+)scanf(%f,&aij);同样道理,在结构性浮点数组变量中也一定要按照这种格式输入。实例如下:#include stdio.hstruct student float b3;int x;a2;main()float x;int i,j;for(i=0;i2;i+)for(j=0;j3;j+)scanf(%f,&x);ai.bj=x;2注意输出格式中“”后的字符C 语言的输出说复杂不复杂,因为常用的都很简单。可说不复杂也未必,记得曾在一次等级考前辅导我们C 语言的教授讲道:“如果 C 语言要考得很难的话,根本不用考什么指针,只要专考输出格式,我想百分之九十九的学生都不及格。”当时我们无不认同。从这则事例中可以看出C 语言的输出格式之复杂程度。因此大家在学习它时千万要学会辨别输出格式中“”后的字符,每个字符都有其意义,也都有其作用。二优先级说道优先级,有很多朋友都不是很了解或说很模糊。为此笔者想先通过一个例子让各位有个概念。什么叫优先级?比方说,我们在公交车终点站排座队时总会遇到70 岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。C 程序在运行时也象排队坐车一样,首先照顾那些优先级高的运算符,若是优先级相同,那么就象遇到两位(或两位以上)70岁以上的老人那样,让他们依次上车。但是C 语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果1:结果 2,这种表达式很多朋友都知道,它的作用与IF,ELSE,名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 11 页 -5 条件判断语句很雷同,它运算时的优先级就不是按照C 语言的规则来完成的。所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。三指针就个人认为,C 语言中的指针是最有特色的,当然也是最难学的。指针说穿了,其实是变量的一种表现形式,只不过这种变量记载的不是数值而是地址。就象一个人可以用姓名来表示自己,也可以用身份证号码来表示自己一样。笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:直接寻址,间接寻址等,只有了解了这些内容以后,你再学指针就比较容易理会,毕竟C 语言是一门介于机器语言与高级语言中间的语言,没有一些硬件工作知识是很难领悟它的真谛的。然而事事并非绝对,如果你没有这些知识也不要紧,只要清楚知道以下笔者总结的二点再加上多练习便可:1指针是地址变量:它的值有两种:其一是地址,其二是内容。不同的表达方式可以取不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。例如:父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。2指针是可以运算的,它的运算法则与变量是一致的。另外,在编写一个程序时,除非万不得已,一般不要使用指针变量。因为指针是比较复杂的,用不好就“当机”。所以笔者建议各位对于指针只要能看懂就行,当然如果你是准备参加考试的就另当别论了。四函数虽说很多程序语言都有函数这一内容,但笔者觉得C 语言的函数是最有魅力的。如果你能完全掌握C 语言的函数,那么学习C就不成问题了(C是一门建立在C 语言上,但又不同于C 语言的高级程序语言,它增添了很多函数。)。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。笔者曾经作过一个比较字符串的实验,用 C语言中的strcmp()函数只要一句话,而自己编写的话30 句话都摆不平,可想而知函数是多么实用呀!写到这里笔者该告一段落了,下面送一个本人自己用C 语言编写的注册表比较程序给诸位。此段程序的注释请看“/*,*/”后的文字,程序运行时(在DOS 模式下)输入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注意字段与字段之间是有空格的。(compare 是程序名)程序代码:#include stdio.h/*定义头文件或说包含文件*/main(argc,argv)/*定义带参数的主函数*/int argc;/*定义参数类型*/char*argv;/*定义第二参数类型*/FILE*fp1,*fp2,*fp3;/*定义文件指针*/char a,b;/*定义字符变量*/if(fp1=fopen(argv1,r)=NULL)/*打开第一的注册表备份文件,如果不存在则跳出程序并显示“The file dont open!”*/printf(The file dont open!);exit(0);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 11 页 -6 if(fp2=fopen(argv2,r)=NULL)/*打开第二的注册表备份文件,如果不存在则跳出程序并显示“The file dont open!”*/printf(The file dont open!);exit(0);if(fp3=fopen(argv3,w)=NULL)/*建立新的文本文件,用于存放比较结果。*/printf(The file dont open!);exit(0);rewind(fp1);/*规定文件指针fp1 指向第一个注册表文件头部*/rewind(fp2);/*规定文件指针fp2 指向第二个注册表文件头部*/while(!feof(fp1)|!feof(fp2)/*开始比较*/a=fgetc(fp1);/*读取第一个注册表文件内容并赋予给字符变量a*/b=fgetc(fp2);/*读取第二个注册表文件内容并赋予给字符变量b*/if(a!=b)fputc(b,fp3);/*字符变量a 与 b 不相同的话,那么把不同之处写入新建的文本文件中*/if(feof(fp1)fputc(b,fp3);/*如果第一个注册表文件已经读完,第二个文件还有未读取部分,那么把第二个文件的剩余部分全部写入新建文件中*/if(feof(fp2)fputc(a,fp3);/*如果第二个注册表文件已经读完,第一个文件还有未读取部分,那么把第一个文件的剩余部分全部写入新建文件中*/fclose(fp1);/*关闭第一个注册表文件*/fclose(fp2);/*关闭第二个注册表文件*/fclose(fp3);/*关闭新建文件*/对于高深莫测的C 语言来说,寥寥3 千字并不能说清楚的什么问题。但只要您看了此文后,我想对于您学习此语言一定有很大的帮助,同时也能了知晓如何用最短的时间学会C语言以及掌握C 语言的精髓所在。另外,此文中所涉及的知识点都是笔者通过实践得出的,因此若是其他专业书籍没有讲到过的问题可以参考本文。最后祝大家学习C 语言顺利!初学者的困惑很多人学 C 语言很长一段时间了,还不知 C 究竟能干什么,以为学习 c 语言没什么用,纯粹是为了应付学校的考试.更有人说 学 C 语言?别做如此愚蠢的行为了!赶快学 C+吧!这种看法是不对的,不应该把c 跟 c+之间划起绝对的界限,过分看重c+而把 c 贬得一无是处,这是很片面的.C+功能虽然强大,但它毕竟是c 的超集,在 c+里有哪一处找不到c 的影子呢?没有 c 的支持,c+只能是无本之木。一般情况下,c+编程方式编写的程序源代码量小,但编译后的代码量较大,运行的速度略低,不过开发时的工作量和工作难度较小;而 c编程方式编写的源代码量较大,但可执行的效率高.如果一些对速度要求高,尤其是对硬件操作较多的程序,大多数还是用c 编程方式开发的(用 C 又比用汇编简单,易于实现).另外,学 Win32 C 程序设计还有助于更深入地了解Windows 的内幕和Win32 API。任何的编程语言都是一种工具,学习语言的目是要使用它来编写出实际需要的软件来,而软件作为一个用户程序,运行时要依赖操作系统,大多数人使用什么操作系统,我们就要编写出基于哪一种平台上的程序来.这样,软件才会有更大的市场。现在市面上出现的有关c 语言方面的书大多是教授DOS 下的 c,上机实习也是在Turbo C 2.0(简称 Tc)环境下转来转去.编程环境的单调总使人感到不爽.这也没办法,dos 下的 c 是最简单的,初学者当然要从最简单的入门啦.连比较有名的计算机专家谭浩强编的书也都是赞成从dos下的 c学起的.再说,一个刚刚入门的人想在windows 这样的多进程,多线程的操作系统下用 c 编程,那似乎又不太现实.(那要了解在windows 下,一个 win32 程序大体上是怎样执行的.名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 11 页 -7 要对系统有比较多的了解才行,一个初学者暂时还不具备那么多的知识)但我们的脚步又不能够只停留在dos 里,应该积极地从dos 向 windows 转变.在 dos 的时代,我们可以对dos 下的编程迷恋,但现在都是windows 横行霸道的时代了,我们就应用c 语言编写windows 平台上的程序,因时而变,学以致用.是时代使然!如果现在还是dos 雄霸天下的话,那我就不会写这篇狗屁不通的文章来遗笑大方了,不被臭鸡蛋扔死才怪呢!变法 是大势所趋的了,关键是怎么变,不单单是学习c 语言的人如此,就连学 c+的人都这样,笔者曾经在上碰到一个学了c+将近一年的小伙,居然问我,他想编一个windows 窗口,该怎么下手,如果学一门语言用了一年时间,只是学了一点语法知识,却没有编过一道程序,那实在是一种悲哀。C 语言常见错误C 语言的最大特点是:功能强、使用方便灵活。C 编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C 语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C 的学习,积累了一些C 编程时常犯的错误,写给各位学员以供参考。1.书写标识符时,忽略了大小写字母的区别。main()int a=5;printf(%d,A);编译程序把a 和 A 认为是两个不同的变量名,而显示出错信息。C 认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2.忽略了变量的类型,进行了不合法的运算。main()float a,b;printf(%d,a%b);%是求余运算,得到a/b 的整余数。整型变量a 和 b 可以进行求余运算,而实型变量则不允许进行“求余”运算。3.将字符常量与字符串常量混淆。char c;c=a;在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C 规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:a和,而把它赋给一个字符变量是不行的。4.忽略了“=”与“=”的区别。在许多高级语言中,用“=”符号作为关系运算符“等于”。如在 BASIC 程序中可以写名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 11 页 -8 if(a=3)then,但 C 语言中,“=”是赋值运算符,“=”是关系运算符。如:if(a=3)a=b;前者是进行比较,a是否和 3 相等,后者表示如果a和 3 相等,把b 值赋给 a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是 C 语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。z=x+y;t=z/100;printf(%f,t);对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和 PASCAL 不同的)。6.多加分号。对于一个复合语句,如:z=x+y;t=z/100;printf(%f,t);复合语句的花括号后不应再加分号,否则将会画蛇添足。又如:if(a%3=0);I+;本是如果3 整除 a,则 I 加 1。但由于if(a%3=0)后多加了分号,则if 语句到此结束,程序将执行 I+语句,不论3 是否整除 a,I 都将自动加1。再如:for(I=0;I5;I+);scanf(%d,&x);printf(%d,x);本意是先后输入5 个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。7.输入变量时忘记加地址运算符“&”。int a,b;scanf(%d%d,a,b);这是不合法的。Scanf 函数的作用是:按照a、b 在内存的地址将a、b 的值存进去。“&a”指 a 在内存中的地址。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 11 页 -9 8.输入数据的方式与要求不符。scanf(%d%d,&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。scanf(%d,%d,&a,&b);C 规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的。3 43:4又如:scanf(a=%d,b=%d,&a,&b);输入应如以下形式:a=3,b=49.输入字符的格式与要求不一致。在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。scanf(%c%c%c,&c1,&c2,&c3);如输入 a b c字符“a”送给 c1,字符“”送给 c2,字符“b”送给 c3,因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔。10.输入输出的数据类型与所用格式说明符不一致。例如,a 已定义为整型,b 定义为实型a=3;b=4.5;printf(%f%dn,a,b);编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。11.输入数据时,企图规定精度。scanf(%7.2f,&a);这样做是不合法的,输入数据时不能规定精度。12.switch 语句中漏写break 语句。例如:根据考试成绩的等级打印出百分制数段。switch(grade)case A:printf(85100n);case B:printf(7084n);case C:printf(6069n);case D:printf(60n);default:printf(errorn);由于漏写了break 语句,case只起标号的作用,而不起判断作用。因此,当 grade 值为 A 时,printf 函数在执行完第一个语句后接着执行第二、三、四、五个printf 函数语句。正确写法名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 11 页 -10 应在每个分支后再加上“break;”。例如case A:printf(85100n);break;13.忽视了 while 和 do-while 语句在细节上的区别。(1)main()int a=0,I;scanf(%d,&I);while(I=10)a=a+I;I+;printf(%d,a);(2)main()int a=0,I;scanf(%d,&I);do a=a+I;I+;while(I10 时,二者结果就不同了。因为 while 循环是先判断后执行,而 do-while 循环是先执行后判断。对于大于10的数 while 循环一次也不执行循环体,而do-while 语句则要执行一次循环体。14.定义数组时误用变量。int n;scanf(%d,&n);int an;数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C 不允许对数组的大小作动态定义。15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。main()static int a10=1,2,3,4,5,6,7,8,9,10;printf(%d,a10);C 语言规定:定义时用a10,表示 a 数组有 10 个元素。其下标值由0 开始,所以数组元素a10是不存在的。16.初始化数组时,未使用静态存储。int a3=0,1,2;这样初始化数组是不对的。C 语言规定只有静态存储(static)数组和外部存储名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 11 页 -11(exterm)数组才能初始化。应改为:static int a3=0,1,2;17.在不应加地址运算符&的位置加了地址运算符。scanf(%s,&str);C 语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且 scanf 函数中的输入项是字符数组名,不必要再加地址符&。应改为:scanf(%s,str);18.同时定义了形参和函数中的局部变量。int max(x,y)int x,y,z;z=xy?x:y;return(z);形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:int max(x,y)int x,y;int z;z=xy?x:y;return(z);名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 11 页 -