现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常“误导”读者,于是,“死记硬背”便成了学习C语言的唯一选择。本文以拙作《新编C语言程序设计教程》(清华大学出版社出版,配套视频zeq126.56.com)为基础,探讨了C语言的研究性学习。
C语言的知识点有:
1. C语言与计算机的关系
2. 表达式的求值
3. 逻辑运算及选择结构
4. 算法及循环结构
5. 数组的作用及准确理解
6. 函数的作用及准确理解
7. 指针的作用及准确理解
8. 自定义数据类型及文件
这几部分相辅相成,构成了一个有机的整体。分析如下:
五、 数组的作用及准确理解
重点:
1.数组的作用。
(数组解决了定义多个变量的麻烦,而且数组中的多个变量依据下标构成了有序的一组,可以用统一的方式对大批量的数据进行处理。)
2.数组的准确理解。
(全面理解数组的条件还不成熟,现在只需正确理解何谓“数组的元素仍为数组的数组称为多维数组”,定义一个多维数组实际上可以使用几个什么样的变量即可。)
3.字符数组与字符串的关系。
(字符数组首先是一个普通的数组,但其中可能存储了一个字符串,从而变成了一个“字符串”,于是就“特殊”了。可以直接用字符串字面量初始化,直接输入输出。)
难点:
使用循环以统一的方式处理数组中的数据,实际上还是构造循环的能力。再次提醒:先用超级计算机“我们的大脑”分析解决问题,用自然的方式写出算法,再翻译成C语言程序,最后再调试执行对比分析,体会一个道理“C程序只是模拟了我们解决问题的方法”。除了提醒,本章没有任何补充,因此就不详细分析相关例题了,欲了解分析过程者请看视频。
(一)一维数组
重点:
1.定义一个一维数组实际上是定义了几个类型相同的变量。相关变量的标识名中切记下标从零开始。
2.定义与使用的不对称性。
(定义时不可以用变量给出数组长度,使用数组元素时可以用变量作为下标。scanf(“%d”, &a[0]); scanf(“%d”, &a[1]); ...... scanf(“%d”, &a[5]);可以改写为for(i=0;i<=5;++i) scanf(“%d”, &a[i]);)
3.初始化的特点。
(初值用完后如何理解给剩余的数组元素赋值为0?可省略数组长度。初值均相同时如何初始化?为0时={0};不为0时一个个地写={1,1,...,1};)
难点:
一维数组的应用。
例6-3再次表明规律是在罗列数据的基础上得到的。
例6-4上一章的思考题,没有数组,即使得到了算法,我们也“无法”写出程序。
例6-5在数组的配合下,我们可以用一种方法对多个数据排序。
例6-6一维数组也可输出成“二维数组”的样子。
(二)二维数组
重点:
1.一维数组的元素类型仍为一维数组,此时的数组什么样子?
2.定义了一个二维数组,如int a[3][4];,分别定义几个什么样的变量?有几种初始化的方式?
(3个有4个元素的整型一维数组a[0],a[1],a[2]。12个整型变量a[0][0],a[0][1],...,a[2][3]。相对应的初始化方式int a[3][4]={{1,2,3,4},{...},{...}};和int a[3][4]={1,2,3,4,...};)
3.三维数组如何理解?
难点:
二维数组的应用。
例6-7列出相关数组元素的名称,即可总结出循环规律。
例6-8找第i行最大值时不找出最大值只找出其下标j的值,即a[i][j]就是最大值。根据具体情况灵活地处理问题。
例6-9杨辉三角形与上一章的图形有何不同?
(三)字符数组和字符串
重点:
1.字符数组本身的特点。
2.字符数组与字符串的关系。
3.字符数组独有的特点。(用格式字符串%s和专用的输入输出函数输入输出数据时有何不同?)
难点:
字符串的相关示例。
例6-12体会scanf函数的处理过程。(通过输入设备输入的数据实际上只是一串字符)
例6-13特别注意一个二维数组看成两个一维数组的用法。
(四)综合示例
重点:
1.大数的表示。
2.大数的输出。
3.大数的计算过程。
体会程序是数据结构加算法的思想。