C语言习题答案(人民邮电-第2版) (全)打印版
- 格式:doc
- 大小:205.50 KB
- 文档页数:12
c程序设计语言第2版新版习题解答C程序设计语言,通常被称为"K&R C",是由Brian W. Kernighan和Dennis M. Ritchie所著的经典教材。
这本书的第2版对C语言进行了全面的介绍,包括基础语法、数据结构、程序结构、指针、函数、数组、结构体、联合体、枚举、位字段、预处理器、编译器、链接器以及运行时环境等方面的内容。
以下是针对这本书第2版中一些习题的解答。
习题1:编写一个程序,打印出从1到10的整数。
```c#include <stdio.h>int main() {for (int i = 1; i <= 10; i++) {printf("%d ", i);}printf("\n");return 0;}```习题2:编写一个程序,接受用户输入的两个整数,并打印它们的和。
```c#include <stdio.h>int main() {int num1, num2;printf("请输入第一个整数: ");scanf("%d", &num1);printf("请输入第二个整数: ");scanf("%d", &num2);printf("两个整数的和是: %d\n", num1 + num2);return 0;}```习题3:编写一个程序,计算并打印出所有小于或等于给定整数n的质数。
```c#include <stdio.h>#include <math.h>int isPrime(int num) {if (num <= 1) return 0;if (num <= 3) return 1;if (num % 2 == 0 || num % 3 == 0) return 0;for (int i = 5; i <= sqrt(num); i += 6) {if (num % i == 0 || num % (i + 2) == 0) return 0;}return 1;}int main() {int n;printf("请输入一个整数: ");scanf("%d", &n);printf("小于或等于%d的质数有: ", n);for (int i = 2; i <= n; i++) {if (isPrime(i)) {printf("%d ", i);}}printf("\n");return 0;}```习题4:编写一个程序,打印出所有的"水仙花数"。
c语言程序设计案例教程第二版答案篇一:C语言程序设计案例教程第3章参考答案C语言程序设计案例教程(第二版)廖湖声叶乃文周珺人民邮电出版社第三章习题参考答案习题3-1#include<tdio.h>#include<math.h>intmain(){inti,j,c=0;//c用来控制一行输出元素的个数for(i=2;i<100;i++)//判断从2到100之间那个数为素数{ for(j=2;j<=qrt(i);j++)//判断到i的平方根即可减少循环次数{ if(i%j==0)break;}if(j>qrt(i)){printf("%5d",i);c++;//每输出一个数计数器加1if(c%5==0)printf("\n");}}return0;}习题3-2#include<tdio.h>intmain(){inti,n;//n为从键盘上接收的数printf("请输入一个正整数:");canf("%d",&n);for(i=2;i<n;i++)//从2~n依次查找满足条件的数{if(n%i==0)//判断i是否为n的因子printf("%5d",i);}printf("\n");return0;}习题3-3#include<tdio.h>/某韩信点兵问题穷举法实例某/intmain(){intn;printf("假设韩信带兵在1000~10000人之间,则可能的人数为:\n");for(n=1000;n<10000;n++){if(n%5==1&&n%6==5&&n%7==4&&n%11==10)printf("%7d",n);}printf("\n");return0;}习题3-4#include<tdio.h>intmain(){inti,j,k,n;//i,j,k分别为水仙花数n的百位、十位、个位printf("所有的水仙花数为:");for(n=100;n<1000;n++)//对每个三位数进行分解、判断{i=n/100;j=n/10%10;k=n%10;if(n==i某i某i+j某j某j+k某k某k)//判断该三位数是否是其各位数立方和printf("%5d",n);}printf("\n");return0;}习题3-5#include<tdio.h>intmain()int=0,i=99;while(i>=1){=+i某(i+1)某(i+2);i=i-2;}printf("1某2某3+3某4某5+...+99某100某101=%d\n",);return0;}习题3-6#include<tdio.h>intmain(){inta,n,i,a,an;printf("请输入a和n的值:");canf("%d,%d",&a,&n);a=an=a;for(i=2;i<=n;i++)an=an某10+a;//计算第i项,即i个aa=a+an;//累加求和} printf("a+aa+aaa+...+aa...a=%d\n",a);return0;}习题3-7#include<tdio.h>intmain(){intn=1,i;printf("请输入猴子吃桃子的天数:");canf("%d",&i);while(i>1){n=(n+1)某2;i--;}printf("最初有%d个桃子\n",n);return0;}篇二:c语言程序设计教程(第2版)课后题及模拟题参考答案习题1.............................................................. .. (4)1-1填空题............................................................. . (4)1-2思考题............................................................. . (4)1-3编程题............................................................. . (5)习题2.............................................................. .. (6)2-1单选题............................................................. . (6)2-2思考题............................................................. (6)习题3.............................................................. .. (7)3-1选择题............................................................. . (7)题............................................................. (7)3-3编程题............................................................. (8)习题4.............................................................. .. (11)4-1单选题............................................................. . (11)4-2填空题............................................................. . (11)4-3编程题............................................................. (11)习题5.............................................................. .. (16)5-1单选题............................................................. (16)5-2填空题............................................................. (16)题............................................................. .. (16)习题6.............................................................. . (22)6-1单选题............................................................. . (22)6-2填空题............................................................. (22)6-3编程题............................................................. .. (22)习题7.............................................................. . (25)7-1单选题................... (25)7-2填空题............................................................. (25)7-3编程题............................................................. .. (25)习题8.............................................................. . (26)8-1单选题............................................................. (26)8-2填空题............................................................. (26)8-3编程题............................................................. .. (26)习题9............................................................... (30)9-1单选题.............................................................. . (30)9-2填空题.............................................................. . (30)9-3编程题.............................................................. (30)习题10............................................................. . (38)10-1单选题............................................................. .. (38)10-2填空题............................................................. . (38)10-3编程题............................................................. (38)习题11............................................................. .. (41)11-1单选题............................................................. (41)11-2填空题............................................................. (41)习题12............................................................. . (42)12-1单选题............................................................. (42)12-2填空题............................................................. . (42)实验篇............................................................. . (43)实验1熟悉ViualC++6.0可视化集成开发环境 (43)实验2顺序结构程序设计 (43)实验3选择结构程序设计 (43)实验4循环结构程序设计 (44)实验5函数............................................................. . (47)实验6数组............................................................. . (54)实验7指针............................................................. . (58)实验8结构体和共用体 (61)实验9文件............................................................. (63)实验10综合编程 (64)模拟试卷(一)参考答案 (65)模拟试卷(二)参考答案 (67)习题11-1填空题1.函数2.主函数main(),主函数main()3.主函数main()4.函数首部,函数体5.{,}6./某,某/7.顺序结构,选择结构,循环结构8..c,.obj,.e某e1-2思考题1.结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (43)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
《C语言程序设计能力教程(第二版)》课后作业及实训题参考答案第1章进入C语言程序世界二、1. I love China!printf("we are students.\n")2. 6项目实训题参考答案1.编写一个C程序,输出以下信息:* * * * * * * * * * * * * * * * * * * *I am a student!* * * * * * * * * * * * * * * * * * * *main(){ printf("********************\n");printf(" I am a student!\n ");printf("********************\n");}2.已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。
解:main(){int a,b,c,v;a=10;b=20;c=15;v=a*b*c;printf("v=%d",v);}本程序运行结果为:v=3000第2章编制C程序的基础知识一选择题C B A B A C C二操作题,2,-8,23.000000,2.500000,-8.0000002. ABC DEFGHwhy is 21+35 equal 523.3 14 32 31 24. aa bb cc abcA N项目实训题1.定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。
#define M 5main(){ int n,c;n=2; c=M*n;printf("%d\n",c); }2.编程求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7;(2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。
《C语言程序设计能力教程(第二版)》课后作业及实训题参考答案第1章进入C语言程序世界二、1. I love China!printf("we are students.\n")2. 6项目实训题参考答案1.编写一个C程序,输出以下信息:* * * * * * * * * * * * * * * * * * * *I am a student!* * * * * * * * * * * * * * * * * * * *main(){ printf("********************\n");printf(" I am a student!\n ");printf("********************\n");}2.已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。
解:main(){int a,b,c,v;a=10;b=20;c=15;v=a*b*c;printf("v=%d",v);}本程序运行结果为:v=3000第2章编制C程序的基础知识一选择题C B A B A C C二操作题3.,2.,-8.2. ABC DEFGHwhy is 21+35 equal 523.3 14 32 31 24. aa bb cc abcA N项目实训题1.定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。
#define M 5main(){ int n,c;n=2; c=M*n;printf("%d\n",c); }2.编程求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7;(2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。
(1)main(){ int a=7;float x=2.5,y=4.7;printf("%f\n",x+a%3*(int)(x+y)%2/4); }(2)main(){ int a=2,b=3;float x=3.5,y=2.5;printf("%f\n",(float)(a+b)/2+(int)x%(int)y); }第三章顺序结构程序设计一选择题A C D C C二操作题1. x=3,a=2,b=32. z=12.3. 1 2 1a2 1 2三.编程题编程题1. 某工种按小时计算工资,每月劳动时间(小时)×每小时工资=总工资,总工资中扣除10%公积金,剩余的为应发工资。
C语言c语言程序设计教程(第2版)课后题及模拟题参考答案习题1 31-1 填空题 31-2 思考题 31-3 编程题 3习题2 42-1 单选题 42-2 思考题 4习题3 53-1 选择题 53-2 填空题 53-3 编程题 5习题4 74-1单选题74-2填空题74-3 编程题7习题5 105-1单选题105-2填空题105-3 编程题10习题6 136-1单选题136-2填空题136-3 编程题13习题7 157-1单选题157-2填空题157-3 编程题15习题8 168-1单选题168-2填空题168-3 编程题16习题9 189-1单选题189-2填空题189-3 编程题18习题10 2210-1单选题2210-2填空题2210-3 编程题22习题11 2411-1单选题2411-2填空题24习题12 2512-1单选题2512-2 填空题25实验篇26实验1 熟悉Visual C++6.0可视化集成开发环境26实验2 顺序结构程序设计26实验3 选择结构程序设计26实验4 循环结构程序设计26实验5 函数28实验6 数组32实验7 指针33实验8 结构体和共用体35实验9 文件36实验10 综合编程36模拟试卷(一)参考答案37模拟试卷(二)参考答案38习题11-1 填空题1. 函数2. 主函数main(),主函数main()3. 主函数main()4. 函数首部,函数体5. {, }6. /*, */7. 顺序结构,选择结构,循环结构8. .c, .obj, .exe1-2 思考题1. 结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。
其基本结构包括顺序结构、选择结构和循环结构三种。
2. 算法是对具体问题求解步骤的一种描述。
计算机算法的表达工具通常采用以下几种方法:(1)用自然语言表示算(2)用流程图表示算法(3)用伪代码表示算法(4)用程序设计语言表示算法3. 语言简洁、紧凑,使用方便、灵活; 支持结构化程序设计;运算符丰富;数据类型丰富;较强的编译预处理功能;C语言的可移植性好;C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点;语法限制不太严格,程序设计自由度大。
本文由airalex1982贡献 pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
《C 语言程序设计教程(第 2 版) 》习题解答 第 1 章习题解答 一、填空 1.机器语言即是指计算机本身自带的 指令系统 。
完成这个翻译工作 2. 将汇编语言编写的程序翻译成机器语言程序的过程称为 汇编 , 的程序称为 汇编程序 。
3.在C语言程序中,写“\110”和写“\x68” ,分别代表字母 H 和字母 h 。
4.在用New命令创建新的C源程序时,文件名默认为是 NOMANE.C 。
5.C语言程序都是从名为 main 的函数它开始执行的。
二、选择 1.下面给出的命令中, (C)不能保存源程序对应的“.OBJ”文件。
A.Make EXE File B.Run C.Save D.Compile to OBJ 分析:Compile to OBJ 是文件的编译命令;Make EXE File 是一次完成编译和连接的命 令;在没有编译、连接的前提下,直接使用 Run 命令,就会先完成编译,再进行连接,最 后运行。
所以,这三个命令都会保存由源程序产生出的“.OBJ”文件。
而 Save 命令用于编 辑完源程序后,对源程序的保存,即保存“.C”文件。
因此,本题的答案应该是选择 C。
2.下面给出的编辑命令中, (B)是用来定义块首标记的。
A.Ctrl-KK B.Ctrl-KB C.Ctrl-KV D.Ctrl-KH 3.下面给出的编辑命令中, (A)是用来定义块尾标记的。
A.Ctrl-KK B.Ctrl-KB C.Ctrl-KV D.Ctrl-KH 4.以下的(C)是不正确的转义字符。
A.’\\’ B.’\’’ C.’\81’ D.’\0’ 5.转义字符\x65 对应的字母是(C) 。
A.A B.a C.e D.E 三、是非判断(√,×) 1.Turbo C 中,只有命令 New 才能创建新的源程序文件。
c语言程序设计(第二版)习题答案《C语言程序设计(第二版)习题答案》C语言是一种通用的高级程序设计语言,广泛应用于系统软件、应用软件、驱动程序、网络软件、嵌入式软件等领域。
《C语言程序设计(第二版)》是一本经典的教材,对于学习C语言的人来说具有重要的指导意义。
在学习过程中,通过做习题可以更好地巩固所学知识。
本文将为大家介绍一些《C语言程序设计(第二版)》中常见的习题答案,希望对大家的学习有所帮助。
1. 编写一个C程序,实现输入两个整数,输出它们的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("它们的和为:%d\n", sum);return 0;}```2. 编写一个C程序,实现输入一个整数,判断它是否为偶数。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("是偶数\n");} else {printf("不是偶数\n");}return 0;}```3. 编写一个C程序,实现输入一个字符,判断它是否为大写字母。
```c#include <stdio.h>int main() {char ch;printf("请输入一个字符:");scanf(" %c", &ch);if (ch >= 'A' && ch <= 'Z') {printf("是大写字母\n");} else {printf("不是大写字母\n");}return 0;}```以上是《C语言程序设计(第二版)》中一些常见习题的答案,希望对大家的学习有所帮助。
C语言程序设计(第2版)课后习题答案第一章1.请参照本章例题,编写一个C程序,输出以下信息:**************************V ery good!**************************解:#include<stdio.h>void main(){printf(“**************************”);printf(“\n”);printf(“V ery good!\n”);printf(“\n”);printf(“**************************”);}2.编写一个C程序,输入a、b、c三个值,输出其中最大值。
解:#include<stdio.h>void main(){int a,b,c,max;printf(“请输入三个数a,b,c:\n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max<b) max=b;if(max<c) max=c;printf(“最大数为: %d”,max);}第二章1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。
计算公式为P=(1+r)^n,r为年增长率;n为年数;P为与现在相比的百分比。
解:#include<stdio.h>#include<math.h>void main(){double P, r=0.1, n=10;P=pow((1+r), n);printf(“%lf\n”, P);}3.请编程序将“China”译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为‟C‟、‟h‟、‟i‟、‟n‟、‟a‟,经过运算,使c1、c2、c3、c4、c5分别变为‟G‟、‟l‟、‟m‟、‟r‟、‟e‟,并输出。
本文由Sjs反思贡献 doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
C 语言程序设计(人民邮电出品) 第1章 1.选择题 (1) C (2) B (3) D 2.填空题 (1)main (2) main (3) 有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性 (4) 顺序、分支和循环(5) 自顶向下,逐步细化、模块化设计、结构化编码 第2章 1.选择题 BBCDA DDBBA BBDCB 2、填空题 (1) 数字、字母、下划线 (2)0 (3) 4、8 (4) (a+b)*c/(a-b) (5) -60 (6)-16 (7)3 (8)6、4、2 (9)0 (10)10、6 (11)5.500000 (12) 12、4 (13)double (14) 0 (15)16 (16)6.6 3、编程题 (1) main() { printf("int:%5d\n" "float:%5d\n" "char:%5d\n" "double:%5d\n" "long:%5d\n", sizeof(int),+sizeof(float), sizeof(char), sizeof(double), sizeof(long)); } (2) #define RAT 1.60934 main() { float k=0.0; printf("input the km:"); scanf("%f",&k); printf("\nmile:%f",k*RAT); } 第3章 1.选择题 (1) ~(10):DDCDCDCDBC 2.解析题 (1) x=170,x=ㄩㄩㄩ 170,x=ㄩㄩㄩ 252, x=ㄩㄩㄩ 170 x=170,x=170 ㄩㄩㄩ,x=ㄩㄩㄩ 170,x=%6d a=513.789185,a=ㄩㄩ 513.79,a=513.78918457,a=513.78918457 (2) a=3 ㄩ b=7x=8.5 ㄩ y=71.82c1=A ㄩ c2=a 3.编程题 (1) main() { int x,y; scanf("%d%d",&x,&y); printf("商数=%d,余数=%d",x/y,x%y); system("pause"); } (2) main() { double x,y,z,avg; scanf("%lf%lf%lf",&x,&y,&z); avg=(x+y+z)/3; printf("%.1lf",avg,avg); system("pause"); } 第4章 1.选择题 (1)~(10) CCAADCCABD 2.填空题 (1) ch>='A' && ch<='Z' ch=ch-32 (2) x<=10 && x>2 x<=2 && x>-1 y=-1 (3) a+b>c && a+c>b && b+c>a a==b&&a==c a==b || a==c || b==c (4) mark/10 k=1 case 9 (5) x<0 c=x/10 y!=-2 3.编程题 (1) #include main() { int x; printf("please input a number:"); scanf("%d",&x); if(x%2==0) printf("x is a even number"); else printf("x is a odd number"); } (2) #include main() { int x,y; printf("please input a number£o"); scanf("%d",&x); if(x<=-5) printf("the number is error"); else if(x<0) {y=x; printf("%d",y);} else if(x==0) {y=x-1;printf("%d",y);} else if(x<10) {y=x+1;printf("%d",y);} else printf("the number is error"); } (3) #include main() { int a,m; printf("please input a number:"); scanf("%d",&a); switch(a/10) { case 0: case 1: case 2:m=1;break; case 3:m=2;break; case 4:m=3;break; case 5:m=4;break; default:m=5;break; } printf("%d",m); } (4) #include main() { float price,tax; printf("please input the price of product:"); scanf("%f",&price); if(price>10000) tax=price*0.05; else if(price>5000) tax=price*0.03; else if(price>1000) tax=price*0.02; else tax=0; printf("%f",tax); } (5) #include main() { float score; printf("please input the score of student:"); scanf("%f",&score); if(score>=85) printf("VERY GOOD"); else if(score>=60) printf("GOOD"); else printf("BAD"); } 第5章 1.选择题 (1)d (2) c (3)a (4)d (5)a (6)d (7)d (8)b (9)d (10)b (11)c (12)b (13)d (14)a (15)c 2.填空题 (1) ==0 m=m/k k++ (2) 5 4 6 (3) 3*i-2 (4) -= *= (5) 8 5 2 (6) j++ i%j==0 j>=i (7)sum<k sum==k j-2 (8) s=0 p=1 j<=i 3.改错题 (1) 第一处改正: For 改为 for 第二处改正: ave=sum/4 改为 ave=sum/4.0 (2) 第一处改正: j<=9 第二处改正: m=100*i+10*j+k 3.编程题 (1) #include <math.h> main() { int s; float n,t,sum; t=1; sum=0; n=1; s=1.0; while(n<=100) { sum=sum+t; n=n+1; s=-s; t=s/n; } printf("sum=%10.6f\n",sum); } (2) 利用辗除法,直到 b 为 0 为止 main() { int p,r,n,m,temp; printf("input two integer 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("greatest common divisor is:%d\n",n); //最大公约数 printf("lease common multiple is:%d\n",p/n); //最小公倍数 } (3) 采取逆向思维的方法,从后往前推断。
c语言程序设计教程第二版课后习题答案【篇一:c语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版]】1.单项选择题(1)a (2)c(3)d (4)c (5)b 2.填空题(1)函数(2)主函数(main)(3)printf() , scanf()第2章习题参考答案1.单项选择题1-5 cbccc 6-10 cdcdc 11-13 dbb 2.填空题(1)1(2)26 (3)6 , 4 , 2 (4)10 , 6(5)3.000000 (6)双精度(double)(7)9 (8)字母,数字,下划线(9)13.700000 (10)11(11)((m/10)%10)*100+(m/100)*10+m%10(12)0 (13)10 ,9 ,11(15)(x0y0)||(x0z0)||(y0||z0)(16)double (17)x==0(18)sqrt(fabs(a-b))/(3*(a+b))(19)sqrt((x*x+y*y)/(a+b))第3章习题参考答案1.单项选择题1-5 cccdd 6-10 bcdbc11-15 bcbbb16 a 2.填空题(1)用;表示结束(2){ }(3)y=x0?1:x==0?0:-1(4)y%4==0y%100!=0||y%400==0(5)上面未配对(6)default 标号(7)while , do while , for(8)do while(9)本次(10)本层 3.阅读程序,指出结果(1)yes(2)*(3)abother(4)28 70(5)2,0(6)8(7)36 (8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12(11)i=6,k=4 (12)1,-2 4.程序填空(1)x:y , u:z(2)m=n , m!=0,m=m/10(3)teps , t*n/(2*n+1) , printf(“%lf\n”,2*s) (4)m%5==0 ,printf(“%d\n”,k) (5)cx=getchar() , cx!=front , cx(6)double s=0, 1.0/k , %lf (7)s=0 , sgmin, 5.编程题(1). #include stdio.h int main() {double x,y; scanf(%lf,x); if(x1) y=x;else if(x=1.0x10) y=2*x-11; elsey=3*x-11;printf(%lf\n,y); return 0; } (2).#include stdio.h int main() {double x,y,z,min;scanf(%lf%lf%lf,x,y,z); if(xy) min=y; else min=x; if(minz)min=z;printf(min=%lf\n,min); return 0; } (3).#include stdio.h int main() {int y,m,d,flag,s=0,w,i;scanf(%d%d%d,y,m,d);flag=(y%4==0y%100!=0||y%400==0);w=((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7;for(i=1;i=m;i++) {switch(i) {case 1:s=d;break; case 2:s=31+d;break; case 3:s=59+d;break; case 4:s=90+d;break; case 5:s=120+d;break; case6:s=151+d;break; case 7:s=181+d;break; case8:s=212+d;break; case 9:s=243+d;break; case10:s=273+d;break; case 11:s=304+d;break; case12:s=334+d;break;} }s=(w+s)%7; if(s==0)printf(星期日\n); elseprintf(星期%d\n,s); return 0; }(4).#include stdio.h int main() {float p,r;scanf(%f,p); if(p=10) r=p*0.1;else if(p10p=20) r=10*0.1+(p-10)*0.075; else if(p20p=40)r=10*0.1+10*0.075+(p-20)*0.05; else if(p40p=60)r=10*0.1+10*0.075+20*0.05+(p-40)*0.03;else if(p60p=100)r=10*0.1+10*0.075+20*0.05+20*0.03+(p-60)*0.015; else if(p100)r=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(p-100)*0.01; printf(%f\n,r); return 0; } (5).#include stdio.h int main() {char c;while((c=getchar())!=\n) {if(c=ac=z) c=c-32; putchar(c);}return 0; } (6).#includestdio.h int main() {int m,k=2;printf(输入一个正整数:\n); scanf(%d,m); while(km) if(m%k==0) {printf(%4d,k); m=m/k; } else k++;printf(%4d\n,m); return 0; } (7).#includestdio.h int main() {int a,n,s=0,p=0,i;scanf(%d %d,n,a); for(i=1;i=n;i++) {p=p*10+a; s=s+p; }printf(%d\n,s); return 0; } (8).#includestdio.h int main(){int i,j,k;for(i=1;i=9;i++) for(j=0;j=9;j++) for(k=0;k=9;k++)printf(%5d,100*i+10*j+k); return 0; }(9).#includestdio.h #includemath.h int main() {float a=-10,b=10,x,f1,f2,f; f1=(((2*a-4)*a+3)*a)-6; f2=(((2*b-4)*b+3)*b)-6; do {x=(a+b)/2;f=(((2*x-4)*x+3)*x)-6; if(f*f10) { b=x; f2=f; } else { a=x;f1=f; }}while(fabs(f)=1e-6); printf(%6.2f\n,x); return 0; }(10).#includestdio.h#includemath.h int main() {int n=2;double eps,t,s=0,x;scanf(%lf %lf,x,eps); t=x; s=t;while(fabs(t)=eps) {t=-t*(2*n-3)*x*x/(2*n-2); s=s+t/(2*n); n++; }printf(%d,%lf\n,n,s); return 0; }(11).#includestdio.h int main() {unsigned long s,t=0,p=1; scanf(%u,s); while(s!=0) {if((s%10)%2!=0) {t=t+(s%10)*p; p=p*10; }s=s/10; }printf(%u\n,t); return 0; }第4章习题参考答案1.单项选择题1-5 dddbd 6-10 badcd 11-14 bdab 2.填空题(1)2(2)嵌套,递归(3)全局变量,局部变量,静态变量,动态变量(4)auto , static , register , extern (5)外部变量(6)编译,运行 3.阅读程序,指出结果(1)15(2)5(3)5,4,3 (4)i=5 i=2 i=2 i=4 i=2(5)求水仙花数(6)-5*5*5(7)30 (8)0 10 1 11 2 124.程序填空(1)float fun(float , float) , x+y,x-y, z+y,z-y (2)x , x*x+1 (3)s=0 , a=a+b 5.编程题(1).while(s!=0) #includestdio.h { unsigned int fun(unsigned int);p=p+s%10; int main() s=s/10; { } unsigned int s; return p; scanf(%u,s); } printf(%u\n,fun(s)); (2). return 0;#includestdio.h } #includestdlib.h unsigned int fun(unsignedint s) #includemath.h { void f1(float,float,float,float); unsigned int p=0; void f2(float,float,float,float);【篇二:《c语言程序设计》课后习题答案(第四版)谭浩强】t>1.1什么是计算机程序11.2什么是计算机语言11.3c语言的发展及其特点31.4最简单的c语言程序51.4.1最简单的c语言程序举例61.4.2c语言程序的结构101.5运行c程序的步骤与方法121.6程序设计的任务141-5 #include stdio.hint main ( ){ printf (**************************\n\n);printf( very good!\n\n);printf (**************************\n);return 0;}1-6#include stdio.hint main(){int a,b,c,max;printf(please input a,b,c:\n);scanf(%d,%d,%d,a,b,c);max=a;if (maxb)max=b;if (maxc)max=c;printf(the largest number is %d\n,max);return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用n?s流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的c程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3c语句573.3.1c语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include stdio.h#include math.hint main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(p=%f\n,p);return 0;}3-2-1#include stdio.h#include math.hint main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5);// 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。
数据结构( C语言版)(第 2版)课后习题答案李冬梅2015.3目录第 1 章绪论 (1)第 2 章线性表 (5)第 3 章栈和队列 (13)第 4 章串、数组和广义表 (26)第 5 章树和二叉树 (33)第 6 章图 (43)第 7 章查找 (54)第 8 章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0 ,± 1,± 2,, } ,字母字符数据对象是集合C={‘A’,‘B’, , ,‘Z’,‘ a’,‘ b’, , ,‘z ’} ,学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
C说话程序设计习题参考答案习题 1一.断定题1.在盘算机中,小数点和正负号都有专用部件来保管和暗示.2.二进制是由0和1两个数字构成的进制方法.3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系.4.在整数的二进制暗示办法中,0的原码.反码都有两种情势.5.有符号数有三种暗示法:原码.反码和补码.6.经常应用字符的ASCII码值从小到大的分列纪律是:空格.阿拉伯数字.大写英文字母.小写英文字母.解:1.F2.T 3.T 4.T 5.T 6.T二.单选题1.在盘算机中,最合适进行数值加减运算的数值编码是 .A. 原码B. 反码C. 补码D. 移码2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数 .A. 112B. 120C. 121D. 1223.关于ASCII码,在盘算机中的暗示办法精确地描写是 .A. 应用8位二进制数,最右边一位为1B. 应用8位二进制数,最左边一位为1C. 应用8位二进制数,最右边一位为0D. 应用8位二进制数,最左边一位为04.设在机械字长4位,X=0111B,Y=1011B,则下列逻辑运算中,精确的是___________.A. X∧Y=1000B. X∨Y=1111C. X⊕Y=0011D. ¯Y=10005.下列论述中精确的是().A.高等说话就是机械说话B.汇编说话程序.高等说话程序都是盘算机程序,但只有机械说话程序才是盘算机可以直接辨认并履行的程序C.C说话因为具有汇编说话的一些特征,所所以汇编说话的一种D.C源程序经由编译.衔接,若精确,履行后就能得到精确的运行成果6.用C说话编写的源程序经由编译后,若没有产生编译错误,则体系将().A.生成可履行文件B.生成目的文件C.输出运行成果D.主动保管源文件7.下列论述中不精确的是().A.main函数在C程序中必须有且只有一个B. C程序的履行从main函数开端,所以main函数必须放在程序最前面C. 函数可以带参数,也可以不带参数.D. 每个函数履行时,按函数体中语句的先后次序,依次履行每条语句解:1.C 2.C 3.D 4.B 5.B 6.B 7.B三.填空题1.(87.625)10=()2=()8=()162.(1001010111001.10111)2=()8=()16=()103.输入三个数,盘算并输出三个数的和与三个数的乘积.程序如下:#include <stdio.h>void main(){inta,b,c,s,z;printf("Please input a b c:\n");s=a+b+c;printf("%d\n",s);}*4. 输入三角形三条边的边长,盘算并输出三角形的面积.依据三条边的边长,盘算三角形面积的公式如下:程序如下:#include <stdio.h>#include <math.h>void main(){double x,y,z,s,dime;scanf("%lf%lf%lf",&x,&y,&z);dime=sqrt(s*(s-x)*(s-y)*(s-z));}解:1.1010111.101 127.5 57.A2.11271.56 12B9.B8 4793.718753.scanf("%f%f%f",&a,&b,&c); z=a*b*c; printf("%f",z);4.s=(x+y+2)/2; printf("%f",dim);四.编程题1.模仿例1.1,编程序在屏幕上显示:*****************************MerryChristmas!HappyNewYear!*****************************解:#include <stdio.h>void main(){ printf("*****************************\n");printf(" Merry Christmas!\n");printf(" Happy New Year!\n");printf("*****************************\n");}2.模仿例1.2编程,输入一个整数,盘算这个数的平方.解:#include<stdio.h>void main(){ int a,z;printf("请输入一个整数:\n");scanf("%d",&a);z=a*a;printf("%d*%d=%d\n",a,a,z);}*3.模仿例1.3编程,输入两个数后,输出个中较小值.解:#include<stdio.h>float min(float x, float y){ float m;if (x<y) m=x;else m=y;return m;}void main(){ float a,b,c,mindata;printf("请输入二个数:\n");scanf("%f %f",&a,&b);mindata=min(a,b);printf("较小数:%f\n",mindata);}*4.模仿例1.2编程,输入a.b后,输出一元一次方程ax+b=0的解.解:#include<stdio.h>void main(){ float a,b,x;printf("请输入a.b:\n");scanf("%f %f",&a,&b);x=-a/b;printf("x=%f\n",x);}*5.模仿例1.2编程,输入圆柱体的半径和高,盘算并输出圆柱体的体积.解:#include <stdio.h>void main(){ float r,h,s,v;printf("Please input r and h:\n");scanf("%f %f",&r,&h);v=3.14*r*r*h;printf("V=%f\n",v);}习题2一.断定题1.任何变量都必需要界说其类型.2.C说话的double类型数据在其数值规模内可以暗示任何实数.3.C说话的任何类型数据在盘算机内都是以二进制情势存储的.4.isdigit(‘5’)的成果为0.5.printf函数中格局符“%c”对应的参数只能是字符类型.6.按格局符“%d”输出float类型变量时,截断小数位取整后输出.7.在C说话程序中,ABC与abc是两个雷同的变量.8.scanf函数中的格局符“%d”不克不及用于输入实型数据.9.格局符“%f”不克不及用于输入double类型数据.10.当格局符中指定宽度时,输出的信息完整取决于所指定的宽度.解:(1)T (2)F (3)T (4)F (5)F (6)F (7)F (8)T (9)T (10)F二.指出下列各项中哪些是C说话中的常量,并指出其类型10,150 007 –0x3d π1e0 e1 o7o8‘x’ ‘x o’ 1.52e0.5 sin(3) 0xf16 ‘\a’‘\009’1.414E+22.54‘\\’ ‘a’+2 0x100h 0128 10L解:正当的C常量有:整型常量: 007 –0x3d0xf16 10L实型常量: 1e0 1.414E+2字符型常量:‘x’‘\a’‘\\’三.指出下列各项中哪些是C说话中的用户标识符x_1 X_2 High printf β 3DS i/je2 -e2 count Int number $23 next_sizeof IF sum_12_123# NO1: double for解:C的用户标识符有:x_1 X_2 High e2 count Int numbernext_ IF sum_12四.单项选择题1.C说话中,char型数据在内存中的存储情势是().A.原码 B.反码C.补码D.ASCII码2.如有界说语句“char c='\72';”则变量c().A.包含1个字符B.包含2个字符 C.包含3个字符 D.界说不正当3.C说话中的根本数据类型包含().A.整型.实型.逻辑型B.整型.实型.字符型C.整型.逻辑型.字符型D.整型.实型.逻辑型.字符型4.设c1.c2为字符型变量,履行语句“c1=getchar();c2=getchar();”时,从键盘输入A↙,c1和c2的值分离为().A.都是‘A’B.c1是‘A’,c2未输入C.c1未输入,c2是‘A’D.c1是‘A’,c2是‘\n’5.a.b是整型变量,履行语句“scanf("a=%d,b=%d",&a,&b);”,使a和b 的值分离为1和2,精确的输入是().A.1 2B.1,2C.a=1,b=2D.a=1 b=26.设c为字符型变量值为‘A’,a为整型变量值为97,履行语句“putchar(c);putchar(a);”后,输出成果为().A.AaB.A97C.A9D.aA7.已知字母A的ASCII码值为65,以下语句段的输出成果是().char c1='A',c2='Y'; printf("%d,%d\n",c1,c2);A.输出格局不法,输出错误信息B.65,90C.A,YD.65,898.若要应用输入语句“scanf("%4d%4d%10f",&i,&j,&x);”,为i输入-10,为j输入12,为x输入345.67,则精确的输入情势是().A.–1012345.67↙B.–1012345.67↙C.–10001200345.67↙D.–10,12,345.67↙9.能精确地界说符号常量的是().A.#define n=10B.#define n 10C.#define n 10; D.#DEFINE N 1010.在C说话中,int.char.short三种类型数据在内存中所占的字节数().A.由用户本身界说 B.均为2个字节 C.是随意率性的 D.由机械字长决议解:(1) D (2) A (3) B (4) D (5) C(6) A (7) D (8) B (9) B (10) D五.填空题1.char ch='$';float x=153.4523;语句“printf("%c%–8.2f\\n",ch,x);”的输出成果是 .解:$153.45 \n2.int i=123;float x=– 1234.56789;语句“printf("i=%5d x=%7.3f\n",i,x);”的输出成果是 .解:i= 123 x=-1234.5683.char c='a';int a=65;语句“putchar(c+1);putchar(a);”的输出成果是 .解:bA4.int a=98;语句“printf (“%d,%c,%o,%x ”,a,a+1,a+2,a+3);”的输出成果是 . 解:98,c,144,655.int k; float f;语句“scanf(“%3d%*4d%6f ”,&k,&f);”履行时输入 12345678765.43↙ 则 k= ,f= .解:k=123 f=8765.46.应用pow()函数时,程序的开首必须写一条预处理敕令: .解:#include <math.h>5.填空题.(1)int i=123,j=45;函数printf("%d,%d\n",i,j);的输出成果是.解:123,45(2)int i=123; float x=-45.678;语句printf("i=%5d x=%7.4f\n",i,x); 的输出成果是.解:i= 123 x=-45.6780(3)float alfa=60,pi=3习 题 3一.依据下列数学式,写出C 的算术表达式.解:-(a 2+b 2)×y 4的C 表达式:-(a*a+b*b)*pow(y,4)π++-x 12tan 102的C 表达式:(sqrt(2)+10*10)/(pow(tan(x),-1)+3.141593)5.3|)sin(|x 的C 表达式:sqrt(pow (fabs (sin(x)),3.5))56e x -的C 表达式:pow(x,6)-exp(5)cd d c b a d c ab +-+++221的C 表达式:(1.0/2*a*b+c+d)/(a+2*b-(c+d)/c/d)二.按照请求,写出下列C 的表达式.1.写出int 类型变量x 为“奇数”的表达式.解:x%2==12.Int 类型变量x.y.z,写出描写“x 或y 中有且仅有一个小于z ”的表达式. 解:x<z&&y>=z||x>=z&&y<z3.将double 类型变量y 保存四位小数的表达式.解:(int)(y*10000+0.5)/10000.04.为变量s 赋值:取变量x 的符号,取变量y 的绝对值.解:s=(x>=0?1:-1)*(y>=0?y:-y)5.前提“-5≤x ≤3”所对应的C 逻辑表达式.解:-5<=x&&x<=36.a.b是字符变量,已知a的值为大写字母.b的值为小写字母,写出断定a.b 是否为统一字母(不区分大小写)的逻辑表达式解:a+32==b 或 b-a==32?1:07.int类型变量a.b均为两位正整数,写出断定a的个位数等于b的十位数.且b的个位数等于a的十位数的逻辑表达式.解:a%10==b/10&&a/10==b%108.写出断定某小我是否是成年人(年纪大于21),且不是老年人(年纪大于65)的逻辑表达式.解:y>21&&y<=659.写出取变量a.b.c中最大值的前提表达式.解:(a>b?a:b)>c?(a>b?a:b):c10.若字符变量ch为小写字母,则将其转换为对应的大写字母.解:ch=ch>='a'&&ch<='z'?ch-32:ch三.单项选择题1.设int x=3,y=4,z=5;,下列表达式中值为0的是().A.'x'&&'y'B.x<=yC.x||y+z&&y–zD.!((x<y)&&!z||1)2.已知x=10,ch='A',y=0;,则表达式“x>=y&&ch<'B'&&!y”的值是().A.0B.1C.“假”D.“真”3.断定char型变量c为数字字符的精确表达式为().A.'0'<=c<='9'B.'0'<=c&&c<='9' C.c>='0'||c<='9'D.c>=0&&c<=9 4.下列运算符中,优先级最低的是().A.?:B.&&C.= =D.*=5.如有前提表达式“x?a++:b--”,则以下表达式中()等价于表达式x.A.x==0B.x!=0C.x==1D.x!=16.有界说int k=4,a=3,b=2,c=1;,表达式“k<a?k:c<b?c:a”的值是().A.4B.3C.2D.17.履行下列程序段后,变量a,b,c的值分离是().int x=10,y=9,a,b,c;a=(--x= =y++)?--x:++y;b=x++;c=y;A.a=9,b=9,c=9B.a=8,b=8,c=10C.a=9,b=10,c=9D.a=1,b=11,c=108.有界说int a=9;,语句“a+=a–=a+a;”履行后,变量的值是().A.18B.9C.–18D.–99.设x和y均为int型变量,则语句“x+=y;y=x–y;x–=y;”的功效是().A.把x和y按从小到大分列B.把x和y按从大到小分列C.无肯定成果D.交流x和y中的值10.有界说double x=1,y;,表达式“y=x+3/2”的值是().A.1B.2C.2.0D.2.511.设有界说int x;double y;,则下列表达式中成果为整型的是().A.(int)y+xB.(int)x+yC.int(y+x)D.(double)x+y12.设有整型变量x,下列说法中,错误的是().A.“5.0”不是表达式B.“x”是表达式C.“!x”是表达式D.“sqrt(x)”是表达式解:(1)D (2)B (3)B (4)D (5)B (6)D(7)B (8)C (9)D (10)C (11)A (12)A 四.填空题.1.设float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4 值为 .解:2.52.设int x=2,y=3;,履行语句“x*=x+y”后x的值为 .解:103.设int x=17,y=5;,履行语句“x%=x–y”后x的值为.解:54.设 int a=6,b=4,c=2;,表达式 !(a-b)+c-1&&b-c/2 的值为 .解:15.设 int a=2,b=4,x,y;,表达式!(x=a)||(y=b)&&!(2-3.5) 的值为 .解:06.断定变量a.b是否绝对值相等而符号相反的逻辑表达式为 .解:a==-b7.断定变量a.b中必有且只有一个为0的逻辑表达式为 .解:a*b==0&&a+b!=08.设int m=2,n=2,a=1,b=2,c=3;履行语句d=(m=a==b)&&(n=b>c);后,m 和n的值分离为 .解:m为0,n为29.设int a=2;,表达式“a%2!=0”的值为.解:010.设char c='y';,表达式“c>='a'&&c<='z'|| c>='A'&&c<='Z'”的值为.解:111.写出与代数式 (x+2)e x+2对应的C表达式 .解:(x+2)*exp(x+2)12.设int a=2;履行语句a=3*5,a*4;后a的值为 .解:15五.写出下列程序的输出成果.1.#include <stdio.h>void main(){unsigned k,n;scanf("%u",&n); //输入数据为:69k=n%10*10+n/10;printf("n=%d k=%d\n",n,k);}解:n=69 k=962.#include <stdio.h>void main(){int x=2,y=3;x*=y+4;printf("%d,%d\n",x,y);x/=y=5;printf("%d,%d\n",x,y);x-=y%2;printf("%d,%d\n",x,y);}解:14,32,51,53.#include <stdio.h>void main(){int a, b;a=8;b=7;a=(a-- ==b++)? a%3 : a/3;printf("a=%d b=%d\n",a,b);}解:a=2 b=8六.程序填空题.1.以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交流后输出a.b.c的值.例如输入1 2 3,输出a=2 b=3 c=1. #include <stdio.h>void main(){ int a,b,c,①;printf(“Enter a,b,c:”);scanf(“%d%d%d”,②);③; a=b; b=c; ④;printf(“a=%d b=%d c=%d\n”,a,b,c);}解:① t ② &a,&b,&c ③ t=a ④ c=t2.以下程序不借助任何变量把a.b中的值进行交流.#include <stdio.h>void main(){ int a,b;printf(“Input a,b:”);scanf(“%d%d”,①);a+=②; b=a-③; a-= ④;printf(“a=%d b=%d\n”,a,b);}解:① &a,&b ② b ③ b ④ b七.编程题.1.输入3个字符后,按各字符ASCII码从小到大的次序输出这些字符.解:#include <stdio.h>void main(){ char c1,c2,c3,t,min,mid,max;c1=getchar(); c2=getchar(); c3=getchar();min=(t=c1<c2?c1:c2)<c3?t:c3;max=(t=c1>c2?c1:c2)>c3?t:c3;mid=c1+c2+c3-min-max;putchar(min);putchar(mid);putchar(max);}2.输入两点坐标(x1,y1).(x2,y2),盘算并输出两点间的距离.解:#include <stdio.h>#include <math.h>void main(){double x1,y1,x2,y2,d;printf(“请输入两点坐标 (x1,y1),(x2,y2)\n”);scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2);d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf(“两点间距离=%f\n”,d);}3.编写程序,盘算球体积并输出它的值.请求输入半径值,盘算成果保存三位小数.解:#include <stdio.h>#include <math.h>#define PI 3.1415926void main(){ double r,gv;printf(“请输入半径值:\n”);scanf(“%lf”,&r);gv=4.0/3*PI*pow(r,3);printf(“半径为%f的球的体积为:%.3f\n”,r,gv);}4.输入三角形的底和高,求三角形面积.解:#include <stdio.h>#define PI 3.14159void main(){double a,h,s;printf(“请输入三角形的底,高\n”);scanf(“%lf,%lf”,&a,&h);s=a*h/2;printf(“三角形面积=%f\n”,s);}5.编写程序,输入一个实数后输出该数的绝对值.解:#include <stdio.h>void main(){double x,y;printf(“请输入一个实数\n”);scanf(“%lf”,&x);y=x>=0?x:-x;printf(“|%g|=%g\n”,x,y);}6.输入梯形的上底.下底和高,求梯形面积.解:#include <stdio.h>void main(){double a,b,h,s;printf(“请输入梯形的上底,下底,高\n”);scanf(“%lf,%lf,%lf”,&a,&b,&h);s=(a+b)*h/2;printf(“梯形面积=%f\n”,s);}7. 输入矩形的边长,求矩形面积.解:#include <stdio.h>void main(){double a,b,s;printf(“请输入矩形的长,宽\n”);scanf(“%lf,%lf”,&a,&b);s=a*b;printf(“矩形面积=%f\n”,s);}8. 已知等差数列的第一项为a,公役为d,求前n项之和,a.d.n由键盘输入.解:#include <stdio.h>void main(){int a,d,n,sum;printf(“请输入等差数列的首项公役项数\n”);scanf(“%d%d%d”,&a,&d,&n);sum=a*n+n*(n-1)*d/2;printf(“ sum=%d\n”,sum);}9. 编写程序,将d天h小时m分钟换算成分钟,输入d.h.m,输出换算成果.解:#include <stdio.h>void main(){int d,h,m,t;printf(“请输入天小时分钟\n”);scanf(“%d%d%d”,&d,&h,&m);t=d*24*60+h*60+m;printf(“%d天%d小时%d分钟=%d分钟\n”,d,h,m,t);}10. 编写程序,求出给定半径r的圆以及内接正n边形的面积,输出盘算成果.r 和n的值由键盘输入.解:#include <stdio.h>#include <math.h>#define PI 3.14159void main(){double r,s1,s2;int n;printf(“Input r n\n”);scanf(“%lf%d”,&r,&n);s1=PI*r*r;s2=n/2.0*r*r*sin(2*PI/n);printf(“圆面积=%f,正内接%d边形面积=%f\n”,s1,s2);}习题4一.单项选择题1.下列语句将小写字母转换为大写字母,个中精确的是().A.if(ch>='a'&ch<='z')ch=ch-32;B.if(ch>='a'&&ch<='z')ch=ch-32;C.ch=(ch>='a'&&ch<='z')?ch-32:'';D.ch=(ch>'a'&&ch<'z')?ch-32:ch;2.下列各语句中,可以或许将变量u.s中最大值赋给变量t的是().A.if(u>s)t=u;t=s;B.t=s;if(u>s)t=u;C.if(u>s)t=s;else t=uD.t=u;if(u>s)t=s;3.假设变量x.k都已界说,下列语句片断中,无语法错误的是().A.switch(x){case x>=90: putchar('A');case x<60: putchar('E');}B.switch(x) {case 1+2: k='A';defualt: k='E';case 2*4: k='B';}C.switch(x){case 2+x: k=x-2;case 3*x: k=x+3;default: k=0;}D.switch(x){case 3.5: k=0.5*x;case 7.8: k=8*x;default: k=0;}*4.与语句while(!s )中的前提等价的是().A.s==0B.s!=0C.s==1D.s=05.下列语句中,哪一个可以输出26个大写英文字母().A.for(a='A';a<='Z';printf("%c",++a));B.for(a='A';a<'Z';a++)printf("%c",a);C.for(a='A';a<='Z';printf("%c",a++));D.for(a='A';a<'Z';printf("%c",++a));6.断定下面的while轮回体的履行次数().i=0;k=10;while( i=8 ) i=k––;A.8次B.10次C.2次D.很多次解:(1) B (2) B (3) B (4) A (5) C (6) D 二.写出下列程序的输出成果1.#include <stdio.h>void main(){char x;。
c语⾔程序设计教程(第2版)课后题及模拟题参考答案c语⾔程序设计教程(第2版)课后题及模拟题参考答案习题1 (4)1-1 填空题 (4)1-2 思考题 (4)1-3 编程题 (5)习题2 (6)2-1 单选题 (6)2-2 思考题 (6)习题3 (7)3-1 选择题 (7)3-2 填空题 (7)3-3 编程题 (8)习题4 (11)4-1单选题 (11)4-2填空题 (11)4-3 编程题 (11)习题5 (16)5-1单选题 (16)5-2填空题 (16)5-3 编程题 (16)习题6 (22)6-1单选题 (22)6-2填空题 (22)习题7 (25)7-1单选题 (25)7-2填空题 (25)7-3 编程题 (25)习题8 (26)8-1单选题 (26)8-2填空题 (26)8-3 编程题 (26)习题9 (30)9-1单选题 (30)9-2填空题 (30)9-3 编程题 (30)习题10 (38)10-1单选题 (38)10-2填空题 (38)10-3 编程题 (38)习题11 (41)11-1单选题 (41)11-2填空题 (41)习题12 (42)12-1单选题 (42)12-2 填空题 (42)实验1 熟悉Visual C++6.0可视化集成开发环境 (43)实验2 顺序结构程序设计 (43)实验3 选择结构程序设计 (43)实验4 循环结构程序设计 (44)实验5 函数 (47)实验6 数组 (54)实验7 指针 (58)实验8 结构体和共⽤体 (61)实验9 ⽂件 (63)实验10 综合编程 (64)模拟试卷(⼀)参考答案 (65)模拟试卷(⼆)参考答案 (67)习题11-1 填空题1. 函数2. 主函数main(),主函数main()3. 主函数main()4. 函数⾸部,函数体5. {, }6. /*, */7. 顺序结构,选择结构,循环结构8. .c, .obj, .exe1-2 思考题1. 结构化程序设计是指:为使程序具有⼀个合理的结构以保证程序正确性⽽规定的⼀套如何进⾏程序设计的原则。
C语言程序设计(第二版)习题参考答案为了适应标题所需的字数限制,我将按照适当的格式和排版要求来回答C语言程序设计(第二版)习题的参考答案。
以下是部分习题的解答示例:1. 基本概念与语法1.1 变量和数据类型C语言中的变量用于存储不同类型的数据。
常见的数据类型包括整型、浮点型、字符型等。
例如,声明一个整型变量x并赋值为10的方法如下:```cint x = 10;```1.2 操作符和表达式C语言提供了丰富的操作符和表达式,用于进行数值计算和逻辑判断。
例如,使用逻辑与(&&)操作符可以判断两个条件同时成立的情况,示例如下:```cif (x > 0 && x < 100) {// 满足条件的代码```2. 流程控制2.1 分支结构流程控制中的分支结构用于根据条件来执行不同的代码块。
常见的分支结构有if语句和switch语句。
例如,使用if语句判断一个数的正负情况:```cif (x > 0) {printf("x是正数\n");} else if (x < 0) {printf("x是负数\n");} else {printf("x是零\n");}```2.2 循环结构循环结构用于多次执行相同的代码块。
常见的循环结构有for循环、while循环和do-while循环。
例如,使用for循环输出1到10的数字:for (int i = 1; i <= 10; i++) {printf("%d ", i);}printf("\n");```3. 函数和数组3.1 函数的定义和调用函数是一段完成特定功能的代码块,可以多次调用。
函数的定义包括函数名、参数列表和返回值类型。
例如,定义一个用于计算两个整数相加的函数:```cint add(int a, int b) {return a + b;}// 调用add函数int result = add(3, 5);printf("3 + 5 = %d\n", result);```3.2 数组的定义和使用数组是一种存储相同类型数据的集合。
数据构造(C说话版)(第2版)课后习题答案李冬梅目录第1章绪论1第2章线性表4第3章栈和队列12第4章串.数组和广义表25第5章树和二叉树32第6章图41第7章查找52第8章排序63第1章绪论1.简述下列概念:数据.数据元素.数据项.数据对象.数据构造.逻辑构造.存储构造.抽象数据类型.答案:数据:是客不雅事物的符号暗示,指所有能输入到盘算机中并被盘算机程序处理的符号的总称.如数学盘算顶用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形.图像.声音.动画等经由过程特别编码界说后的数据.数据元素:是数据的根本单位,在盘算机中平日作为一个整体进行斟酌和处理.在有些情形下,数据元素也称为元素.结点.记载等.数据元素用于完全地描写一个对象,如一个学生记载,树中棋盘的一个格局(状况).图中的一个极点等.数据项:是构成数据元素的.有自力寄义的.不成朋分的最小单位.例如,学生根本信息表中的学号.姓名.性别等都是数据项.数据对象:是性质雷同的数据元素的集合,是数据的一个子集.例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’, ‘a’,‘b’,…,‘z’},学生根本信息表也可是一个数据对象.数据构造:是互相之间消失一种或多种特定关系的数据元素的集合.换句话说,数据构造是带“构造”的数据元素的集合,“构造”就是指数据元素之间消失的关系.逻辑构造:从逻辑关系上描写数据,它与数据的存储无关,是自力于盘算机的.是以,数据的逻辑构造可以看作是从具体问题抽象出来的数学模子.存储构造:数据对象在盘算机中的存储暗示,也称为物理构造.抽象数据类型:由用户界说的,暗示运用问题的数学模子,以及界说在这个模子上的一组操纵的总称.具体包含三部分:数据对象.数据对象上关系的集合和对数据对象的根本操纵的集合.2.试举一个数据构造的例子,论述其逻辑构造和存储构造两方面的寄义和互相关系.答案:例若有一张学生根本信息表,包含学生的学号.姓名.性别.籍贯.专业等.每个学生根本信息记载对应一个数据元素,学生记载按次序号分列,形成了学生根本信息记载的线性序列.对于全部表来说,只有一个开端结点(它的前面无记载)和一个终端结点(它的后面无记载),其他的结点则各有一个也只有一个直接前趋和直接后继.学生记载之间的这种关系就肯定了学生表的逻辑构造,即线性构造.这些学生记载在盘算机中的存储暗示就是存储构造.假如用持续的存储单元(如用数组暗示)来存放这些记载,则称为次序存储构造;假如存储单元不持续,而是随机存放各个记载,然后用指针进行链接,则称为链式存储构造.即雷同的逻辑构造,可以对应不合的存储构造.3.简述逻辑构造的四种根本关系并画出它们的关系图.答案:(1)集合构造数据元素之间除了“属于统一集合”的关系外,别无其他关系.例如,肯定一逻辑学生是否为班级成员,只需将班级看做一个集合构造.(2)线性构造数据元素之间消失一对一的关系.例如,将学生信息数据按照其入学报到的时光先后次序进行分列,将构成一个线性构造.(3)树构造数据元素之间消失一对多的关系.例如,在班级的治理系统中,班长治理多个组长,每位组长治理多名组员,从而构成树形构造.(4)图构造或网状构造数据元素之间消失多对多的关系.例如,多位同窗之间的同伙关系,任何两位同窗都可所以同伙,从而构成图形构造或网状构造.个中树构造和图构造都属于非线性构造.四类根本逻辑构造关系图4.存储构造由哪两种根本的存储办法实现?答案:(1)次序存储构造次序存储构造是借助元素在存储器中的相对地位来暗示数据元素之间的逻辑关系,平日借助程序设计说话的数组类型来描写.(2)链式存储构造次序存储构造请求所有的元素依次存放在一片持续的存储空间中,而链式存储构造,无需占用一整块存储空间.但为了暗示结点之间的关系,须要给每个结点附加指针字段,用于存放后继元素的存储地址.所以链式存储构造平日借助于程序设计说话的指针类型来描写.5.选择题(1)在数据构造中,从逻辑上可以把数据构造分成().A.动态构造和静态构造 B.紧凑构造和非紧凑构造C.线性构造和非线性构造 D.内部构造和外部构造答案:C(2)与数据元素本身的情势.内容.相对地位.个数无关的是数据的().A.存储构造 B.存储实现C.逻辑构造 D.运算实现答案:C(3)平日请求统一逻辑构造中的所稀有据元素具有雷同的特征,这意味着().A.数据具有统一特色B.不但数据元素所包含的数据项的个数要雷同,并且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等答案:B(4)以下说法准确的是().A.数据元素是数据的最小单位B.数据项是数据的根本单位C.数据构造是带有构造的各数据项的集合D.一些概况上很不雷同的数据可以有雷同的逻辑构造答案:D解释:数据元素是数据的根本单位,数据项是数据的最小单位,数据构造是带有构造的各数据元素的集合.(5)算法的时光庞杂度取决于().A.问题的范围B.待处理数据的初态C.盘算机的设置装备摆设D.A和B答案:D解释:算法的时光庞杂度不但与问题的范围有关,还与问题的其他身分有关.如某些排序的算法,其履行时光与待排序记载的初始状况有关.为此,有时会对算法有最好.最坏以及平均时光庞杂度的评价.(6)以下数据构造中,()长短线性数据构造A.树 B.字符串 C.队列 D.栈答案:A6.试剖析下面各程序段的时光庞杂度.(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;答案:O(1)解释:程序的履行次数为常数阶.(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;答案:O(m*n)解释:语句a[i][j]=0;的履行次数为m*n.(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;答案:O(n2)解释:语句s+=B[i][j];的履行次数为n2.(4)i=1;while(i<=n)i=i*3;答案:O(log3n)解释:语句i=i*3;的履行次数为⎣log3n⎦.(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;答案:O(n2)解释:语句x++;的履行次数为n-1+n-2+……+1= n(n-1)/2.(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;答案:O(n)解释:语句y++;的履行次数为⎣n⎦.第2章线性表1.选择题(1)次序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是().A.110 B.108 C.100 D.120答案:B解释:次序表中的数据持续存储,所以第5个元素的地址为:100+2*4=108.(2)在n个结点的次序表中,算法的时光庞杂度是O(1)的操纵是().A.拜访第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后拔出一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序答案:A解释:在次序表中拔出or delete一个结点的时光庞杂度都是O(n),排序的时光庞杂度为O(n2)或O(nlog2n).次序表是一种随机存取构造,拜访第i个结点和求第i个结点的直接前驱都可以直接经由过程数组的下标直接定位,时光庞杂度是O(1).(3)向一个有127个元素的次序表中拔出一个新元素并保持本来次序不变,平均要移动的元素个数为().A.8 B.63.5 C.63 D.7答案:B解释:平均要移动的元素个数为:n/2.(4)链接存储的存储构造所占存储空间().A.分两部分,一部分存放结点值,另一部分存放暗示结点间关系的指针B.只有一部分,存放结点值C.只有一部分,存储暗示结点间关系的指针D.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5)线性表若采取链式存储构造时,请求内存中可用存储单元的地址().A.必须是持续的 B.部分地址必须是持续的C.必定是不持续的 D.持续或不持续都可以答案:D(6)线性表L在()情形下实用于运用链式构造实现.A.需经常修正L中的结点值B.需不竭对L进行删除拔出C.L中含有大量的结点D.L中结点构造庞杂答案:B解释:链表最大的长处在于拔出和删除时不须要移动数据,直接修正指针即可.(7)单链表的存储密度().A.大于1 B.等于1 C.小于1 D.不克不及肯定答案:C解释:存储密度是指一个结点数据本身所占的存储空间和全部结点所占的存储空间之比,假设单链表一个结点本身所占的空间为D,指针域所占的空间为N,则存储密度为:D/(D+N),必定小于1.(8)将两个各有n个元素的有序表归并成一个有序表,其起码的比较次数是().A.n B.2n-1 C.2n D.n-1答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只须要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n次.(9)在一个长度为n的次序表中,在第i个元素(1≤i≤n+1)之前拔出一个新元素时须向后移动()个元素.A.n-i B.n-i+1 C.n-i-1 D.I答案:B(10) 线性表L=(a1,a2,……a n),下列说法准确的是().A.每个元素都有一个直接前驱和一个直接后继B.线性表中至少有一个元素C.表中诸元素的分列必须是由小到大或由大到小D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继.答案:D(11) 创建一个包含n个结点的有序单链表的时光庞杂度是().A.O(1) B.O(n) C.O(n2) D.O(nlog2n)答案:C解释:单链表创建的时光庞杂度是O(n),而要树立一个有序的单链表,则每生成一个新结点时须要和已有的结点进行比较,肯定合适的拔出地位,所以时光庞杂度是O(n2).(12) 以下说法错误的是().A.求表长.定位这两种运算在采取次序存储构造时实现的效力不比采取链式存储构造时实现的效力低B.次序存储的线性表可以随机存取C.因为次序存储请求持续的存储区域,所以在存储治理上不敷灵巧D.线性表的链式存储构造优于次序存储构造答案:D解释:链式存储构造温柔序存储构造各有优缺陷,有不合的实用处合.(13) 在单链表中,要将s所指结点拔出到p所指结点之后,其语句应为().A.s->next=p+1;p->next=s;B.(*p).next=s;(*s).next=(*p).next;C.s->next=p->next;p->next=s->next;D.s->next=p->next;p->next=s;答案:D(14) 在双向链表存储构造中,删除p所指的结点时须修正指针().A.p->next->prior=p->prior;p->prior->next=p->next;B.p->next=p->next->next;p->next->prior=p;C.p->prior->next=p;p->prior=p->prior->prior;D.p->prior=p->next->next;p->next=p->prior->prior;答案:A(15) 在双向轮回链表中,在p指针所指的结点后拔出q所指向的新结点,其修正指针的操纵是().A.p->next=q; q->prior=p;p->next->prior=q;q->next=q;B.p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C.q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D.q->prior=p;q->next=p->next;p->next=q;p->next->prior=q;答案:C2.算法设计题(1)将两个递增的有序链表归并为一个递增的有序链表.请求成果链表仍运用本来两个链表的存储空间, 不别的占用其它的存储空间.表中不许可有反复的数据.[标题剖析]归并后的新表运用头指针Lc指向,pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点,从第一个结点开端进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取个中较小者从新链接在Lc表的最后.假如两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,如许确保归并后表中无反复的元素.当一个表到达表尾结点,为空时,将非空表的残剩元素直接链接在Lc表的最后.[算法描写]void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//归并链表La和Lb,归并后的新表运用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){if(pa->data<pb->data){pc->next=pa;pc=pa;pa=pa->next;} //取较小者La中的元素,将pa链接在pc的后面,pa指针后移else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移else //相等时取La中的元素,删除Lb中的元素{pc->next=pa;pc=pa;pa=pa->next;q=pb->next;delete pb ;pb =q;}}pc->next=pa?pa:pb; //拔出残剩段delete Lb; //释放Lb的头结点}(2)将两个非递减的有序链表归并为一个非递增的有序链表.请求成果链表仍运用本来两个链表的存储空间, 不别的占用其它的存储空间.表中许可有反复的数据.[标题剖析]归并后的新表运用头指针Lc指向,pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点,从第一个结点开端进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取个中较小者从新链接在Lc表的表头结点之后,假如两个表中的元素相等,只摘取La表中的元素,保存Lb表中的元素.当一个表到达表尾结点,为空时,将非空表的残剩元素依次摘取,链接在Lc表的表头结点之后.[算法描写]void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc, ){//归并链表La和Lb,归并后的新表运用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点Lc->next=NULL;while(pa||pb ){//只要消失一个非空表,用q指向待摘取的元素if(!pa) {q=pb; pb=pb->next;}//La表为空,用q指向pb,pb指针后移else if(!pb) {q=pa; pa=pa->next;}//Lb表为空,用q指向pa,pa指针后移else if(pa->data<=pb->data) {q=pa; pa=pa->next;}//取较小者(包含相等)La中的元素,用q指向pa,pa指针后移else {q=pb; pb=pb->next;}//取较小者Lb中的元素,用q指向pb,pb指针后移q->next = Lc->next; Lc->next = q;//将q指向的结点插在Lc 表的表头结点之后}delete Lb; //释放Lb的头结点}(3)已知两个链表A和B分离暗示两个集合,其元素递增分列.请设盘算法求出A与B 的交集,并存放于A链表中.[标题剖析]只有同时出如今两集合中的元素才出如今成果表中,归并后的新表运用头指针Lc指向.pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点,从第一个结点开端进行比较,当两个链表La和Lb均为到达表尾结点时,假如两个表中相等的元素时,摘取La表中的元素,删除Lb表中的元素;假如个中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移.当链表La和Lb有一个到达表尾结点,为空时,依次删除另一个非空表中的所有元素.[算法描写]void Mix(LinkList& La, LinkList& Lb, LinkList& Lc){pa=La->next;pb=Lb->next;pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa&&pb){ if(pa->data==pb->data)∥交集并入成果表中.{ pc->next=pa;pc=pa;pa=pa->next;u=pb;pb=pb->next; delete u;}else if(pa->data<pb->data) {u=pa;pa=pa->next; delete u;}else {u=pb; pb=pb->next; delete u;}}while(pa){u=pa; pa=pa->next; delete u;}∥ 释放结点空间while(pb) {u=pb; pb=pb->next; delete u;}∥释放结点空间pc->next=null;∥置链表尾标识表记标帜.delete Lb; //释放Lb的头结点}(4)已知两个链表A和B分离暗示两个集合,其元素递增分列.请设盘算法求出两个集合A和B 的差集(即仅由在A中消失而不在B中消失的元素所构成的集合),并以同样的情势存储,同时返回该集合的元素个数.[标题剖析]求两个集合A和B的差集是指在A中删除A和B中共有的元素,即删除链表中的响应结点,所以要保管待删除结点的前驱,运用指针pre指向前驱结点.pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点,从第一个结点开端进行比较,当两个链表La 和Lb均为到达表尾结点时,假如La表中的元素小于Lb表中的元素,pre置为La表的工作指针pa删除Lb表中的元素;假如个中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移.当链表La和Lb有一个为空时,依次删除另一个非空表中的所有元素.[算法描写]void Difference(LinkList& La, LinkList& Lb,int *n){∥差集的成果存储于单链表La中,*n是成果集合中元素个数,挪用时为0 pa=La->next; pb=Lb->next;∥pa和pb分离是链表La和Lb的工作指针,初始化为响应链表的第一个结点 pre=La;∥pre为La中pa所指结点的前驱结点的指针while(pa&&pb){if(pa->data<q->data){pre=pa;pa=pa->next;*n++;}∥ A链表中当前结点指针后移else if(pa->data>q->data)q=q->next;∥B链表中当前结点指针后移 else {pre->next=pa->next;∥处理A,B中元素值雷同的结点,应删除u=pa; pa=pa->next;delete u;} ∥删除结点}}(5)设盘算法将一个带头结点的单链表A分化为两个具有雷同构造的链表B.C,个中B 表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,请求B.C表运用A表的结点).[标题剖析]B表的头结点运用本来A表的头结点,为C表新申请一个头结点.从A表的第一个结点开端,依次取其每个结点p,断定结点p的值是否小于0,运用前插法,将小于0的结点拔出B表,大于等于0的结点拔出C表.[算法描写]void DisCompose(LinkedList A){ B=A;B->next= NULL;∥B表初始化C=new LNode;∥为C申请结点空间C->next=NULL;∥C初始化为空表p=A->next; ∥p为工作指针while(p!= NULL){r=p->next; ∥暂存p的后继if(p->data<0){p->next=B->next; B->next=p; }∥将小于0的结点链入B表,前插法else {p->next=C->next; C->next=p; }∥将大于等于0的结点链入C表,前插法p=r;∥p指向新的待处理结点.}}(6)设计一个算法,经由过程一趟遍历在单链表中肯定值最大的结点.[标题剖析]假定第一个结点中数据具有最大值,依次与下一个元素比较,若其小于下一个元素,则设其下一个元素为最大值,反复进行比较,直到遍历完该链表.[算法描写]ElemType Max (LinkList L ){if(L->next==NULL) return NULL;pmax=L->next; //假定第一个结点中数据具有最大值p=L->next->next;while(p != NULL ){//假如下一个结点消失if(p->data > pmax->data) pmax=p;//假如p的值大于pmax的值,则从新赋值p=p->next;//遍历链表}return pmax->data;(7)设计一个算法,经由过程遍历一趟,将链表中所有结点的链接偏向逆转,仍运用原表的存储空间.[标题剖析]从首元结点开端,逐个地把链表L的当前结点p拔出新的链表头部.[算法描写]void inverse(LinkList &L){// 逆置带头结点的单链表 Lp=L->next; L->next=NULL;while ( p) {q=p->next; // q指向*p的后继p->next=L->next;L->next=p; // *p拔出在头结点之后p = q;}}(8)设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink 和maxk是给定的两个参数,其值可以和表中的元素雷同,也可以不合).[标题剖析]分离查找第一个值>mink的结点和第一个值≥maxk的结点,再修正指针,删除值大于mink且小于maxk的所有元素.[算法描写]void delete(LinkList &L, int mink, int maxk) {p=L->next; //首元结点while (p && p->data<=mink){ pre=p; p=p->next; } //查找第一个值>mink的结点if (p){while (p && p->data<maxk) p=p->next;// 查找第一个值≥maxk的结点q=pre->next; pre->next=p; // 修正指针while (q!=p){ s=q->next; delete q; q=s; } // 释放结点空间}//if}(9)已知p指向双向轮回链表中的一个结点,其结点构造为data.prior.next三个域,写出算法change(p),交流p所指向的结点和它的前缀结点的次序.[标题剖析]知道双向轮回链表中的一个结点,与前驱交流涉及到四个结点(p结点,前驱结点,前驱的前驱结点,后继结点)六条链.[算法描写]void Exchange(LinkedList p)∥p是双向轮回链表中的一个结点,本算法将p所指结点与其前驱结点交流.{q=p->llink;q->llink->rlink=p;∥p的前驱的前驱之后继为pp->llink=q->llink;∥p的前驱指向其前驱的前驱.q->rlink=p->rlink;∥p的前驱的后继为p的后继.q->llink=p;∥p与其前驱交流p->rlink->llink=q;∥p的后继的前驱指向原p的前驱p->rlink=q;∥p的后继指向其本来的前驱}∥算法exchange停滞.(10)已知长度为n的线性表A采取次序存储构造,请写一时光庞杂度为O(n).空间庞杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素.[标题剖析]在次序存储的线性表上删除元素,平日要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移).本题请求删除线性表中所有值为item的数据元素,并未请求元素间的相对地位不变.是以可以斟酌设头尾两个指针(i=1,j=n),从两头向中央移动,凡碰到值item的数据元素时,直接将右端元素左移至值为item的数据元素地位.[算法描写]void Delete(ElemType A[ ],int n)∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素.{i=1;j=n;∥设置数组低.高端指针(下标).while(i<j){while(i<j && A[i]!=item)i++;∥若值不为item,左移指针.if(i<j)while(i<j && A[j]==item)j--;∥若右端元素为item,指针左移 if(i<j)A[i++]=A[j--];}第3章栈和队列1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不成能出如今()种情形.A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1答案:C解释:栈是落后先出的线性表,不难发明C选项中元素1比元素2先出栈,违反了栈的落后先出原则,所以不成能消失C选项所示的情形.(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为().A.i B.n-i C.n-i+1 D.不肯定答案:C解释:栈是落后先出的线性表,一个栈的入栈序列是1,2,3,…,n,而输出序列的第一个元素为n,解释1,2,3,…,n一次性全体进栈,再进行输出,所以p1=n,p2=n-1,…,pi=n-i+1.(3)数组Q[n]用来暗示一个轮回队列,f为当前队列头元素的前一地位,r为队尾元素的地位,假定队列中元素的个数小于n,盘算队列中元素个数的公式为().A.r-f B.(n+f-r)%n C.n+r-fD.(n+r-f)%n答案:D解释:对于非轮回队列,尾指针和头指针的差值等于队列的长度,而对于轮回队列,差值可能为负数,所以须要将差值加上MAXSIZE(本题为n),然后与MAXSIZE(本题为n)求余,即(n+r-f)%n.(4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保管到x中,则应履行操纵().A.x=top->data;top=top->link;B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;答案:A解释:x=top->data将结点的值保管到x中,top=top->link栈顶指针指向栈顶下一结点,即摘除栈顶结点.(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则盘算fact(n)须要挪用该函数的次数为().A. n+1 B. n-1 C. n D. n+2答案:A解释:特别值法.设n=0,易知仅挪用一次fact(n)函数,故选A.(6)栈在()中有所运用.A.递归挪用B.函数挪用C.表达式求值D.前三个选项都有答案:D解释:递归挪用.函数挪用.表达式求值均用到了栈的落后先出性质.(7)为解决盘算机主机与打印机间速度不匹配问题,平日设一个打印数据缓冲区.主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中掏出数据.该缓冲区的逻辑构造应当是().A.队列 B.栈C.线性表D.有序表答案:A解释:解决缓冲区问题应运用一种先辈先出的线性表,而队列恰是一种先辈先出的线性表.(8)设栈S和队列Q的初始状况为空,元素e1.e2.e3.e4.e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2.e4.e3.e6.e5和e1,则栈S的容量至少应当是().A.2 B.3 C.4 D. 6答案:B解释:元素出队的序列是e2.e4.e3.e6.e5和e1,可知元素入队的序列是e2.e4.e3.e6.e5和e1,即元素出栈的序列也是e2.e4.e3.e6.e5和e1,而元素e1.e2.e3.e4.e5和e6依次进入栈,易知栈S中最多同时消失3个元素,故栈S的容量至少为3.(9)若一个栈以向量V[1..n]存储,初始栈顶指针top设为n+1,则元素x进栈的准确操纵是( ).A.top++; V[top]=x; B.V[top]=x; top++;C.top--; V[top]=x; D.V[top]=x; top--;答案:C解释:初始栈顶指针top为n+1,解释元素从数组向量的高端地址进栈,又因为元素存储在向量空间V[1..n]中,所以进栈时top指针先下移变成n,之后将元素x存储在V[n].(10)设计一个判别表达式中左,右括号是否配对消失的算法,采取()数据构造最佳.A.线性表的次序存储构造B.队列C. 线性表的链式存储构造D. 栈答案:D解释:运用栈的落后先出原则.(11)用链接方法存储的队列,在进行删除运算时().A. 仅修正头指针B. 仅修正尾指针C. 头.尾指针都要修正D. 头.尾指针可能都要修正答案:D解释:一般情形下只修正头指针,但是,当删除的是队列中最后一个元素时,队尾指针也丧掉了,是以需对队尾指针从新赋值.(12)轮回队列存储在数组A[0..m]中,则入队时的操纵为().A. rear=rear+1B. rear=(rear+1)%(m-1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)答案:D解释:数组A[0..m]中共含有m+1个元素,故在求模运算时应除以m+1.(13)最大容量为n的轮回队列,队尾指针是rear,队头是front,则队空的前提是().A. (rear+1)%n==frontB. rear==frontC.rear+1==front D. (rear-l)%n==front答案:B解释:最大容量为n的轮回队列,队满前提是(rear+1)%n==front,队空前提是rear==front.(14)栈和队列的配合点是().A. 都是先辈先出B. 都是先辈后出C. 只许可在端点处拔出和删除元素D. 没有配合点答案:C解释:栈只许可在栈顶处进行拔出和删除元素,队列只许可在队尾拔出元素和在队头删除元素.。
C语言程序设计教程(第二版)课后习题答案第一章C语言程序设计概述-习题答案1算法的描述有哪些基本方法?答1、自然语言2、专用工具2 C语言程序的基本结构是怎样的?举一个例子说明。
答1、C语言程序由函数构成;2、“/*”与“*/”之间的内容构成C语言程序的注释部分;3、用预处理命令#include、#define可以包含有关文件或预定义信息;4、大小写字母在C语言中是有区别的;5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。
3 C语言有什么特点?答1、具有结构语言的特点,程序之间很容易实现段的共享;2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;3、运算符丰富,包含的范围很广;4、数据类型丰富;5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。
4★指出合法与不合法的标识符命名。
答AB12--√leed_3-- a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2 --√ AVE#XY--× _762--√ #_DT5--× C.D--×5说明下列Turbo C热键的功能。
答F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序) Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。
6说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。
①main(){printf("********************\n");printf(" welcome you \n");printf(" very good \n);printf("********************\n");}②main()printf("please input three numbers;");scanf("%d,%d,%d",&a,&b,&c); /*教材S是错误的*/t=max(max(a,b),c);printf("max number is:%d\n",t);}int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);}答运行结果:********************welcome youvery good********************运行结果:please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/max number is:47一个C程序是由若干个函数构成的,其中有且只能有一个___函数。
C语言习题答案第1章1.选择题12 345CBABD2.填空题(1)main (2) main (3) 有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性(4) 顺序、分支和循环(5) 自顶向下,逐步细化、模块化设计、限制使用goto语句第2章1.选择题12 345 67 890 12 34 5ACCDA DDBBA BBACB2、填空题(1) 数字、字母、下划线(2)0 (3) 4、8 (4) (a+b)*c/(a-b) (5) -60 (6)-16(7)9 (8)6、4、2 (9)0 (10)10、6 (11)12、4 (12)5.500000(13)0 (14)16 (15)6.63、编程题(1)编写一个程序求各种类型数据的存储长度。
#include <stdio.h>main(){printf("int:%d byte\n",sizeof(int));printf("short int:%d byte\n",sizeof(short int));printf("long int:%d byte\n",sizeof(long int));printf("float:%d byte\n",sizeof(float));printf("double:%d byte\n",sizeof(double));printf("long double:%d byte\n",sizeof(long double));printf("char:%d byte\n",sizeof(char));}(2)#include <stdio.h>#define RAT 1.60934main(){float k;printf("input the km:");scanf("%f",&k);printf("mile:%f\n",k/RAT);}第3章1.选择题12 345 67 890(1) ~(10):DDCDD DCDCC 2.解析题(1) x=170,x=ㄩㄩㄩ170,x=ㄩㄩㄩ252,x=ㄩㄩㄩㄩaa,x=ㄩㄩㄩ170x=170,x=170ㄩㄩㄩ,x=ㄩㄩㄩ170,x=%6da=513.789185,a=ㄩㄩ513.79,a=513.78918457,a=513.78918457(2) a=3ㄩb=7x=8.5ㄩy=71.82c1=Aㄩc2=a3.编程题(1)main(){int x,y;scanf("%d%d",&x,&y);printf("商数=%d,余数=%d",x/y,x%y);}(2)main(){double x,y,z,avg;scanf("%lf%lf%lf",&x,&y,&z);avg=(x+y+z)/3;printf("%.1f",avg);}第4章1.选择题(1)~(10)CCAAD CCABD2.填空题(1)①a>0&&b>0||a>0&&c>0||b>0&&c>0②a<b||a<c③a>5||-a>5④(a<=0)&&((int)a)!=a⑤(a%b)!=0(2)①!(x>0) ②1 ③!(x>=0&&x<=5)(3)3、2、2(4) ch>='A'&&ch<='Z' ch=ch-32(5) x<=10&&x>2 x<=2&&x>-1 y=-1 ;(6) a+b>c&&a+c>b&&b+c>a a==b&&a==ca==b||a==c||b==c(7) x<0 c=x/10 y!=-23.编程题(1)#include <stdio.h>main(){int x;printf("please input a number:");scanf("%d",&x);if(x%2==0) printf("x is a even number");else printf("x is a odd number");}(2)#include <stdio.h>main(){int x,y;printf("please input a number:");scanf("%d",&x);if(x>-5 && x<0) { y=x; printf("%d",y); }else if(x==0) { y=x-1; printf("%d",y); }else if(x>0 && x<10) { y=x+1; printf("%d",y); }else printf("the number is error");}(3)#include <stdio.h>main(){ int a,m;printf("please input a number:");scanf("%d",&a);switch(a/10){ case 0:case 1:case 2:m=1;break;case 3:m=2;break;case 4:m=3;break;case 5:m=4;break;default:m=5;break;}printf("%d",m);}(4)#include <stdio.h>main(){float price,tax;printf("please input the price of product:");scanf("%f",&price);if(price>=10000) tax=price*0.05;else if(price>=5000) tax=price*0.03;else if(price>=1000) tax=price*0.02;else tax=0;printf("%f",tax);}(5)#include <stdio.h>main(){float score;printf("please input the score of student:");scanf("%f",&score);if(score>=85) printf("VERY GOOD");else if(score>=60) printf("GOOD");else printf("BAD");}(6)#include <stdio.h>main (){int x,y,z;printf("input two number:");scanf("%d%d",&x,&y);if(x<10 || x>99 || y<10 || y>99)printf("input data error!\n");else{ z=(x/10)*1000+(y/10)*100+(x%10)*10+y%10;printf("%d\n",z);}}第5章1.选择题(1)d (2) c (3)a (4)d (5)a (6)d (7)d (8)b (9)d (10)b(11)c (12)a(13)d (14)d(15)c2.填空题(1) fahr celsius=5.0/9*(fahr-32) fahr+=step (2) 5、4、6 (3) 3*i-2(4) y-- z*=x (5) 8ㄩ5ㄩ2 (6) j++ i%j==0 j>=i(或j==i)(7)sum<k sum==k j-2 (8) s=0 p=1 j<=i3.改错题(1) 第一处改正:For改为for第二处改正:for(k=1;k<=4;k++)或for(k=0;k<4;k++)第三处改正:ave=sum/4改为ave=sum/4.0(2) 第一处改正:i++改为j++第二处改正:m=100*i+10*j+k(3) 第一处改正:temp=1第二处改正:temp >=eps第三处改正:r*2(4) 第一处改正:&n第二处改正:== ==(5) 第一处改正:t=m/10改为t=m%10第二处改正:t=0改为t==0第三处改正:m=m%10改为m=/104.编程题(1) 分式累加和。
#include <math.h>main() {int s;float n,t,sum;t=1; sum=0; n=1; s=1.0;while(n<=100){sum=sum+t;n=n+1;s=-s;t=s/n;}printf("sum=%10.6f\n",sum);}(2)1~10的阶乘#include <stdio.h>main(){int i;long int n=1;for(i=1;i<=10;i++){n=n*i;printf(i%5==0?"%2d!=%-10ld\n":"%2d!=%-10ld",i,n);}}(3)由*组成的等腰三角形#include <stdio.h>main(){int n,i,j;scanf("%d",&n);for(i=1;i<=n;i++){ for(j=1;j<=n+i-1;j++)if(j<=n-i) printf(" ");else printf("*");printf("\n");}}(4)完数main(){int m,s,i;for(m=2;m<1000;m++){ s=0;for(i=1;i<m;i++)if((m%i)==0) s=s+i;if(s==m){ printf("%d its factors are ",m);for(i=1;i<m;i++)if(m%i==0) printf("%d,",i);printf("\n");}}}(5)打靶#include <stdio.h>main(){int h10,h7,h5;for(h10=0; h10<=8; h10++)for(h7=0; h7<=8; h7++)for(h5=0; h5<=8; h5++)if(h10+h7+h5==8 &&h10*10+h7*7+h5*5==53)printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);}(6) 猴子吃桃子问题。