新書推薦:
《
唯美手编16:知性优雅的编织
》
售價:HK$
54.9
《
情绪的惊人力量:跟随内心的指引,掌控情绪,做心想事成的自己
》
售價:HK$
50.4
《
棉的全球史(历史·文化经典译丛)
》
售價:HK$
109.8
《
超越百岁看这本就够了
》
售價:HK$
55.8
《
亚洲戏剧史·南亚卷
》
售價:HK$
143.4
《
中国历代竹器图谱与数字活化
》
售價:HK$
557.8
《
EDA技术与设计(第2版)
》
售價:HK$
85.0
《
揉碎浪漫(全两册)
》
售價:HK$
70.3
|
編輯推薦: |
(1) CDIO 引例示范(教师的CDIO);(2) 相关知识点跟进;(3) 在教师引导下,课堂实例演练CDIO(学生参与的CDIO);(4) 小结涵括本部分的知识点、容易混淆的概念及容易出错的问题; (5) 习题要求学生通过练习实现自主的CDIO;(6) 从第4章开始,增加综合程序设计,进一步提升学生的分析设计能力。
|
內容簡介: |
本书采用CDIO的思想和模式编写,注重培养读者的C语言程序设计能力和独立解决问题的能力。与第1版相比,第2版在内容上进行了充实、修改和删减,并在每章增加了实验实训,目的是提高读者的综合运用能力。 全书内容分为3个层次: 第1~4章是基础篇,介绍C语言的顺序结构、选择结构和循环结构的程序设计,以及相关语法知识; 第5~7章是提升篇,进一步介绍程序设计方法、相关算法和技巧,内容包括数组、函数、变量的存储类型和编译预处理、用户定制数据类型等; 第8~9章是深入篇,介绍指针、文件的程序设计知识。第10章介绍Visual C 6.0开发环境。 本书内容丰富,注重实用,强调基础,目的是为计算机专业建设精品课程打下良好的基础。本书既可作为计算机及相关专业的教材,也可作为非计算机专业公共课程的教材。
|
目錄:
|
目录
第1章C语言概述
1.1C语言的产生与发展
1.1.1程序设计语言简述
1.1.2C语言的历史
1.2C语言的特点
1.3一个简单的C程序
1.4C语言程序的格式
1.5标识符、变量与常量
1.5.1标识符
1.5.2变量
1.5.3常量
1.6数据类型
1.6.1整型、实型和字符型
1.6.2C程序语句
1.6.3格式输出输入函数
1.6.4实战演练
1.7小结
习题1
本章实验实训
第2章C程序的运算符和表达式
2.1计算ab和a%b的值
2.1.1分析与设计
2.1.2运算符与表达式
2.2算术运算符
2.2.1算术表达式
2.2.2数据类型与运算结果的关系
2.2.3实战演练
2.3位运算符
2.3.1按位与运算
2.3.2按位或运算
2.3.3按位异或运算
2.3.4按位取反运算
2.3.5左移运算
2.3.6右移运算
2.3.7实战演练
2.4赋值运算符及表达式
2.4.1赋值运算符
2.4.2赋值表达式
2.4.3复合的赋值运算符
2.5自增自减运算符
2.5.1自增1运算实例
2.5.2实战演练
2.6其他运算符
2.6.1逗号运算符
2.6.2求字节数运算符
2.7运算符的优先级和结合性
2.7.1C语言的运算符分类
2.7.2运算符的优先级
2.7.3结合方向
2.8不同类型数据之间的转换
2.8.1自动类型转换
2.8.2强制类型转换
2.9综合设计
2.10小结
习题2
本章实验实训
第3章选择结构
3.1工程师岗位面试关系运算符和逻辑运算符
3.1.1分析与设计
3.1.2关系运算符和关系表达式
3.1.3逻辑运算符和逻辑表达式
3.1.4条件运算符和条件表达式
3.2判断身材是否标准if语句
3.2.1分析与设计
3.2.2if语句
3.2.3if语句的嵌套
3.2.4实战演练
3.3顾客点餐switch语句
3.3.1分析与设计
3.3.2switch语句
3.3.3使用switch语句的注意事项
3.3.4多路选择结构的比较
3.3.5实战演练
3.3.6综合设计简单界面设计
3.4小结
习题3
本章实验实训
第4章循环结构
4.1输出100个数for语句
4.1.1分析与设计
4.1.2for循环语句
4.1.3for语句的几点说明
4.1.4实例分析与设计
4.1.5实战演练
4.2统计英语成绩while语句
4.2.1分析与设计
4.2.2while循环语句
4.2.3实例分析与设计
4.2.4实战演练
4.3整数逆序输出dowhile语句
4.3.1分析与设计
4.3.2dowhile循环语句
4.3.3实例分析与设计
4.3.4用while语句和用dowhile语句的比较
4.3.5实战演练
4.4打印矩形循环嵌套
4.4.1分析与设计
4.4.2循环嵌套
4.4.3死循环
4.4.4实战演练
4.5找最小数break和continue语句
4.5.1分析与设计
4.5.2break语句
4.5.3continue语句
4.5.4用for和while循环实现dowhile循环功能
4.5.5实战演练
4.5.6综合设计
4.6小结
习题4
本章实验实训
第5章数组
5.1厨师选鱼一维数组
5.1.1分析与设计
5.1.2一维数组
5.1.3实战演练
5.2果园里的竞赛二维数组
5.2.1分析与设计
5.2.2二维数组
5.2.3实战演练
5.3古诗词填空字符数组
5.3.1分析与设计
5.3.2字符数组
5.3.3字符串处理函数
5.3.4实战演练
5.4综合设计
5.4.1解决数据的存储问题
5.4.2找摘桃子最多的人
5.4.3计算选手的总成绩
5.5小结
习题5
本章实验实训
第6章函数
6.1阶乘之和函数的定义、调用和声明
6.1.1分析与设计
6.1.2函数的定义和调用
6.1.3函数原型、函数声明与函数调用
6.1.4实战演练
6.2成绩统计函数的参数传递
6.2.1分析与设计
6.2.2函数的参数传递
6.2.3实战演练
6.3计算三角形面积嵌套调用和递归调用
6.3.1分析与设计
6.3.2嵌套调用
6.3.3递归调用
6.3.4实战演练
6.4迎接第15亿个婴儿变量的作用域
6.4.1分析与设计
6.4.2局部变量和全局变量
6.4.3实战演练
6.5构造整数变量的存储类型
6.5.1分析与设计
6.5.2局部变量的存储类型
6.5.3全局变量的存储类型
6.5.4实战演练
6.6快速计算编译预处理
6.6.1分析与设计
6.6.2宏定义命令
6.6.3文件包含
6.6.4实战演练
6.7综合设计诗词十二宫格游戏
6.7.1分析与设计
6.7.2完整的源程序代码
6.8小结
习题6
本章实验实训
第7章自定义数据类型
7.1今天是星期几枚举类型
7.1.1分析与设计
7.1.2枚举类型的定义与引用
7.2模拟显示数字时钟结构体类型
7.2.1分析与设计
7.2.2结构体类型的定义与引用
7.2.3结构体数组及其使用
7.2.4结构体变量做参数
7.3学生成绩表的制作共用体类型
7.3.1分析与设计
7.3.2共用体类型的定义与引用
7.4实战演练
7.5综合设计
7.5.1分析与设计
7.5.2完整的源程序代码
7.6小结
习题7
本章实验实训
第8章指针
8.1用函数实现变量值的交换
8.1.1分析与设计
8.1.2指针的定义及运算
8.2数组与指针
8.2.1指向一维数组的指针
8.2.2指针指向数组时的运算
8.2.3指向二维数组的指针
8.3用指针操作字符串
8.3.1分析与设计
8.3.2使用字符数组与字符指针变量的区别
8.4指针与函数
8.4.1用指向函数的指针实现函数调用
8.4.2返回指针值的函数
8.5指针数组和指向指针的指针
8.5.1指针数组的概念
8.5.2指向指针的指针
8.5.3指针数组做main函数的参数
8.6实战演练验证卡布列克运算
8.7综合设计用指针实现数据的动态管理
8.7.1分析与设计
8.7.2程序
8.7.3动态数据管理在插入、删除操作中的优点
8.8小结
习题8
本章实验实训
第9章文件
9.1学生数据文件的创建与读取
9.1.1分析与设计
9.1.2文件操作入门
9.2文件的概念
9.2.1文件的定义
9.2.2文件的分类
9.2.3文件缓存区
9.2.4文件类型与文件指针
9.2.5文件的操作过程
9.3文件的打开和关闭
9.3.1文件的打开
9.3.2文件的关闭
9.4文件的读写操作
9.4.1字符读写函数fgetc和fputc
9.4.2字符串读写函数fgets和fputs
9.4.3格式化读写函数fscanf和fprintf
9.4.4数据块读写函数fread和fwrite
9.5文件的定位操作
9.6文件的出错检测
9.7实战演练
9.8综合设计
9.8.1分析与设计
9.8.2完整的源程序代码
9.9小结
习题9
本章实验实训
第10章Visual C 6.0开发环境
10.1开发环境概述
10.2菜单栏简介
10.3开发环境的工具栏
10.4VC 6.0的主要窗口
10.5新建、编辑、编译、连接、运行一个C程序
10.6常见问题处理
习题参考答案
附录AASCII码表
附录BC语言中的关键字
附录CC标准库函数
参考文献
|
內容試閱:
|
第2版前言
进入21世纪,出现了一批高校向应用型大学转型的大趋势,根据这一特点,我们在本书第1版的基础上进行了修订,结合应用型高校学生的特点及学时设置努力使本书第2版达到兼顾专业、通俗、实用和与时俱进的目标,使之成为应用型高等院校计算机专业和非计算机专业的C语言程序设计课程的教材和参考手册。本书采用通俗而亲和的描述风格,比较适合C程序设计的初学者、大学一年级学生,也适合想更深入掌握C语言程序设计的读者。本书中每个知识点的讲解由浅入深、循序渐进,教学内容以案例驱动方法进行,案例实用、有趣、易懂,贴近普通大学生的实际生活,让学生备感亲切。本书在潜移默化中帮助学生了解应用程序设计方法和过程,掌握程序设计语言知识和实用技巧,培养他们的编程素养。本书围绕把问题讲清楚、讲明白、讲透彻这个中心目标,放弃一些陈旧的、以炫技为目的的传统设计习惯,追求更直接、更简练的设计风格,尽量把我们多年来在教学和实际应用开发实践中积累的经验贯穿于书中,同时也将程序设计领域最新、最有价值的思想和方法渗透到书中,使本书以焕然一新的面貌呈现在各位亲爱的读者面前。本书仍然延续第1版所采用的CDIO的思想和模式,即每章节的基本模式如下: (1) CDIO 引例示范(教师的CDIO); (2) 相关知识点描述; (3) 在教师引导下,课堂实例演练CDIO(学生参与的CDIO); (4) 小结涵盖本部分的知识点、容易混淆的概念及容易出错的问题; (5) 实战演练和习题要求学生通过练习实现自主的CDIO; (6) 从第2章开始,每章均增加综合设计一节,作为本章所讲述知识的综合运用模本,引导学生提升分析和设计能力。本书第2版在第1版的基础上进行了很多修订和大面积扩编,增加了例题、习题,将第1版中的第10章删去。全书共分10章,内容包括C语言概述、C程序的运算符和表达式、选择结构、循环结构、数组、函数、自定义数据类型、指针、文件以及Visual C 6.0开发环境。为了进一步强化学生在应用开发中的实作能力,本书每章的练习中都增加了实验实训部分。学生可以模仿章节综合设计的程序实例完成自己的设计,还可以创造性地对问题进行扩展设计,形成具有个人风格的独立程序。本书习题有编程题,也有等级考试中常见的选择题、填空题、读程序写结果题,题型较多,并附有参考答案,对于备考二级考试的同学也有一定的帮助。本书的第1、2章由布瑞琴修订; 第3、5、6、9章由郑晓健修订; 第4章由周波修订; 第7、8章由高世健修订; 第10章由冯瑶修订。郑晓健负责全书的统稿。全书由李向阳教授主审。在此,我们还必须由衷地感谢本书第1版的作者李向阳教授、方娇莉副教授、郭琳老师和王云泽老师,没有他们之前所做的大量工作,我们的修订工作不会如此顺利。建议本书授课时数为48学时,基本上机练习24学时,学生自主上机练习64学时左右,与本书配套的相关教学资料请到清华大学出版社网站(www.tup.com.cn)下载。由于编者水平和学识所限,书中难免存在疏漏与不足,敬请读者指正。
编者2017年3月
第3章选 择 结 构
前面两章已经介绍了顺序结构的程序设计,在大多数情况下,由于数据处理的需要,程序不会是单一的顺序结构,而是顺序、选择、循环3种结构的复杂组合。在生活中,人们在干某件事情时经常要根据某些条件来做出不同的抉择,在程序设计中也需要通过对一些条件的判断来选择处理不同的数据或完成特定的功能,这就是条件语句的任务。本章介绍如何用C语言的条件语句实现选择结构。为此先介绍用来描述条件的关系和逻辑表达式,接着介绍实现选择结构的条件语句if和switch。if语句一般适用于两路选择,也可以通过嵌套形式实现多路选择。switch语句能方便地实现多路选择。3.1工程师岗位面试关系运算符和逻辑运算符上海一家IT企业招聘CC开发工程师,满足以下任职要求者可以获得面试机会。1 学历: 计算机相关专业毕业,硕士及以上学历;2 工作年限: 两年以上CC开发工程师岗位从业经验;3 业务要求: 熟练或精通CC和数据压缩算法。
3.1.1分析与设计这家企业招聘CC开发工程师的条件和描述这些条件的表达式如表3.1所示。
表3.1任职要求和对应的表达式
招 聘 条 件表达式
硕士、博士eduction==''M'' ‖ eduction==''D''在CC开发工程师岗位从业两年以上working_life2对CC和数据压缩算法熟练或精通skill_level2 && skill_level2筛查工作年限
{
printf"数据压缩算法1.初学 2.一般 3.熟练 4.精通:";
scanf"%d",&skill_level;
ifskill_level2&&skill_level大于=大于或等于==等于!=不等于
这几个运算符优先级相同,但比下面高这两个运算符优先级相同,但比上面低左结合
通过关系运算符可以写出关系表达式,关系表达式的一般形式如下:
表达式关系运算符表达式
例31中出现的working_life2就是关系表达式。由于关系运算符的优先级低于算术运算符,高于赋值运算符,所以下面的关系表达式有其相应的等价式子。
ab c等价于ab c
ab==c等价于ab==c
a=bc等价于a=bc关系运算实际上是比较运算。关系表达式的值是一个逻辑值,即真或假。在C语言中没有专用的逻辑型数据,因此常用整型变量来存放关系的运算结果。若关系表达式成立,则该表达式的值为真,用整数1表示; 若关系表达式不成立,则该表达式的值为假,用整数0表示。例如关系表达式2==3的值为0,53的值为1,a=3b=5的值为0。3.1.3逻辑运算符和逻辑表达式
逻辑表达式是由逻辑运算符、括号和其他运算对象构成的式子,它的值反映了逻辑运算的结果。C语言中的逻辑运算符有3种,如表3.3所示。
表3.3逻辑运算符
逻辑运算符含义优先级结合性
!逻辑非,单目高于&&和‖右结合&&逻辑与,双目高于‖左结合‖逻辑或,双目低于&&左结合
通过逻辑运算符可以写出逻辑表达式,逻辑表达式的一般形式如下:
表达式逻辑运算符表达式或逻辑运算符表达式
例如,a‖b、age25 &&sex==''f''都是逻辑表达式。运算符&&和‖的优先级低于算术运算符和关系运算符,而运算符!的优先级高于算术运算符和关系运算符。在例31中用3个逻辑表达式来选择符合条件的求职者。3种逻辑运算符的运算规则如下。1 a&&b: 当a和b都为真时结果为真,否则结果为假。2 a‖b: 当a和b至少一个为真时结果为真,当a和b都为假时结果为假。3 !a: 当a为真时结果为假,当a为假时结果为真。表3.4为逻辑运算的真值表,它表示a和b的值在不同组合下各逻辑运算的值。
表3.4逻辑运算的真值表
ab!a!ba&&ba‖b真真假假真真真假假真假真假真真假假真假假真真假假
例32设a=4,b=5,c=5,写出下面各逻辑表达式的值。a bb&&!c‖1值为1!x=a&&y=b&&0值为0!a b c-1&&b c2值为1说明:1 逻辑表达式中任何非零的数值都被作为真。2 在逻辑表达式的求解中,并不是所有的逻辑运算符都会被执行。
① a&&b&&c : 只有a为真时才需要判断b的值,只有a和b都为真时才需要判断c的值。② a‖b‖c : 只要a为真,就不必判断b和c的值,只有a为假时才需要判断b。a和b都为假时才判断c。当左值可以决定整个表达式的值时就不再求右边表达式的值,因此对于与&&运算来说,左值为0,就不再继续后面的运算; 对于或‖运算来说,左值为1,就不再继续后面的运算,这样可以提高运行速度,有的书上把这一特点叫逻辑运算的短路特性,例如:
m=ab&&n=cd当a=1,b=2,c=3,d=4,m和n的原值为1时,由于ab的值为0,因此m=0,即可判断出表达式m=ab&&n=cd的值为0,而不必再求n=cd的值,因此n的值不是0而仍保持原值1。3.1.4条件运算符和条件表达式条件表达式是用条件运算符? :把3个表达式连接起来的式子,其形式如下:
表达式1?表达式2: 表达式3
条件运算符?:要求3个操作数,所以也叫三目运算符。条件表达式的求解过程是先判断表达式1的值是否为真非0,若为真,则计算表达式2,表达式2的值就是整个条件表达式的值; 若为假0,则计算表达式3,表达式3的值就是整个条件表达式的值。例33输入学生的卷面成绩和平时成绩,判断学生的总评成绩是否及格总评成绩=卷面成绩60% 平时成绩40%,且总评成绩60分以上为及格。
#include "stdio.h"
void main
{
int g1,g2,grade;
printf"请输入卷面成绩和平时成绩: ";
scanf"%d%d",&g1,&g2; 不能打负分
grade=intg1*0.6 g2*0.4;
printf"考试结果: %s,%d\n", grade=60 ? "及格":"不及格",grade;
}
运行结果:
8580
考试结果: 及格
例34将输入的字符由大写字母转换成小写字母。分析: 使用条件表达式ch=ch=''A''&&ch=''A''& &chheight-105,那么表明此人超重; 若某人的体重低于标准体重5kg,即weight0&&weight0 height、weight不可为负数
{
ifweightheight-105 判断是超重、标准还是偏轻
printf"你的体重超重,请注意减肥。\n";
else ifweighty
printf"%d\n",x;
说明: if表达式这行后面不要添分号,因为在这里if关键字这行和其后面一行是联系在一起而构成一条完整的语句,加分号就把该语句变为两条语句了。例如:
ifxy;这是一条语句,";"是语句结束符
printf"%d",x;这是另一条语句
例36超市在打折促销商品,若购物金额在500~1000元打8折,超过1000元打7折,低于500元不打折,编程序输入购物金额,计算并输入折扣金额。分析: 首先设购物金额为total,按照题目要求打折范围被划分为3段,即若01000,打7折。
#include "stdio.h"
void main
{
float total;total为购物金额
printf"请输入购物金额: ";
scanf"%f",&total; 输入购物金额
if01000
printf"折扣后金额: %8.2f\n", total*0.7; 打7折
iftotal500
cost=0.15;
else ifnumber300
cost=0.10;
else ifnumber100
cost=0.075;
else ifnumber50
cost=0.05;
else
cost=0;
图3.4多路选择结构
例39某公司对销售人员的工资实行底薪1000元加月销售额提成的政策,销售额与提成的比例关系如表3.5所示单位: 元。
表3.5销售提成表
销售额sales提成比例销售额sales提成比例
sales<10000没有提成50000sales<1000003%10000sales<500002%sales1000004%
分析:1 定义变量sales用来存放销售人员当月的销售额。2 提示用户输入销售人员当月的销售额,并用scanf函数接受用户输入的销售人员当月的销售额。3 根据表3.5的规则计算销售人员当月的工资底薪 销售额提成比例,并输出。
#include "stdio.h"
void main
{
const float B_PAY=1000.0; 定义底薪
float sales,income;定义销售额、工资
printf"请输入销售人员的销售额: ";
scanf"%f",&sales;
ifsaleselse
printf"D\n";
②else
printf"C\n";
③else
④ifscore=''A'' && meal
{
switchmeal根据套餐号确定单价
{
case ''A'': price=78;
break;
case ''B'': price=85;
break;
case ''C'': price=83.5;
break;
case ''D'': price=93;
break;
}
printf"请输入点餐套数: ";
scanf"%d",&n; 从键盘输入点餐套数
ifn120
printf"体重不符合标准,转行吧!\n";
else
{
switchw10
{
case 5:
case 6:printf"配高蛋白、中度脂肪食物\n";break;
case 7:
case 8:printf"配高蛋白、低脂肪食物\n";break;
default:printf"只配高蛋白食物\n";break;
}
}
}
例313case后无break语句的例子落空。
#include "stdio.h"
void main
{
int c=8;
switchc 10 ‖ x10 &x= 202 x=1,y=1,z=1,执行表达式w=x‖y&&z后x、y、z的值分别为。A. x=2, y=1, z=1B. x=2, y=2, z=2C. x=1, y=1, z=1D. x=2, y=2, z=13 已知int a = 10, b = 11, c = 12; ,表达式a b=''A''&ch=''A''&&ch=y&&y=zB. x=yand y=zC. x=y=zD. x=y&y=z7 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是。A. x&&yB. xy
x;
else
x=y-1;
A. 5B.10C. 13D. 910 根据下面的程序段判断x的取值在范围内时将打印字符串第二。
ifx0
printf"第一";
else ifx-3
printf"第二";
else
printf"第三";
A. x0B. x-3
C. x-311 已知int x=10,y=20,z=30;,以下语句执行后x、y、z的值是。
ifxy
z=x;
x=y;
y=z;
printf"%d,%d,%d",x,y,z;
A. 10、20、30B. 20、30、30C. 20、30、10D. 20、30、2012 以下关于逻辑运算符两侧运算对象的叙述正确的是。A. 只能是整数0或1B. 只能是整数0或非0整数C. 只能是整数0或正整数D. 可以是任意合法的表达式13 下列程序段的输出结果是。
int a=2,b=3,c=4,d=5;
int m=2,n=2;
a=m=ab&&n=cd 5;
printf"%d,%d",m,n;
A. 0,2B. 2,2C. 0,0D. 1,114 下列叙述中正确的是。A. break语句只能用于switch语句B. 在switch语句中必须使用defaultC. break语句必须与switch语句中的case配对使用D. 在switch语句中不一定使用break语句2. 填空题1 在C语言中用表示逻辑值真,用表示逻辑值假。2 以下程序执行后的输出结果是。
#include "stdio.h"
void main
{
int x=10,y=20 ,t=0;
ifx==y
t=x;
x=y;
y=t;
printf"%d,%d\n",x,y;
}
3 以下程序的功能是将输入的一个小写字母循环并移5个位置后输出,例如''a''变成''f'',''w''变成''b'',请补充语句。
#include "stdio.h"
void main
{
char c;
scanf"%c",&c;
ifc=''a''&&c=''v''&&cb
max=a;
else
max=b;
5 有以下程序段,正确的数学函数关系是。
ifx==0
y=0;
else ifx0
y=1;
else
y=-1;
6 与条件表达式x=k?i:i--,等价的语句是。7 请写出以下程序的输出结果。
#include "stdio.h"
void main
{
int a=100;
ifa100
printf"%d\n",a100;
else
printf"%d\n",a0
{
case 1:
switchb
|
|