描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302458272丛书名: 全国高等院校应用型创新规划教材·计算机系列
C语言涉及的概念多、规则复杂、容易出错,初学者往往感觉困难。本书在详细阐述程序设计基本概念、原理和方法的基础上,采用循序渐进、深入浅出、通俗易懂的讲解方法,本着理论与实际相结合的原则,通过大量经典案例,重点讲解C语言的概念、规则和使用方法,便于程序设计语言的初学者在建立正确程序设计理念的前提下,掌握利用C语言进行结构化程序设计的技术和方法。
本书可作为高等学校各专业程序设计基础教学的教材,特别适合应用型本科、高职院校的计算机及非计算机专业的学生使用。书中的案例和习题紧密结合应用,可作为编程人员和C语言自学者的参考用书。
本书共分12章,主要内容包括C语言基础、算法基础、选择结构程序设计、循环结构程序设计、数组、函数、指针、结构体、文件、系统设计与开发、程序编写的常见错误、C语言试题。
本书以培养学生程序设计基本能力为目标,系统地介绍了C语言程序设计的基本知识和方法。全书共分12章,主要内容包括C语言基础、算法基础、选择结构程序设计、循环结构程序设计、数组、函数、指针、结构体、文件、系统设计与开发、程序编写的常见错误、C语言试题。全书结构清晰,案例丰富,语言流畅,通俗易懂。
本书可作为高等学校各专业的程序设计基础教学的教材,特别适合应用型本科、高职院校计算机及非计算机专业的学生使用。
第1章 C语言基础…. 1
1.1 C语言简介… 2
1.1.1 C语言的应用及发展历程… 2
1.1.2 C语言的特点… 3
1.2 标识符… 3
1.3 集成开发环境… 5
1.3.1 Visual C 6.0. 5
1.3.2 Turbo C.. 7
1.4 常量和变量… 7
1.4.1 常量… 7
1.4.2 变量… 9
1.5 数据类型… 10
1.6 运算符和表达式… 12
1.6.1 赋值运算符… 12
1.6.2 算术运算符… 12
1.6.3 逻辑运算符… 13
1.6.4 关系运算符… 14
1.7 小型案例实训… 15
1.7.1 案例一:个程序… 15
1.7.2 案例二:程序结构及文件
结构… 17
本章小结… 19
习题… 19
第2章 算法基础…. 21
2.1 算法简介… 22
2.1.1 算法的概念… 22
2.1.2 算法的特性… 24
2.2 算法描述… 24
2.2.1 常见的算法描述… 24
2.2.2 流程图的图示… 26
2.2.3 三种基本结构的流程图… 26
2.3 算法应用… 27
2.4 小型案例实训… 28
2.4.1 案例一:简单算法描述… 28
2.4.2 案例二:复杂算法描述… 29
本章小结… 29
习题… 29
第3章 选择结构的程序设计…. 31
3.1 if语句… 32
3.1.1 单分支语句… 32
3.1.2 双分支语句… 33
3.2 if语句的嵌套… 34
3.3 switch语句… 36
3.4 小型案例实训… 37
3.4.1 案例一:if嵌套的应用… 37
3.4.2 案例二:break语句的应用… 38
本章小结… 38
习题… 38
第4章 循环结构的程序设计…. 41
4.1 循环结构程序设计的概念… 42
4.2 while语句… 42
4.2.1 while语句的格式… 42
4.2.2 while语句的执行过程… 43
4.2.3 while语句的示例… 43
4.3 do-while语句… 45
4.3.1 do-while语句的格式… 45
4.3.2 do-while语句的执行过程… 45
4.3.3 do-while语句的示例… 46
4.4 for语句… 47
4.4.1 for语句的格式… 47
4.4.2 for语句的执行过程… 48
4.4.3 for语句示例… 49
4.5 循环语句的嵌套… 50
4.6 以循环实现的典型算法… 52
4.6.1 Fibonacci数列… 52
4.6.2 平方根的求解… 53
4.6.3 百元百鸡问题的求解… 54
4.6.4 质数判断的算法… 55
4.7
break语句和continue语句… 56
4.7.1 break语句… 56
4.7.2 continue语句… 56
4.8
goto语句… 57
4.9 小型案例实训… 58
4.9.1 案例一:输出满足条件的
所有数… 58
4.9.2 案例二:输出所有的玫瑰
花数… 59
本章小结… 60
习题… 61
第5章 数组…. 63
5.1 一维数组… 64
5.1.1 一维数组的定义… 64
5.1.2 元素的表示… 64
5.1.3 一维数组示例… 65
5.2 二维数组… 68
5.2.1 二维数组的定义… 69
5.2.2 元素的表示… 69
5.2.3 二维数组示例… 70
5.3 字符数组… 73
5.3.1 字符串与字符型数组… 73
5.3.2 字符数组的定义形式… 73
5.3.3 字符数组的初始化… 73
5.3.4 字符数组的输入输出… 74
5.3.5 字符串处理函数… 75
5.3.6 字符数组示例… 76
5.4 小型案例实训… 78
5.4.1 案例一:逆序输出一组数… 78
5.4.2 案例二:小组成绩的统计… 79
本章小结… 81
习题… 81
第6章 函数…. 83
6.1 函数定义… 84
6.2 函数的调用… 85
6.3 嵌套调用… 87
6.4 递归调用… 88
6.4.1 递归调用的定义… 88
6.4.2 递归调用的条件… 89
6.4.3 递归的说明… 89
6.5 变量的存储类别… 90
6.5.1 内部变量和外部变量… 90
6.5.2 动态存储变量和静态存储
变量… 91
6.6 小型案例实训… 93
6.6.1 案例一:判断是否为素数… 93
6.6.2 案例二:求公约数
和小公倍数… 94
本章小结… 96
习题… 96
第7章 指针…. 99
7.1 指针的概念… 100
7.1.1 地址概述… 100
7.1.2 指针的概念… 102
7.2 指针变量… 102
7.2.1 指针变量的定义… 103
7.2.2 指针变量的引用… 103
7.2.3 指针变量作为函数的参数… 105
7.3 指针与数组… 107
7.3.1 指向数组元素的指针变量… 107
7.3.2 通过指针引用数组元素… 108
7.3.3 数组名做函数参数… 109
7.4 指针与字符串… 111
7.4.1 字符串的表示形式… 111
7.4.2 字符串指针做函数参数… 112
7.5 小型案例实训… 114
7.5.1 案例一:排序… 114
7.5.2 案例二:筛选… 115
本章小结… 116
习题… 116
第8章 结构体…. 119
8.1 结构体类型… 120
8.2 结构体变量… 121
8.2.1 结构体变量的定义… 121
8.2.2 结构体变量的引用… 123
8.3 结构体变量的应用… 124
8.3.1 指向结构体类型数据的
指针… 124
8.3.2 结构体数组… 125
8.3.3 结构体数组的指针… 127
8.3.4 结构体与函数… 128
8.4 小型案例实训… 129
8.4.1 案例一:统计学生的平均
成绩… 129
8.4.2 案例二:搜索学生信息… 130
本章小结… 132
习题… 132
第9章 文件…. 133
9.1 文件的概念… 134
9.1.1 文件的概念… 134
9.1.2 文件指针… 134
9.2 文件的打开与关闭… 135
9.2.1 文件打开函数… 135
9.2.2 文件关闭函数… 137
9.3 文件的输入与输出… 137
9.3.1 字符读写函数… 138
9.3.2 字符串读写函数… 141
9.3.3 数据块读写函数… 142
9.3.4 格式化读写函数… 144
9.3.5 文件的随机读写… 145
9.3.6 文件检测函数… 146
9.4 小型案例实训… 147
9.4.1 案例一:修改员工信息… 147
9.4.2 案例二:创建学员成绩
登记册… 148
本章小结… 150
习题… 150
第10章 系统的设计与开发…. 153
10.1
通信录管理系统… 154
10.2
评分系统… 157
10.3
成绩管理系统… 161
本章小结… 167
习题… 167
第11章 程序编写中的常见错误…. 169
11.1
程序编写中常见的错误… 170
11.2
VC环境中常见的错误信息… 172
11.3 TC环境中常见的错误信息… 173
本章小结… 176
习题… 176
第12章 C语言试题…. 179
12.1
试题套… 180
12.2 试题第二套… 187
12.3 试题第三套… 196
附录I . ASCII码表…. 204
附录II . C语言中的关键字…. 205
附录III 运算符的优先级和结合性…. 206
附录IV C语言的库函数…. 207
附录V . 全国计算机等级考试简介…. 211
附录VI 二级C语言考试大纲
(2013版). 213
参考文献…. 215
前 言
C语言是一种在国内外广泛使用的计算机程序设计语言。它具有功能丰富、表达能力强、应用广、目标程序效率高、可移植性好、使用方便灵活等特点,既有高级语言的优点,又有低级语言的某些特点,因此常被称为”中级语言”。同时,C语言的控制结构简明清晰,是非常适合进行结构化程序设计的一种计算机语言。因此,目前国内大部分高等院校都把C语言作为学习其他程序设计语言或是专业课程的基础。
C语言涉及的概念多、规则复杂、容易出错,初学者往往感觉困难。本书在详细阐述程序设计基本概念、原理和方法的基础上,采用循序渐进、深入浅出、通俗易懂的讲解方法,本着理论与实际相结合的原则,通过大量经典案例,重点讲解C语言的概念、规则和使用方法,便于程序设计语言的初学者在建立正确程序设计理念的前提下,掌握利用C语言进行结构化程序设计的技术和方法。
本书可作为高等学校各专业程序设计基础教学的教材,特别适合应用型本科、高职院校的计算机及非计算机专业的学生使用。书中的案例和习题紧密结合应用,可作为编程人员和C语言自学者的参考用书。
本书共分12章,主要内容包括C语言基础、算法基础、选择结构程序设计、循环结构程序设计、数组、函数、指针、结构体、文件、系统设计与开发、程序编写的常见错误、C语言试题。
本书由陆洲、刘素芬、陈慧英担任主编,刘涛、张庆玲、王敏、韩耀坤担任副主编,赵志茹参编。
本书第1~3章由陈慧英编写,第4~6章由刘素芬编写,第7章由王敏编写,第8、9章由刘涛编写,第10、11章由陆洲编写(并审定全书内容),第12章由张庆玲、韩耀坤、赵志茹编写。戴春燕、刘泽宇、刘婧婧、孙妍、于慧凝也参与了本书的编写工作。
限于编者的水平,书中难免会有不足和疏漏之处,希望广大读者批评指正。
编 者
第3章 选择结构的程序设计
【本章要点】
1. 单分支语句、双分支语句和if语句嵌套的定义及使用方法。
2. switch语句的定义和使用。
3. 选择结构程序的设计方法和应用。
【学习目标】
1. 掌握几种if语句和switch语句的使用方法。
2. 掌握选择结构程序设计的一般方法。
3. 熟悉C程序的调试和运行。
3.1
if语句
我们在实际处理问题时,往往会面临许多判断,这时就需要根据不同的判断来执行不同的操作。为了解决此类问题,可以使用选择结构的程序,而选择结构是通过条件语句来实现的。下面分别介绍选择结构的两种格式。一种是单分支结构,另一种是双分支结构。
3.1.1
单分支语句
单分支语句的格式为:
if(表达式) 语句;
该语句的功能是:首先计算表达式的值,然后判断表达式的值是否非零,若不是零,则执行语句。其执行过程如图3-1所示。
【例3-1】从键盘输入三个数,由小到大排序输出。程序代码如下:
#include “stdio.h”
#include “conio.h”
main()
{
int x, y, z, t;
scanf(“%d%d%d”, &x, &y,
&z);
if (x > y)
{t=x; x=y; y=t;} /*交换x、y的值*/
if(x > z)
{t=z; z=x; x=t;} /*交换x、z的值*/
if(y > z)
{t=y; y=z; z=t;} /*交换z、y的值*/
printf(“small to big: %d %d
%dn”, x, y, z);
}
3.1.2
双分支语句
双分支语句的格式为:
if(表达式)
语句1;
else
语句2;
该语句的功能是:首先计算表达式的值,然后判断表达式的值是否为非零,若为非零,则执行语句1,否则执行语句2。其执行过程如图3-2所示。
图3-1 单分支结构的流程 图3-2 双分支程序的执行流程
在条件语句中,语句可以是任何一条语句,当然,也可以是复合语句。
【例3-2】求一个数x的值。
我们将求|x|的算法编写成一个函数,然后在main()函数中调用它。
代码如下:
double abst(double x) /* 定义函数abst */
{
if (x >= 0)
x = x;
else
x = -x;
return(x);
}
main()
{
double a;
double abst(double x); /* 声明函数abst */
scanf(“%f”, &a);
printf(“%lf,%lf”, a, abst(a));
}
3.2
if语句的嵌套
嵌套的if-else结构语句又称为阶梯形语句。它是对条件从上到下逐个判断,条件一旦满足,就执行与之对应的语句,并跳过其他阶梯。如果条件都不满足,则将执行后的语句n 1。
嵌套if-else的格式如下:
if(表达式1) 语句1;
else if(表达式2) 语句2;
else if(表达式3) 语句3;
…
else if(表达式n) 语句n;
else 语句n 1;
这实际上是利用嵌套的if语句来构造多路选择。其执行流程如图3-3所示。
图3-3 嵌套的if-else结构的执行流程
【例3-3】判断输入字符的种类。程序代码如下:
#include
main()
{
char c;
printf(“enter a character:n”);
c = getchar();
if (c < 0x20)
printf(“The character is a control
character”);
else if(c>=’0′ && c<=’9′)
printf(“The character is a
digitn”);
else if(c>=’A’ && c<=’Z’)
printf(“The character is a capital
lettern”);
else if(c>=’a’ && c<=’z’)
printf(“The character is a lower
lettern”);
else
printf(“The character is an other
lettern”);
}
程序的三次运行的结果如下:
enter a character: 8
The character is a digit
enter a character: R
The character is a capital letter
enter a character: !
The character is an other letter
【例3-4】银行定期存款年利率如下(在定期存款期内,均不计复利):半年定期存款5.5%;一年定期存款6.5%;二年定期存款7.5%;三年定期存款9%;五年定期存款10.5%;八年定期存款12%。
输入存款类别(“1”代表半年定期、“2”代表一年定期等)和存款金额,计算出到期本金利息和。
程序代码如下:
#include
main()
{
int n, c;
float sum, a, y;
printf(“请输入存款类别:”);
scanf(“%d”, &c);
printf(“请输入存款金额:”);
scanf(“%f”, &y);
if(c==1) {a=0.055; n=0.50;}
else if(c==2) {a=0.065; n=1;}
else if(c==3) {a=0.075; n=2;}
else if(c==4) {a=0.09; n=3;}
else if(c==5) {a=0.105; n=5;}
else if(c==6) {a=0.12; n=8;}
else {9=0.0; n=0;}
sum = y y*a*n;
if(n==0) printf(“输入有误!n”);
else printf(“到期本金利息合计金额为:%.2fn”,
sum);
}
运行情况如下:
请输入存款类别:4
请输入存款金额;2000
到期本金利息合计金额为:2540.00
3.3
switch语句
switch语句又称开关分支语句,是选择结构的另一种形式,它是根据给定条件的结果值进行判断,然后执行多分支程序段中的某一支。C语言中用switch-case结构来实现开关分支语句。它的一般形式如下:
switch (表达式)
{
case 常量表达式1: 语句组1;
case 常量表达式2: 语句组2;
case 常量表达式n: 语句组n;
default: 语句组n 1;
}
【例3-5】输入成绩等级(如A、B、C等),判断符合哪个成绩段。
程序代码如下:
main()
{
char s;
scanf(“%c”, &s);
switch(s)
{
case ‘A’:
printf(“90~100n”);
break;
case ‘B’:
printf(“80~89n”);
break;
case ‘C’:
printf(“70~79n”);
break;
case ‘D’:
printf(“60~69n”);
break;
case ‘F’:
printf(“<60n”);
break;
case ‘R’:
printf(“exam again!”);
break;
default:
printf(“Input errorn”);
}
}
运行后,如果输入D,则将会输出60~69。
由此可以看出case语句的作用:case后面的常量表达式实际上只起语句标号的作用,而不起条件判断作用,即“只是开始执行处的入口标号”。
因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行;而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。
因此,如果想在一个case分支后立即跳出switch语句,就必须在此分支的后添加一个break语句。
3.4 小型案例实训
3.4.1
案例一:if嵌套的应用
从键盘上输入x的值,根据函数关系计算出相应的y值(设x、y均为整型量)。x与y的关系如表3-1所示。
表3-1 变量x与y之间的函数关系
x y
x<0 0
0≤x<10 x
10≤x<20 10
20≤x<40 -5x 20
调试运行下面的程序:
#include
main()
{
int x, y;
scanf(“%d”, &x);
if(x < 0)
y = 0;
else
if(x>=0 && x<10)
y = x;
else
if(x>=10 && x<20)
y = 10;
else
y = -5*x 20;
printf(“%d”, y);
}
分析程序的运行结果。
3.4.2
案例二:break语句的应用
输入下面两段程序并运行,掌握case语句中break语句的作用:
/* 不含break的switch
*/ /* 含break的switch */
#include “stdio.h” #include “stdio.h”
void main() void main()
{ {
int a, m=0, n=0, k=0;
int a, m=0, n=0, k=0;
scanf(“%d”, &a); scanf(“%d”,
&a);
switch(a)
switch(a)
{ {
case 1: m ;
case 1: m ; break;
case 2:
case 2:
case 3: n ;
case 3: n ; break;
case 4:
case 4:
case 5: k ;
case 5: k ;
}
}
printf(“%d,%d,%dn”, m,n,k); printf(“%d,%d,%dn”, m,n,k);
} }
分别从键盘上输入2、3、5,写出程序运行的结果,总结break语句的作用。
本
章 小 结
本章首先介绍了单分支语句和多分支语句的格式及应用,然后讲解了if语句的嵌套和应用,接下来讲解了switch语句的格式和应用,后通过案例和习题来综合运用本章所学知识,编写选择结构程序,培养学生分析问题和动手解决问题的能力。
习 题
1. 填空题
(1) 下面程序的运行结果是 。
main()
{
int x=10, y=20, z=30;
if(x > y)
z=x; x=y; y=z;
printf(“%d,%d,%d”, x,y,z);
}
(2) 下面程序的运行结果是 。
main()
{
int a=100, x=10, y=20, m=5, n=0;
if(x < y)
if(y != m)
a = 1;
else
if(n) a=10;
a = -1;
printf(“%dn”, a);
}
(3) 下面程序的运行结果是 。
main()
{
int score, temp;
char grade;
printf(“输入学生成绩:”);
scanf(“%d”, &score);
if(score==100) temp=9;
else
temp = (score-score%10)/10;
switch(temp)
{
case 9: grade=’A’; break;
case 8: grade=’B’; break;
case 7: grade=’C’; break;
case 6: grade=’D’; break;
case 5: case 4: case 3: case 2: case 1:
case 0: grade=’E’; break;
default: printf(“输入有错!”)
}
printf(“该生成绩等级是%c。”,
grade);
}
2. 改错题
(1) 输入两个数,判断它们是否相等。程序如下:
main()
{
int x, y;
scanf(“%d %d”, x, &y);
if(x = y)
printf(“x equal y n”);
else
printf(“x is not y n”);
}
① 该程序是否有错误?如有,请进行修改。
② 修改后运行该程序,其输出结果是什么?
(2) 阅读下面的种序,要求对输入的数字1~7转换成文字星期几,对其他数字不转换。例如,输入5时,程序应该输出Friday。程序如下:
main()
{
int day;
scanf(“%d”, day);
switch(day)
{
case 1: printf(“Mondayn”);
case 2: printf(“Tuesdayn”);
case 3: printf(“Wednesdayn”);
case 4: printf(“Thursdayn”);
case 5: printf(“Fridayn”);
case 6: printf(“Saturdayn”);
case 7: printf(“Sundayn”);
}
}
编辑、调试和运行该程序,然后输入3。其输出结果是什么?为什么是这样的结果?该程序是否有错误?如何修改?
(3) 程序改错。下面的程序实现求解:
y=x2 (x2-10>0)
y=-x2 (x2-10≤0)
分析程序代码能否实现,如果程序中存在错误,请修改程序中的错误,然后运行修改后的程序。
#include
main()
{
int x, y;
scanf(“%d”, &x);
if(x*x–10 > 0)
y = x*x;
printf(“y=%dn”, y);
else
y = -(x*x);
printf(“y=%dn”, y);
}
3. 编程题
(1) 编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为 、-、*、/。
(2) 编写一个程序,对于给定的一个百分制成绩,输出相应的五分制成绩。这里设:90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’(用if语句来实现)。
(3) 输入一个字符,判断是字母、数字还是特殊字符。
评论
还没有评论。