C程序设计学习辅导(第五版)
作者: 谭浩强
出版社:清华大学出版社 2017年08月
简介:
本书是与谭浩强所著的《C程序设计(第五版)》(清华大学出版社出版)配合使用的一本重要的参考用书。本书包括4个部分,第1部分是《C程序设计(第五版)》一书的习题和参考解答,包括该书各章的全部习题,对全部编程习题都给出了参考解答,共计132个程序;第2部分是深入学习C程序设计,包括预处理指令、位运算、常见错误分析和C程序案例;第3部分是上机指南,详细介绍Visual C 6.0和Visual Studio 2010集成环境下编辑、编译、调试和运行程序的方法;第4部分是上机实践指导,包括程序的调试与测试、实验的目的与要求,并提供了12个实验。本书内容丰富,实用性强,可以有效地帮助读者学好C程序设计并提高应用水平,不仅可以作为《C程序设计(第五版)》的配套教材,而且可以作为其他版本的C语言教材的参考书;既适合高等学校师生使用,也可供自学者参考。
【目录】
目录
第1部分《C程序设计(第五版)》习题和参考解答
第1章程序设计和C语言1
第2章算法——程序的灵魂4
第3章*简单的C程序设计——顺序程序设计14
第4章选择结构程序设计24
第5章循环结构程序设计37
第6章利用数组处理批量数据54
第7章用函数实现模块化程序设计74
第8章善于利用指针99
第9章用户自己建立数据类型128
第10章对文件的输入输出159
第2部分深入学习C程序设计
第11章预处理指令177
11.1宏定义178
11.1.1不带参数的宏定义178
11.1.2带参数的宏定义181
11.2“文件包含”处理186
11.3条件编译189
第12章位运算193
12.1位运算和位运算符193
12.1.1“按位与”运算193
12.1.2“按位或”运算194
12.1.3“异或”运算195
12.1.4“取反”运算196
12.1.5左移运算197
12.1.6右移运算197
12.1.7位运算赋值运算符198
12.1.8不同长度的数据进行位运算198
12.2位运算举例198
12.3位段200
第13章常见错误分析204
第14章C程序案例219
14.1案例1个人所得税计算219
14.2案例2学生试卷分数统计223
14.3案例3电话订餐信息处理229
第3部分C语言程序上机指南
第15章怎样使用Visual C 6.0运行程序239
15.1Visual C 6.0的安装和启动240
15.2输入和编辑源程序240
15.2.1新建一个C源程序的方法241
15.2.2打开一个已有的程序243
15.2.3通过已有的程序建立一个新程序的方法243
15.3编译、连接和运行243
15.3.1程序的编译243
15.3.2程序的调试244
15.3.3程序的连接247
15.3.4程序的执行248
15.4建立和运行包含多个文件的程序的方法249
15.4.1由用户建立项目工作区和项目文件249
15.4.2用户只建立项目文件253
第16章用Visual Studio 2010运行C程序256
16.1关于Visual Studio2010256
16.2怎样建立新项目257
16.3怎样建立文件260
16.4怎样进行编译262
16.5怎样运行程序263
16.6怎样打开项目中已有的文件264
16.7怎样编辑和运行一个包含多文件的程序265
16.8关于用Visual Studio 2010编写和运行C程序的说明268
第4部分上机实践指导
第17章程序的调试与测试269
17.1程序的调试269
17.2程序错误的类型271
17.3程序的测试273
第18章上机实验的目的和要求278
18.1上机实验的目的 278
18.2上机实验前的准备工作279
18.3上机实验的步骤279
18.4实验报告279
18.5实验内容安排的原则280
第19章实验安排281
19.1实验1C程序的运行环境和运行C程序的方法281
19.2实验2数据类型、运算符和简单的输入输出283
19.3实验3*简单的C程序设计——顺序程序设计286
19.4实验4选择结构程序设计287
19.5实验5循环结构程序设计288
19.6实验6数组289
19.7实验7函数(一)290
19.8实验8函数(二)291
19.9实验9指针(一)292
19.10实验10指针(二)293
19.11实验11用户自己建立数据类型294
19.12实验12文件操作295
参考文献296
【免费在线读】
第5章循环结构程序设计1. 请画出例5.6中给出的3个程序段的流程图。解: 下面分别是教材第5章例5.6给出的程序,据此画出流程图。(1) 程序1: #include <stdio.h>int main( ){int i,j,n=0;for (i=1;i<=4;i )for (j=1;j<=5;j ,n )//n用来累计输出数据的个数{ if (n%5==0) printf (″\\n″);//控制在输出5个数据后换行printf (″%d\\t″,i?j);}printf(″\\n″);return 0;}其对应的流程图见图5.1。运行结果:
(2) 程序2: #include <stdio.h>int main( ){int i,j,n=0;for (i=1;i<=4;i )for (j=1;j<=5;j ,n ){if(n%5==0) printf(″\\n″);//控制在输出5个数据后换行if (i==3 && j==1) break;//遇到第3行第1列,结束内循环printf(″%d\\t″,i?j);}printf(″\\n″);return 0;}其对应的流程图见图5.2。图5.1图5.2运行结果:
遇到第3行第1列时,执行break,结束内循环,进行第4次外循环。(3) 程序3:#include <stdio.h>int main( ){int i,j,n=0;for (i=1;i<=4;i )for (j=1;j<=5;j ,n ){if(n%5==0)printf(″\\n″);//控制在输出5个数据后换行if (i==3 && j==1) continue;//遇到第3行第1列,终止本次内循环printf(″%d\\t″,i?j);}printf(″\\n″);return 0;}其对应的流程图见图5.3。图5.3运行结果:
遇到第3行第1列时,执行continue,只是提前结束本次内循环,不输出原来的第3行第1列的数3,而进行下一次内循环,接着在该位置上输出原来的第3行第2列的数6。请仔细区分break语句和continue语句。2. 请补充教材例5.7程序,分别统计当“fabs(t)>=1e-6”和“fabs(t)>=1e-8”时,执行循环体的次数。解: 例5.7程序是用π4≈1-13 15-17 …公式求π的近似值,直到发现某一项的*值小于10-6为止。根据本题要求,分别统计当fabs(t)>=1e-6和fabs(t)>=1e-8时,执行循环体的次数。(1) 采用fabs(t)>=1e-6作为循环终止条件的程序补充修改如下: #include <stdio.h>#include <math.h>//程序中用到数学函数fabs,应包含头文件math.nint main( ){int sign=1,count=0;//sign用来表示数值的符号,count用来累计循环次数double pi=0.0,n=1.0,term=1.0;//pi开始代表多项式的值,*后代表π的值,n代表分母,//term代表当前项的值while(fabs(term)>=1e-6)//检查当前项term的*值是否大于或等于10的(-6)次方{pi=pi term;//把当前项term累加到pi中n=n 2;//n 2是下一项的分母 sign=-sign;//sign代表符号,下一项的符号与上一项符号相反term=sign/n;//求出下一项的值termcount ;//count累加1}pi=pi?4;//多项式的和pi乘以4,才是π的近似值printf(″pi=%10.8f\\n″,pi);//输出π的近似值printf(″count=%d\\n″,count);//输出count的值return 0;}运行结果:
执行50万次循环。(2) 采用fabs(t)>=1e-8作为循环终止条件的程序,只须把上面程序的第8行如下修改即可: while(fabs(term)>=1e-8)运行结果:
执行5000万次循环。3. 输入两个正整数m和n,求其*公约数和*小公倍数。解: #include <stdio.h>int main( ){intp,r,n,m,temp;printf(″请输入两个正整数n,m:″);scanf(″%d,%d,″,&n,&m);if (n<m){temp=n;n=m;m=temp;}p=n?m;while(m!=0){r=n%m;n=m;m=r;}printf(″它们的*公约数为:%d\\n″,n);printf(″它们的*小公倍数为:%d\\n″,p/n);return 0;}运行结果:
4. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。解: #include <stdio.h>int main( ){char c;int letters=0,space=0,digit=0,other=0;printf(″请输入一行字符:\\n″);while((c=getchar( ))!=′\\n′){if (c>=′a′ && c<=′z′ || c>=′A′ && c<=′Z′)letters ;else if (c==′ ′)space ;else if (c>=′0′ && c<=′9′)digit ;elseother ;}printf(″字母数:%d\\n空格数:%d\\n数字数:%d\\n其他字符数: %d\\n″,letters,space,digit,other);return 0;