《C语言程序设计》是理工类专业学生必修的一门学科基础课。该课程的主要目的是培养学生程序设计及调试的基本方法。通过本课程的学习,使学生可以比较全面地掌握C语言的基本内容及程序设计的基本方法与编程技巧,形成优良的编程风格,培养学生应用计算机解决和处理实际问题的思维方法与基本能力,为后继课程的学习及将来从事软件开发和解决工程问题、科学技术问题奠定基础。
通俗点说,就是学习编程。学会以后,你不仅可以帮助你学习后续课程,也可以用她来参加一些竞赛,当然,最有趣的是,你会发现你能更好地控制计算机为你所用。
我们采用的方式是混合式教学方法,即对于基础的、简单的部分知识点,尤其是语法内容,采用结合SPOC视频及教材相关章节进行自学的方式完成;而对于一些重点、难点内容,则采取课堂精讲和讨论的方式进行。
另外,请注意本课程的学习方法:一定先读懂例题并上机后,再模仿例题编写类似的题目。此外,一定要多上机练习才会熟练。
那么,就让我们踏上有点艰辛、但也会让你充分体会到成就感的编程之旅吧。
评分方案:
计算机专业(48+16学时)总成绩计算公式:期末考试(50%)+重点内容上机测试(测试8次取其中6次最好成绩,占总成绩的20%)+平时成绩(30%,慕课自主学习+作业+考勤)
非计算机专业(32+16学时)总成绩计算公式:期末考试(50%)+重点内容上机测试(测试6次取其中较好的4次最好成绩,占总成绩的20%)+平时成绩(30%,慕课自主学习+作业+考勤)
二进制肯定知道吧?二进制怎么算懂吗?信息编码、内存什么的知道吗?
知道更好,不知道的先看看《计算机科学导论》或《大学计算机基础》吧。
(一)C语言概述
1.了解C语言的历史、发展现状, C语言和UNIX /LINUX的关系,C语言的优势。了解C语言的历史、发展现状和C语言的特点及功能。
2.掌握简单C程序的组成。理解注释、编译预处理命令、语句等概念。掌握输出函数的用法。了解C语言以函数为基础的模块设计目标思想。
3. 掌握VC环境下C程序的编程步骤及上机步骤。了解VC之外的其它环境(例如:CODEBLOCKS)。(要求学生必须在个人电脑上完成至少一种编程环境的安装和使用)。
4. 了解本课程要求、学习方法和考核方式。
实验内容:熟悉编译环境及C程序编译过程
(二)顺序结构程序设计
1.掌握常见的三种数据类型,以及三种数据类型的编码原理。理解字符类型的编码与整数之间的关系。
2.理解变量与常量的概念。掌握三种类型常量的表示方法,掌握宏常量和const常量的定义方法,了解其他转义字符的含义。掌握变量定义和初始化的方法,理解变量定义与内存分配的关系,会使用sizeof运算符,理解类型溢出和舍入误差的概念。
3.理解标识符和关键字的概念,掌握标识符的命名规则。
4.掌握常用运算符(数学、赋值)和表达式的写法,注意C表达式与数学表达式的区别。理解运算符的优先级与结合性等概念,并能够据此分析表达式的运算结果,尤其注意整数相除和求余表达式的计算结果。适当了解其它运算符的使用。
5.掌握不同类型(char、float(double)、int)数据间的混合运算规则,掌握强制类型转换和自动类型转换规则。
6.掌握三种基本类型的输入/出方法,主要是printf()/scanf(),getchar()
/putchar()等函数的基本使用方法。了解其他的格式修饰符的含义。了解scanf()函数返回值的用法。
7.理解语法错误与逻辑错误的概念,掌握C程序的调试方法。
8.认识C库函数,了解C库函数的用法,掌握常用数学函数的用法。
9.了解相应的程序设计风格和程序设计规范。
(注:本部分的语法知识点比较琐碎,教师一定要结合例题讲解)
实验内容:顺序结构程序设计及程序调试方法
本部分内容结束后要进行随堂测试一-主要考查顺序结构程序设计。
(三)选择结构程序设计
1.理解算法的概念及其表示方法,掌握三种基本结构的算法描述方法。
2.掌握if-else语句的用法,理解单分支结构与双分支结构。
3.掌握关系运算符、逻辑运行符、条件运算符及其表达式的写法,理解相应表达式的计算过程和结果表示。理解整型比较和实型比较在语法上的区别。
4.理解数据合法性检查方法,理解程序测试的基本方法,学会选择测试用例。
5.理解多分支结构,掌握switch语句的用法,理解用switch语句和用if-else嵌套解决多分支结构的区别。
实验内容: 选择结构程序设计及程序调试方法
本部分内容结束后要进行随堂测试二-主要考查选择结构程序设计。
(四)循环结构程序设计
1.掌握简单循环程序设计,主要是三种循环语句while,do-while,for语句的写法。结合上机,理解循环结构程序的运行过程。了解三种语句的区别及适用环境。
2.理解break,continue,goto语句的含义和用法。了解标志变量的用法。
3.理解循环嵌套的概念以及程序的运行过程。掌握复杂循环程序设计。
4.理解常见算法:穷举法和迭代法的基本思路。
(本部分是本课程的重点及难点,教师应从读程序题目开始,让学生掌握基本的语法和循环结构程序的运行过程,然后通过更多的编程练习,让学生学会循环结构的程序设计。)
实验内容: 循环结构程序设计及程序调试方法
本部分内容结束后要进行随堂测试三-主要考查循环结构程序设计。
(五)函数
1.掌握模块化和分而治之的思想,了解模块化的必要性。
2.掌握函数定义、函数调用和函数原型(函数声明)的语法,学会通过调试工具观察函数调用的过程,理解形参与实参的对应关系、参数传递过程及函数返回过程。(对本部分的概念讲解,有条件的教师可安排在“C语言概述”部分做了解,再在本部分再详细讲解。)
3.了解模块划分的基本原则,理解函数复用的概念。
4.结合调试工具,理解变量的作用域与存储类型的概念、分类及各自的特点,能根据需要进行选择。
5.理解嵌套调用的过程。理解递归调用过程,掌握递归函数的特点和定义方法。理解递归法和迭代法的区别。
6.理解带参数的宏定义,以及其与函数的区别。
7.了解相应的程序设计风格和程序设计规范。
(本部分是本课程的重点及难点,教师要通过例题让学生理解模块化的必要性和好处,并要求学生必须逐渐习惯编写多函数程序。)
实验内容:多函数程序设计及程序调试方法
本部分内容结束后要进行随堂测试四-主要考查函数相关的程序设计。
(六)数组
1.掌握一维数组的定义及初始化,掌握数组元素的引用方法,理解数组名即数组在内存中的首地址。
2.掌握一维数组做函数参数。掌握一维数组的常见应用,包括统计、求最大(小)值、查找、排序、插入、删除等。掌握编写和调试稍大规模程序的方法。
3.掌握字符串的存储与处理方法,掌握相关库函数的用法。能够解决字符串相关的实际问题。
4.掌握二维数组的定义及初始化,掌握二维数组元素的引用方法。
5.掌握二维数组做函数参数,能够利用二维数组解决实际问题,包括矩阵的计算,多门课程成绩的统计,多个字符串的查找、排序等。
(本部分的重点是数组相关的基本操作,字符串的处理更是重中之重。)
实验内容:数组的相关应用及程序调试方法
本部分内容结束后要进行随堂测试五、六-分别考查数组和字符串相关的程序设计能力。
(七)指针与数组
1.掌握指针的概念及指针作函数参数。
2.理解一维数组与指针的关系,能够用指针方式引用一维数组元素。
3*. 理解二维数组与指针的关系,理解行指针、列指针的概念。能够用指针方式引用二维数组元素。
4*.掌握指针数组的定义和应用,了解指向指针的指针的定义和应用。
5*.掌握动态内存分配相关的库函数用法,掌握动态一维数组及动态二维数组。
6*.理解返回指针值的函数和指向函数的指针。
(本部分的重点和难点是理解数组的内存分配以及如何用指针去引用数组元素。)
实验内容:指针的相关应用及程序调试方法
本部分内容结束后要进行随堂测试七-主要考查指针的掌握情况。
(八)结构体与共用体等
1.掌握结构体类型的定义方法,理解结构体类型的变量和成员变量的概念,能够熟练地定义和引用。
2.掌握结构体数组的定义和初始化方法,能够熟练引用数组元素及其成员变量。
3.掌握指向结构体类型的指针,能够熟练使用指针引用数组元素及成员变量。
4.掌握结构体数组和结构体类型的变量做函数参数。
5*.掌握单向链表的数据结构,以及单向链表的基本操作。
6*. 掌握共用体类型的定义方法,掌握共同体类型变量的定义和引用方法。理解共用体与结构体的区别。
实验内容:结构体与链表的相关应用及程序调试方法
本部分内容结束后要进行随堂测试八-主要考查结构体数组及链表的掌握情况。
(九) 文件和其它
1*.理解文件与文件缓冲区的概念,理解操作系统文件处理的基本过程,了解二进制文件和文本文件的区别。
2*.掌握文件类型指针。
3*.掌握文件相关的库函数用法,能够编程进行简单的文件读/写操作,了解文件的随机读写及相关库函数。
4*. 理解带参数的主函数。
5*. 了解多文件程序设计方法。
6*.掌握位段的用法,学会使用位运算符。
7*.掌握枚举类型的定义,及枚举类型的用法
实验内容:文件相关的应用及程序调试方法
注:对于32+16学时,带*号的内容可只做简单了解。
1. 参考教材
苏小红等. 《C语言程序设计学习指导》(第3版). 高等教育出版社. 2015.10(优点:题目丰富、趣味性强)
Brian W.Kernighan,Dennis Ritchie. 《C 程序设计语言(英文影印版)》(第二版). 清华大学出版社或机械工业出版社.(优点:由C语言的开发者编写,最专业、最准确)
琼斯,艾特肯(美). 《 21天学通C语言》(第6版). 信达工作室译. 人民邮电出版社. 2003(优点:循序渐进,深入浅出,结构合理,更适合自学)
颜晖. 《C语言程序设计实验指导》. 高等教育出版社. 2008(优点:调试过程截图丰富,便于学生课下自学)
凯尼格(美) 著,高巍译. 《C陷阱与缺陷》. 人民邮电出版社. 2008-2-1(经典书箱,帮助学习预防一些潜在的逻辑错误)
Perter Van Der Linden(美). C 专家编程. 人民邮电出版社. 2008-2-1(经典书箱,适合深入学习使用)
Kenneth A.Reek(美). C 和指针.人民邮电出版社.2008-4-1(经典书箱,适合深入学习使用)
明日科技 编著. C语言函数参考手册. 清华大学出版社. 2012-1-1(适合查阅库函数)
2.其它网络学习资源:
https://www.icourse163.org/course/zju-9001#/info。翁凯.中国大学MOOC网站慕课课程《C语言程序设计》.
3.code::blocks集成开发环境的官网下载地址:
https://www.codeblocks.org/downloads/26(例如codeblocks-13.12mingw-setup.exe)
Q:如何提问,能得到快速的解答?
A:
1)标题:撰写标题时,要注意把要问的问题的出处和核心词写出来,最好用【】标出来,比如【第1周编程题在线测试的第1题】求解。
2)内容:内容上要把你不懂的地方说出来,最好详细点,把自己尝试修改的过程也说一下。
3)附源代码:把源码贴到讨论区(不要使用图片,因为图片看不清,也不能拷贝),这样大家可以通过你贴出的源码帮你分析错在哪里。
4)附错误提示:把编译出错的提示也贴出来(一般是英文形式),这样大家不用拷贝粘贴和调试程序也能帮你分析出错原因了。
Q:常见的运行结果错误的原因有哪些?
A:程序提交后通常显示三类错误:格式错误、结果错误、运行超时。
对于格式错误,请检查你的程序的输入输出信息是否和题目要求的完全一致。
对于结果错误,请检查你的程序使用的算法和计算公式是否正确。
对于运行超时错误,请检查你的程序是否存在死循环,死循环通常由永真的循环控制条件或者while后面添加了不必要的分号引起。
注意事项如下:
1)数据输入输出的格式没有严格按照题目的要求写,直接拷贝粘贴题目中给的格式字符串和提示信息,是最简单和不易出现格式错误的方法。
2)输入输出字符串中的字符大小写有错误,或者空格数量和位置与题目中的要求不一致,或者缺少换行等。
3)仔细审题,例如题目要求计算半圆的周长,就不要加上直径,更不要计算整个圆的周长。
4)如果只有几个测试用例通过,还有没有通过的测试用例,那么说明你没有考虑所有的可能性,甚至是非法输入的情况。
5)检查是否为英文输入,切记切换成英文状态再输入。一些同学误用了中文作为输入法,就会出现不能编译的问题,例如中文状态下输入的分号和英文状态下输入的分号是完全不同的,语句的末尾使用的分号一定要在英文状态下输入。
Q:我想考二级,学完这个课程可以考吗?
A:二级考试题考查语言的语法细节较多,所以能否通过二级考试,要看你的应试水平如何。本课侧重于讲解程序设计的方法以及错误程序的排错方法,更关注实战能力,因此应该说本课程对学生的要求是高于二级考试的要求的。
Q:上机编写C语言程序使用什么软件好?
A:课程演示会使用VC6.0或Code::Blocks+gcc+gdb集成开发环境,但是你使用任何其他C语言开发工具也都可以。不过,我们推荐使用Code::Blocks,在教材网站(https://book.sunner.cn)上有软件下载的网址链接,《C语言程序设计学习指导(第3版)》上有关于如何使用这个软件的详细介绍,它是一个开源的跨平台的C/C++集成开发环境,它安装简单,比Visual C 6.0等其他集成开发环境更简单易学。
Q:使用codeblocks在sources中新建一个file,也就是不在原来默认的main.c里面写代码,那么应该如何调试才能使运行的时候直接运行新建的里面的程序呢?
A:给工程添加完新的文件后,移出旧的文件main.c再重新编译即可,移出文件的方法和添加的方法类似。
Q:为什么安装好软件后创建新项目的时候软件总是说:could not save project<invalid path> maybe the file is write-protected 呢?
A:codeblocks要求软件安装的目录最好不要带空格或汉字,不要按默认设置安装到program file目录下,卸载后再选择安装到根目录下试试。更多注意事项,参见高等教育出版社的《C语言程序设计学习指导(第2版)》
Q:请问为什么我在Code::Blocks里面点开Debug中的watch里面是空白的?
A:按照视频1.2讲的方法新建一个控制台应用程序,不要直接新建一个C文件,直接新建或者打开一个 C文件是无法使用调试功能的。
检查一下是不是将CB安装到默认的program files目录下了,CB不能安装到中文或者有空格的目录下,请卸载软件,重新安装到根目录下,再试试。
此外,全速运行程序时,是看不到watch窗口内的内容的,必须在单步运行的时候才能看到watch窗口内的内容。
Q:为什么我的程序编译不了?
A:可能是你安装了不带编译器和调试器的版本,重新安装带编译器和调试器的版本。免费开源的C 语言集成开发环境Code::Blocks+gcc+gdb的官方下载网址:https://www.codeblocks.org/downloads/26(目前最新版本是codeblocks-16.01mingw-setup.exe)。请下载带gcc编译器和gdb调试器的code::blocks(下载软件名中务必包含mingw-setup),否则程序无法编译。无法从官方下载软件的,也可以从百度云盘上下载:链接: https://pan.baidu.com/s/1dDnLNET 密码: joyh
C 语言集成开发环境code::blocks的安装和使用方法见教材《C语言程序设计学习指导(第3版)》
如果不想重装系统,可参考
安装软件的完整步骤可参考:https://jingyan.baidu.com/article/b24f6c822756b886bfe5da90.html
Q:为什么我的程序无法运行,显示cannot open output file bin\Debug\election.exe Permission denied.
A:可能是你的文件正在别的程序中使用,或者还有程序的副本正在执行(或者你上次运行没有关闭),因此不能写入election.exe,把副本关闭或者结束election.exe任务应该就能够纠正这个问题。
Q:为什么我的程序与网站上的程序运行结果中的小数点最后一位存在差异?
A: 这是因为网站的OJ使用的操作系统和编译器与我们自己使用的操作系统和编译器不一样,从而导致浮点运算的精度不一致。
此外,使用float和double定义变量得到的计算结果也可能在结果的最后一位小数上有所不同。