1、目录:1. C 语言概要 2.变量 3.计算 4.判断 5.循环 6.函数 7.数组 8.指针 9.字符(串)附录 1:学习 C 语言的方法。附录 2:编程的一些技巧。附录 3:使用电脑的一些经验和技巧。1.C 语言概要C 语言是一种机器的语言,不是数学语言也不是人类语言,我们只有通过严格规范的格式,才能让电脑读懂我们的想法。由于是美国人发明的语言,所以里面的语法都是由英文构成的,但是用到的单词就那么三十几个,只需要理解它的语法和结构就行了。C 语言作为最接近底层的语言,单片机和 windows 系统都是由 C 语言写的,所以学好C 语言对于电科这个专业来说尤其重要,不能仅仅是奢求一个及格,希
2、望大家有空能重新系统性的学习一下。一个 C 语言程序有很多规定了的语法或者概念,最重要的有如下几个。1.每一行代码语句后面必须都附上一个英文半角的分号,除了几个特别的情况(头文件后面,函数定义后面,条件、循环、分支等语法语句后面)2.所有 C 语言程序都必须有头文件,即在程序开始前的准备工作,电脑需要准备读取哪几个头文件里的函数以便使用。开头为:include ,此外还有用于数学计算的 math.h头文件,用于字符或字符串操作的 string.h ctype.h stdlib.h 等头文件。Scanf 输入函数和printf 输出函数就在 stdio.h 这个头文件里,如果没有这个头文件,电脑
3、就不知道这个函数是什么意思的有什么功能。3.程序最开始的理解分析代码的地方是从 main()函数开始的,这个函数一般写为 int main(void)或者 void main(void),括号里的 void 可以省略不写,void 表示为空,在 main 函数里,等读到了哪一行需要使用其他函数的时候才会跳出去看其他代码,看完函数后又会回到 main 函数里。4.注释是由/来识别的,一行代码后面加上两个反斜杠,然后这一行后面的内容都会变为灰色的,不被计算机所处理,也可以用/*注释*/来完成一大片的注释,而不是局限于某一行,注释的作用很关键,不仅仅能让自己的思路更清晰,也能增加代码的可读性,还能作
4、为某些情况下,调试程序的一个敲门,即注释掉某一段代码,看看是不是这里出错了。2.变量变量就像一个个房间,有大有小,有专门用来洗澡的浴室,也有专门用来睡觉的卧室。我们把需要使用的数据放到变量里,进行加减乘除等运算。声明表示告诉计算机它的类型,定义是指让这个变量得到具体数据内容。常用的变量主要有以下几个数据类型。char 型:用于处理如字母,特殊字符,阿拉伯数字,之类的数据,在函数中以%c 的形式使用。很多题牵扯到 ascll 码表,这是重点,大家网上查一下重点了解这个表是什么东西。int 型:用于处理整数数据,可以存放的数字大小范围是-2147483648,2147483647。以%d 的形式使
5、用。long int 型:同样是整数,比上面的大小要更大一些。以 %ld 的形式使用。float 和 double 型:后者比前者范围更大,用于处理带小数点的数据,以%f 和%lf 的形式使用。使用之前需要声明,比如:int a = 3; 注:使用变量时需要注意格式,如果一个 double 型的数据用%d 输出,小数点后面的数据就会丢失,要注意变量类型的统一。3.计算C 语言中的计算并不是单纯的数学计算,不能直接联立两个二元一次方程让电脑解,必须要转化和分解成电脑能够理解的格式。比如:3x+2x+1=0 这个一元二次方程,需要使用变量 a,b,c 分别把 3,2,1 表示出来,然后令 q =
6、b*b-4*a*c;再调用 math.h 头文件里的 sqrt()开平方函数将 q 开平方,再声明两个能表示带小数点的 double 型变量 X1,X2,用来存放方程的解。即:X1 = (-b+sqrt(q) )/(2*a);这里面的计算,等于号“=”表示的是赋值,将右边的计算式子结果赋予左边的变量。而不是数学意义上的一个方程等号。此外还有逻辑运算符, int i=1,sum=0;for(i=1;ib) 省略那个花括号。 即:return a; if(ab) return a;else else return b;return b;这样就完成了 a 和 b 谁大的判断,函数是有返回值的,这个返
7、回值的类型必须与声明和定义的类型一致,假设我们声明了一个长整型变量叫 big,我们在调用的时候可以这样写:big = bigger(a,b);这样就完成了函数的调用和返回值的使用,如果这个函数是 void 型的,也就是说不需要返回值,这个函数里面是一些输出或者有指针操作的计算语句。那就不需要返回值,也不需要将返回值使用赋值到哪个变量上。注意调用这个函数的时候,前后的 a 和 b 的先后关系是对应着的,ab 的数据类型也要对应,在定义和声明中括号里的 int a 和 int b 叫形式参数,在 main 函数调用时写的 a 和 b叫实际参数。在函数里的数据叫局部变量,main 函数里已经定义了一
8、个变量 i 的话,在函数里,可以重新声明一个变量 i,而且与 mian 函数里的全局变量不冲突。同样的,如果不使用指针,函数里的数据计算,是无法通过 return 返回以外的方法传递出去的。7.数组数组的概念有点类似与变量,其实就是一串变量放到一起了,开头我们假设变量是房间,那么一个数组就像宿舍一样,整整一排过去都是电科 1502,有 8 个房间,是连续的。那么我们就可以认为这是一个数组,像 int classTwo8;这样来声明它。在数组有关的 OJ 题目中,或者考试题目中,一般会用到以下几种常见的操作:已知数组的长度为 n。for(i=0;in;i+) for(i=0;in;i+) sca
9、nf(“%d”,/录入数据 scanf(“%d”,/输出这个数组 同理,利用 i 作为计数器还可以做到许多较为复杂的在数组中进行判断操作的功能,比如找出这个数组中的最小值或者最大值,又比如删掉数组中的某一个元素。这里需要注意的是,数组的下标是从 0 开始的,可不是我们习惯性的 1 哦,在这个 for循环里,还可以进行嵌套,for 里面套一个 if 判断语句,注意格式规范要缩进,把花括号上下对齐,这样才不容易搞糊涂。8.指针指针是 C 语言最伟大的地方之一了,但也是最容易出问题的地方了,使用不当的话很容易造成内存访问出错导致程序崩溃,而且很多情况下编译器是不会提示错误信息的。之后的高级语言比如
10、java 都改进了内存的自动分配,但 C 语言没有类似的功能,我们又不能舍弃指针带来的方便性,所以使用起来必须严格规范。指针的概念是什么呢?指针它可以是一个变量,你也可以用 const 把它固定(这个为扩展知识,大家可以查查书) 。我们来举个例子,有一个房间里住着相怡林和他的舍友,另一个房间里空空如也,只有地上有一张纸条,上面写着 C03N217,那么这个只有一张纸条的空房间就是指针,他的作用就是储存一个变量的地址,指向那个变量。放到 C 语言中就是:int room = 4;int *proom = /int *pa = *pb;int *pb = t;这样我们在 main 函数,或者其他函
11、数中调用(这叫函数嵌套)的时候,swap(就可以完成 a 和 b 的数值交换这里我还写了一个找到三个变量最大值的函数,虽然这样的功能完全不必要使用指针,直接 return 一个最大值就好了,这样多此一举。所以指针在函数中使用的意义就在于,我在函数中需要得到多个数据,而 return 只能返回一个值。所以我们一般用函数返回值得到一个状态,用指针得到数据。比如一个写除法的封装起来的函数,如果被除数为 0,我们返回一个-1 表示出错,这个函数就不继续算了,正确运算后返回一个 0。而除法算完得到的数据我们用指针来得到。 (void findmax(int *pa,int *pb,int *pc,int
12、 *max)这个函数代码我贴到网站里。http:/ 。如果函数指针是一个数组的话,需要这样写:findMax(int arr);这里中括号里面什么都不加,写了长度也没用,因为数组本身就是一个指针,它表示的是这个数组第一个变量的位置,即 arr0,所以拿这个替换掉 arr也是一样的。9.字符(串)字符和字符串的处理是 C 语言的难点之一,有可能会出比较复杂的题。字符我们之前说过,字符是指计算机中使用的字母、数字、字和符号,包括:1、 2、3、A、B、C、!# ¥ %*()+ 等等。在 ASCII 编码中,一个英文字母字符存储需要 1 个字节,而 ascll 码表可以把这些字符用一个数表示出来,比
13、如大写的A是 65,小写的a是 97,在字符有关的题目中,我们可以把字符转化为数字,即跟 int 型的数据一样拿来运算,让一个大写字母的值加上32,就变成了小写字母。放在 C 语言中,字符是要用单引号括起来的,比如我们输入一个小写字母:char x;scanf(“%c”,x -= a;/等价于 x = x a;printf(“%d”,x);这样我们就能得到这个字母与小写字母 a 的相对位置,即这个字母在字母表中排第几。这里便是一个对数据类型的灵活运用,在这种情况下,char 型的数据用%d 来输出,不会发生 int 型输出 double 类型导致数据丢失的错误,而是输出了这个字符的 ascll
14、 码的值。字符串其实是一个 char 型的数组,比如我们声明定义一个数组:char word = H, e, l, l, o, !, 0;/这就定义了一个字符串 Hello!char word = “Hello!”;/如果使用双引号还可以这样定义。字符串最后一位是以一个反斜杠加零表示结束的。在最开始说的几种处理字符串的头文件中,包含几个非常常用的,已经封装好了的函数,如:getchar()和 gets()还有相应的putchar()和 puts(),这个几个函数的使用,需要大家多刷 OJ 题来熟练掌握。 (注:gets()这种函数得到字符串的方法不安全,容易发生内存溢出的问题,用在程序上还可能
15、被黑客攻击,有兴趣的同学可以了解进阶版函数 fgets()等。 )End题外话:链表,数据结构,文件操作,结构体,交互图形设计,比较复杂,一时半会讲不清楚,考试应该也不会出这方面的题,我就不写了,如果真出了大家自求多福。上面这 9 个部分已经是 C 语言最最最基础的部分了,每一句话都是精华,希望大家能认真理解,结合着课本和网上的视频,一点点的钻研,不会的欢迎来问丁山大大或者张宇和我。C 语言的重要性远远不是大物线代这些课程能比的,我最开始学习 C 语言的时候是上初中,那时候就已经是 IT 界使用最多的语言了,现在虽然使用份额比不上 java python 等高级语言,但仍是最接近硬件层面的语言
16、,是效率最高的,电科是个偏向硬件开发的专业,学好 C 尤为重要,大一寒假时我又跟着中国大学 MOOC 上浙大的瓮恺教授重学了一遍 C,又在三个月前跟着一套哈工大的进阶课程又学了一遍 C,日后我们学单片机就是用的 C 语言来开发,而且 C 语言也是大部分语言的基础,它升级为了更复杂的 C+,各种高级语言中也都有 C 的影子。最开始只是为了帮三个不怎么听课的舍友恶补一下,后来被鼓动在班级群里讲讲,最后又在专业群里讲。本来以为能一个小时就透彻的讲完,让没认真听过课的某些同学能速成及格,但没想到准备不充分讲砸了,心里比较愧疚浪费了大家的时间,所以写了这篇文档帮助大家复习。祝大家期末考试顺利,没人挂科一
17、些小 tips:附录 1:学习 C 语言的方法。1.先看网上的视频,粗略的了解 C 语言的概念和框架。2.上轻院 OJ(群里有使用代理的方法) ,或者郑州师范学院也有类似的 OJ 网站,前两百题是一样的,百度一下就能查到了。3.结合着知识点来刷题,每道题认真思考,不会了就百度或者翻书。4.某些题努力超过一个小时,实在想不出来再问其他人,这样印象深刻。5.读别人的代码是一种很快的进步方法,OJ 上可以在公告板上看其他人的代码,或者找我们要 OJ 上某一题的代码,然后对比着自己的程序,找错误。6.电科专业要求深厚的 C 语言功底,C 语言是既是一种接近底层的语言,又是一种 “高级语言” ,掌握好
18、C 语言对日后嵌入式系统等学习都大有裨益。附录 2:编程的一些经验和技巧。1. 写代码的格式一定要规范!无论是缩进还是空格的使用,一个良好的程序,代码必须清晰明了,可读性强,注释到位,对自己和对他人都有利,要养成这个好习惯。毕业工作后,大公司会明确要求统一每个程序猿的编程风格的。这里有一个 C 语言代码规范的网址。http:/ ,这个负号表示的是对齐方式,7 表示有效数字,点 3 表示小数点后位数,这些比较细节的语法知识,题目中出现了要求,你可能需要上网查或者翻书才知道。英语好的可以看英文原版注释或者点开 stdio.h 头文件里看看 printf 函数的使用方法。附录 3:使用电脑的一些技巧
19、。1.win+R 键可以调出 windows 运行窗口,输入 cmd 可以调出类似于 C 语言编程的小黑框,会玩的话能干很多事情。2.在 windows 调出的运行窗口里输入 Shutdown -s -t 3600 可以做到定时一小时关机。3.有空最好整理一下电脑硬盘,只分两个盘,一个系统盘 C 盘,一个 D 盘,C 盘里一般不放东西,软件资料全部放到 D 盘里,这样可以对磁盘空间最大化利用,只要合理建立文件夹分类存放就好。4.如果有钱最好买个 SSD 硬盘,那真是一种飞一样的体验。5.电脑做定时清理,半年清一次灰,可以拿去计服社让他们帮忙清灰,这样有助于散热。6.在杀毒软件或者电脑管家里把没用的启动项都关了,能让电脑开机更快,有 SSD 三秒开机就不说什么了。7.以后会用到很多软件(比如 Keil uVision4、Atmel Studio7.0、Proteus、Protell 99SE) ,无论是画电路图还是烧录单片机,下载很大的软件的时候,不妨带上电脑和网线去图书馆找位置,图书馆的网速是真的快。2016.6.26 2:35 相怡林于河南工业大学信息学院