傻瓜编程入门(C语言版)

前言:由于有人要考C语言计算机二级,编程零基础,要我入入门。我就把QQ聊天记录整理一下,再把未讲完的东西继续讲下去,希望为以后做类似工作也省省力。对于有多年编程经验的资深程序员来说,这些着实小菜。而且由于为了应付二级考试,严格的说也不能算真正的计算机基础讲解。

但其实我想,基础应该是最难的。硬件,操作系统,编译器,算法,哪一个不是计算机里面最重要也是最难啃的部分?而对于一个没有编程基础的人来说,想去快速入门编程,只能以一种很傻瓜的方式去灌输,只能把很多东西说的很浅显,很死,甚至是错误。如果不是这样,哪能让一个人快速的上手呢?遥想自己当年学习c语言,从老师的嘴里得来的,也不过是一些傻瓜的理解,而解决问题的方法,大都是在死记硬背。举一才能反三,计算机世界有自己的逻辑,对于一个初学者来说,任你再聪明绝顶,也需要很长的时间消化理解计算机的逻辑,直到有一天这种逻辑深入骨髓。

(以下零基础者慎入)

初学编程的时候,以为内存就是一个大广场,你的程序随意在里面乱搭乱放。后来才知道,操作系统有虚拟内存管理,有虚拟地址向物理地址的转换,有页映射,有内存交换,有函数的栈空间,有全局存储空间,还有可以动态申请释放的堆,甚至还有动态链接库的存储区域。这些过程中甚至有硬件直接参与,比如虚拟地址的翻译。

初学编程的时候,以为用Turbo C的丑陋界面编译出来的程序独占的享用CPU资源,以为“程序”就是计算机中的执行实体。殊不知操作系统有进程,还有线程,这些执行实体共享计算机的资源,并分时地运行在同一个CPU或者同一个CPU的同一个核心上。

至于算法和数据结构,却反而显得不那么难理解,不那么会在你了解了之后发出“原来我之前的理解是如此天真”的惊叹。虽然算法和数据结构的设计非常耗费脑力,需要不断推敲气正确性,效率,实现细节,可用性。。。

而在CPU、操作系统的上的一切串行的东西,到了GPU上又会被很大程度上颠覆。不过希望随着GPU硬件的升级,和GPU编程环境的发展,以后在SPMD的处理器上编程会变得像在CPU上用vs gcc那样方便、容易,而不用考虑过多硬件的细节。

说的有些多了,进入正题吧。先讲写粗略的概念,更细节的有时间再说吧,更像一个学习的指导,还是需要看书才能真正理解的。另外,都是最基础最傻瓜的,莫笑。

1 计算机基础

计算机,也就是电脑,你天天用这个东西,他整天干嘛呢??
答:他在跑程序。
CPU是执行程序的电子器件,他执行人写的程序,来完成各种各样的工作。程序是啥呢??程序可以通常理解为一系列的执行指令。这些指令是你写的,电脑按照你的指示完成工作。C语言就是这样的一种程序,你用C语言写出的程序的源文件(通常以.c结尾)。通过某种计算机程序的处理(这个东西叫做编译器,你可以不理解他是干啥的,但你至少得会用)生成可执行文件,然后可以在电脑上运行。所以通常哈,用C语言写程序的过程就是:
1 写源程序
2 通过编译器编译生成可执行文件
3 执行,看看你写的程序是否正确
第三步也称作调试程序。你自己通过各种去测试你的程序有没有错误。最简单的方法是执行它,然后看它是不是和你想象一样去工作。
所以你如果想学会C语言,必须会写程序,会用编译器,然后会调试。
调试这个我们以后再讲吧。这是一个长期积累起来的经验,关于如何快速调试。

内存,硬盘,键盘,显示器,cpu,是你写C语言程序必须接触的几个电脑硬件,接下来一一介绍这些硬件。

内存和硬盘都是存储东西的,他们的区别在哪呢??
你的笔记本里有硬盘也有内存。一般内存是几G,1G到4G。硬盘是几十G到几百G。硬盘是用来长效存储,电脑断电后硬盘数据不会丢失;而内存是暂时存储,电脑一断电,内存数据就没了。所以一般你存东西都是在硬盘里的,这会占用硬盘空间。
那么内存有啥用呢???是这样哈,硬盘存取速度比较慢,而内存存取速度快,所以在电脑程序中,一般打交道的是内存。因为你要完成某种计算任务,并不需要在电脑断电以后这些数据还在。比如你想做一个计算器,加减乘除,算完你看到结果就好了,不需要长期存储。这些数据都是存在内存里的。
所以电脑程序大部分时候都在和内存打交道,C语言程序也是。

那么内存和硬盘了解了,cpu、键盘和显示器是干嘛的捏。
cpu就是执行运算,你写程序反倒不用关心。
显示器显示你程序的结果,和你的输入。
键盘用来输入。
基本上你要考二级,就涉及这么多了。有时候会让你读文件写文件,那么这就是在操作硬盘了,记住一点就是文件存储在硬盘里。

2 C语言基础

C语言,它是所有现代流行语言的鼻祖。要想学习它,必须了解它的一些基本概念:

变量
变量类型
变量定义
运算符
顺序执行
条件执行(if else)
循环执行(for、 while)
函数
数组
结构
指针

变量

变量,就是内存空间中的一部分区域,存储你运算中需要的数据。你可以读取它,可以往里面写数据,也可以对他进行运算。所以变量可能是最重要也最基础的概念,它和内存紧紧相连。只不过你刚刚开始学习写程序不需要总想着内存。
那变量有几个要素呢??
答:变量类型,变量名称。
变量类型可以表示其操作,这个变量的行为,占用内存的大小。而变量名称用于区分变量,并对它进行操作,引用。
比如:
    int a;
这是一个整数型的变量,名叫a。
变量的类型决定了你能对它的操作以及操作的行为。比如int就是整形,可以有正负int是英文integer的缩写。unsigned int是无符号整数类型,0和正整数。float是所谓的浮点数,你可以理解为小数。
不同类型的变量,同样的操作可能会有不同的行为。比如一个a-b。
对于整形的a和b,它的结果是一个整数。
对于无符号整数也就是正整数的a和b,它的结果是一个无符号整数,但也有可能是一个非法的值,因为如果b大于a的话,结果可能就是无意义的了。
至于浮点数依次类推。
总之计算机运算的一个宗旨就是,运算数是什么类型,运算结果就是什么类型。如果出现两个运算类型不一样或者你给的运算数和运算符的要求的类型不一样,计算机会给你做转换。

运算符

刚刚讲到运算了,就可以到下一话题了,就是运算符。变量是一个基础的概念,运算符也是。计算机整天在做的就是运算,运算符是你表示这些运算的标志。
运算符主要包括两种,算数运算和逻辑运算。至于位运算,不知道考不考,再说吧,这里先讲前两种。
算术运算就是加减乘除取余数,分别对应标志 + - * / %。%是取余数,不是除,除是/。
这里要说明的一点是,计算机的运算和现实世界的运算有一定出入。对于小数,也就是浮点数float,它的算术运算行为比较正常。而对于整形,它的算数运算比较奇怪。整数的除法不整除,只会取结果的整数部分,即商,比如7 / 2结果是3。至于溢出和浮点数的计算误差什么的就略显高深了。
除开算数运算还有逻辑运算。就是与(&&)、或(||)、非(!)。
基本上就是真假值的运算,这个在条件判断里面会用到。

判断与循环

由于计算机程序都是顺序执行的,从某一个入口处往下执行直到某个结束处,这个入口叫main函数,结束为main函数的结尾。
既然顺序执行,可不可以改变它的执行顺序呢?答案是可以的,通过条件判断语句和循环语句。
条件判断的大体是。
    if ( ... )
    { ... }
    else
    { ... }
基本就是说,判断一条件,如果为真,执行后面的语句,否则执行else后面的语句。
if可以进行嵌套,组成
    if ( ... )
   { ... }
   else if ( ... )
   { ... }
   else if ( ... )
   { ... }
   ...
   else
   { ... }

接下来讲循环。可以说,没有循环,就没有计算机程序。其重要性不言而喻。
循环就是说,反复执行某一段程序,直到某个条件满足,跳出这个循环。在c语言里主要有for循环和while循环,for用得比较多,但while比较基础。他们之间可以互相转化,但在大多数场合,for比较方便。

数组,结构,指针

数组是一段连续的内存的变量,用有多个某种类型的元素。
比如刚刚声明的
    int a;
它是一个变量,只占用一段内存。如果声明一个数组,就可以声明很多个int型的变量。数组声明用
    int a[10]
这样的语法,表示声明一个有十个元素的整数型数组。
然后是结构。

结构是复杂数据类型,一般是struct关键字声明,基本上是很多简单数据类型(也就是整形浮点型什么的)组成的。

至于指针呢,是一种特殊的变量类型。它里面存储的值是一个内存地址,这个内存地址所在的内存可能存储着某种其他数据。指针是比较难的,初学不用学得很明白,能会用能过考试就好。

函数

函数是程序执行单位,但比语句高一层。语句是执行最基础单位,而语句组成了函数
一般来讲,程序从一个函数开始执行。对于c语言程序,所有程序的起点是所谓的main函数。而在某个函数之内,可以调用其他函数。这样,函数作为一个功能的单位,完成不同的功能,组合在一起,就成为了一个比较大的功能,完成复杂的计算。
函数需要定义和调用。

原文地址:https://www.cnblogs.com/waytofall/p/2945293.html