C语言研究性学习的路线
现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常“误导”读者,于是,“死记硬背”便成了学习C语言的唯一选择。本文以拙作《新编C语言程序设计教程》(清华大学出版社出版,配套视频zeq126.56.com)为基础,探讨了C语言的研究性学习。
C语言的知识点有:
1. C语言与计算机的关系
2. 表达式的求值
3. 逻辑运算及选择结构
4. 算法及循环结构
5. 数组的作用及准确理解
6. 函数的作用及准确理解
7. 指针的作用及准确理解
8. 自定义数据类型及文件
这几部分相辅相成,构成了一个有机的整体。分析如下:
一、C语言与计算机的关系
(-)C语言如何驱动计算机
人们利用C语言与计算机沟通,借助编译系统,计算机能够理解并执行C语言程序。C语言是使用计算机的接口。
使用计算机需了解计算机的三大基本原理,特别是二进制编码和五大组成部分。C语言与计算机的五大组成部分关系如图所示。
图1-6 C语言与计算机的联系(1-6为书中编号)
在此需特别注意“变量”这一概念。C语言中用变量标识计算机中的存储单元,使用变量就是使用计算机中的存储器。如果存储单元不能存入某类存储数据如5.5,则相关变量就不能赋值为5.5。这是变量与数学中未知数如x的本质区别。以后在学习指针变量、数组变量时,主要通过分析它们标识存储单元的特点来探求其本质特征。
C语言用函数控制计算机的输入设备和输出设备,那么C语言中的函数与数学中的函数有何异同?本质上没有区别!都是从输入到输出的映射。
不仅应注意函数在C语言中的表现形式,更重要的是明白函数与程序的关系。main函数就是程序,程序的执行过程就是main函数的执行过程。没有main函数,函数再多也不能称为程序。程序中的其它函数只有通过main函数的调用(直接或间接)才有执行的机会。借助编译系统的调试功能,不仅可以直观地观察一个“复杂”程序的执行过程,而且应明白一个道理,程序是一条语句一条语句执行的,并不神秘。
通过学习printf函数的简单使用,既能动手尝试编程,又能体会到编写程序时需要的严谨,尤其是程序的输出与代码的“绝对一致”。
重点:
1. 计算机的五大组成部分与C语言的关系。
2. 变量的概念。(存储单元的标识;分类型;先定义后使用;赋值)
3. 函数在C语言中的表现形式及重要作用。(写程序就是定义main函数)
4. 程序中#include <stdio.h>的作用。
5. 函数调用及printf函数的使用。
6. 编译系统的作用及VC6.0的使用。(程序的编译及调试执行)
(二)二进制对计算机的制约
计算机采用二进制意味着数据在计算机中只能以01数字串的形式存在,即数据必须以二进制形式编码。
虽然数值型数据可以方便地转化成二进制形式,但正负号和小数点位置的编码问题需要解决。同类型的数据在计算机中为何编码长度一致?固定的编码长度又会带来什么样的问题?
整数编码的难点在于为何采用补码形式,补码的符号位为何可以参与运算,且补码加法的运算规律。
小数编码的难点在于精度,如何估算float型和double型的精度呢?
理解了数值型数据的编码规律,则C语言(或其它编程语言)中的基本数据类型也就懂了。稍有疑问就是C语言中的整型为何有许多种类呢?
整型的知识点多而散。
1. 字面量前缀表进制(0八进制0x十六进制),后缀表示类型(l长整型u无符号整型)。
2. 输入输出时的格式字符,既有长短(l和h),又有进制(o和x)。
特别注意:
1. 用负数给无符号整型变量赋值,如unsigned long ui= -1;,或输入格式字符为无符号型时,用户却输入了一个负数,如scanf(“%uh”, &i);-1↙。
2. printf函数输出时以格式字符所指明的类型解码变量所标识存储单元的存储内容,而不考虑相关变量的实际类型,即“我的地盘我作主”。
浮点型的知识点。
1. 字面量有小数形式和指数形式两种。
2. 格式字符f,e,E用在printf函数中(输出数据时)没有区别,但是当利用scanf函数获得用户输入的double型数据时,格式字符前面必须加附加格式说明符l。
难点:
1. 精度是指小数形式还是指数形式?
2. 计算机中0.1+0.1并不等于0.2,但是0.25+0.25却等于0.5!什么情况下有误差,什么情况没有误差?
字符型数据编码的原则就是统一标准,每个字符对应一个编号,计算机中存储这个编号(整数),因此C语言中字符型数据可以与整型数据通用。(当用整型解码时就输出编号printf("%d",ch);当用字符型解码时就输出字符如printf("%c",ch)。)
字符型的知识点。
1. ASCII码的一些特点,如小写字母和大写字母谁的编号大?
2. 回车键对应于C语言中哪个字符?
3. 字符型变量多样的初始化方法。
4. 语句short i = 9; 与char ch = ‘9';的区别及联系。
5. putchar函数和getchar函数的使用。
思考与探究
1. 按下5回车后,用户输入的是整数5、小数5还是字符5?
2. 用户输入多个数据时,如zzj↙,下面的代码段如何执行?
{
charca, cb;
ca= getchar();
cb= getchar();
printf(“%c%c”,ca, cb);
}
3. 用不同的数据类型作为求阶乘函数的返回值类型,阶乘函数最大能正确输出哪个整数的阶乘?