描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302521945丛书名: 普通高校本科计算机专业特色教材精选·算法与程序设计
2. 增强针对性:增强“继续学习”的针对性,为其他编程语言和后继专业课程的学习奠定基础。
3. 增强实用性:不仅介绍编程的理论和方法,还特别强调通过上机实践提高学生的编程能力。以Visual C 6.0为基本开发环境,用一定的篇幅对Visual C 6.0的编程和调试环境做较深入的介绍,既能激发同学们的学习兴趣,更能为今后更高级开发技术的学习打下良好的基础。本书的例题和上机综合实验全部在Visual C 6.0环境下调试通过,为提高学生的实践能力提供帮助。
4. 强调编程技巧和方法:着重结构化程序设计的概念、方法和编程技巧,坚持“从现在就开始注重方法”的思想。第二部分的10个上机综合实验,内容包括问题的提出、编程思路、设计方法、程序代码、调试过程等详细介绍,用于提高学生的程序设计能力。
全书共分为两个部分:*部分是C语言程序设计,共11章,系统地对C语言的基本语法和基本技巧进行介绍;第二部分是上机实验,内容包括编程思路、设计方法、程序代码、调试过程等,用于提高学生的实际程序设计能力。本书以C程序实例作为引导,通过典型例题对重点知识进行强化,符合程序设计的学习规律。本书的例题和上机综合实验全部在Visual C 6.0环境下调试通过。
本书适合作为高等学校理工类专业程序设计基础课程教材,也可供程序设计初学者自学参考。
第1章C语言初步介绍1
1.1几个例子1
1.2C语言的字符集与词汇4
1.2.1C语言的字符集4
1.2.2词汇4
1.3C程序的上机操作5
1.3.1启动Visual C 6.06
1.3.2集成开发环境介绍7
1.3.3一个程序的上机操作过程8
1.4习题14
第2章程序设计过程17
2.1程序设计概述17
2.1.1结构化程序设计17
2.1.2模块化程序设计的方法18
2.1.3面向对象的程序设计18
2.2程序设计语言19
2.2.1程序设计的基本步骤19
2.2.2算法及其表示20
2.2.3程序设计语言21
2.3程序的基本控制结构23
2.3.1顺序结构23
2.3.2选择结构23
2.3.3循环结构23
2.3.4子程序调用23程序设计基础(C语言版)目录2.4应用举例24
2.5习题25
第3章数据类型、运算符及表达式27
3.1数据和数据类型27
3.2常量28
3.2.1整型常量28
3.2.2实型常量28
3.2.3字符常量29
3.2.4字符串常量29
3.2.5符号常量30
3.3变量30
3.3.1整型变量30
3.3.2实型变量31
3.3.3字符型变量31
3.4赋值运算与算术运算32
3.4.1赋值运算32
3.4.2二元算术运算33
3.4.3自加、自减运算34
3.4.4复合赋值运算35
3.5变量赋初始值35
3.6类型转换36
3.6.1自动类型转换36
3.6.2强制类型转换37
3.7表达式37
3.7.1表达式求值37
3.7.2表达式语句39
3.8位运算39
3.8.1按位与运算40
3.8.2按位或运算40
3.8.3按位异或运算41
3.8.4按位取反运算41
3.8.5左移运算42
3.8.6右移运算42
3.9习题42
第4章顺序结构程序设计45
4.1编译预处理45
4.1.1宏定义45
4.1.2文件包含46
4.2字符输入输出函数47
4.2.1字符输入函数getchar48
4.2.2字符输出函数putchar48
4.3格式输入输出函数49
4.3.1格式输入函数scanf49
4.3.2格式输出函数printf51
4.4顺序结构程序设计56
4.4.1空语句和表达式语句56
4.4.2复合语句56
4.5应用举例57
4.6习题59
第5章选择结构程序设计61
5.1关系运算和逻辑运算61
5.1.1关系运算61
5.1.2逻辑运算62
5.2if语句63
5.2.1if语句的3种形式63
5.2.2条件运算67
5.3switch语句68
5.4应用举例70
5.5习题72
第6章循环程序设计75
6.1while循环语句75
6.2dowhile循环语句76
6.3for循环语句77
6.4循环的退出81
6.4.1break语句81
6.4.2continue语句82
6.4.3goto语句82
6.5应用举例84
6.6习题87
第7章数组91
7.1一维数组91
7.1.1一维数组的定义91
7.1.2一维数组的使用92
7.1.3一维数组的初始化93
7.2二维数组95
7.2.1二维数组的定义95
7.2.2二维数组的初始化95
7.2.3二维数组的引用96
7.3字符数组和字符串98
7.3.1字符数组的定义98
7.3.2字符串99
7.4应用举例102
7.5习题105
第8章函数107
8.1C程序与函数107
8.2函数的定义和说明109
8.2.1函数的定义109
8.2.2函数的说明112
8.3函数的调用113
8.3.1函数调用的格式113
8.3.2参数的传递114
8.4应用举例1117
8.5函数的嵌套调用与递归调用119
8.5.1函数的嵌套调用119
8.5.2函数的递归调用121
8.6作用域与存储类123
8.6.1作用域123
8.6.2存储类125
8.6.3内部函数与外部函数128
8.7应用举例2129
8.8习题132
第9章指针135
9.1指针概述135
9.1.1什么是指针135
9.1.2指针变量的定义136
9.1.3指针的运算136
9.2指针与函数参数139
9.3指针与数组141
9.3.1一维数组的指针141
9.3.2多维数组的指针146
9.3.3字符指针与字符串148
9.4应用举例151
9.5习题153
第10章结构、联合和枚举155
10.1结构的概念155
10.1.1结构类型的定义155
10.1.2结构变量的说明156
10.1.3结构变量的引用157
10.1.4结构变量的初始化158
10.2结构数组160
10.3指向结构的指针161
10.3.1指向结构的指针161
10.3.2结构指针作函数参数164
10.4动态数据结构165
10.4.1内存的动态分配和释放函数166
10.4.2链表166
10.5联合174
10.5.1联合的定义174
10.5.2联合变量的说明与引用175
10.6枚举176
10.7类型定义178
10.7.1基本数据类型的重新命名179
10.7.2用新类型名代替构造类型名179
10.7.3用新类型名定义数组和字符串180
10.8应用举例180
10.9习题184
第11章文件187
11.1C文件的概念187
11.1.1C语言文件的特点187
11.1.2二进制流和字符流188
11.1.3缓冲文件系统和非缓冲文件系统188
11.2文件指针189
11.3文件的打开与关闭190
11.3.1文件的打开——fopen函数190
11.3.2文件的关闭——fclose函数191
11.4文件的读写192
11.4.1字符读写函数——fputc和fgetc192
11.4.2字符串读写函数——fputs和fgets194
11.4.3数据块读写函数——fread和fwrite196
11.4.4格式化读写函数——fscanf和fprintf198
11.5文件的定位199
11.5.1rewind函数199
11.5.2ftell函数200
11.5.3fseek函数200
11.6输入输出重定向201
11.7应用举例203
11.8习题204
第12章上机实验205
实验1Visual C 系统与顺序结构程序设计205
实验2选择结构程序设计206
实验3循环结构程序设计207
实验4程序调试208
实验5数组215
实验6函数216
实验7指针218
实验8结构和枚举219
实验9链表220
实验10文件操作220
附录A习题参考答案223
附录B运算符的优先级及其结合性251
附录C标准ASCII字符集253
附录D常用的C语言库函数257
参考文献260
为了适应21世纪人才培养的需要,培养具有特色的计算机人才,急需一批适合各种人才培养特点的计算机专业教材。目前,一些高校在计算机专业教学和教材改革方面已经做了大量工作,许多教师在计算机专业教学和科研方面已经积累了许多宝贵经验。将他们的教研成果转化为教材的形式,向全国其他学校推广,对于深化我国高等学校的教学改革是一件十分有意义的事。
清华大学出版社在经过大量调查研究的基础上,决定编写出版一套“普通高校本科计算机专业特色教材精选”。本套教材是针对当前高等教育改革的新形势,以社会对人才的需求为导向,主要以培养应用型计算机人才为目标,立足课程改革和教材创新,广泛吸纳全国各地的高等院校计算机优秀教师参与编写,从中精选出版确实反映计算机专业教学方向的特色教材,供普通高等院校计算机专业学生使用。
本套教材具有以下特点:
1. 编写目的明确
本套教材是在深入研究各地各学校办学特色的基础上,面向普通高校的计算机专业学生编写的。学生通过本套教材,主要学习计算机科学与技术专业的基本理论和基本知识,接受利用计算机解决实际问题的基本训练,培养研究和开发计算机系统,特别是应用系统的基本能力。2. 理论知识与实践训练相结合
根据计算学科的三个学科形态及其关系,本套教材力求突出学科理论与实践紧密结合的特征,结合实例讲解理论,使理论来源于实践,又进一步指导实践得到自然的体现,使学生通过实践深化对理论的理解,更重要的是使学生学会理论方法的实际运用。
3. 注意培养学生的动手能力
程序设计基础(C语言版)出版说明每种教材都增加了能力训练部分的内容,学生通过学习和练习,能比较熟练地应用计算机知识解决实际问题。既注意培养学生分析问题的能力,也注重培养学生解决问题的能力,以适应新经济时代对人才的需要,满足就业要求。
4. 注重教材的立体化配套
大多数教材都将陆续配套教师用课件、习题及其解答提示,学生上机实验指导等辅助教学资源,有些教材还提供能用于网上下载的文件,以方便教学。
由于各地区各学校的培养目标、教学要求和办学特色均有所不同,所以对特色教学的理解也不尽一致,我们恳切希望大家在使用教材的过程中,及时地给我们提出批评和改进意见,以便我们做好教材的修订改版工作,使其日趋完善。
我们相信经过大家的共同努力,这套教材一定能成为特色鲜明、质量上乘的优秀教材,同时,我们也希望通过本套教材的编写出版,为“高等学校教学质量和教学改革工程”做出贡献。
清华大学出版社前言“程序设计基础”是高等学校理工类专业学生的基础课程。本书以C/C 语言作为基本工具,以程序设计思想与方法作为核心内容,以动手编程解决实际问题能力的培养作为最终目标。通过本书,不仅要使学生掌握程序设计语言的语法与结构,更重要的是逐步培养学生用计算机解决问题的思维、习惯与方法。
本书的读者对象是没有编程基础的初学者,他们通过本书所能接触到的也只是一些简单的程序,但程序结构的设计和编程习惯的培养却正是从初学阶段开始形成的,因此本书对概念、算法、语法以及例题的讲解都强调规范化、结构化,引导读者适当地模仿,从开始就养成规范编程的习惯。
本书有以下特色:
(1) 本书以程序设计为核心,将C语言的有关语法有机结合到程序设计实例中,避免了生硬枯燥的语法介绍。
(2) 突出针对性。这主要是指“继续学习”的针对性。C语言的后续课程主要有两类: 一类是其他编程语言课程;另一类是后续专业课程,包括“数据结构”“数据库”“算法分析”等。在教学实践中经常出现这种情况: 作为这些课程基础知识应该提前掌握的知识,学生在C语言的学习中并未认真掌握,如参数的传递方式、指针的使用和内存的动态申请等,需要重新学,给教学带来了很大的不便。本书引入了数据结构中的简单算法和基础内容作为讲解实例或应用实例,使计算机相关专业学生为将来的专业课程学习打好基础,也使非计算机专业的学生有能力进一步拓展知识。
(3) 注重实用性。本书不仅介绍编程的理论和方法,还通过上机实践来提高学生的编程能力。本书以Visual C 6.0为基本开发环境,用一定的篇幅对Visual C 6.0的编程和调试环境作了较深入的介绍,既能激发学生的学习兴趣,更能为学生今后学习高级开发技术打下良好的基础。本书的例题和上机实验全部在Visual C 6.0环境下调试通过。(4) 强调编程技巧和方法。本书强调结构化程序设计的概念、方法和编程技巧。10个上机实验内容包括问题的提出、编程思路、设计方法、程序代码、调试过程等,以帮助学生提高程序设计能力。
(5) 本书将编程学习过程中容易出错的地方用黑框标出,重点加以说明,使初学者避免了在学习过程中“踩雷”。
本书分为两部分。
第一部分是C语言程序设计,系统地介绍了程序设计的方法及C语言的基本语法和基本技巧,是本书的主体部分,共11章。其中带*的内容为扩展内容,在今后的学习中应用较少,跳过这些部分,不会对其他内容的学习带来影响,可以等将来用到时再回来查阅。各章内容如下: 第1章通过几个简单的示例程序,对C语言程序作初步介绍;第2章介绍程序设计方法、程序设计过程、程序设计语言的概念,并简要介绍结构化程序的几种基本控制结构;第3章介绍数据类型、常量与变量、运算符与表达式的概念;第4章介绍常用的输入输出函数和顺序结构程序设计;第5章介绍关系运算及选择结构程序设计;第6章介绍循环结构程序设计;第7章介绍数组的定义、引用、初始化及数组的应用;第8章介绍函数的使用、参数的传递及变量的作用域等内容;第9章介绍指针的概念和运算、指针在函数调用中的作用及指针与数组的关系等内容;第10章介绍结构、联合和枚举等类型;第11章介绍与文件操作相关的内容。
第二部分是上机实验,包括10次实验的内容。实验内容的安排基本与第一部分的各章相对应。一般每次实验安排两三个不同难度的题目,可以根据上机时间有选择地安排其中的部分题目。
本书主要作为高等学校理工类专业的程序设计基础课程教材,也可作为计算机爱好者学习C语言的参考书。本书电子教案可从清华大学出版社网站www.tup.com.cn下载。限于作者水平,书中难免会存在一些不足之处,敬请读者批评指正。
作者
2018年9月程序设计基础(C语言版)前言
本章重点: 正确使用各种关系的运算,掌握if语句和 switch语句的功能并在编程中熟练运用。
5.1关系运算和逻辑运算〖*3/4〗5.1.1关系运算C语言提供了一组关系运算符,如表5.1所示。它们用来比较两个运算对象的大小。表5.1关系运算符
运算符名称例子>大于a>b,a大于b=大于或等于a>=b,a大于或等于b<=小于或等于a<=b,a小于或等于b!=不等于a!=b,a不等于b
关系运算符都是二元(双目)运算符,它们的优先级比算术运算符低,高于赋值运算符。在关系运算符中,<、<=、>、>=同级,它们高于==和!=。关系运算符的结合性都是自左至右。
用关系运算符将两个表达式连接起来就成为关系表达式。例如,a>b、x==y、a b>=c b都是合法的关系表达式。程序设计基础(C语言版)第5章选择结构程序设计关系表达式的值是一个逻辑值,即真或假。C语言没有专门的逻辑型数据,而是用1(或非0)表示真,用0表示假。因此表达式5<3的值为假,即为0。而表达式a>b的值则取决于a、b的值,但只可能是真或假(1或0)两种情况之一。
再看一个复杂一些的关系表达式如何求值(设a=2,b=3):c=5-3>=a 1<=b 2在这个表达式中有赋值运算、算术运算和关系运算。其中算术运算优先级最高,关系运算次之,赋值运算最低,所以先进行算术运算,即c=2>=3<=5然后进行关系运算,关系运算符的结合性为自左至右,先计算2>=3,结果为假,其值为0,即c=0<=5再进行关系运算0<=5,结果为真,其值为1,故c的值为1。
字符型数据可按其ASCII码值进行比较。例如:
‘a’>’b’: 结果为假,值为0。
‘a’>50: 结果为真,值为1。
5.1.2逻辑运算
逻辑运算符是用来对运算对象做逻辑运算的。C语言提供了3种逻辑运算符,如表5.2所示。表5.2逻辑运算符
运算符名称例子!逻辑非!a,a反&&逻辑与a&&b,a与b||逻辑或a||b,a或b
!(逻辑非)为单目运算符,右结合。其运算规则是: 当运算量为0时,运算结果为1;当运算量为1时,运算结果为0。
&&(逻辑与)为双目运算符,左结合。其运算规则是: 只有当两个运算量都是非0时,运算结果才为1,否则为0。
||(逻辑或)为双目运算符,左结合。其运算规则是: 只要有一个运算量为非0,运算结果就为1;只有两个运算量都为0时,结果才是0。
这3个运算符的优先级如下: 逻辑非!最高,逻辑与&&次之,逻辑或||最低。!的优先级高于算术运算符和关系运算符,而&&和||的优先级低于算术运算符和关系运算符。由此可见:a>b&&c>d相当于(a>b)&&(c>d)
a==0||b==0相当于(a==0)||(b==0)
!a&&b==c相当于(!a)&&(b==c)用逻辑运算符将逻辑量(表示逻辑的常量、变量、函数、关系表达式等)连接起来的式子称为逻辑表达式。逻辑表达式的值是一个逻辑值,用1表示真,用0表示假。而在判断一个量的真或假时,以非0表示真,以0表示假。例如a=3,b=2,则
!a: 相当于!3,值为0。
a&&b: 相当于3&&2,值为1。
a&&!b: 相当于3&&0,值为0。
!a||b: 相当于0||2,值为1。
逻辑与和逻辑或运算分别具有如下性质:
a&&b,当a为0时,不管b为何值,结果为0。
a||b,当a为1时,不管b为何值,结果为1。
利用上述性质,在计算连续的逻辑与运算时,若有运算分量的值为0,则表达式的结果为0,不再计算后面的运算分量;在计算连续的逻辑或运算时,若有运算分量的值为1,则表达式的结果为1,不再计算后面的运算分量。上述性质也称为短路特性。
注意: 运算符&&和||的短路特性的副作用。思考下面的表达式:i>0&& j>0如果i>0的结果为假,将不会计算表达式 j>0,那么j也不会自增。把表达式的条件变成 j>0&&i>0,就可以解决这个短路问题。更好的办法是单独对j进行自增操作。
关系运算和逻辑运算经常用于流程控制,如分支语句或循环语句的条件表达式中。
5.2if语句
if语句是条件选择语句,它通过判断给定的条件是否满足来决定所要执行的操作。
5.2.1if语句的3种形式
if语句有单分支、双分支和嵌套(多分支)3种形式。
1. 单分支if语句
图5.1单分支if语句
的执行过程单分支的if语句格式如下:if(表达式)语句例如:if(a>b) printf(“%d”,a);单分支if语句执行过程如图5.1所示,首先计算if后面括号内表达式的值。如果它的值为真(非0),就执行语句;如果它的值为假(0),就转到if语句的下一条语句去执行。if语句中的表达式通常为关系表达式或逻辑表达式,也可以是算术表达式。
例5.1求一个整数的绝对值。#include
void main()
{
int a;
scanf(“%d”,&a);
if(a<0) a=-a;
printf(“这个数的绝对值是%d\n”,a);
}运行时输入-101,结果如下:这个数的绝对值是101
2. 双分支if语句
双分支if语句的格式如下:if(表达式)
语句1
else
语句2例如:if(a>b)
printf(“%d”,a);
else
printf(“%d”,b);双分支if语句的执行过程如图5.2所示,首先计算if后面括号内表达式的值。如果它的值为真(非0),就执行语句1;如果图5.2双分支if语句
的执行过程它的值为假(0),就执行语句2。
例5.2编写程序,输入两个整数,求其中较大者。#include
void main()
{
int a,b,large;
scanf(“%d%d”,&a,&b);
if(a>b) large=a;
elselarge=b;
printf(“large=%d\n”,large);
}运行时输入10 20,结果如下:large=20在if语句中,语句1和语句2可以是单个语句,也可以是由多个语句组成的复合语句。
例5.3输入两个数,要求将大者赋予x,小者赋予y。#include
void main()
{
int a,b,x,y;
scanf(“%d%d”,&a,&b);
if(a>b) {x=a; y=b;}
else{x=b; y=a;}
printf(“x=%dy=%d\n”,x,y);
}运行时输入3 4,结果如下:x=4y=3
3. if语句嵌套(多分支)
if语句中的语句1和语句2本身又可以是一个if语句,这就是if语句的嵌套,用这种嵌套实现多分支if语句。其执行过程如图5.3所示。下面是一种if语句嵌套最常用的形式——elseif结构。
图5.3if语句的嵌套(多分支)
if(表达式1)
语句1
else if(表达式2)
语句2
…
else if(表达式n)
语句n
else
语句n 1其含义是: 如果表达式1为真,则执行语句1;否则,如果表达式2为真,则执行语句2……以此类推,如果表达式n为真,则执行语句n;如果各表达式都不为真,则执行语句n 1。
例5.4编写一个求解符号函数的程序。Sign=1,x>0
0,x=0
-1,x<0程序如下:#include
void main()
{
int x,sign;
printf(“Please input a number:\n”);
scanf(“%d”,&x);
if(x>0)
sign=1;
else if(x==0)
sign=0;
else
sign=-1;
printf(“The sign is %d.\n”,sign);
}运行时出现以下提示信息:Please input a number:输入10,结果如下:The sign is -1例5.5程序要求输入百分制成绩,然后按此成绩输出成绩等级(90~100为A,80~89为B,70~79为C,60~69为D,60以下为E)。#include
void main()
{
int score;
printf(“请输入一个成绩0~100:”);
scanf(“%d”,&score);
printf(“The grade is:”);
if(score>=90)
printf(“%c\n”,’A’);
else if(score>=80)
printf(“%c\n”,’B’);
else if(score>=70)
printf(“%c\n”,’C’);
else if(score>=60)
printf(“%c\n”,’D’);
else
printf(“%c\n”,’E’);
}运行时出现以下提示信息:请输入一个成绩(0~100):输入85,结果如下:The grade is:B上面的elseif结构并不能代表if嵌套的全部情况,更一般的情况是if后面和else后面的语句都可以再包含if语句。例如:if(表达式1)
if(表达式2)
语句1
else
语句2这里有两个if和一个else,显然如果if和else配对不同,则语句的执行效果是不一样的,于是就出现了二义性。为此C语言规定,else总是与它前面最近的一个无else的if配对。根据这一规定,上面语句中的else是与第二个if配对。如果想要使else与第一个if配对,则可在相应的if语句上加上大括号:if(表达式1)
{if(表达式2)语句1}
else
语句2注意: 不要混淆==(判等)运算符和=(赋值)运算符。语句if(i==0)…测试i是否等于0,而语句if(i=0)…则是先把0赋值给i,然后测试赋值表达式的结果是否非零值,在这种情况下,测试总是会失败的。
把==运算符与=运算符混淆是最常见的C语言编程错误。
5.2.2条件运算
条件运算符(?:)是C语言唯一的三目运算符,它连接3个运算分量。条件运算符构成的表达式的一般形式如下:表达式1?表达式2:表达式3它的执行过程是: 先计算表达式1,如果其值为真,则计算表达式2的值,并作为结果值,否则计算表达式3的值作为结果值。例如:max=(a>b)?a:b;该语句执行时,当a>b条件成立时,变量max取a值,否则取b值。
在if语句中,当if和else都只带一个赋值语句,且给同一变量赋值时,就可用条件运算来代替。例如上述条件运算可替代下面的if语句:if(a>b)
max=a;
else
max=b;条件运算符的优先级较低,只高于赋值运算符和逗号运算符。
条件表达式体现了C语言简明的风格,这是C语言区别于其他高级语言的一个显著特点。
5.3switch语句
5.2节介绍的if语句一般适用于单分支和双分支的选择,尽管也可以通过if嵌套形式实现多分支的选择,但这种方式由于嵌套层次过多,影响了程序的可读性。C语言提供了一种更适于多分支选择的switch语句,又称开关语句。它的一般形式如下:switch(表达式)
{
case常量表达式1: 语句组1
case常量表达式2: 语句组2
case常量表达式n: 语句组n
default: 语句组n 1
}其中,switch、case、default均为C语言的保留字。switch后面的表达式通常为整型、字符型或枚举型。常量表达式又称开关常数或分支标号,必须是与表达式类型一致的整数、字符或枚举常数。语句组1~n 1可以是单个语句,也可以是多个语句,如果是多个语句也不必用大括号括起来。default和语句组n l部分可以省略。
switch语句的执行过程是: 首先计算switch后面小括号内表达式的值,然后依次与各个case后面的常量表达式的值相比较,若一致就执行该case后面的语句,直到遇到break语句,或switch语句执行结束,就转到switch语句后面的语句去执行;如果表达式的值与所有常量表达式的值都不相等,则转向default后面的语句去执行;如果没有default部分,则不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。
每个case代表一个分支,其后面的语句组代表该分支所要执行的操作。但是,如果语句组中没有break语句,程序就可能一直执行,从而进入其他分支,这在C语言中是允许的。但一个好的习惯是在每个语句组中以break结束,从而保持各分支的独立性。
注意: 忘记使用break语句是编程时常犯的错误。虽然有时会故意忽略break以便分支共享代码,但很多错误是忘记加上break导致的。
例5.6将例5.5程序中的ifelse语句改用switch语句。#include
void main()
{
int score;
printf(“请输入一个成绩(0~100):”);
scanf(“%d”,&score);
printf(“The grade is:”);
switch (score/10)
{
case 10:
case 9: printf(“%c\n”,’A’);break;
case 8: printf(“%c\n”,’B’);break;
case 7: printf(“%c\n”,’C’);break;
case 6: printf(“%c\n”,’D’);break;
default: printf(“%c\n”,’E’);
}
}运行时出现以下提示信息:请输入一个成绩(0~100):输入85,结果如下:The grade is:B在使用switch语句时,应注意以下几点:
(1) switch后面小括号内表达式的值与case后面常量表达式的值都必须是整型、字符型或枚举型。
(2) switch语句中所有case后面的常量表达式的值必须互不相同,而多个case的后面可以共用一组语句。例如:switch(x)
{
case 0:
case 1: 语句组1; break;
}是合法的,表示当x=0或x=l时,都执行语句组l和break。而下面的语句是不合法的:switch(c)
{
case ‘a’: 语句组1; break;
case ‘a’: 语句组2; break;
…
}(3) case后面的语句可以是单个语句,也可以是多个语句,但不需要用大括号括起来。
(4) switch语句中的case和default出现的次序是任意的,即default也可位于case之前,且case的次序也不要求按常量表达式的大小顺序排列。
5.4应 用 举 例
例5.7编写程序,从键盘输入年份,判断其是否为闰年。
图5.4判断闰年的算法分析: 闰年的条件是,能被4整除但不能被100整除,或者能被400整除。
整除描述: 如果X能被Y整除,则余数为0,即如果X%Y的值等于0,则表示X能被Y整除。设年份变量为year,标志是否闰年的变量 leap,leap=1为闰年,否则不是闰年。该程序的算法见图5.4。程序的下面几种写法说明编写程序没有固定的格式,主要看个人喜欢使用什么语句功能来实现。
写法1: 使用复合语句。void main()
{
int year,leap;
printf(“请输入年份: \n”);
scanf(“%d”,&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
评论
还没有评论。