#c语言#
C语言作为现在大多数理工科本科生的必修课,很多从未有过编程概念的同学也不得不开始学习这门课程。但是由于授课老师水平参差不齐,有些学生学着学着便开始直呼“头痛”,不得不说是十分真实了。
我们的第一个程序:HelloWorld作为必修课,又不能挂科,那么我们应该怎么学呢?下面将从两个角度来探讨C语言的学习。
一、应试角度
毫无疑问,C语言本身是一门必修课,这意味着它具有课程的共性,即知识存在基础知识、重点知识和难点知识等。注意,C语言的基础知识是基本的逻辑,而不是计算机的组成原理,恰好相反的是,我们正是通过学习C语言来逐步了解计算机的原理的。在高中时代,我们学过用程序框图和伪代码来描述算法,如果这部分的知识掌握了的话,那么我们就相当于拥有了学习C语言的基础知识。
C语言是面向过程的,也就是以过程为中心。而面向过程的程序本质上是通过一种规范表述来描述数据结构和算法,C语言正是其中的一种规范表述。因此C语言的重点就是理解关键字和符号的基本含义,结合我们的基础的逻辑思维,让我们能看懂程序的过程,也就是程序实际上干了一些什么事。下面简单举个例子。
1+2+......+?比如我们要用C语言计算1+2+……+的值,如果以课程角度来看,首先这样的题目考了一个什么知识点?肯定考了循环语句这个知识点,因为计算的每一步都是加法,假如这道题是一个改错题,题目的程序如上图所示,那么其中一种改法就是在小于号后面加个等于号,变成小于等于号。我们先看一下for关键字后面的小括号里的内容,根据for循环的知识,小括号其中被两个分号夹住的部分如果成立则运行,不成立则退出循环,而且括号里面的i++表示i会在每次循环之后增加1,因此,按图中程序,当i为的时候,会先判断i是否小于,由于不成立,所以退出循环,而我们输出的数据是sum,相当于输出的1+2+……+99的值,所以一种办法就是让sum在for循环就计算出正确的值,另外一种改法就是不输出sum,而输出sum+的值。
上面的例子体现出,首先程序类的题目很多情况都不止一个解决办法,其次正确理解C语言程序需要掌握C语言的语法基础,比如关键字、运算符、语句、数据类型和常用函数等。C语言的最大难点就是指针。如果单纯以通过期末考试的角度来看待这个知识点的话,那么应该翻一下历年期末的指针是怎么考查的,直接将可能考的方式和答案记住。这个角度适用于应试能力强,对于C语言毫无兴趣的同学。
二、研究和实用角度
从第二个角度来看待C语言,就是C语言实际上有什么作用,具体干了什么,怎么干的。第一个角度里可以直接无视#includestdio.h之类的固定语句,而在第二个角度里我们就是要一条条弄懂。
比如,C语言里,以#开头的语句称为预编译语句,C语言程序首先会通过编译器生成中间文件。编译器就是一个已经做好的程序,就像翻译官一样,把C语言翻译成机器能够读懂的语言,而中间文件是已经翻译好的你写的那部分程序,预编译语句则是对编译器翻译程序做一些准备工作。比如#includestdio.h这个语句,其实就是把stdio.h这个文件的内容直接粘贴到这个语句处,stdio.h文件包含的是标准输入输出函数的声明。有了这个声明,我们就能在我们的程序里使用这些函数。这些头文件函数具体的定义是已经编译好了的,编译器会把我们写的程序编译出来的中间文件和那些编译好了的函数实现连接起来,使得我们使用的那些函数是有具体作用的,而不是空壳。像这样的内容,课堂上并不会讲得十分详细,因此我们具体学习的时候,可以多查阅资料,使得自己理解其中的每一个步骤,这样就能对C语言有一个全面的理解。
再一个就是要多考虑如何用C语言来解决实际问题,实践能很快地提高一个新手的技能水平,并能清醒地意识到自己哪方面还不懂。具体可以做的项目,比如用C语言来计算同时期的极限和积分的题目,或者学习一下简单的图形库,做个简单的游戏之类的,也可以通过刷OJ来提高算法和语法水平。
用openGL模拟行星公转