java核心编程技术实验指导教程第三版答案(java核心技术第十版下
零基础学习Java的书籍有哪些,请推荐
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类
对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
1、《Java编程思想》
在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
2、《Agile Java》中文版
这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
二、Java编程进阶类
打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
1、《重构 改善既有代码的设计》
这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对你产生影响是潜移默化的。
2、《测试驱动开发 by Example》
本书最大特点是很薄,看起来没有什么负担。你可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。
还有一些比较基础的入门书籍推荐给你
《Head First java开发》java开发入门书籍
《Head First java开发》是本完整的面向对象(object-oriented,OO)程序设计和java开发的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。但如果你真地想要好好地学习java开发,你会需要《Head First java开发》。这本书可是Amazon编辑推荐的十大好书之一!强烈推荐学习此书,非常适合初学者入门。
《java开发从入门到精通》
《java开发从入门到精通》这本书主要针对java开发基础,对于没有学过java开发的人才说,是一个不错的选择。通过这本书,大家可以从零开始,慢慢来学习,而且实操很多,不会让你看到最后出现只会理论的情况。
《Thinking in java开发》(中文名:《java开发编程思想》)
《java开发编程思想》可以说是最经典的java开发着作,是所有java开发程序员必备教科书。这本书不管是正在学习还是已经工作许多年的程序员,都可以从这本书中得到你想要的东西。这本书具有教材和工具书的作用,就像一本字典,想知道什么都可以从中查询。虽然这本书很好,但并不建议初学者学习,对于初学者难度较大。
《疯狂java开发讲义》
《疯狂的讲义》这本书比较适合自学者,内容比较项目化,实操方法很多,如果你想进行java开发的深入学习,不妨看看这本书。
《java开发核心技术》
这本书分为两个部分,第一个部分讲的是基础知识,第二个部分讲的是高级特性。由于内容非常有层次,所以非常适合自学的同学学习。
《java开发开发实战经典》
这本书比较适合自学者学习,里面有很多小案例,可以边学边练,巩固知识。
PS:温馨提示,光看不练假把式,跟着视频教程练项目也是必不可少的!相关教程指路B站尚学堂官方号!都是免费滴!
请为C++新手推荐几本教程好书吧。我不怕学着难,只要经典有价值的
你自己挑几本看吧,
入门推荐看
C Primer Plus中文版(第五版)
C程序设计(第三版)
学好C之后再去学c++,建议看
白话c++
你先把这些书复制下来,这些书都是经典中的经典了。都是非常好的。
C程序设计语言(第2版·新版)---C语言“倚天屠龙双剑”---Brian W.Kernighan“C语言之父”
C Primer Plus中文版(第五版)--------C语言“倚天屠龙双剑”---Stephen Prata
C程序设计(第三版)---------------------------谭浩强
C语言大全(第四版)---------------------------HERBERT SCHILDT
C语言接口与实现:创建可重用软件的技术-------------DAVID R.HANSON
C语言参考手册(原书第5版)--------------------------Samuel P.Harbison
C程序设计教程---------------------------------H.M.Deitel/P.J.Deitel
C陷阱与缺陷-----------------------------------Andrew Koenig
The C Programming Language by Kernighan Ritchie Complement : The Development of the C Language
C Traps and Pitfalls by Andrew Koenig
Expert C Programming by Peter van der Linden
The Standard C Library by P J Plauger
Books on Linux C :
Linux Application Development by Michael K. Johnson Erik W. Troan
Linux device drivers by Alessandro Rubini
Developing Linux applications with GTK+ and GDK (ISBN 0-7357-0021-4, New Riders)
C/C++入门基础
Windows C 程序设计入门与提高
单片机C语言入门
C++ 入门基础教程
C语言常用算法源代码
C常用算法程序集
C++ 语言命令详解
Borland C++使用手册
C语言编程基础
C语言编程要点
C语言数值算法程序大全(第二版)
Borland C++4.0安装与使用
C++ Builder 5.0经典入门
非C程序员C++入门自学教程
C/C++指令字典
C语言常用函数手册
C++标准程序库自修教程与参考手册
C语言图形函数介绍
C语言数值计算初步
C++ 设计新思维
C++Builder基础进阶
C语言初学者入门讲座
C++完全参考手册
C++Builder英文帮助
《C++Builder学习大全》中文版
C++ Builder编程研究文档
C游戏编程从入门到精通
C++程序调试实用手册
Borland C++4.0从入门到精通
实用教程:
经典C语言教程
C++捷径教程(第三版)
Borland C++实用教材
C++程序设计语言题解
C++上机实践指导教程(第三版)
创世纪的C++ Builder教程
Borland C++程序设计教程
C++ BUILDER 实用培训教程
C++程序设计培训教程
C++编程金典(第三版)
C高级实用程序设计
嵌入式系统中C的开发
C++Builder自学培训教程
C++大学教程(第二版)
C++傻瓜教程
精通C++ Builder 5程序设计高级教程
C++程序设计语言经典题与实验指导
C++程序设计教程实验书
C++大学基础教程
C++面向对象到窗口程序设计
C语言核心编程
嵌入式系统的C程序设计
经典C教程
实用C语言详解
Borland C++深入编程
Borland C++4.0程序设计
C++ 面向对象多线程编程
编程实例
C++实例教程
C++30天极限教程
C++Builder程序设计范例
C语言程序基础及应用实例
C语言趣味程序百例精解
C++编程实例详解
C++ Builder网络开发实例
C++实践之路
21天学通C语言(第六版)
C语言学习300例
C++Builder6.0界面实例开发经典编程900例(C语言)
一个月挑战C++
Borland C++应用篇
自学C++半月通
边用边学C语言
C语言完美演绎
设计60系列C++游戏
C语言程序设计题典
C++物件模型
C++ Builder 5编程实例与技巧
C语言程序设计及应用实例
Borland C++ 高级开发实践
Borland C++ Builder6开发人员
经验技巧:C++编码规范与指导
C++核心编程技术
C++程序设计陷阱
C数值算法程序大全
C和C++代码精粹
C++编程-数据结构与程序设计方法
C++语言教程大全
C++Builder核心program
C高级编程技术
C语言常见问题集
C++ Builder 3 核心编程技术
Borland C++程序设计技术
用C实现面向对象
C专家编程
C++数据结构
C语言高级实用编程技巧
C程序设计与应用
CC++深层探索
C++ 和面向对象的数值计算
用C++开发Web商用程序
C++代码设计与重用
C++程序员JAVA编程
Borland C++宝典
C语言最新编程技巧200例
C++语言学习经验集合
C语言编程宝典大全
C++ Builder高级开发人员技术指南
C++ 内存管理算法和实现
Turboc库函数源程序与参考大全
C++ Builder 5 开发人员指南
C++程序设计实验指导(钱能)
用C语言设计屏幕界面技术
C和C++代码锦囊
C语言学习和精华文摘
标准C++宝典
C_C++深层探索
Borland C++库函数详解
高质量C、C++编程指南
C++和面向对象的数值计算
C++、
C++程序设计语言(特别版)---c++八大金刚----Bjarne Stroustrup“C++之父”
C++ Primer (第3版)中文版----c++八大金刚---Stanley B.Lippman
C++ Primer (第4版)中文版----c++八大金刚---Stanley B.Lippman
C++标准程序库—自修教程与参考手册--c++八大金刚--Nicolai M.Josuttis
C++语言的设计和演化-----c++八大金刚----Bjarne Stroustrup“C++之父”
深度探索C++对象模型---c++八大金刚----Stanley B.Lippman
Essential C++中文版---c++八大金刚---Stanley B.Lippman
Effective C++中文版 2nd Edition-----c++八大金刚------Scott Meyers
More Effective C++中文版----c++八大金刚------Scott Meyers
C++编程思想(第2版) 第1卷:标准C++导引--------Bruce Eckel
C++编程思想(第2版)第2卷:实用编程技术 --------Bruce Eckel
C++程序设计--------------------------谭浩强
C++ 程序设计教程(第2版)--------------钱能
C++ Primer Plus(第五版)中文版---Stephen Prata
广博如四库全书The c++ programming language、c++ Primer
深奥如山重水复Inside the c++ object model
程序库大全The c++ standard libray
工程经验之积累Effective c++、More Effective c++、Exceptional c++
c++八大金刚:
1、Essentital c++---lippman---C++之父,旁枝暂略,主攻核心,轻薄短小,初学者
2、The c++ programming language----C++之父,技术权威,用词深峻,思想深远,c++百科全书代表,圣经。
3、c++ Primer----lippman---纵横书市十数年,c++最佳教本,c++百科全书代表。
4、Inside the c++ object model-----lippman----揭示c++底层,非常好,非常难。
5、Effective c++-----通过50个编程实例,展示专家经验,行文有趣,深处浅出。
6、More Effective c++----通过35个编程实例,展示专家经验,行文有趣,深处浅出。
7、The c++ standard libray---c++标准库的百科全书。
8、设计模式:可复用面向对象软件的基础
应该怎样学习JAVA?顺序是什么?
不知道Java 学习顺序的话,我提供你一条学习线路图!
按照视频学习的过程中,学习方法也是很重要的!一定要记得勤记笔记,整理程思维导图,方便后续复习方便。
第一部分:JavaSE:Java语言最基本的一套库
学习JavaEE或JavaME之前,JavaSE是必学的。
* Java开发环境搭建
* Java基础语法
* 面向对象
* 数组
* 异常
* 集合
* 线程
* IO流
* 反射机制
* 注解Annotation
* 网络编程
第二部分:数据库 【MySQL + JDBC】
* 只要学习编程,数据库是一定要学习的,是一门公共的学科。
* java、C、python、C#等程序员都需要学习数据库。
* 数据库产品很多: MySQL、Oracle、SqlServer、DB2......
* 我们动力节点数据库课程包括:MySQL + Oracle
* Oracle:银行、政府使用oracle的较多。
* MySQL:互联网公司、一般企业使用MySQL较多。
* Oracle我们是提供视频的。课堂上不讲。
* 我们课堂上讲MySQL。
* Java语言链接数据库:JDBC
第三部分:WEB前端
* 系统结构:B/S【Browser/Server】 C/S【Client/Server】
* WEB是网站的意思。WEB前端是:网站当中的页面。
* WEB前端程序是运行在浏览器当中的。
* HTML5 + CSS3 + JavaScript(JS)
* WEB前端也有很多框架:
- jQuery
- Bootstrap
- Vue
- NodeJS
- AugularJS
- RectJS
- LayUI
- EasyUI
.....
第四部分:JavaWEB
* Servlet
* JSP
* AJAX(是JavaScript的一部分语法,专门做页面局部刷新)
第五部分:JavaWEB项目
* 做一个B/S结构的项目,将WEB前端和JavaWEB内容做一个整合练习。
* 其实到这里为止,所有的系统都可以做了。但是用的技术很Low。没有用框架。
java语言程序设计(第三版)清华大学出版社答案
1.5请参照本章例题,编写一个C程序,输出以下信息:
**************************
Very Good!
**************************
解:
mian()
{printf(“**************************”);
printf(“\n”);
printf(“Very Good!\n”);
printf(“\n”);
printf(“**************************”);
}
1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。
解:
mian()
{int a,b,c,max;
printf(“请输入三个数a,b,c:\n”);
scanf(“%d,%d,%d”,a,b,c);
max=a;
if(maxb)
max=b;
if(maxc)
max=c;
printf(“最大数为:“%d”,max);
}
第三章
3.6写出以下程序运行的结果。
main()
{char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c %c”,c4,c5);
}
解:
aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc
AㄩN
3.7 要将"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’,并输出。
解:
#include stdio.h
main()
{ char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}
运行结果:
密码是Glmre
3.9求下面算术表达式的值。
(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)2.5
(2)3.5
3.10写出程序运行的结果。
main()
{int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
解:
9,11,9,10
3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。
(1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a
(5) a%=(n%=2),n的值等于5
(6)a+=a-=a*=a
解:
(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0
第四章
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
a=_3_ _b=_4_ _c=_5
x=1.200000,y=2.400000,z=-3.600000
x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40
c1=ˊaˊ_or_97(ASCII)
c2=ˊbˊ_or_98(ASCII)
main()
{int a=3,b=4,c=5;
long int u=51274,n=128765;
float x=1.2,y=2.4,z=3.6;
char c1=’a’,c2=’b’;
printf("a=%2d b=%2d c=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6ld n=%9ld\n",u,n);
printf("%s %s %d%s\n","c1=’a’","or",c1,"(ASCII)");
printf("%s %s %d%s\n","c2=’a’","or",c2,"(ASCII)");
}
4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?
main()
{
int a,b;float x,y;char c1c2;
scanf("a=%d_b=%d",a,b);
scanf("_x=%f_y=%e",x,y);
scanf("_c1=%c_c2=%c",c1,c2);
}
a=3_b=7
_x=8.5_y=71.82
_c1=A_c2=a
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
main()
{float r,h,C1,Sa,Sb,Va,Vb;
scanf("%f,%f",r,h);
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf("C1=%.2f\n",C1);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
4.9输入一个华氏温度,要求输出摄氏温度。公式为
c=5(F-32)/9
输出要求有文字说明,取位2小数。
main()
{float F,c;
scanf("%f",F);
c=5*(F-32)/9;
printf("c=%.2f",c);
}
4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:
char c1,c2;
与
int c1,c2;
是否无条件的等价?
#include"stdio.h"
main()
{char c1,c2;
c1=getchar();c2=getchar();
putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’);
}
#include"stdio.h"
main()
{char c1,c2;
c1=getchar();c2=getchar();
printf("c1=%d c2=%d\n",c1,c2);
printf("c1=%c c2=%c\n",c1,c2);
}
第五章
5.1 什么是算术运算?什么是关系运算?什么是逻辑运算?
解:略。
5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如35的值为“真”,系统给出35的值为1。
5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。
(1) a+bcb==c
(2) a||b+cb-c
(3) !(ab)!c||1
(4) !(x=a)(y=b)0
(5) !(a+b)+c-1b+c/2
解:
(1) 0
(2) 1
(3) 1
(4) 0
(5) 1
5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。
解:
方法一
#include stdio.h
main()
{ int a,b,c;
printf("请输入3个整数:");
scanf("%d,%d,%d",a,b,c);
if(ab)
if(bc) printf("max=%d\n",c);
else printf("max=%d\n",b);
else if(ac) printf("max=%d\n",c);
else printf("max=%d\n",a);
}
方法二:使用条件表达式,可以使程序更加简明、清晰。
程序如下:
#include stdio.h
main()
{ int a,b,c,temp,max;
printf("请输入3个整数:");
scanf("%d,%d,%d",a,b,c);
temp=(ab)?a:b; /* 将a和b中的大者存人temp中 */
max=(tempc)?temp:c; /* 将a和b中的大者与c比较,取最大者*/
printf("3个整数的最大数是%d\n”,max);
}
5.5 有一函数:
写一程序,输入x值,输出y值。
解:
#include stdio.h
main()
{int x,y;
printf("输入x:");
scanf("%d",x);
if(x1) /* x1 */
{ y=x;
printf("x=%3d, y=x=%d\n",x,y);
}
else if (x10) /* 1≤x-10 */
{ y=2*x-1;
printf("x=%3d, y=2*x-1=%d\n",x,y);
}
else /* x≥10 */
{ y=3*x-11;
printf("x=%3d, y=3*x-11=%d\n",x,y);
}
}
5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。
解:
程序如下:
#include stdio.h
main()
{ float score;
char grade;
printf("请输入学生成绩:");
scanf("%f",score);
while(score100||(score0)
{ printf("\n输入有误,请重新输入:");
scanf("%f",score);
}
switch((int)(score/10))
{ case 10:
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’;
}
printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);
}
说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。
5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。
解:
#include stdio.h
main()
{ long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;
/*分别代表个位、十位、百位、千位、万位和位数*/
printf("请输入一个整数(0~99999):");
scanf("%ld",num);
if (num9999) place=5;
else if(num999) place=4;
else if(num99) place=3;
else if(num9) place=2;
else place=1;
printf("place =%d\n", place);
ten_thousand=num/10000;
thousand=num/1000%10;
hundred=num/100%10;
ten=num%100/10;
indiv=num%10;
switch(place)
{ case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序数字为;");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case 3: printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case 2: printf("%d,%d",ten,indiv);
printf("\n反序数字为:");
printf("%d%d\n",indiv,ten);
break;
case 1: printf("%d",indiv);
printf("\n反序数字为:");
printf("%d\n",indiv);
break;
}
}
5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;200000I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按1.5%提成;I1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。
解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。
(1) 用if语句编程序。
#include stdio.h
main()
{ long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1; /*利润为10万元时的奖金*/
bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/
bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/
bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/
bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/
printf("请输入利润i:");
scanf("%ld",i);
if(i=100000)
bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/
else if(i=200000)
bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/
else if(i=400000)
bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/
else if(i=600000)
bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/
else if(i=1000000)
bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/
else
bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/
printf(”奖金是%10.2f\n",bonus);
}
此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。
(2) 用switch语句编程序。
输入利润i,确定相应的提成等级branch
根据branch确定奖金值
0 奖金=i*0.1
1 奖金=bon1+(i-105)*0.075
2 奖金=bon2+(i-2*105)*0.05
3
4 奖金=bon4+(i-4*105)*0.03
5
6 奖金=bon6+(i-6*105)*0.015
7
8
9
10 奖金=bon10+(i-106)*0.01
输出奖金
#include stdio.h
main()
{ long i;
float bonus, bon1, bon2, bon4, bon6, bon10;
int c;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:");
scanf("%ld",i);
c=i/100000;
if(c10) c=10;
switch(c)
{ case 0: bonus=1*0.1;break;
case 1: bonus=bon1+(i-100000)*0.075;break;
case 2 :
case 3: bonus=bon2+(i-200000)*0.05; break;
case 4:
case 5: bonus=bon4+(i-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9: bonus=bon6+(i-600000)*0.015;break;
case 10: bonus=bon10+(i-1000000)*0.01;
}
printf("奖金是%10.2f",bonus);
}
5.9 输入4个整数,要求按由大到小的顺序输出。
解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。
#include stdio.h
main()
{ int t,a,b,c,d;
printf("请输入4个整数:");
scanf("%d,%d,%d,%d",a,b,c,d);
printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(ab) {t=a; a=b; b=t;}
if(ac) {t=a; a=c; c=t;}
if(ad) {t=a; a=d; d=t;}
if(bc) {t=a; b=c; c=t;}
if(bd) {t=b; b=d; d=t;}
if(cd) {t=c; c=d; d=t;}
printf("排序结果如下:\n");
printf("%d, %d, %d, %d\n",a,b,c,d);
}
5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
程序如下:
#include stdio.h
main()
{ int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
scanf("%f,%f",x,y);
d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心点的距离*/
d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);
d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);
d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);
if(d11d21d31d41) h=0; /*判断该点是否在塔外*/
printf("该点高度为%d\n",h);
}
第六章
第六章 循环控制
6.1输入两个正整数m和n,求其最大公约数和最小公倍数。
main()
{long m,n,i=1,j,s;
scanf("%ld,%ld",m,n);
for(;i=mi=n;i++)
{if(m%i==0n%i==0) s=i;}
if(m=n) j=m;
else j=n;
for(;!(j%m==0j%n==0);j++);
printf("s=%ld,j=%ld\n",s,j);
}
6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include"stdio.h"
main()
{char c;int i=0,j=0,k=0,l=0;
while((c=getchar())!=’\n’)
{if(c=65c=90||c=97c=122) i++;
else if(c=48c=57) j++;
else if(c==32) k++;
else l++;}
printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
}
6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。
#include"math.h"
main()
{int n,sum=0,i=1,s=2;
scanf("%d",n);
while(i=n)
{sum=sum+s;s=s+2*pow(10,i);
i++;}
printf("sum=%d\n",sum);
}
6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!)
main()
{int n,i=1;long sum=0,s=1;
scanf("%d",n);
while(i=n) {s=s*i;sum=sum+s;i++;}
printf("sum=%ld\n",sum);
}
6.5 求
main()
{double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;
for(;i=100;i++) s1=s1+i;
for(;j=50;j++) s2=s2+j*j;
for(;k=10;k++) s3=s3+1/k;
sum=s1+s2+s3;
printf("sum=%f\n",sum);
}
6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
#include"math.h"
main()
{int x=100,a,b,c;
while(x=100x1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;}
}
6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1、2、3
main()
{int m,i,j,s;
for(m=6;m10000;m++)
{s=1;
for(i=2;im;i++)
if(m%i==0) s=s+i;
if(m-s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}
或
main()
{int m,i,j,s;
for(m=6;m1000;m++)
{s=m-1;
for(i=2;im;i++)
if(m%i==0) s=s-i;
if(s==0)
{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)
printf("%d ",j);printf("\n");}
}
}
6.8有一分数序列:
求出这个数列的前20项之和。
main()
{int i=1,n;double t,x=1,y=2,s,sum=0;
scanf("%ld",n);
while(i=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}
printf("%f\n",sum);
}
6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?
main()
{int i,n;double h=100,s=100;
scanf("%d",n);
for(i=1;i=n;i++)
{h*=0.5;if(i==1) continue;s=2*h+s;}
printf("h=%f,s=%f\n",h,s);
}
6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
main()
{int i=1,sum=0;
for(;i=10;sum=2*sum+1,i++);
printf("sum=%d\n",sum);
}
6.11用迭代法求 。求平方根的迭代公式为:
要求前后两次求出的得差的绝对值少于0.00001。
#include"math.h"
main()
{float x0,x1,a;
scanf("%f",a);
x1=a/2;
do
{x0=x1;x1=(x0+a/x0)/2;}
while(fabs(x0-x1)=0.00001);
printf("%.3f\n",x1);
}
6.12 用牛顿迭代法求方程在1.5附近的根。
main()
{double x,y;x=1.5;
do{y=2*x*x*x-4*x*x+3*x-6;
x=x-y/(6*x*x-8*x+3);}
while(y!=0);
printf("x=%.3f\n",x);
}
6.13用二分法求方程在(-10,10)之间的根
main()
{double x1,x2,y1,y2;x1=-10;x2=10;
do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;
x1=x1-y1/(6*x1*x1-8*x1+3);}
while(y1!=0);
do
{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;
x2=x2-y2/(6*x2*x2-8*x2+3);}
while(y2!=0);
printf("x1=%.3f,x2=%.3f\n",x1,x2);
}
6.14打印以下图案
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
求c语言程序设计第三版和c语言程序设计实验与习题指导答案
c语言程序设计第三版指导答案
?
附录F??课后题参考答案?
习??题??1?
1.1??填空题?
1.函数?
2.主函数main();主函数main()?3.主函数main()?4.函数首部;函数体?5.{;}?
6.顺序结构;选择结构;循环结构?7..c;.obj;.exe?
1.2??思考题?
1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构?
2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。?
3.略?4.略?5.略?1.3??编程题?1.答:?
#include?"stdio.h"?main()?
{??float?a=10,?b=20,?h=5,?s;????s=(a+b)*h/2;?
???printf("s=%f?"?,?s?);?}?
2.答:?
#include?"stdio.h"?
main()?
{??printf("******************************");????printf("*????????hello??world?????????*");????printf("******************************");?}
习??题??2?
2.1??单选题?
DBDCA??DCABB??CA?
2.2??填空题?
1.2.000000??
?
2.1;0.500000?
3.9;2?4.6?5.100;d?6.(1)20?????
(2)0???
?
?(3)60?7.(1)10;6;4?????
(2)6;9;15??
?(3)3;60;83?
8.55或?'7'?
9.x=4;y=6;z=3;m=463?
2.3??改错题(略)?
习??题??3?
3.1??单选题?
BDABC??ADCAC??BBA?
3.2??填空题?
1.3?2.261?3.10?
4.2,?1;互换a,b的值?5.6.6?6.003?7.7?
8.5.0,4,c=3Enter?
9.i=10,j=20Enter?
10.???(1)65???(2)65,A???(3)3.14,123.46?
??(4)3.141600e+000,1.234560e+002???(5)8765.432100???(6)8.765432e+003
11.a=2b=5x=8.8y=76.34c1=65c2=97?12.%d/%d;%d/%d=%.2f\n?
3.3??改错题(略)?3.4??编程题?
1.答:?
#include?"stdio.h"?main()?{?
??int?x,y;?
??scanf("%d%d",x,y);???printf("\t\tx\ty\n");?
??printf("十进制数\t%d\t%d\n",x,y);???printf("八进制数\t%o\t%o\n",x,y);???printf("十六进制数\t%X\t%x\n",x,y);?}?
2.答:?
#include?"stdio.h"?main()?{?
??char?ch;?
??printf("请输入一个大写英文字母");???scanf("%c",ch);?
??printf("大写英文字母是%c\n",ch);???printf("它的前导字符是%c\n",ch-1);???printf("它的后续字符是%c\n",ch+1);?}?
3.答:?
#include?"stdio.h"???main()???{?
??int?x,a,b,c,y;?
??printf("请输入一个三位整数\n");???scanf("%d",x);???a=x/100;?
??b=(x-a*100)/10;???c=x%10;?
??y=c*100+b*10+a;?
??printf("反向输出该整数:%d\n",y);???}?}?
4.答:?
#include?"stdio.h"?main()?
{??int?hour;?
??double?salary,?salaryday;?
??scanf("%d,%lf",?hour,?salaryday?);?
??salary=hour*salaryday-?hour*salaryday*0.1;?
printf("%8.2lf\n",?salary);?}?
5.答:?
#include?"stdio.h"?main()?{?
??int?a,b,c,t;?
??printf("请输入三个整数\n");???scanf("%d%d%d",a,b,c);?
??printf("交换前a=%d,b=%d,c=%d\n",a,b,c);???t=a;a=c;c=b;b=t;?
??printf("交换后a=%d,b=%d,c=%d\n",a,b,c);?}?
习??题??4?
4.1??单选题?
BADDD??ACBBB??BA?
4.2??填空题?
1.1?
2.(1)a0?||?b0?????
?
?
?
?
?(2)x0??x=10???(3)a==1.5??b==1.5??c==1.5????
(4)pa?||?pb?||?pc??
3.(1)0????(2)1????(3)1????(4)0????(5)1?
4.c=1?5.-4?6.1?7.5,?0,?3?8.5?9.123?
10.(?cvb=?='y'||cvb=?='Y')(work=3||college=='y'||?college=='Y')age=35?
4.3??改错题(略)?4.4??编程题?
1.答?
#include?"stdio.h"?
#include?"math.h"?main()?{?
??double?a,b,c,p,area;?
??scanf("%lf%lf%lf",a,b,c);?
??printf("三角形的三边为:%.llf,%.1lf,%.1lf\n",a,b,c);??if?(a+bca+cbb+ca)??{p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));?
??printf("三角形的面积为%.2lf\n",area);??}??else?
??printf("不能构成三角形\n");?}?
2.答:?
#include?"stdio.h"?main()?
{?int?x,y;?
??scanf("%d,%d",x,y);???if(x*x+y*y1000)??
?????printf("%d\n",(x*x+y*y)/100);???else?
?????printf("%d\n",x+y);?}?
3.答:?
#include?"stdio.h"?#include?"math.h"?main()?
{?double?x,y;?
??scanf("%lf",x);???if(x-2)???????y=x*x-sin(x);???else?if?(x=2)?????y=pow(2,x)+x;???else?????y=sqrt(x*x+x+1);?
??printf("x=%.2lf?y=%.2lf\n",x,y);?}?
4.答:?
#include?"stdio.h"?main(?)?
{?long?ge,shi,qian,wan,x;????scanf("%ld",x);????wan=x/10000;?
???qian=x%10000/1000;????shi=x%100/10;?
???ge=x%10;?
???if?(ge==wanshi==qian)???????/*个位等于万位并且十位等于千位*/?????printf("this?number?is?a?huiwen\n");????else??????
?printf("this?number?is?not?a?huiwen\n");?
}?
5.答:?
#include?"stdio.h"??main()?
{??float?p,w,s,d,f;?
scanf("%f,%,%f",p,s,w);????if?(s3000)?d=0.15????else?if(?s=2000)?d=0.1;????else?if(s=1000)?d=0.08;????else?if(s=500)?d=0.05;????else?if(s=250)?d=0.02;????else??d=0????f=p*w*s*(1-d);????printf("%f",f);?}?
6.答:?
#include?"stdio.h"?main()?
{??int?year,money;????char?x;?
???printf("是否是本公司产品(y/n):");????scanf("%c",x);?
???if(x=='y'||x=='Y')?
??????{printf("产品使用的年限:");???????scanf("%d",year);?
?????if(year=1)?money=0;?
????else?if(year8)?money=50;?????else?money=100;?
??
??printf("产品保修额是:%d\n",money);?
???}?
???else??
???{??money=200;?
?????printf("不是本公司产品,产品保修额是:%d\n",money);????}?}?
7.答:?
#include?"stdio.h"?main()?
{??int?money,num1,num2;?
???printf("请输入取款额(≤2000):");????scanf("%d",money);?
???if(money2000)?printf("请输入取款额数≤2000!\n");????else??????if(money%50==0)??????{?num1=money/100;????????num2=(money-num1*100)/50;?????????printf("需支付100元:%d张\n",num1);????????printf("需支付50元:%d张\n",num2);???????}????else???????printf("输入钱数必须是50的倍数!\n");?}
习??题??5?
5.1??单选题?
CDABA??ABDDB??DBCB?
5.2??填空题?
1.2?0?2.333??
3.(1)i10?或?i=9????(2)j%3!=0?
4.(1)flag*(float)k/(k+1)?或1.0*flag*k/(k+1)???(2)flag=-flag?5.(1)max=x???
?
??
(2)x!=-1????(3)scanf("%d",?x)?
6.(1)x=9或x10????
(2)y=9-x?
5.3??改错题(略)?5.4??编程题?
1.答:?
(1)for循环,其他略?
#include?"stdio.h"?
main()?
{?int?i,s=0;?
??for(i=1;i=100;i++)???s+=i*i;?
??printf("%d\n",s);?}?
(2)for循环,其他略?
#include?"stdio.h"?main()?
{?int?i=1,p=1;???double?s=1;???do???{?
??????s+=1.0/p;???????p*=++i;?
??}while(1.0/p1e-6);???printf("%lf",s);?}?
2.答:?
#include?"stdio.h"?main()?
{??int?m,n,t,a,b;?
???scanf("%d,%d"?,m,n)?????if?(mn)
{?t=m?m=n?n=t?}????a=m;????b=n;????t=m%n?????while(t)?
???{?m=n??n=t?t=m%n;}????printf("%d",n);?}?
3.答:?
#include?"stdio.h"?main()?
{??int?x,y,s=1;?
???scanf("%d,%d",x,y)?????for(?y0?y--)s*=x??
???printf("%d,%d,%d\n?",s%10,s/10%10,s/100%10);?}?
4.答:?
#include?"stdio.h"?main()?
{?int?x,y,z;?
??for(?x=1??x20?x++)???for(?y=1?y33?y++)???{?z=100-x-y??
????????if?((z%3)==0?(5*x+3*y+z/3)==100)?????printf("x=%d,y=%d,z=%d\n",x,y,z)????}?}?
5.答:?(a)?
#include?"stdio.h"?main()?
{?int?j,k??
???for(?j=1?j=4?j++)?
??{??for(k=1;k=4-j;k++)printf("?");????printf("****")???????????printf("\n")????}?}?
(b)?
#include?"stdio.h"?main()?
{??int?j,k??
???for(?j=1?j=4?j++)?
??{for(k=1;k=4-j;k++)printf("?");??????for(k=1?k=2*j-1?k++)??????printf("*")??????????printf("\n")????}?}?
6.答:?
程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。?
#include?stdio.h?main()?{???int?i,j,k,n;???printf("water?flower'number?is:");???for(n=100;n1000;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");?}?
7.答:?
#include?stdio.h?main()?{???int?x;???for(x=1000;x=3;x--)???if(x%3==1x%5==2x%7==3)???{?
??????printf("该校的学生人数是:%d人\n",x);???????break;???}?}?
8.答:?
#include?stdio.h?main()?{????int?x=12,i=1;????while(1)?
???{??if((x+20+i)==2*(x+i))?break;????????i++;????}????printf("小明母亲在%d年后比小明的年龄大一倍\n",i);????printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁\n",x+i,x+20+i);?}?
习??题??6?
6.1??单选题?
DBCCB???BDC
C语言程序设计教程(第3版)?
??278?
6.2??填空题?
1.c?2.60?3.1000??10?4.16??
6.3??编程题?
1.答:?
#include?"stdio.h"?#include?"math.h"?
#define??F(a)??a*a+?sqrt(3*a*a+2*a+1)?main()?
{???float??x,?f;?
????scanf("%f",?x?);?
????f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x)??????printf("%f\n",?f);?}?
习??题??7?
7.1??单选题?
BCADA??CCCDA??BCBDB?
7.2??填空题?
1.(1)2?3?4?5???(2)10010????(3)QuickC??
?
(4)10000????????01000????????00100????????00010????????00001???(5)Language?
(6)Language?Programming?2.(1)j+=2???(2)a[i]a[j]?3.(1)i=1????(2)x[i-1]?
7.3??改错题(略)?7.4??编程题?
1.答:?
#define?N?10??
#include?"stdio.h"?main()??
{?int?a[N]={1,2,3,4,5,6,7,8,9,10,osum=0,?qsum=0,j;???for(j=0;j10;j++)?
??if(?j%2)?qsum+=a[j];
else?osum+=a[j];?
?printf("osum=%d,qsum=%d\n",?osum,qsum);?}?
2.答:?
#define?N?10?
#include?"stdio.h"??main()?
{?int?a[N]={10,20,30,40,50,60,70,80,90},?j,?k,?x;???scanf("%d",x);???for(j=0;jN;j++)?
????????if?(xa[j])?break;?if(j==N)?a[N-1]=x;??else?
{for(k=N-1;?kj;?k--)??????a[k]=a[k-1];?a[j]=x;}?
??for(j=0;jN;j++)?
???????printf("%d???",a[j]);?}?
3.答:?
#define?M?3?
#include?"stdio.h"?main()?
{??int?a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;????for(?j=0;jM;j++)?
????????for(k=0;kM;k++)???????????if?(a[j][k]!=a[k][j])?{?flag=0;?break;}????if?(flag)?printf("ok");????else?printf("NO");?}?
4.答:?
#include?"stdio.h"?#include?"string.h"?main()?
{??char?c1[10],c2[10],j;????gets(c1);?gets(c2);?
???for(j=0;?(c1[j]==c2[j])??c1[j]??c2[j];?j++);????if?(c1[j]c2[j])?printf("%d\n",1);????if?(c1[j]c2[j])?printf("%d\n",-1);????if?(c1[j]==c2[j])?printf("%d\n",0);?}?
5.答:?
#include?"stdio.h"?#include?"string.h"?#define?M?3?#define?N?80?main()?
{??char?a[M][N],j,k,n[5]={0};????for(j=0;jM;j++)?????gets(a[j]);
for(j=0;jM;j++)?
??for(k=0;a[j][k];k++)?
????if(?a[j][k]='A'??a[j][k]='Z')?n[0]++;?
????else?if?(a[j][k]='a'??a[j][k]='z')?n[1]++;?????else?if?(a[j][k]='0'??a[j][k]='9')?n[2]++;?????else?if?(a[j][k]=='?'?)?n[3]++;?????else?????n[4]++;?
????for(j=0;j5;j++)??????printf("%4d",?n[j]);?}?
习??题??8?
8.1??单选题?
DBDAC??BACCC?
8.2??填空题?
1.(1)2,?1?????(2)10#30#???(3)FOUR,?P????(4)60?
2.(1)49??
??(2)2??????
(3)2????
?
??(4)?????
?
(5)?????
8.3??改错题(略)?8.4??编程题?
1.答:?
#include?"stdio.h"?
main()?
{??int?n1,n2,n3,t;????int?*p1,*p2,*p3;?
???printf("please?input?3?number:n1,n2,n3:");????scanf("%d,%d,%d",n1,n2,n3);????p1=n1;?
???p2=n2;????p3=n3;?
???if(*p1*?p2)?{?t=*p1;*p1=*p2;*p2=t;}?
???if(*p1*p3)?{?t=*p1;*p1=*p3;*p3=t;}????if(*p2*p3)?{?t=*p2;*p2=*p3;*p3=t;}?
???printf("the?sorted?numbers?are:%d,%d,%d\n",n1,n2,n3);?}?
2.答:?
#include?"stdio.h"?#define?N?3?main()?
{??int?a[N],*p=a;????for(;p-aN;?p++)????scanf("%d",p);????p=a+N-1;?
???for(;p-a=0;?p--)??????printf("%d?",*p);?}?
3.答:?
#include?"stdio.h"?main()?
{??int?a[10];?
???int?j,minl=0,maxl=0;????for(j=0;j10;j++)?
???????scanf("%d",?a+j);????for(j=0;j10;j++)?
?????{?if(a[maxl]*(a+j))??maxl=j;??????if(a[minl]*(a+j))??minl=j;????}?
???j=a[0];?a[0]=a[minl];a[minl]=j;????j=a[9];a[9]=a[maxl];a[maxl]=j;????for(j=0;j10;j++)????printf("%d?",?*(a+j));?}?
4.答:?
????输入阵列如下:???1???2???3???4??????????????????????5???6???7???8??????????????????????9???10??11??12?????输出阵列如下:?
?????????????????????12??11??10??9??????????????????????8???7???6???5??????????????????????4???3???2???1?
#define?M?3?
#define?N?4?
#include?"stdio.h"?main()?
{??int?a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=a[0][0],t;????for(k=0,j=M*N-1;kj;k++,j--)?
???{??t=*(p+k);?*(p+k)=*(p+j);?*(p+j)=t;}????for?(k=0?kM?k++)????{??for(j=0?jN?j++)?
???printf("%4d?",a[k][j]);??????printf("\n");
?}?}?
5.答:?
#include?"stdio.h"?main()?{?
???int?len;?
???char?str[20],*p=str;?
???printf("please?input?a?string:\n");????scanf("%s",str);????len=0;?
???while(*p!='\0')????{?
??????len++;???????p++;????}?
??????printf("the?string?has?%d?characters.\n",len);?}?
6.答:?
#include?"string.h"?#include?"stdio.h"?main()?{?
???char?*str1[5],ch[5][20],k,t,j,*c;?void?sort(char?**);????for(k=0;k5;k++)?????{str1[k]=ch[k];?????gets(str1[k]);}????for(k=0;k7;k++)?
???{??t=k;?
??????for(j=k+1;j5;j++)??????if(strcmp(*(str1+t),*(str1+j))0)?t=j;??????c=*(str1+t);?
????*(str1+t)=*(str1+k)??????*(str1+k)=c?????}?
???for(k=0;k5;k++)?????puts(str1[k]);?}?
习??题??9?
9.1??单选题?
CBBAD??DBCCD??DCABC??BCCBA??DCDAB
9.2??填空题?
1.120?2.x?3.3,2,2,3???4.fac?/i?5.8,17?6.9?7.1.0/(i*i)???8.?
????fun-in:30,20,10?????fun-end:1015,35,1050??????10,20,30?9.012345???10.93636??11.(1)r+b[k]??(2)*x?
12.7?5?3?1?9?13.15?
14.(1)*x????(2)t?15.(1)'\0'????(2)n++?16.024?
9.3??改错题(略)?9.4??编程题?
1.答:?
void??zhuan(?)?
{??char?ch;?
???while((ch=getchar())!='\n')?
???{????if(ch='a'??ch='z')?ch=ch-32;?????????putchar(ch);????}?}?
2.答:?
double?expp(int?n)?{?int?k,?fac=1;??double?sum=1;?
??for(k=1;?k=n;?k++)???{?fac*=k;?
?????sum+=1.0/fac????}?
??return(sum);?}?
3.答:?
int??xy3(?int?x,?int?y)
{?int?k,?num=1;?
??for(k=1;k=y??k++)?????num*=x??
??num=num%1000????return?num??}?
4.答:?
int?age(?int?n)?{?int?c;?
??if(n==1)?c=10??
??else?c=age(n-1)+2????return?c??}?
5.答:?
#include?"stdio.h"?
?main()?
{??int?a,b,c,d;?
???void?fun(int?a,int?b,int?*c,?int?*d);????scanf("%d%d",a,b);????fun(a,b,c,d);?
???printf("%d?%d",c,d);?
}?
void?fun(int?a,int?b,int?*c,?int?*d)?{??if?(b)?
????{?*c=a/b;?*d=a%b;}?}?
6.答:?
#include?"stdio.h"?
main(int?argc,char?*argv[])?{??int?k;?
????printf("argc=%d\n",argc);?????for?(k=1;kargc;?k++)??????????printf("%s\n",argv[k]);?}?
习??题??10?
10.1??单选题?
CDBBB??BBBAD??CCBDC???
10.2??填空题?
1.所有结构体成员所占存储空间的总和?2.与占用存储空间最大的那个成员相等?
附录F??课后题参考答案?
?
??285?
3.(1)struct?satype??(2)3???(3)sa.a???(4)9???(5)psa=sa?4.80?5.struct?node?6.0?
10.3??编程题?
1.答:?
#include?"stdio.h"?
struct?student?{?
??long??num;?
??char??name[20];???char??sex;???float??score;?};?main()?
{?struct??student??s[20],?temp;???int?j,k,?man=0,?woman=0;?
??float?summan=0,sumwoman=0,?aveman,?avewoman;???for(k=0;?k20;?k++)?
??{?scanf("%ld?%s?%c%f",s[k].num,s[k].name,s[k].sex,s[k].score);?????if(s[k].sex=='m')??
????{?summan+=s[k].score;?man++;}?????else??
????{?sumwoman+=s[k].score;woman++?}?????}?
????aveman=summan/man;?
????avewoman=sumwoman/woman;?
????printf("%d\t%f\t%d\t%f\n",man,aveman,woman,avewoman);?????for(k=0;?k19;?k++)?
???????for(j=0;j20-k;j++)?
???????????if(s[j].scores[j+1].score)?
???????????{?temp=s[j];s[j]=s[j+1];s[j+1]=temp;}????????printf("the?sorted?numbers:\n");????????for(k=0;k20;k++)?
???????????printf("%ld\t%s\t%c\t%5.1f\n",s[k].num,s[k].name,s[k].sex,s[k].score);?}?
习??题??11?
11.1??单选题?
BADD?
11.2??填空题?
1.3d3d330?2.(1)28?
?(2)20???(3)0???(4)--9?
3.(1)251?
?(2)42???
(3)209??
?(4)–295??(5)848?
习??题??12?
12.1??单选题?
BCDCA??ADA?
12.2??填空题?
1.rewind(文件指针)?2."d1.dat","rb"?3.stdin?
4.文本文件;二进制文件?5.(1)"w"????
(2)str[i]--32??
?
?(3)"r"?
6.fopen??7.Hello?8.(1)"r"???
?
(2)fgetc(fp)??
?
??(3)time++
??
??
?C语言程序设计实验与习题指导课后程序设计答案
?P18?
(1)?
#includestdio.h?int?main(void)?{??intcelsius,fahr;??fahr=150;??celsius=5*fahr/9-5*32/9;??printf("fahr=%d,celsius=%d\n",fahr,celsius);??return?0;?}?
(2)?
#includestdio.h?int?main(void)?{??intcelsius,fahr;??celsius=26;??fahr=9*celsius/5+32;??printf("celsius=%d,fahr=%d\n",celsius,fahr);??return?0;?}?
(3)?
#includestdio.h?int?main(void)?{??intaverage,math,eng,comp;??math=87;??eng=72;??comp=93;??average=(math+eng+comp)/3;??printf("math=%d,eng=%d,comp=%d,average=%d\n",math,eng,comp,average);??return?0;?}?
(4)?
#includestdio.h?int?main(void)?{??intn,a,b,c;??n=152
?c=n%10;?
?b=(n/10)%10;??a=n/100;?
?printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",n,c,b,a);??return?0;?
}?
P27?
(1)?
#includestdio.h?#includemath.h?int?main(void)?{??intcelsius,fahr;??printf("Enter?celsius:");??scanf("%d",celsius);??fahr=9*celsius/5+32;??printf("fahr%d\n",fahr);??return?0;?}?
(2)?
#includestdio.h?#includemath.h?int?main(void)?{??intmoney,year;??doublerate,interest;??printf("Enter?money,year,rate:");??scanf("%d%d%lf",money,year,rate);??interest=money*pow(1+rate,year)-money;??printf("interest=%.2f\n",interest);??return?0;?}?
(3)?
#includestdio.h?#includemath.h?int?main(void)?{??doublex,y;??printf("Enter?x:");??scanf("%lf",x);?
?if(x0){???y=pow(x+1,2)+2*x+1/x;??}??else{???y=sqrt(x);??}?
?printf("y=f(%f)=%.2f\n",x,y);??return?0;?
}?
(4)?
#includestdio.h?int?main(void)?{??intx,y;??printf("Enter?num1:");??scanf("%d",x);??printf("Enter?num2:");??scanf("%d",y);??printf("%d+%d=%d\n",x,y,x+y);??printf("%d-%d=%d\n",x,y,x-y);??printf("%d*%d=%d\n",x,y,x*y);??printf("%d/%d=%d\n",x,y,x/y);??printf("%d%%%d=%d\n",x,y,x%y);??return?0;?}?
10的阶乘?
#includestdio.h?int?main(void)?{??inti,n,product;??printf("Enter?n:");??scanf("%d",n);??product=1;??for(i=1;i=n;i++){???product=product*i;??}??printf("product=%d\n",product);??return?0;?}