新書推薦:
《
巨人传(插图珍藏本)
》
售價:NT$
3289.0
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:NT$
332.0
《
偿还:债务与财富的阴暗面
》
售價:NT$
347.0
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:NT$
408.0
《
封建社会农民战争问题导论(光启文库)
》
售價:NT$
296.0
《
虚弱的反攻:开禧北伐
》
售價:NT$
429.0
《
泰山:一种中国信仰专论(法国汉学经典译丛)
》
售價:NT$
380.0
《
花外集斠箋
》
售價:NT$
704.0
|
編輯推薦: |
本书以计算机相关专业岗位需求和行业编程规范为基础,以学生成绩管理系统作为教学项目,基于项目导入,任务驱动的教学模式,以工作过程系统化的项目化教材的设计思路来组织内容。本书的特点是基于软件开发流程,在由易到难、不断重构项目的过程中让读者在做中学,学中做,逐步掌握C语言程序设计知识和开发技能。本书可作为本科院校、高职高专院校计算机相关专业的教材,也可作为广大学习C语言程序设计与编程开发人员的参考用书。
|
內容簡介: |
本书以计算机相关专业岗位需求和行业编程规范为基础,以学生成绩管理系统作为教学项目,基于项目导入、任务驱动的教学模式,以工作过程系统化的项目化教材的设计思路来组织内容。本书主要内容包括C语言的基本语法、数据类型、程序基本结构、算法流程图,程序编码、调试及运行机制、数组、函数、结构体及指针、文件等。 本书将项目划分为3个版本: 先搭建项目骨架,再逐个填充项目模块,完成基于数组实现的项目版本1; 基于指针结构体重构的项目版本2; 基于文件继续重构的项目版本3。将C语言所有相关知识点融入对应版本的模块任务中。引导读者通过一个项目的3个版本的不断重构学习和实践的过程中完成函数、数组、指针结构体、文件等难点的理解,并掌握模块化编程思路,提高程序开发能力。 本书的特点是基于软件开发流程、由易到难、不断重构项目的过程中让读者在做中学,学中做,逐步掌握C语言程序设计知识和开发技能。 本书可作为本科院校、高职高专院校计算机相关专业的教材,也可作为广大学习C语言程序设计与编程开发人员的参考用书。
|
目錄:
|
目录
模块一学生成绩管理系统需求分析和设计
任务1-1: 项目需求分析
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务1-2: 项目设计
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务1-3: 项目开发环境搭建
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
模块二项目的数据定义及运算
任务2-1: 数据定义
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务2-2: 数据运算
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
模块三项目用户菜单设计
任务3-1: 主菜单显示
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务3-2: 主菜单选择
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务3-3: 子菜单选择
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务3-4: 菜单循环显示
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
模块四学生成绩管理
任务4-1: 学生成绩添加和浏览
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务4-2: 学生成绩统计
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务4-3: 学生成绩排序
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务4-4: 学生成绩查询
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
模块五项目重构1结构体和指针
任务5-1: 项目结构体重构
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务5-2: 项目指针重构
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
模块六项目重构2文件
任务6-1: 保存学生信息到文件
任务描述与分析
相关知识与技能
任务实施
任务拓展
任务6-2: 从文件读取学生信息
任务描述与分析
相关知识与技能
任务实施
任务拓展
模块总结
作业习题
附录A常用字符与ASCII代码对照表
附录B运算符和结合性
附录CC语言库函数
参考文献
|
內容試閱:
|
序言
程序设计基础(C语言程序设计)是高职软件专业一门重要的专业必修课程,课程实施的目标为: 使学生掌握基本的编程思想和模块化的编程思路,能够使用C语言进行程序设计和软件开发; 同时培养学生养成良好的学习习惯和学习兴趣,培养团队协作和自主学习能力,为后续其他专业课程的学习打下良好的学习基础。传统的学科式课程知识体系不适合当前的职业教育。高职学生普遍抽象逻辑思维能力较弱,却具有较强的形象思维能力,适合在做中学,不适应以知识逻辑为中心的学科课程学习。以知识点为中心的授课,各个知识点分散,难以串联起来,缺少完整性,学生学完后难以应用。而且琐碎枯燥的知识难以引起学生的学习兴趣。因此,作者在高职软件专业教学中,一贯坚持项目引导、任务驱动的教学模式,旨在使学生不但学会知识,更要学会应用知识完成实际项目。编者将课程内容重新设计,基于工作过程系统化的项目化教材的设计和编写思路,以学生成绩管理系统作为教学项目,将项目划分为六大模块和若干任务,将C语言的所有相关知识点融入对应的模块任务中。在教学项目的分解和设计中,采用的是将模块化编程的思路贯穿整个项目的构建过程中。将函数的概念提前到项目初级阶段,提前灌输模块化的编程思路,将函数的设计与调用贯穿在整个教学过程中,培养学生模块化程序设计思路。先搭建项目骨架,再逐个填充项目模块,完成数组实现的项目版本1。再通过用指针结构体重构项目版本2,以及用文件继续重构项目版本3。通过项目的不断重构,可以让学生反复学习和理解函数的定义和使用,即模块化的编程思路,同时也可以让学生通过一个项目的3个版本的不断学习和实践完成数组、指针结构体、文件等难点的理解和掌握,并能够进行项目化的编程,提高应用能力。本教材基于革新的教学方案,按项目开发流程组织各模块,并将任务组织在相关的模块中。模块一: 学生成绩管理系统需求分析和设计,使学生对课程的能力目标有一个总体的认识; 模块二: 项目的数据定义及运算,对系统所使用到的数据类型和相关运算,以及相关设计规范,进行阐述,引入标识符、数据类型和运算符的概念; 模块三: 项目用户菜单设计,进行逐步递进的设计与实现,引入输入输出、选择和循环控制的概念; 模块四: 学生成绩管理,实现班级学生成绩的添加、浏览、统计、排序和查询,引入函数的设计和调用、数组,及相关的排序等算法; 模块五: 项目重构1结构体和指针,用结构体重构系统的数据类型,引入结构体和指针的概念; 模块六: 项目重构2文件,用文件实现系统的输入输出,引入文件的概念。各模块中,包含实现此模块所需的所有逻辑相关的任务,在各任务中均包含: 此任务的任务描述与分析; 相关知识与技能; 任务实施(自然算法、流程图、数据结构、编码算法、具体实现、运行分析); 拓展训练(对一些经典的算法,如穷举、迭代、递归等,进行分析,要求学生自行完成,以拓展学生的算法设计能力)。本书紧密结合项目化课程教学改革,既满足了对项目整体能力的训练要求,又兼顾对基础理论和算法的学习要求。本书项目引导、任务驱动,通过仿真项目开发流程,设计逻辑相关的模块和任务。通过将项目划分为六大模块,17个任务。重构程序设计的理论知识,寓理论知识于项目任务实践中,实现教、学、做一体化。本书的主要创作团队为课程组的屠莉、周建林、刘萍、苏春芳、坎香。包芳对本书进行了细致的总审。当然也离不开家人和其他领导同事的关心与支持,在此一并表示真挚的感谢!由于编者水平有限,书中难免有不足之处,希望广大读者批评指正,并提出宝贵的意见和建议。(编者邮箱: yzutuli@163.com)
编者2017年2月
模块三项目用户菜单设计
模块二介绍了学生成绩管理系统的数据定义和运算符相关知识,本模块开始搭建项目框架,完成项目的两级菜单的设计。项目中包含主菜单和子菜单管理员、学生用户。系统运行首先进入主菜单,通过选择进入相应用户的子菜单,再选择进入各个菜单功能。由于菜单的选择应该具有重现性和循环性,因此,本模块的主要任务就是完成主菜单和子菜单的循环显示和选择,为下一模块的学生成绩管理功能提供调用界面。【工作任务】(1) 任务31: 主菜单显示。(2) 任务32: 主菜单选择。(3) 任务33: 子菜单选择。(4) 任务34: 菜单循环显示。【学习目标】(1) 掌握程序控制的顺序、选择和循环三大结构,并能够熟练画出算法流程图。(2) 掌握顺序结构的输入输出语句。(3) 掌握分支结构的if语句和switch语句。(4) 掌握循环结构的while语句和do while语句。任务31: 主菜单显示任务描述与分析
图31主菜单
周老师将班级所有同学划分为五个项目组,要求每个项目组完成学生成绩管理系统的主菜单的显示,具体实现效果如图31所示。系统运行时,首先进入主菜单,主菜单有3个选项,分别为: 1管理员、2学生、0退出。要完成这个任务,周老师要给项目组的同学们分析一下需要掌握哪些知识。首先,程序开发前要了解算法流程图和基本的程序控制结构。在进行程序设计之前,要将解决这个任务的程序结构理清,并将算法描述出来才能进行编码。其次,本任务需要用到C语言中的格式输出语句。相关知识与技能311算法和程序结构
程序设计就是面对一个需解决的实际问题,设计适合于计算机的算法,并利用程序设计语言如C语言写出算法成为程序、运行程序,此问题得以解决。而程序是解决特定问题所需要的语句集合。算法是为解决某个特定问题而采取的确定有效的步骤。算法的描述可以通过自然语言法、伪代码法、流程图表示法、高级语言表示法。下面介绍一下传统流程图的算法描述方法。传统流程图符号如图32所示。
图32传统流程图符号及功能
基本的程序结构有以下3种。1 顺序结构。语句顺序逐条执行,不发生流程转移,如图33所示。2 选择结构。选择结构流程图如图34所示。
图33顺序结构流程图
图34选择结构流程图
3 循环结构。循环结构分为当型循环和直到型循环两种,分别如图35、图36所示。理论已经证明,利用这三种程序结构可以解决任意问题。计算机程序解决问题的算法与人们日常解决相同问题的算法相比较: 程序设计算法基于日常逻辑,因此计算机擅长大量的重复计算,引入了循环判断等结构,程序设计算法往往更简洁、清晰、独特。312格式化输出语句1. 格式化输出函数printfprintf函数的作用是向系统指定的隐含输出设备输出若干数据。
图35循环结构流程图当型循环
图36循环结构流程图直到型循环
printf函数的语法格式如下。
printf"格式控制字符串",输出项列表;
其中,输出项列表可以是常量、变量、表达式、函数调用等; 格式控制字符串一般包含两部分,即格式控制符和其余字符。格式控制符是以%开头的字符串,控制输出数据的类型和格式。其余字符指原样输出的提示字符串,有几个%,就有几个输出项。那么,printf"x=%d,y=%d\n",x,y;语句中哪些是格式控制符?哪些是提示字符串?会输出什么?输出用格式控制字符串为%格式字符。表31列出了常用的格式字符。
表31格式字符
格 式 字 符说明
%d,i输出带符号的十进制数正数不带符号%u输出无符号的十进制数%o输出无符号的八进制数不输出前导符0%x,X输出无符号的十六进制数不输出前导符0 x%c以字符形式输出1个字符%s输出1个字符串到第1个''\0''为止%f输出小数形式的实数隐含输出6位小数%e,E输出指数形式的实数隐含输出6位小数%g,G输出%f和%e中宽度较短的,不输出无意义的0%p输出指针地址%%输出%
附加的输出用格式字符串为"%附加格式字符格式字符",如表32所示。2. 字符输出函数字符输出函数为putcharch,可以向终端输出1个字符,与printf的%c格式输出无区别。例如putchar''y'';putchar''\n'';putcharch;putchar''0xa'';
表32附加格式字符
附 加 字 符说明
输出的数字总带 号或-号-输出的数据在所在域中左对齐l输出长整型m输出数据的最小宽度.n输出数据中小数点后的位数#使输出的8或16进制数带前导0或0x
3. 字符串输出函数字符串输出函数为puts字符串常量字符串地址,可以将字符串内容输出,直至遇到''\0'',并且自动换行。例如,语句
printf"%s","I am a good student";
可以输出字符串"I am a good student",但不会自动换行。语句
puts"I am a good student";
也可以输出字符串"I am a good student",但会换行。313空语句和复合语句1. 空语句空语句只有一个;,语句为空,不执行任何操作,但在构成程序结构或调试阶段还是很有用的。2. 复合语句多于1条的语句用{}括起来,称为复合语句。复合语句在语法上等同于1条语句,凡是单个语句出现的地方,都可以出现复合语句,大大增强了程序的处理能力。在复合语句内部可以包含任何数据结构定义和其他语句,在其内部定义的变量只在此复合语句内起作用。3. 注释注释: 为了使编码人员和其他读者更好地理解程序,在程序中写的注解。: 用于单行注释;*...*: 用于多行注释或块注释。注释的内容是不进行编译和执行的,因此注释有两个作用: 对程序进行注解; 屏蔽不需执行的代码。任务实施通过以上知识的学习,项目组就可以实施主菜单显示的任务了。在main函数中添加代码来完成。用3个printf语句输出提示字符串3个选择,注意各行的对齐方式。代码实现:
void main
{
printf"\t\t学生成绩管理系统\n\n";
printf"\t\t1管理员\n";
printf"\t\t2学生\n";
printf"\t\t0退出\n";
printf"\n";
printf"\n";
}
任务拓展1. 任务拓展1试根据主菜单的显示的实施过程完成管理员和学生子菜单的显示。管理员功能如下。1 班级成绩添加。2 班级成绩浏览。3 求最高分。4 求最低分。5 求平均分。6 求各分数段所占比率。7 成绩排序。因此,管理员子菜单可以由8个printf语句输出提示字符串8个选择。代码实现:
void main
{
printf"\t\t管理员成绩管理功能\n\n";
printf"\t\t1班级成绩添加\n";
printf"\t\t2班级成绩浏览\n";
printf"\t\t3最高分\n";
printf"\t\t4最低分\n";
printf"\t\t5平均分\n";
printf"\t\t6各分数段所占比率\n";
printf"\t\t7成绩排序\n";
printf"\t\t0退出\n";
}
学生功能有: 查询成绩。因此,学生子菜单可以由2个printf语句输出提示字符串8个选择。代码实现:
void main
{
printf"\t\t学生成绩管理功能\n\n";
printf"\t\t1查询成绩\n";
printf"\t\t0退出\n";
}
2. 任务拓展2试用*字符画一只兔子形状。利用格式化输出函数。任务分析: 可以用printf函数逐行打印出兔子的形状。代码实现:
void main
{
printf"\n";
printf"\n";
printf"\t this is a rabbit!\n";
printf"\n";
printf"\n";
printf"\t**\n";
printf"\t ****\n";
printf"\t****\n";
printf"\t****\n";
printf"\t***\n";
printf"\t**\n";
printf"\t****\n";
printf"\t**\n";
printf"\t***\n";
printf"\t*****\n";
printf"\t**\n";
printf"\t****\n";
printf"\n";
printf"\n";
}
任务32: 主菜单选择任务描述与分析学生成绩管理系统的主菜单显示已经完成,现在周老师要求每个项目组完成对主菜单的选择,具体实现效果如图37所示。系统运行时,显示主菜单,当选择1时应该进入管理员子菜单,当选择2时进入学生子菜单,选择0时退出系统。
图37主菜单选择
要完成这个任务,周老师要给项目组的同学们分析一下需要掌握哪些知识。要进行主菜单的选择,首先需要用户从键盘输入数字进行选择,系统接收到输入,然后根据接收到的数字进行判断,再进行跳转。因此,本任务需要用到C语言中的格式输入语句和判断分支语句。相关知识与技能321格式化输入语句
1. 格式化输入函数scanf格式化输入函数可以在系统指定的隐含输入设备上输入数据到变量。scanf函数的语法格式如下。
scanf"格式控制字符串",变量地址1,变量地址2,...;
有几个%,就有几个&,如scanf"%d%d",&x,&y;。格式控制字符串为"%格式字符",如表33所示。
表33格式控制字符
格 式 字 符说明%d输入带符号的十进制数遇空格、回车结束%o输入带符号的八进制数遇空格、回车结束%x输入带符号的十六进制数遇空格、回车结束%c输入1个字符遇字符结束%s输入1个字符串遇回车、空格、制表符结束%f输入小数形式的实数遇空格、回车结束%e输入指数形式的实数遇空格、回车结束
scanf函数的执行过程如下。1 执行到scanf语句时,程序停下来,等待用户的输入。2 输入1个变量时,请按照以上结束方式结束输入。3 当需要同时输入多个变量时,有以下两种情况。① scanf的格式字符串中有分隔符,必须严格按次序输入数值和相应分隔符。例如,执行语句scanf"%d,%d",&x,&y;时,必须输入3,4。② scanf的格式字符串没有分隔符,可以用空格、跳格、回车符等分隔多个数值。例如,执行语句scanf"%d%d",&x,&y;时,可以输入3 4,或者3 4,或者34。【例31】设有以下变量,从键盘为其输入值。
int a,b;
floatx;
char ch1,ch2,stuName[20];
scanf"%d%d%f%c%c%s",&a,&b,&x,&ch1,&ch2,stuName;
如果在键盘上这样录入: 3 4 1.2 A B rabby,则各变量的值是: a=3,b=4,x=1.2,ch1='''',ch2=''A'',stuName="b"。如果在键盘上这样录入: 3 4 1.2ABrabby,则各变量的值是: a=3,b=4,x=1.2, ch1=''A'', ch2=''B'', stuName="rabby"。2. 字符输入函数字符输入函数为c=getchar,用于从键盘上输入1个字符包括空格等,按Enter键确认,函数的返回值就是该字符。例如:
char a,b;
b=getchar;
scanf"%c",&a;
这两个输入语句的区别是: 前一个语句输入1个字符后,需要按Enter键才能接收到字符; 后一个语句只要输入任何字符,马上就被接收了。也就是说,getchar与scanf的%c格式字符的用法是有区别的,使用getchar函数输入数据需要按Enter键确认输入,而使用scanf函数则接收当前字符。3. 字符串输入函数字符串输入函数为gets字符串地址,接收从键盘输入的字符串,按Enter键结束。例如,遇到gets函数时,如果输入I am a good student,则得到的字符串是"I am a good student",若使用scanf函数的%s格式符接收此字符串时,由于回车、空格、制表符都是分隔符,因此得到的字符串是"I"。322if语句用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有以下三种基本形式。
图38if语句流程图
1. 第一种形式为基本形式: if
if表达式
{
语句
}
语义: 如果表达式的值为真,则执行其后的语句,否则不执行该语句,流程如图38所示。说明: 花括号内的语句如果为单条语句,花括号可以省略,否则不能省略。【例32】比较两个数值的大小,用if语句的第一种形式。
main
{
int a, b, max;
printf"\n input two numbers:";
scanf"%d%d", &a , &b;
max=a;
ifmaxb
max = a ;
else
max = b;
printf"max=%d",max;
}
3. 第三种形式为: ifelseif
if表达式1
{
语句1;
}
else if表达式2
{
语句2;
}
else if表达式n-1
{
语句n-1;
}
else
{
语句n;
}
语义: 依次判断表达式的值,当出现某个值为真时,则执行其对应的语句; 然后跳到整个if语句之外继续执行程序,如果所有的表达式均为假,则执行语句n; 然后继续执行后续程序,过程如图310所示。
图310ifelseif语句流程图
【例34】判别键盘输入字符的类别。
main
{
char c;
printf"input a character: ";
c=getchar;
ifc
|
|