零基础C语言学习方法
一、要读就读好书,否则不如不读
所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。
大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以百度一下:)
Kernighan和Ritchie的.《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,二者可能会有些出入,建议按照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。
如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。
切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。
二、Unix/Linux还是Windows,这是个很大的问题
不同的编程环境会造就出不同思维的程序员。Windows的程序员大多依赖集成开发环境,比如Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!了,而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。
对于一个只懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等
所以我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC 2.0编译出32位程序,不过那过于复杂了)。
等你学完一本C语言的教材,你一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的(比如《C专家编程》)。转变的过程是痛苦的,你需要面对的是各种纷繁复杂的命令,完全不同于Windows平台的思考方式,但是这种痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你可以找到无数优秀的源代码供你尽情阅读,你可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格
归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。
三、万事俱备,你就是东风
书已选定,环境配置完成,正所谓万事俱备,只欠你自己的努力了。请从书的前言开始,仔细地阅读手头的教材,很多人看书喜欢直接从第一章开始看,这是错误的做法。前言是作者对整本书的大体介绍,作者一般会告诉你需要什么基础才能够顺利阅读本书,这可以帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下目录,了解一下书的整体结构,顺便给自己安排一下学习计划。
学习C语言,必需注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因。出了书本上有的例子,自己还要“创造”一些例子,比如学习运算符优先级的时候,可以写几个相同的表达式,在不同的位置加上括号,看看有哪些不同的行为,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的例子以及改造之后的例子,还有自己“创造”的例子,都应该仔细地归类保存,并且要在源代码中写上简短的注释,阐述这个例子的意图。
例子之后就是习题了,我建议初学者把所有的习题都独立做一遍,然后对照答案的代码,看看自己的代码有那些不足,再试着修改自己的代码。很多人不重视习题,这是极大的错误,因为作者通常会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。
也许你认为这样学习太慢,其实不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完成数千行乃至上万行的代码,无论是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔财富。以我自己举例,阅读《Windows核心编程》时(我只阅读了3/4的内容),除了抄书上的代码,还自己写了很多例子,一共有5574行(用unix下的wc工具统计),时隔多日,我早已记不清Windows的系统编程了,但只要花几分钟翻出以前的代码看看,便会重新了然于胸。所谓好记性不如烂笔头,就是这个道理。
仔细读书、认真抄写源代码、独立完成习题外加更进一步的实验,最后将所有的代码留下,成为自己的经验和财富,绝对的辛苦,也绝对的事半功倍。当然,这种方式只适合学习需要精通的技术,如果不是学习C语言,你还要具体情况具体分析。
关键词:非计算机专业,C语言程序设计,网络资源,课程教学,探讨
对大多数在校非计算机专业大学生来说, “C语言程序设计基础”是一门必修的公共计算机基础课, 是学生应该掌握的一门计算机辅助工具, 对今后的学习和工作有很大帮助。它是一门实践性很强的课程。该课程的目的, 不仅仅是为了学生学习某种特定的语言, 更重要的是学习程序设计的思想和算法, 为后续的学习奠定基础。这既要求学生掌握“C语言程序设计基础”课程的基础知识, 又要求学生亲自动手编程, 并且在计算机上进行调试。同时, 这门课程也是“全国非计算机专业学生计算机应用能力水平考试”二级考试的主要语种之一。因此, 这门课程对非计算机专业的大学生来说, 是很重要的一门课程, 是衡量他们程序设计能力的一种标准。
在这个信息发达的时代, 学生对计算机的基本操作都很熟练。但是, 对于编程语言, 他们是第一次接触, 再加上大学生的课程多、进度快等因素, 导致学生在开始学习这门课程时难免会感到抽象和吃力。在大学院校, 对非计算机专业大学生的培养目标是:通过理论和实践教学, 使学生较好地掌握C语言各方面的知识, 掌握基本的程序设计过程和技巧, 具备初步的高级语言程序设计能力, 并能够熟练运用Visual C++6.0集成环境进行C语言的编写、编译与调试, 达到二级考试要求。因此, 要想使学生能够达到教学目标, 提高学生的编程能力, 除了要理解该课程的基础知识, 重要的是要经常上机编程调试, 对常用的编程思想进行实现。由于课程学时有限, 利用上课时间进行实验的次数有限, 即实际上机实验的次数较少, 对常用的算法无法达到灵活应用, 因此, 本人提出一种“课堂教学、网络教学和实践教学”相结合的立体化教学模式, 课堂教学采用多元化的教学方法和教学手段, 网络教学提供丰富的教学资源, 实践教学以开发学生的能力为主。
理论课堂教学形式采用“以多媒体教学为主, 板书为辅, 现场编演示”的方式, 使课堂教学与实验教学相结合;课堂教学方法采用“项目驱动教学法”, 在教学过程中以一个项目为主线展开, 把相关的知识点融入到项目的各个环节之中, 层层推进项目。实验教学采用“问题探究教学法”。在实验教学中, 以开发学生的能力为主, 教师根据教学要求和教学的重点、难点, 设计问题来组织教学, 学生通过分析问题, 建立数学模型、确定算法、编写程序、调试程序。
实践教学重视编程培养、强化并提高学生的动手实践技能, 在实践中培养学生的程序设计的基本思想和实践编程解决实际问题的基本能力。结合学生的专业进行教学, 提高学生在专业领域内的计算机应用、开发和创新能力, 使学生在未来的工作中能利用计算机解决本专业领域的难题。
在课程讲授阶段, 主要讲授“C语言程序设计基础”的基础知识, 即C语言的基本语法、程序设计的基本思想、结构化程序设计的一般方法, 使学生能够了解程序设计的整体结构以及语法要求。只有知道怎样去编程, 才能知道如何去编程。知道基础知识之后, 就是去上机编程、调试。实验阶段就是对课堂所学知识的实现和应用, 通过上机编程、调试过程, 检查自己对知识掌握和理解的情况。同时, 通过调试过程中出现的问题, 让学生掌握一些常见错误的处理方法和解决技巧。
在程序的编写和调试阶段, 虽然教师能够帮助学生解决一些常见的错误, 但是, 学生在课下做作业或练习时出现的问题, 常常不能得到及时的解决。为此, 本教研室所有教师, 利用空闲时间, 建立了“C语言程序设计基础”课程网站, 在此网站上, 开设了理论教学、实验教学、学习资料、开放创新实验以及互动等栏目。
网络教学利用网络资源平台, 学生自主学习, 师生之间、学生之间可以同步或异步、同地或异地进行交互, 使其成为课堂教学的有益补充。建设和完善学生自主学习网络平台, 课程的各类教学资源均放置在网上, 学生可以通过网络平台自主学习、自我测试、与教师进行交流、检查学习效果等, 为学生自主学习提供更广阔的空间。 (网络资源平台登录界面如下图1)
在理论教学栏目中, 有课程简介、教学大纲、教学进程、电子教案、电子课件、习题答案、例题代码等。在实验教学栏目中, 有实验教学大纲、实验项目卡、实验题目、进阶实验、常见错误分析、VC++6.0在线帮助等。学习资料栏目有学习方法、C语言编程100例、同步习题、常见函数、常见错误、二级试题以及C语言精髓总结等。在开放创新实验栏目, 有综合实训和嵌入式C程序设计等; (开放创新实验栏目界面如下图2)
在互动栏目, 有作业、答疑、论坛和网络考试等。学生利用课余时间, 可以登录学校网站, 进入我们的课程网络中心, 在网上进行查找资料、答疑、询问等。课下学生如有问题就可以在网上进行答疑, 教师也可以对学生的作业在网上进行批阅。这样既方便了学生, 也方便了教师, 达到良好的教学效果。 (教师与学生互动界面如下图3)
总之, 本人认为, 本文提出的这种“课堂教学、网络教学和实践教学”相结合的立体化教学模式是一种较好的教学方法, 并在教学过程中得到了证实。
参考文献
[1]张玉春, 孙大元.C语言程序设计教程[M].北京:清华大学出版社, 2013.
[2]孙大元, 张玉春.C语言程序设计实验指导与习题解析[M].北京:清华大学出版社, 2013.
[3]赵永华.基于能力培养的微机原理与接口技术课程的教学改革探索[J].吉林省教育学院学报, 2013.
一些CT型单色器存在光栅零级回反现象,这会引起严重的杂散光问题。从球面准直反射镜及光栅系统的基本几何关系入手,运用几何光学原理入手,分析了CT型单色器光栅准直镜系统产生零级回反的充分必要条件,即零级光柱落在第一准直镜反射面,同时光栅一部分位置落入第一准直球面镜的边缘法线以内。从而提出了在初始设计计算阶段避免光栅准直镜系统产生回反的理论措施及设计计算方法。即在设计阶段适当增加入射角,以及适当增加光栅与第一准直镜的相对距离。从而使得光栅位置全部落在第一准直镜边缘法线以外,因此能够确保系统无零级回反产生。
关键词:
CT型光谱仪; 光栅; 单色器; 分光光度计; 准直镜; 回反光谱
中图分类号: TH 744.1文献标识码: Adoi: 10.3969/j.issn.10055630.2012.06.013
引言
CT(CzernyTurner)型单色器系统如果设计不当,往往会使光栅的零级存在二次回反现象,从而产生附加的衍射杂光[12]。著名光栅制造商HoribaJobin Yvone(JY)公司推荐的典型补救措施是在光栅的回反部位(光栅中间)放置覆盖带,图1所示为目前国内外很流行使用的一款国外某公司DR5000 型分光光度计就是采取这种措施。由于其使用了JY的1200线闪耀光栅,闪耀波长250 nm,使用+1级光谱,有明显零级回反,所以采用了如图1所示光栅中左位置放置黑色覆盖带的补救措施。
但是无论二次衍射还是放置覆盖带,都会不同程度影响单色器的性能。如何使系统在使用波段范围避免二次回反发生,才是解决问题的根本所在。
1CT型单色仪的零级回反
CT型单色仪的零级回反是指:由光栅零级产生的光束照射到准直球面反射镜,复被反射镜反射回到光栅工作面上的现象。在波长范围覆盖190~1 100 nm的光谱仪中,这种情况最容易发生在光栅转角处于短波段,当光栅与准直镜处于某种充要条件时就会产生。对于光谱仪来说,零级以及各级回反都产生杂光,而且衍射杂光不仅仅由回反产生。但是零级回反一但发生,其副作用较其它原因要大得多。仅就回反而言,一旦合理采用几何光学原理设计避免了零级回反,其他各级回反也就同时避免。至于其它杂光的避免还需要不同的措施,比如安装高通、带通滤光片等,在此不作论述。所以以下先以第一准直镜为例集中进行零级回反问题分析。其后第二准直镜同理类推。
第一,(必要条件)当光栅的零级光束由于光栅转动开始进入第一准直镜,如图2所示。当光谱仪由短波向长波进行光谱波长扫描时,零级光束的方向随着光栅的转动而改变,逐渐入射到第一准直镜,该球面反射镜就有可能将此零级光束回反到光栅的工作面(即零级回反必要条件)。
1.每个C程序有且只有一个主函数main(),且程序必须从main()函数开始执行,并在main()函数中结束。
2.在C语言中,用e来表示科学计数法时,规定在e的前面必须有数字,后面必须为整数。
3.用单引号括起来的一个字符常量只能存放一个字符;C语言中没有字符串变量,只能用字符数组来存储字符串。
4.外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。
5.在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内有效。
6.用sizeof(int)计算int类型数据的字节数。
7.C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。
8.预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。
9.feof函数的作用是检查文件是否结束,当结束时返回的值为非零,否则为零。
10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。
11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。
12.静态局部变量,只有当程序结束后,其值才释放。
13.当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元素的地址。
14.算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入时,其结果相同;算法正确的程序最终一定会结束。15.在C语言中,预处理命令行都以“#”开头;当需要时才用#include
17.共用体变量不能作为函数的参数,也不能使函数带回共用体变量。
18.指向函数的指针变量的定义形式为:数据类型(*指针变量)();,因此其为指向函数的指针变量。
19.用C语言编写的代码程序是源程序,只有通过编译、连接才能进行。
20.在说明为static时,其生存期得到延长,而其作用域并没有改
变,在定义后系统会自动帮它赋值为0,static为关键字不能被用作它用。
21.频繁地使用空语句会降低程序的可读性和运算速度。22.运算符%两边都应是整数,赋值语句左边应该是变量,而非表达式,强制转换语句强制类型应加括号。
23.在逻辑运算符中,其两侧的运算符对象为任意合法的表达式即可。
24.函数fread(&Iarray,2,16,fp)的功能是,从fp所指的数据文件中读取16次2字节的数据存储到数组Iarray中。25.整个流式文件也可以随机存取数据,C语言文件中有好多函数可以达到写入数据时,未经输入数据,达到不覆盖的目的,在进行写操作时,系统会自动关闭文件。
26.使用putchar、getchat、puts、gets、printf、scanf函数时,必须在程序的开头出现包含头文件#include”stdio.h”的命令行,而使用字符串处理函数时,必须在程序的开头出现包含头文件#include”string.h”命令行,而使用数学函数时,必须在程序的开头出现包含头文件#include”math.h”的命令行。
27.一个斜杠与小于等于127任意数字按一个字符计算,一个斜杠与任意一个字符按一个字符计算。
28.一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现多种算法。
29.根据C语言规定,注释语句可以换行写,并且一个“/*”和
其后紧跟的第一个“*/”中间的部分是注释内容,且注释内容不参与程序的运行。例如:b=0;/*b=20;给b赋值*/ 则b=0。30.sizeof是求字节数的运算符,包括‘’,而strlen是求字符串的实际长度的函数,不包括‘’,以‘’作为结束。31.在函数声明时,其中的形参变量、个数、函数的类型必须一致。
32.C语言源程序经编译后生成后缀为.obj的目标程序;C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件;用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中。并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。
33.switch括号后的表达式可以使任何表达式;case后的表达式必须是常量表达式,常量表达式中不能出现变量,且类型必须是整数、字符型或枚举型。
34.C程序必须由一个或一个以上的函数组成;函数调用可以作为一个独立的语句存在;若函数有返回值,必须通过return语句返回。
35.在C语言中,数据只能从实参单向传递给形参,称为“按值”传递。【在实参传递到形参时,是数值传递,而不是地址传递,形参中值的改变不会影响实参中的值。】
36.可以用typedef声明新的类型名来代替已有的类型名,而不能
增加新的类型。
37.在没有限制输出宽度时,一般浮点数的小数位数是6位,不管输出格式是%f或lf%均如此。
38.C语言中,函数的隐含存储类别是无存储类别。
39.当实参传递到形参时,地址传递时形参的改变影响实参。40.串的长度指的是串中的字符的个数,且其字符个数可以为零。41.C语言中数据类型有整型、实型、字符型等,实行数据分为单精度型和双精度型两种。
42.整型数组只能一个一个地输入或输出,而在字符型数组中可以对字符串整体地输入与输出。
43.C语言中,文件型指针变量的定义形式为:FILE *文件型指针名。C语言中对二进制文件的访问速度比文本文件快;C语言中,随机文件以二进制代码形式存储数据;C语言中的文本文件以ASCII码形式存储数据。
44.因为#define是宏定义的标志,而不是C语句,而printf是输出函数,因此其是C语句。
45.在实参传递给形参时,地址传递时能够改变,而数值传递时则不变。
46.在scanf函数中,必须含有输入项,并且需含有与之一一对应的转换说明符,在scanf函数的格式字符前可以加入一个正整数指定输入数据的宽度,但不可以实数指定小数位的宽度,输入项是地址表达式。
47.switch语句使用注意事项:(1)switch语句与if语句不同,仅能判断一种关系:是否恒等;(2)switch语句中case子句的常量可以使整型常量、字符型常量、枚举型数据,或是整型常量表达式,不允许变量;(3)在同一个switch中,case子句的常量不能相同,在嵌套的switch语句中,不同层次的switch之间,可有相同的常量;(4)default子句可以省略。例如:default:printf(“En”);(5)case和default子句只能在switch语句中使用,且case和default只起标号作用,可出现在switch中的任何位置;(6)case和default子句后面的语句序列允许由多个可执行语句组成,且不必用“{}”括起来,也可以为空语句;(7)switch语句中可省略break语句,但省略后会改变流程。
48.break语句是限定转向语句,它使流程跳出所在的结构,把流程转向所在结构之后。continue语句被称为继续语句。该语句的功能是使本次循环提前结束,即跳过循环体中continue语句后面尚未执行的循环体语句,继续进行下一次循环的条件判别。
49.在C语言中,一个程序必须有一个main()函数,但是其文件就不一定,因为其可以通过链接来实现多个子函数放到这个主函数中,主函数的位置是不固定的,可以根据自己的爱好和习惯来使用,在C语言中任何函数都不能调用主函数,且与函数的位置有关。在C程序的函数中不能定义另一个函
数。
50.在用fprintf输入时,要将其转换为二进制数形式放到文件中。51.由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。而目标程序为“.obj”,可执行程序为“.exe”。52.在C语言中,合法的标识符可以由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
53.C语言规定必须以main作为主函数名。程序要从main()函数开始执行,最后在main()函数中结束。54.赋值运算符左侧的操作数必须是一个变量。
55.在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。
56.在一个C语言源程序文件中所定义的全局变量,其作用域为:由具体定义位置和extern说明来决定范围。【全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序该变量是一个已在外部定义了的全局变量,这时全局变量的作用域从extern说明处起,延伸到该函数末尾。】
57.C语言中,凡是以“#”号开头的行,都成为“编译预处理”。对C原程序进行编译前,由编译预处理程序对这些变异预处理命令进行处理。
58.typedef语句的作用仅仅是用“标识符”来表示已存在的“类型名”,并未产生新的数据类型。
59.共用体变量中的所有成员共享一段公共存储区,所有成员的首地址相同。在每一个时刻所有的成员中只有一个有效,即只有最后一个被赋值的成员有效,其余的成员无效。60.C语言中注释可以出现在任意位置;C语言一行内可以写多个语句,一个语句可以写在多行上;C语言编写的程序可以放在多个程序文件中。
61.标识符只能由数字、字母和下划线组成,并且只能以字母和下划线开头。
62.在用基本输出语句printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出,如果格式说明个数多余输出项个数,则对于多余的格式项输出不定制或0。
63.二维数组定义和初始化允许省略行下标,不允许省略列下标。64.预处理命令行是在系统对原程序进行编译之前进行处理的,不是在程序执行的过程中。
65.gets和getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入。
66.动态变量和静态变量都是内存变量,而寄存器变量不保存在内存上,而是直接存储在CPU的寄存器中。变量的存储类别有自动、静态、寄存器、外部。
67.C语言的源程序是由函数构成的,其基本单位是函数,每一个函数完成相对独立的功能,其中至少包括一个主函数;C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上;C语言规定每个语句以分号结束。可随时添加注释,对程序没影响。
68.由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”。由汇编语言编写的程序称为“汇编程序”。对于计算机本身来说,它只能接收和处理由0到1的代码构成的二进制指令和数据。所以计算机能识别的程序是“目标程序”。而计算机可以直接执行的是可执行程序,即后缀为.exe的程序。
69.C语言源程序不能表示二进制,她
在C语言中,所有的数值型常量都带有符号,所以整型数量只区别整型和长整型两种形式,整型常量和长整型常量均可用十进制、八进制、十六进制3种形式表示。
70.宏名没有大小写限制。宏定义可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。宏代换可以代替任何数据类型,不受数据类型的限制。函数影响运行时间,宏调用影响编译时间。
71.字符数组可以只存放普通字符,不存放字符串。此时该字符数组没有存放结束标志‘’。
1.创造语言环境:学习英语最有效的方法是尽可能多地创造语言环境。可以使用英语原版电影、英语歌曲、英语新闻等,帮助自己在日常生活中更好地使用英语。
2.掌握基础知识:学习英语最基本的知识包括语法、单词、音标等,这些基础知识是学习英语的基础。
3.大量阅读和听力练习:阅读和听力是学习英语的重要方法,可以通过大量阅读和听力练习,提高自己的英语水平。
4.参加英语培训班或语言交流活动:参加英语培训班或语言交流活动可以帮助自己更好地掌握英语,并且结交更多的英语爱好者。
5.多说多练:学习英语最有效的方法是多说多练,可以找朋友或家人一起练习口语,或者参加英语角等语言交流活动。
1、从单词做起 任何的语言都是以单词为基础,我认为要去摆脱死记硬背的老模式了,不但效率低还会让我们引起抵触情绪,越背越烦,最好的方法是让背单词在练习和应用中进行,遇到不会的词一定去查把它搞明白,保证印象最深刻。
2、看美剧练听力 看美剧是学习英语的一个非常高效的方法,通过看美剧不但可以培养语感,纠正发音,而且还有助于提高学习的兴趣,选择的美剧最好是带有中英双语字幕的,让原本单一乏味的学习变得更加生动有趣,产生的效果更好。
3、学唱英文歌 唱英语歌对学习英语的帮助也是很大的,通过音符的帮助,英语在我们的大脑中会产生深刻的记忆。
4、找人对话平时可以和一些同样在学英语的朋友在一起的时候用英语交流,这样可以增加学习的兴趣,并且可以找到自身的差距。
5、需找学习的快乐 任何的学习并不都是枯燥乏味的,如果有的话只因为你没有目标性和成就 感,你所学的东西以后不一定什么时候就会派上大用处,先给自己定一个小目标吧。
6、持之以恒的决心 想要获得任何的成功都离不开持之以恒,学习语言更是如此,需要有一个持续的过程才能培养出语感,所以说半途而废只能使得前功尽弃。
高二英语阅读理解难题策略
1.立足课文教学,训练阅读思维
通过以上对考试英语阅读理解题的分析,可以看出考试英语命题的趋势是“突出能力,侧重思维”。着重考查学生的观察、分析、对比、联想和判断等思维能力。所以,教学中我们应充分利用课文内容,对学生进行有效的阅读训练,提高其阅读能力。包括对文章中字词句的表层理解(包括辨认词义、句法结构等)以及对文章的结构、主旨进行分析与逻辑判断。从而深刻理解全文,并在此基础上引导站在新的高度上再读课文,领会文章中事件的背景和结局、主要人物的评析和作者的观点意图等。
2.拓宽英语阅读空间
尽管与以往相比,目前高中英语教科书所提供的阅读量有较大幅度的增加,但离大纲的要求还相距甚远,仅限于课文的阅读教学是远远不够的。所以,教师要精心选择、补充阅读材料,以拓宽阅读内容视角,增加阅读量。选择体裁多样(如叙述、描写、应用、说明、议论等文体皆可)、题材广泛(如社会政治经济、日常生活、史地常识、科普文章等)、篇幅适当、内涵丰富、难度适中的阅读材料。特别是具有时代感,异国文化背景浓厚的作品、科技动态、时事新闻等方面的文章,以获取新信息,增长新知识,形成新思维,以有利于语言知识的运用和阅读理解分析题的解答。
3.讲究阅读方法,掌握阅读技巧
考试阅读理解题内容多,时间紧,不仅需要学生具备扎实的基础知识,而且还需要较快的阅读速度。所以,阅读的方法和技巧就显得非常重要。依据前面对英语阅读理解题的分析,我们在平时的教学和训练中,必须重视阅读的方法和技巧的生成。如引导学生寻找主题句;养成辨认和记忆具体事实、重要细节的习惯;学会运用构词法、语境等推测关键词义;利用语法过渡词、语气转折词及时态等,把握文章脉络,进行逻辑推理和判断等。
高二英语建立错题档案
1.袖珍型词汇本
词汇是英语学习的基石,也是提高英语成绩的“绊脚石”。很多学生之所以英语学不好或止步不前,很大程度上就是因为词汇不过关。因此准备一个便于携带的袖珍型词汇本,随时记忆、随时复习、随时扩充,既能逐步扩大词汇量又能有效地利用每天的零碎时间,可谓一举两得。
2.作文档案
书面表达是提高二卷得分的关键。要想在高考有限的时间里写出一篇精彩的文章,没有平时大量的语言积累是不行的。准备一本作文档案可以把平时的习作、优美的范文、写作常用的词汇、句型和过渡语,阅读当中遇到的优美表达集中起来,加以整合和归类并把它们当作日常学习中朗读、背诵、抄写、复习、仿写、欣赏的素材,从而逐步提高自己的书面表达水平。
3.错题档案
把自己平时训练或考试当中的错误集中起来,并加以整理和归纳,经常复习和反思,就会逐步突破自己的难点和薄弱点,减少考试中的重复丢分。
4.英汉词典
1 指针概念
指针变量简称指针,其实它也是变量,只不过里面存放的内容是一个地址,这个地址指向另外一个变量。指针就是内存的地址,必须弄清楚数据在内存中是如何存储与读取的;内存单元地址与内存单元内容是两个不同的概念。内存单元地址就像宾馆每个房间一样,其房间号就是其地址,单元内容可以理解为房中的宾客;如图1所示:假设程序定义了三个变量a、b、c,编译时系统分配1000和10001两个字节给a,1002和1003给b,1004和1005给c。由此可以知道,地址是用来标识每一个存储单元,是用户对存储单元中的数据的访问,在C语言中形象的将地址叫做指针,它可以用来指向变量、数组、结构体、和多级指针等等。对于表达式、常量或者是寄存器变量则不能用指针来指向。
2 指针变量的定义和引用
2.1 指针变量的定义
C语言规定指针变量在使用之前必须被定义,遵循先定义后使用的原则,定义指针变量与一般变量定义开式相似,也是用说明语句来实现的,但不同于其他类型变量的就是它是用来专门存放地址的。
指针变量定义的一般开式为
类型标识符 *指针变量名;
下面都是合法的定义:
int*g1,*g2,*g3;定义g1、g2、g3指向整型数据的指针变量。
float*k1,*k2,*k3;定义k1、k2、k3指向实型数据的指针变量。
char*m1,*m2,*m3;定义m1、m2、m指向字符型数据的指针变量3。
在定义指针变量值得注意的是:
(1)“*”是一个指向符号,表示标识符为指针变量,上面的g1、g2、g3等是指针变量名,而不是*g1、*g2、*g3,值得注意的是指针变量是用来存放地址的。
(2)一个指针变量只能指向同一个类型的变量。由于不同类型的数据在内存中所占的字节数不同,如果忽而指向一个整型变量,忽而指向一个实型变量,会使系统无法管理变量的字节数而发生错误,所以只有同一类型变量的地址才能放到指向该类型变量的指针变量中。
2.2 指针变量的引用
例如:
运行结果为:10,20
10,20
本程序定义了两个指针变量g1和g2,“g1=&i;和g2=&j;”语句是将i与j的地址分别赋给g1和g2,不能写成“*g1=&i;和*g2=&j;”。
与指针相关的两个运符:
(1)&:取地址运算符。
(2)*:指针运算符或称间接访问运算符,取指针所指向的目标值。
“&”与“*”运算符的优先级别相同,按自右而左的方向结合,如“g1=&i;”语句,若&*g1,先进行的是*g1的运算,再执行&运算。如:*&i的含义是什么?当然先进行&i运算,得到i的地址,再进行*运算。
3 数组的指针与函数的指针
3.1 数组的指针
有两个概念我要必须分清。一个是指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。另一个是数组指针:首先它是一个指针,它指向一个数组。
简单举例说明:
int*p[10];首先声明了一个数组,数组的元素是int型的指针。
int(*p)[2];声明了一个指针,指向了一个有两个int元素的数组。
其实这两种写法主要是因为运算符的优先级,因为[]的优先级比*高。所以第一种写法,p先和[]结合,所以是一个数组,后与*结合,是指针。后一种写法同理。
应当注意,如果数组为int型,指针变量也应是int型。下面是指针元素的赋值:
p=&a[0];
C语言规定数组名代表数组的首地址,是第一个元素的地址。所以p=&a[0]与p=a是等价的。注意a不代表整个数组,“p=a;”的作用是把a数组的首地址赋给p,而不是a的所有元素都赋给p。
在定义指针变量时是可以赋给初值的:
int*p=&a[0];
等效于:
int*p;
p=&a[0];
多维数组(以二维数组为例)
二维数组的定义:
static int a[2][3]={{1,2,3},{4,5,6}};
a是一个数组的名字,包含二个元素:a[0],a[1]。而每个元素又是一个一维数组,每个一维数组又包含有三个元素。如a[0]中的三个元素分别为a[0][0],a[0][1],a[0][2]。a代表的是二维数组的首地址。
3.2 函数的指针
指针是可以指向一个函数的,在编译时被分配给一个入口地址,这个入口地址就叫做函数的指针。在一个程序中,一个指针变量可以先后指向不同的函数。
指向函数的指针变量定义开式为:
数据类型标识符(*指针变量名)(参数1,参数2);
下面通过例子来说明用指针形式实现对函数调用的方法。
pmax为函数指针变量,并把函数入口地址赋给该函数指针变量,pmax=max。调用函数的形式:(*指针变量名)(参数表)其中的*号不是求值运算,它只是一种表示符号。如本程序中的z=(*pmax)(x,y);值得注意的是:函数指针变量与数组指针变量是不相同的,数组指针变量加减一个整数可使指针移动指向后面或前面的数组,而函数指针是没有移动的意义的
4 总结
C语言指针对于初学者来说是一个短时间内很难掌握的问题,指针灵活性较大,对于刚开始学习的学生,要搞清楚指针的各个方面内容,例如:指针类型、指针所指向的类型、指针所指向的内存区,还有指针所占据的内存区等基础方面内容。在多思考、多注重比较和多上机实践,才能真正的掌握好指针课程。
参考文献
零基础怎样学习雅思?
今天杭州新航道学校小编为大家分享一下零基础怎样学习雅思,供准备考雅思的新手参考借鉴。
首先是前期准备:很多人会在想要不要去上各种各样的强化补习班,就我个人意见觉得,如果你不是牛人的话去上上还是帮助挺大,独立复习最好是在考试前差不多1个月的时候参加补习班,然后留点时间自己复习,在考前1个星期应该坚持每天早上8点起来,9点开始做听力和阅读,调整状态非常重要!下午就要反复精听和研究阅读中的生词,雅思文章选择的范围经常雷同,所以其实不需要背很多的词汇,就把听力和阅读中的生词记好就够了,我觉得我词汇最多就5000左右,完全够了.晚上就写写作文练练口语,不用很认真,这2项保6分就可以了,而且保6分很容易.做题技巧每个人其实应该会有自己的方法,我说出我的供大家参考.听力:
雅思听力不算快,而且话题很贴近生活,场景无非就是学校图书馆银行中介医院与机场等等,可以说实用性非常的高,能猜测答案的程度也很高,最好是有一本场景对话的书,我当时就是准备了一本专门讲这些场景对话的书来看着玩,又可以练口语又练了听力,看多了之后你一看到题目就知道场景,然后马上回忆场景所对应的对话,锁定关键词,就很容易把填空题变成选择题,选择题就可以缩小范围,有些人说要边听边走这些,其实我觉得效果不好,听力一定要很集中精神的听,把它转换成休息时就拿出场景书看看 效果会好很多.阅读:
阅读可能才接触的时候会觉得很难,但是只要把握住一条,雅思阅读所有答案都能在原文中找到,最多换个同义词,而且看到生词千万不要怕,越是生僻的词越是关键词,越是不可能换,至于很多人感觉头痛的T/F/NG的话其实就是个范围问题,找到题目所对应的句子,可能就是1-3句,用关键词定位的方法很容易就找到了,然后精读这几句,范围完全相同就是T,范围被缩小或者夸大就是NG,范围完全不同才是F,其实英国人很注重逻辑,而不是他们的逻辑怪,是很严谨.写作:
保6分很容易,只要意思表达清楚,无很多的语法很拼写错误,再套2句模版里的话拿6分应该没问题,要上7分就非常困难了...那要下很大功夫,对于作文不好的同学,可以参考下模版,但是千万不要背别人的,可以找身边英语比较好的帮自己写一个简单的,然后要坚持3个原则,1:中心句一定要放在段落开头,点明主题
2:学会单词替换,例如文章中就不要出现 a lot of而换substantial之类的3:从句不要太多太长,倒装和虚拟语气一个就好.口语: 大家考场最好选西部地区-0-这样口语保6分比较好,而且西部地区考场口试监考都不会很严,都是可以问卡片的,常见的卡片就那8张-16张,而且很多话可以套用好几张卡片,说的时候要也要坚持几个原则
1: 声音要大,感觉底气很足
2:千万不要自我纠错,说错还是要继续说
3:不要有停顿 饶都可以 就是不要停,如果饶远了考官会提醒你饶回来 这样都比闷着不说好
4:要多用语气词 例如WELL UMM之类的,不要用en...也不要说 how to say, you know 等等
●明确几个观点:
1、英语是一门工具性的学科,不是知识性的学科。
2、英语是练会的不是学会的。
也就是说不能仅满足于听懂,理解,更重要的是要反复听说读写练习。有时甚至不需要懂为什么,记住能用就行。在使用过程中,就会发现自己的语感有所提高。
3、英语新课标下的英语学习的目的是要培养学生的自主学习能力和综合运用语言的能力,学习英语不仅仅是为了考试,还为今后的工作,甚至终身服务。
●高中三年英语学习的侧重点不同:
高一年级:重点在培养兴趣,锻炼听说能力,掌握基本的阅读方法,同时注意培养良好的学习习惯。
高二年级:坚持听说练习,着重扩大词汇量和阅读量,以提高综合运用语言的能力。
高三年级:提高语言知识的准确性和综合性,并努力提高做题技巧。。
●学习中要注意的几点:(DOS AND DON’ts)
1、要点滴积累,不要急于求成。
记住:ROME IS NOT MADE IN ONE DAY!
急于求成就可能会造成消化不良,或者一事无成的结果。急于求成往往表现为对自己提出过高的要求。这样做往往会给自己很大压力,进而对自己逐渐失去信心,失去兴趣。
记住:TEN MINUTES EVERY DAY IS BETTER THAN TEN HOURS IN ONE DAY!
尊重记忆规律,反复是关键。
记住:ALWAYS KEEP AN ENGLISH BOOK AT HAND!
利用点滴时间:与其他学科穿插进行。早晨是学习英语的大好时光。
2.要树立信心,不要妄自菲薄。
“即使是天才,他出生时的第一声啼哭也不是动听的音乐。”听别人说的好,就急,自卑,否定自己。要知道别人也是练出来的。任何时候起步都不晚。要知道树立信心的过程就是不断犯错的过程。要勇于犯错,才能提高。
3.要做到博闻强识,不要只认课本
许多语言教育专家指出:语言能力的强弱与掌握语言材料的多寡成正比。语言材料输入量越大,语言能力提高越快,其中背诵是一种强化语言材料输入的好方法,是不可缺少的语言学习环节。背诵要背肯定是正确的东西。不要脱离上下文记单词。
注意生活中一闪而过的东西,如电影中,电视转播中,新闻中,报纸上,网络上出现的新的有趣的东西。
4.要主动出击,不要坐等人教 ;要持之以恒,不要三天打鱼两天晒网。
5.要学会总结。
学习中要揣摩规律,善于模仿,了解背景知识,分辨语言应用环境。
6.积极参加各种有关英语学习的课外活动。
★ 零基础小学生怎么学英语
★ 高三数学零基础的学习方法
★ 零基础自学英语方法
★ 零基础的小朋友如何学英语字母
★ 零基础如何学习雅思
★ 篮球零基础教学课件
★ 英语学习方法
★ 官方推荐零基础日语初学者如何自学日语
★ 高三地理零基础怎么学的方法
1 C语言
1.1 C语言特点
C语言在计算机语言编程中应用最流行、最广泛, 在学习中应对C语言有一点了解, 在使用过程中, C语言具有以下的特点: (1) C语言比较紧凑、操作灵活、操作方便, 没有非常严格的语法限制, 比较自由的书写程序过程, C语言有效结合了低级语言的实用性及高级语言的结构性, 功能非常强大。 (2) C语言应用范围广泛。C语言是学习其他语言程序的基础, 可植性比较强, 在多种操作系统中, 皆适用C语言, 可以灵活使用运算符, 实现编程的高效性。 (3) C语言的语法中数据结构多种多样, 简单复杂皆有, 图形处理能力甚强。 (4) C语言可以使用数据和代码分割, 具有结构式的语言特点, 程序层次清晰, 便于维护、使用及调式进行。C语言能够对物理地址进行直接访问以及各种操作。因此, C语言是学生学习计算机课程并不可少的一门知识, 但要学好C语言, 盲目的学习是不对的。
1.2 C语言的产生背景
1970年美国的Ken Thompson, 以BCPL语言作为基础, 然后设计出简单且接近硬件的B语言, 但是B语言功能比较有限, 过于简单。1972年~1973年, 美国D·M在B语言基础之上设计出C语言, C语言的出现给程序的编写带来不少便利, 而且编写程序比较自由, 吸引许多软件使用它。C语言语法里的运算和程序非常丰富, 编写程序的运算方法很多, 拥有可以实现一些高级程序都无法实现的功能, 且C语言用起来比较灵活, 在运算各种数据结构时, 不管事简单还是复杂, 都可以简单实现。C语言不仅在运算和程序编写上更加便利, 且可以直接访问地址, 并进行操作, 较快较容易的对程序进行编译以及控制。
2 学习
虽然许多学生选择计算机专业, 努力学习C语言, 但是学生仍然很难对C语言产生兴趣。C语言是计算机专业学习的基础课程, 且功能强大, 用途广泛。随着经济迅速发展, 第三产业越发越重要, 计算机相关的产业所占比重越来越大, C语言功能强大, 在计算机中越来越受到重视。
针对C语言的学习, 仅仅是课堂的理论传授远远不够, C语言理论比较丰富, 集合众多语言特点, 通过直接的感官方式教授给学生, 学生难以完全理解。如果教师能够把内容通过直观的方式展示出来, 比如让学生上机操作, 让理论与实践相结合, 提高学生对C语言的学习兴趣。
C语言中包含比较复杂的结构和算法, 许多学生难以理解, 只能简单的记忆, 但是学习效果比较低, 且学生觉得枯燥, 没有较高的学习兴趣, 在学生学习理论的同时, 应该多上机操作, 更加容易的掌握C语言的规律和方法。教师要注意自己的教学方法, 不能简单的进行实践教学与理论教学, 要关注学生, 加强学生与教师的沟通, 帮助学生理解课堂课外的C语言相关知识, 在教授知识之外, 教师要突出C语言在计算机学习中的重要性, 让学生更容易、深入的理解及分析C语言, 增加学习兴趣。
3 C语言编程的技巧
学生觉得C语言抽象、难以理解, 归根结底是没有找到学习的技巧, 对于刚入门者说, 学习C语言比较吃力, 学习任何一项技能都需要一个过程, 关键在于掌握其精髓, 掌握其中精髓再学习这门课程就容易许多。对于C语言, 编程技巧非常重要。 (1) 指针的掌握。掌握指针是C语言中比较重要的技巧, 指针虽有消耗内存的缺点, 但指针在运算中速度加快, 编程语句也更加容易, 指针的耗内存虽大, 但对整个编程而言却是微不足道。学生在学习指针这一章节时, 需加强学习能力, 除学习课堂知识之外, 可以多在网上查询资料, 进行补充, 掌握好指针这一技巧。 (2) 掌握数学知识。在学习计算机过程中, 数学知识的重要性不容小觑, 能够解决C语言运算中的许多问题, IT界有一句话叫“数学是计算机之母”, 可见数学对计算机的重要性。在C语言学习中, 逻辑思维较好的同学可以较容易的学习C语言, 进行编程前会分析, 选择更加简单的运算方法, 因此, 数学知识对学习C语言起很大作用。 (3) 掌握位运算。位运算的使用可以方便简洁代码, 提高运算效率, 较快解决问题。在计算机程序中, 位是最小数据单位, 是所有操作和运算的基础单位, 位运算是所有操作的基础运算程序。当然具体问题需要具体分析, 提高学生兴趣和编程效率, 让C语言的应用更加广泛最为重要。
4 结语
在学习C语言的过程中, 学生应准确了解C语言的特点, 学习并掌握C语言的编程技巧, 提高学生的学习兴趣, 学习更加具有目的性, 提高C语言的学习效率以及学习质量。培养学生的编程能力, 能够更好的服务社会。
摘要:随着时代的发展, 信息技术发展迅速, 计算机人才被社会所大量需求。因此大学中大都设立计算机专业, 为社会培养所需人才, C语言是计算机专业的重要课程之一, 是大一课程学习中比较基础的一门课程, C语言功能强大, 对于学生以后专业基础起到很大的作用, 但是学生学习效果并不是很好, 即使努力学习也没有得到预期的效果。笔者对C语言编程技巧在C语言学习进行研究, 并且提出解决措施。
关键词:C语言,学习编程,语言特点
参考文献
【零基础C语言学习方法】推荐阅读:
c语言程序设计基础题10-28
零基础如何学习托福11-02
零基础学习java的好方法有哪些06-17
vb基本语言基础01-03
语言学基础教程中文版10-30
零基础英语:零基础如何学英语05-28
中国石油大学(华东)-C语言学习心得09-27
零基础钢琴教学大纲12-27
大学化学零基础怎么学09-27