![]() ![]() |
C语言程序设计
本书主要讲述数据类型、运算符与表达式、顺序结构、选择结构、循环结构、函数、数组、指针、结构体和共用体、文件等内容。本书作为C语言程序设计的入门教材,一方面内容由浅入深、通俗易懂,循序渐进的将各个知识点讲解清楚,引导学生顺利学习并掌握;另一方面,特别强调了对学生程序设计能力的培养,主要是通过提供典型和具有一定趣味性的例题以及大量的习题,提高学生学习兴趣,进而达到刻苦专研、自觉学习的目的;
C语言是一种结构化程序设计语言,具有编程方便、语句简练、功能强、移植性好等特点,是软件开发中最常用的计算机语言。它既具有高级语言的特点,又具有汇编语言的特点;既适用于系统软件的开发,也适合于应用软件的开发,而且其编写不依赖于计算机硬件。因此,C语言以其自身的特色和优势,在工业控制、嵌入式系统开发、单片机编程、系统底层开发等领域应用非常广泛。
大多数院校都将C语言作为入门的程序设计教学语言,同时将C语言程序设计作为计算机专业学生最重要的专业基础课程之一,因此对教师和学生都提出了较高的要求,并给予厚望。目前,国内已经出版的C语言教材非常多。作者在充分吸收这些教材的优点的同时,又将丰富的教学经验融入写作之中,以期达到教材充实、完整和便于学习的目的。
本书作为C语言程序设计入门教材,一方面注意到深入浅出、循序渐进地将各个知识点讲解清楚,引导学生顺利学习并掌握;另一方面,特别强调了对学生程序设计能力,主要是提供典型和具有提供一定趣味性的例题以及大量的习题,提高学生学习兴趣,进而达到刻苦钻研、自觉学习的目的。
本书中的所有案例程序代码均在Visual C++ 6.0环境下调试通过。语法知识点均符合C99标准。本书在教学使用过程中,可根据专业特点和课时安排选取教学内容。每章后面附有习题,可供学生课后练习。为了便于教学,本书有配套教材——《C语言程序设计实验指导与习题选解》。
需要特别指出的是:大部分同学都是第一次接触到C语言程序设计,而程序设计思想的建立和形成并非一日之功。因此,建议本课程除了理论学时之外,应该设置比较充足的实验学时,或者提供大量的课外上机时间。唯有这样,才能充分理解、巩固、强化和掌握课程的主要知识点,进而达到灵活自如地进行程序设计的目的。如果有条件,最好在学完本教材后安排一次课程设计,要求学生独立完成一个有一定规模的程序设计,这是一个重要的教学实践环节,能大大提高学生的独立编程能力。
本书由大连工业大学王海文、大连工业大学艺术与信息工程学院林月、林强担任主编,大连工业大学艺术与信息工程学院关夺、王虹元、尚靖函担任副主编。本书内容共12章:王海文老师编写第5、6、7章,林月老师编写第1、2、3、4章,林强老师编写第8、9、10章,关夺老师编写第11章,王虹元老师编写第12章,尚靖函老师编写附录。黄婷婷、蔡国昱、王艺菲、王中鑫协助进行了资料的整理工作。
在编写本书的过程中,我们参考了兄弟院校的资料及其他相关教材,并得到许多同人的关心和帮助,在此谨致谢意。
为了方便教学,本书还配有电子课件等教学资源包,任课教师和学生可以登录“我们爱读书”网(www.ibook4us.com)免费注册并浏览,或者发邮件至hustpeiit@163.com免费索取。
限于篇幅及编者的业务水平,虽然我们付出了最大努力,但是书中难免存在不足甚至错误之处,敬请广大读者批评指正。
编者
2016年11月
第1章C语言程序设计基础()
1.1程序与程序设计语言()
1.1.1程序与指令()
1.1.2程序设计语言()
1.1.3高级语言程序的开发过程()
1.2C语言概述()
1.2.1C语言的产生与发展()
1.2.2C语言的特点()
1.2.3C语言的应用()
1.3C语言开发程序()
1.3.1用C语言开发程序的过程()
1.3.2算法的概念和特征()
1.3.3结构化程序设计方法()
1.3.4算法的表示()
1.3.5C语言程序的结构()
1.4C语言程序的实现()
1.4.1C语言程序的开发过程()
1.4.2VC++ 6.0集成开发环境()
1.4.3C语言运行环境()
习题()
第2章数据类型、运算符和表达式()
2.1从数学上的“数”过渡到计算机中的“数”()
2.2数据类型概述()
2.3常量和变量()
2.3.1常量()
2.3.2变量()
2.3.3变量名规则()
2.3.4变量的定义()
2.4整数类型()
2.4.1整型常量()
2.4.2整型变量()
2.5实数类型()
2.5.1实型常量()
2.5.2实型变量()
2.6字符类型()
2.6.1字符型常量()
2.6.2字符型变量()
2.6.3字符数据在内存中的存储形式及其使用()
2.7不同数据类型之间的转换()
2.7.1自动类型转换()
2.7.2强制类型转换()
2.8运算符与表达式()
2.8.1算术运算符与算术表达式()
2.8.2赋值运算符与赋值表达式()
2.8.3关系运算符与关系表达式()
2.8.4逻辑运算符与逻辑表达式()
2.8.5条件运算符与条件表达式()
2.8.6逗号运算符与逗号表达式()
2.9运算符与表达式的综合练习()
2.9.1正确的C语言表达式书写()
2.9.2复杂表达式的分析()
习题()
第3章顺序程序设计()
3.1C语句()
3.1.1C语句概述()
3.1.2赋值语句()
3.2字符数据的输入/输出()
3.2.1数据输入/输出的概念及在C语言中的实现()
3.2.2字符的输出函数putchar函数()
3.2.3字符的输入函数()
3.3格式化输入与输出函数()
3.3.1格式化的输出函数printf函数()
3.3.2格式化的输入函数scanf函数()
3.4顺序结构程序设计举例()
习题()
第4章选择结构()
4.1if语句()
4.1.1单选择结构()
4.1.2ifelse语句()
4.1.3ifelseifelse语句()
4.1.4嵌套if结构()
4.2switch结构()
4.3多重if结构和switch结构的比较()
4.4应用举例()
习题()
第5章循环结构()
5.1循环结构简介()
5.2while语句()
5.3dowhile语句()
5.4for语句()
5.4.1基本的for语句()
5.4.2各种特殊形式的for语句()
5.5三种循环语句的比较()
5.6break语句()
5.7continue语句()
5.8嵌套循环()
5.9应用举例()
习题()
第6章函数()
6.1函数概述()
6.2函数的定义与调用()
6.2.1函数的定义()
6.2.2函数的调用、参数及传递方式()
6.2.3函数的返回值()
6.2.4函数声明的作用()
6.2.5main函数中的参数()
6.3函数的嵌套调用与递归调用()
6.3.1函数的嵌套调用()
6.3.2函数的递归调用()
6.4变量的作用域与存储类型()
6.4.1变量的作用域()
6.4.2全局变量()
6.4.3变量的存储类型()
6.5常用系统函数()
6.5.1数学函数()
6.5.2输入输出函数()
6.5.3时间函数()
6.5.4随机数函数()
习题()
第7章数组()
7.1数组的概念()
7.2数组的定义()
7.2.1一维数组()
7.2.2二维数组()
7.3数组作为函数的参数()
7.3.1用数组元素作函数实参()
7.3.2用数组名作函数参数()
7.3.3用多维数组名作函数参数()
7.4数组应用举例()
7.5字符串()
7.5.1字符串概念()
7.5.2字符串函数()
7.5.3字符串应用举例()
习题()
第8章指针()
8.1指针的概念()
8.2指针变量()
8.2.1指针定义()
8.2.2指针运算符(&和*)()
8.2.3指针作为函数的参数()
8.2.4多级指针与指针数组()
8.3指针运算()
8.4指针与数组()
8.4.1指针与一维数组()
8.4.2指针与二维数组()
8.4.3指针与字符数组()
8.4.4指针与函数()
8.5动态存储分配()
习题()
第9章编译预处理()
9.1宏定义()
9.1.1不带参数的宏定义()
9.1.2带参数的宏定义()
9.2文件包含()
9.3条件编译()
习题()
第10章结构体和共用体()
10.1结构体类型定义和结构体变量说明()
10.1.1结构体的定义()
10.1.2结构体类型变量的说明()
10.2结构体变量的引用和初始化()
10.2.1结构体类型变量的引用()
10.2.2结构体变量的初始化()
10.3结构体指针变量()
10.3.1指向结构体变量的指针()
10.3.2指向结构体数组的指针()
10.3.3结构体指针变量做函数参数()
10.4常用的内存管理函数()
10.5链表()
10.5.1简单链表的建立()
10.5.2链表的查找()
10.5.3链表的删除()
10.5.4链表的插入()
10.5.5链表的输出()
10.6共用体()
10.6.1共用体的定义()
10.6.2共用体变量的说明()
10.6.3共用体变量的赋值和使用()
10.7枚举类型数据()
10.8用typedef定义类型()
10.9综合实例()
习题()
第11章位运算()
11.1位运算概述()
11.1.1计算机内数据的表示方法()
11.1.2位运算及其运算符()
11.2位运算()
11.2.1按位与()
11.2.2按位或()
11.2.3按位异或()
11.2.4按位取反()
11.2.5按位左移()
11.2.6按位右移()
11.2.7位复合赋值运算符()
11.2.8位运算符的优先级()
11.2.9不同长度的数据进行位运算()
11.3位段()
11.3.1位段的定义()
11.3.2位段的引用()
11.4综合案例分析()
习题()
第12章文件()
12.1文件概述()
12.1.1文件的基本概念()
12.1.2文件系统()
12.1.3文件的编码方式()
12.1.4文件指针()
12.2文件的打开与关闭()
12.2.1文件的打开(fopen函数)()
12.2.2文件的使用方式()
12.2.3文件的关闭(fclose函数)()
12.3文件的顺序读取()
12.3.1字符的读写函数(fgetc和fputc)()
12.3.2字符串的读写函数(fgets和fputs)()
12.3.3格式化的读写函数(fscanf和fprintf)()
12.3.4数据块的读写函数(fread和fwrite)()
12.4文件的定位与随机读写()
12.4.1文件定位函数()
12.4.2文件的随机读写操作()
12.5文件的出错检测()
习题()
附录A基本控制字符/字符与ASCII值对照表()
附录BC语言操作符的优先级()
参考文献()
第3章 顺序程序设计 从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支结构、循环结构。这三种基本结构可以构造任何复杂的逻辑关系。C语言提供了多种语句来实现这些程序结构。顺序结构是一种线性结构,其特点是:各语句组按照各自出现的先后顺序,依次逐一执行。顺序结构是三种基本结构中最简单的一种,无专门的控制语句。 3.1C语句 3.1.1C语句概述 C语言程序的结构如图31所示。 图31C语言程序的结构 C语言程序的执行部分是由语句组成的。程序的功能是由执行语句实现的。 C语言程序中的语句可分为表达式语句、函数调用语句、控制语句、复合语句和空语句五类。 1. 表达式语句 表达式语句由表达式加上分号“;”组成。其一般形式为 表达式; 执行表达式语句就是计算表达式的值。例如: x= y+ z;/* 赋值语句* / y+ z;/* 加法运算语句,但计算结果不能保留,无实际意义* / i+ + ;/* 自增1语句,i值增1* / 2. 函数调用语句 函数调用语句由函数名、实际参数加上分号“;”组成。其一般形式为 函数名(实际参数表); 执行函数调用语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值 (在后面函数部分中再详细介绍)。例如: printf("C Program"); /* 调用库函数,输出字符串*/ 3. 控制语句 控制语句用于控制程序的流程。它们由特定的语句定义符组成。C语言有九种控制语句,可分成以下三类。 ① 条件判断语句:if语句、switch语句。 ② 循环执行语句:dowhile语句、while语句、for语句。 ③ 转向语句:break语句、goto语句、continue语句、return语句。 4. 复合语句 把多个语句用括号“{}”括起来组成的一个语句称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。例如: { x=y+z; a=b+c; printf("%d%d",x,a); } 是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。 5. 空语句 只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用作空循环体。例如: while(getchar()!='\\n'); 含有一条空语句。该语句的功能是,只要从键盘输入的字符不是回车符,则重新输入。 3.1.2赋值语句 赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为 变量=表达式; 赋值语句的功能和特点都与赋值表达式相同。它是程序中使用最多的语句之一。在赋值语句的使用中需要注意以下几点。 (1) 由于在赋值符“=”右边的表达式可以是一个赋值表达式,因此,下述形式 变量=(变量=表达式); 是成立的,从而形成嵌套的情形。其展开之后的一般形式为 变量=变量=…=表达式; 例如: a=b=c=d=e=5; 按照赋值运算符的右结合性,等效于 e=5; d=e; c=d; b=c; a=b; (2) 注意在变量说明中给变量赋初值和赋值语句的区别。 给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。例如: int a=5,b,c; (3)在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的: int a=b=c=5 上述式子的正确写法为 int a=5,b=5,c=5; 而赋值语句允许连续赋值。 (4) 注意赋值表达式和赋值语句的区别。 赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。例如下述语句是合法的。 if((x=y+5)>0)z=x; 该语句的功能是,若表达式x=y+5大于0,则z=x。 下述语句是非法的。 if((x=y+5;)>0)z=x; 因为“x=y+5;”是语句,不能出现在表达式中。 3.2字符数据的输入/输出 3.2.1数据输入/输出的概念及在C语言中的实现 所谓输入/输出是以计算机为主体的。本章介绍的是向标准输出设备即显示器输出数据的语句。在C语言中, #include 将有关“头文件”包含到源文件中。 使用标准输入/输出库函数时要用到stdio.h文件,因此源文件开头应有以下预编译命令: #include 或 #include"stdio.h" 其中stdio是standard input & output的意思。 考虑到printf和scanf函数使用频繁,系统允许在使用这两个函数时可不加 #include 或 #include"stdio.h" 3.2.2字符的输出函数 putchar函数 putchar 函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式为 putchar(ch); 其中,ch可以是字符型变量,也可以是整型变量,还可以是字符型常量或整型常量。例如: putchar('A');/*输出大写字母A*/ putchar(x);/*输出字符变量x的值*/ putchar('\\101');/*输出字符A*/ putchar('\\n'); /*换行*/ 对控制字符则执行控制功能,不在屏幕上显示。 使用putchar函数前必须要用文件包含命令: #include 或 #include"stdio.h" 【例31】输出单个字符。 #include void main() { char a='B',b='o',c='k'; putchar(a);putchar(b);putchar(b);putchar(c);putchar('\\t'); putchar(a);putchar(b); putchar('\\n'); putchar(b);putchar(c); } 3.2.3字符的输入函数 1. getchar 函数 (1) 函数原型:int getchar(void);。 (2) 函数功能:从输入设备(一般指键盘)上接收输入的一个字符,函数的返回值是所输入字符的ASCII码值。 (3) 使用说明:该函数每调用一次,就从标准输入设备(键盘)上取一个字符,函数值可以赋予一个字符型变量,也可以赋予一个整型变量。例如: #include void main() { int ch; ch=getchar(); putchar(ch); } 程序运行后,输入字符‘a’,并按回车键: a 则变量ch的值为97,程序输出结果: a (4) 注意: ① 执行getchar()函数从键盘输入字符时,注意所输入的字符并不是立即赋给字符型变量或整型变量,只有在输入一个回车后,字符变量或整型变量才能得到字符。也就是说,输入字符后需要按回车键程序才能继续执行后续语句。 ② getchar()函数从键盘读入字符时,该函数会将回车键作为一个字符读入,因此,在使用getchar()函数连续读入多个字符时需特别注意,例如下面程序的功能是“从键盘输入3个字符并反向输出这3个字符”,但运行结果却事与愿违。 #include void main() { int ch1,ch2,ch3; ch1=getchar(); ch2=getchar(); ch3=getchar();/*依次输入3个字符*/ putchar(ch3);/*反向输出3个字符*/ putchar(ch2); putchar(ch1); } 请读者思考怎样修改程序而完成程序功能?
你还可能感兴趣
我要评论
|