第一篇:影视动画试听语言课本课后习题答案整理
一、名词解释
1、视听语言: 就是利用视觉和听觉的双重刺激向受众传播某种信息的一种感性语言,是电影的艺术手段,是利用镜头与镜头之间的组合来表达特殊意义,讲述故事,表达内容与情感的方法,是一种电影创作者与观众沟通的符号系统。
2、构图:主要是指画面的安排,即把画面内各个组成部分构成一个统一的画面整体。
3、剪辑: 剪辑师要依照剧情发展和结构的要求,将各个镜头的画面和声音,经过选择.,整理和修剪,然后按照剪辑规则和一定的叙事规则,以一定的顺序组接起来,成为一部结构完整,内容连贯,含义明确并且具有艺术感染力的影片。
4、景别 :在影视画面中,一般是指被摄对象在镜头中所呈现出的视野范围,他决定观众将看到多少主题内容(面积大小0
5、中景:是指摄取膝盖以上或事物的大部分以及场景局部的画面。
6、特写:是表现被摄对象某一局部(如人物肩部以上或头部以及某一被摄对象的细节)的画面,日惊呆的眼神·清晰的署名等,是对影片更细致的展现,揭示出待定的含义。
7、几何角度 :几何角度与摄相机镜头的位置有直接的关系,包括拍摄高度和拍摄方向两个内容。
8、心理角度:心理角度与镜头带给观众的感觉有关,可分为客观视角拍摄角度和主观视角拍摄角度两个方面。
9、镜头运动 :从广义上说来说,镜头运动应该分为固定镜头和运动镜头两种。
10、运动镜头 :是相对比较复杂的一种镜头运动方式,是指摄像机持续运动拍摄的画面,即在一个画面中通过移动摄像机机位,或者改变镜头光轴,或者变化镜头焦距而进行的拍摄。
12、焦距:一束平行光通过镜头时,在光轴上汇聚一点,称为焦点。从焦点到镜头后主平面的距离称为焦距。
13、景深:景深是指摄像机完成对焦后,被摄对象前后产生较为清晰影像的最近点至最远点的距离
14、短焦距镜头:短焦镜头又称为广角镜头,这类镜头的特点是:焦距短,视角大,景深,大,具有表现开阔空间和宏大场面的有力条件,拍摄画面具有很强的透视感、15、长焦距镜头:长焦镜头又称为望远镜头或窄角镜头,特点是:视角窄,拍摄范围小,影像放大率大,景深小,拍摄画面空间深度明显减弱,一般不易较好的再现被摄对象与周围环境的关系
16、构图:艺术家为了表现作品的思想内容和美感效果,在一定的二维空间内,安排和处理人与物的关系和位置,把个别或局部的形象组成艺术的整体。
17、均衡:画面的均衡是人们对画面表现主题的一种形式感觉,是产生稳定感的因素。
18、动态构图:动态构图是影视作品所特有的一种构图类别,根据画面中拍摄对象和摄像机的运动情况可以把动态构图分为三种,被摄对象运动,摄像机运动,被摄对象和摄像机同时运动而形成的总和运动
19、光位:光位即光源的位置,也是动画片中虚拟灯光的位置所在。
20、光型:光线的造型,按照光的造型效果,可以分为主光,辅助光,背景光,轮廓光,修饰光,眼神光等。
21、侧光:测光是指从被摄对象旁侧照射过来的光线
22、色彩基调: 色彩基调是之一族色彩关系在一幅画面,一个片段乃至全片中形成的色彩倾向,展现色彩的总体特征
23、色彩构图:色彩构图是指画面中色彩参与构图,形成一种形式上的美,是对色彩加以谋篇布局,从而形成和谐统一而又蕴含对比关系的构图安排
24、场面调度:场面调度即对荧幕空间中各种有意义的元素的组合和安排
25、镜头调度:镜头场面调度是指导演运用摄像机机位的变化--如推,拉,摇,移,升,降等运动方法,俯仰,平斜等不同角度以及不同焦距的镜头画面来表现,描摹人物关系与环境气氛的变化及跟进事件发展的手法
26、对象调度:对象场景调度是导演通过对角色的运动方向,所处位置以及角色入场出场等方面的安排和处理来创造镜头画面的不同造型和景别,从而解释角色关系及情绪的变化,获得的最佳的画面效果
27、平面场面调度:平面场面调度在平面中通过任务的移动来不断转换观众的视觉焦点,在电影中其常常和摄像机的横移拍摄或摇拍相结合使用
28、纵深场面调度:纵深场面调度就是利用人或物做前景,背景处的任务在纵深处由后面走向前面,既由全景走向近景,或者有前景走向纵深,扩大环境,变为全景。
29、分切场面调度:根据人物动作和位置变化,将摄像机分别放在不同的位置,以固定的设想方法,拍摄不同景别,不同角度的镜头画面,然后组接起来,这种调度方法就是分切场面调度
30、重复场面调度: 重复场面调度一般指重复出现两次或两次以上相同或相似的较色调度和镜头调度
31、象征场面调度:导演往往借助场面调度寄托某种寓意或象征某种事物的内涵
32、对比场面调度:常常把相同或者相反的事物加以比较或衬托,以使对比的双方互相辉映,相得益彰,能够更加生动,鲜明地显示出各自的性格和特点。
33、轴线:轴线,是指被摄对象的视线方向,运动方向和不同对象之间的关系所形成的一条假想的直线或曲线,分别为方向轴线,运动轴线和关系轴线
34、方向轴线:当被摄对象禁止不动时,通过其目光看向某一物体的视线之间形成的虚拟线就是方向轴线
35、运动轴线:处于运动中的人或物体,其运动方向构成主体的运动轴线
36、关系轴线:有两个或者两个以上角色的镜头中,角色之间又会产生交流,这个时候就会出现一种新的轴线,即关系轴线。
37、剪接点:动画中流畅的动作,中间都会有相对的停顿,也就是说某一个动作,总是有相对静止的时刻,而这个相对静止的时刻通常就是women要选择的剪接点。
38、镜头组接 :镜头组接是把每一个镜头按照一定的顺序和手法连接起来,成为一个具有条理性和逻辑性的整体,是一种方法和技巧。
39、蒙太奇:蒙太奇就是根据影片所要表达的内容和观众的心理顺序,将摄像机拍摄下来的镜头按照生活逻辑、推理顺序、作者的观点倾向及其美学原则连接起来的手段。
40、叙事蒙太奇:叙事蒙太奇按照情节发展的时间流程、逻辑顺序、因果关系来分切组合镜头、场面和段落,表现动作的连贯,推动情节的发展,引导观众理解影片的内容,是电影中最基本、最常用的叙述手法,其优点是脉络清楚,逻辑连贯。
41、表现蒙太奇:通过不同内容镜头的排列,来暗、比喻或表达一个原来所不曾有的新含义。
42、转场:是指场景或段落之间的连接方式。具体来说就是指从一个场景转至另一个场景,或从一个段落转至另一个段落所采取的连接技法。
43、叠化转场:是指前一个镜头和后一个镜头相叠加,前一个镜头逐渐隐去,后一个镜头逐渐显现的过程。
44、特写镜头转场:是指无论前一组镜头的最后一个镜头是什么,后一组镜头都是从特写开始。
45、对话:又称对白,至两个以上剧中人物的交流活动,是影视艺术中有声语言的主体
46、旁白:旁白是以画外音形式出现的第一人称自述或第三人称的评论和解说,用于交代事件,地点,人物,环境,背景等,通常以剧作者“第三人称”的客观视点或以某剧中人物“第一人称”的主观视点出现
47、独白:独白指以画外音形式出现在剧中,表达人物角色和人物内心活动的话语
48、有源音乐:有源音乐是指发出音乐的音源直接出现在画内空间或者外空间的音乐
49、无源音乐:无源音乐是指没有比较明显的时空特征,在影片画面中不存在声音发出的音源 50、音效:动作音效是由影片中的角色运动所产生的声音,环境音效主要是指自然界的音响效果
51、主题曲:动画片中主题曲一般是出现在影片的开头或者末尾的较完整的音乐形式,多是歌与曲的组合。动画片中的主题曲能够体现影片的艺术构思,是影视动画综合艺术的有机组成部分,在突出影片的抒情性,戏剧性和气氛方面起着特殊作用
二、简答题
1、简述画面造型语言元素的种类和基本功能。
A 构图: 主要是指画面的安排,即把和画面内各个组成部分构成一个统一的画面整体
B 色彩: 不仅仅是更加逼真的在线显示,还能营造环境氛围,加强戏剧效果,同时也体现出创作者的思想感情以及角色的性格特点等
C 光线: 光线是展现环境体现角色性格的重要表达方式,而却在屏幕上表现各种视觉形象,包括他们的空间位置,形状,颜色,物理性质,变化和运动等,也都离不开光
2、简述划分景别的基本方法和依据。
以画面中成年人所占画面比例的大小进行划分,即远景--被摄对象所处的环境,全景--人物全部及周围背景,中景--膝以上,近景--胸以上,特写--肩以上
3、简述近景与中景的区别。
近景与中景相比,近景画面表现的空间范围进一步缩小,画面内容跟趋向于单一,环境和背景的作用进一步降低,吸引观众注意力的是画面中占主导地位的角色形象
4、简述俯角度拍摄和仰角度拍摄的功能。
俯角拍摄的特点是视野辽阔,能见的场面大,景物全,可以纵观全局多用于拍摄大场面,拍摄人物时,使人物感到被压近地面,变得矮小和压抑,表现正面人物的无、反面人物的可憎渺小或展示人物的卑劣行径;仰角度拍摄的特点是可使景物拍的宏伟高大拍摄建筑物有直插云霄之感;拍摄高台跳水,以蓝天作为背景,显示运动员有凌云之势,腾空飞翔之感;拍摄正面人物可以显示人物的威严以及地位的高贵等,同时还可以舍弃杂乱的背景,使画面简洁,主体突出。
5、简述主观视角拍摄角度的作用。
可以带给观众影片中人物相似的视觉感受,产生身临其境的现场感,进而影响观众的视觉心理,使之随着影片中人物的情绪变化而变化。主观视角的镜头可使观众视角与影片主体角色的视觉重合,从而更容易调动观众的参与感和注意力,一起观众的心理感应。
6、简述摇镜头和移镜头的区别。
摇镜头:摄像机的位置不动只是改变镜头的拍摄方向 移镜头:摄像机的位置平行移动
移镜头跟摇镜头在画面上给人的视觉效果是完全不同的。摇镜头是摄像头的位置不动,只是拍摄角度发生了变化,适合于拍摄远距离的对象;而移镜头则是拍摄角度不变,摄像机本身位置移动,适合于拍摄距离较近的对象。移镜头跟摇镜头一样能扩大屏幕二维空间表现能力,但因摄像机是运动的,所以移镜头比摇镜头有更大的自由度,它能打破画面的局限,扩大空间视野,吧表现广阔的场景。在实际拍摄中,移镜头拍摄时除了借助于铺设在轨道上的移动车外,还可以利用其他的运动工具。
7、简述推、拉、摇、移、跟五种基本运动镜头的实现方法。
推:从画面景别的角度看,就是画面构图范围由大范围、大景别到小范围、小景别连续过渡的镜头。
拉:从画面景别的角度看,就是画面构图范围由小范围、小景别到大范围、大景别连续过渡的镜头。
摇:拍摄时,摄像机的位置不动只是改变镜头的拍摄方向。
移:拍摄时,把摄像机放在移动车上等,沿着古驿道进行拍摄。
跟:是指摄像机紧跟着运动着的人活着物进行拍摄。
8、简述短焦距镜头与长焦距镜头的功能,举例说明。
短焦距镜头:
A 利用短焦距镜头有利于表现宏伟的群众场面、辽阔的田野、壮观的建筑以及复杂的纵深调度等多层景物的场景。
B 利用短焦距镜头的透视效果强的特点进行拍摄,有时候用于人物对话中,拉开两人的空间距离,进而表现出他们心理上的隔阂。
C 利用短焦距镜头线条透视的夸张变形效果形成某种特殊的表现意义。不仅改变画面的深度空间,在纵向空间,它的夸张效果使景物显得更加高大、雄伟,并以一种对客观景物变形和夸张的造型效果撞击着观众的审美心境,赋予画面某种特殊意义。D 短焦距镜头有助于刻画人物某种性格。
长焦距镜头:
A 由于长焦镜头视角窄,影像放大率大的特点,即使在远距离拍摄时也能够摄出被摄对象的小景别画面,从而使被摄对象突出地表现出来。B 利用长焦距镜头的远摄功能,可以拍摄距离较远的对象,追求真实自然地艺术效果。
C 由于长焦距离镜头的景深小,除主体意外,前后景都可以处于模糊状态,可以把不可回避的杂乱背景虚化,从而减少杂乱背景的干扰,达到突出主体的目的
D 长焦距镜头透视感弱,可以压缩处于纵向空间的被摄对象之间的空间距离,能够把多层景物和人物压缩在一起,加强画面拥挤,堵塞和紧张的感觉,从而使画面形象饱满,烘托环境气氛。
E 长焦距镜头拍摄横向运动的物体时,前后景在画面中变化快且虚,横向跟拍运动物体可以获得横向跟移的效果,增强画面的视觉节奏感,表现紧张,不安和欢快等情绪。
F 长焦距镜头拍摄还可以完成焦点的转换,突出被摄对象。
G 长焦距镜头常常用于拍摄人物肖像,拍摄人物面部特写可以正确还原出人脸的五官比例
9、简述画面构图的不同形式和特点。
影视动画的构图可分为惊天构图和动态构图两类。静态构图就是被摄对象与摄像机均处于静止状态,镜头内的构图关系基本固定。
动态构图是指被摄对象或摄像机处于运动状态,使画面构图组合发生连续或间断变化。动态构图是影视画面所独具的构图形式,但是其构图原理和形式也是以静态构图为基础。
10、简述用光方法的分类及其作用。
光位:按照光源位置和照射角度可以分为顺光、侧光、侧逆光、逆光、顶光、脚光和平行光 直射光和散射光:按光线的性质分可分为直射光和散射光
光型:按照光的造型效果可以分为主光、辅助光、背景光、轮廓光、修饰光、眼神光等
11、简述光线对角色形象的塑造作用,并举例说明。
A 对角色形象的造型作用,被摄对象只有在光线的照明下,才能使观众认识到它的形象,有了“形”,才可以以“形”写神,以“形”传神 B 对角色形象的情感进行刻画。
C 对角色形象具有社会角色的刻画作用,即光线的照明作为某种理念或观点的表征,使得在画面中的角色形象因为某种光线或者影调的出现而具有一种特定的隐喻、象征或比喻的效果,从而使作品生化到某种象征的高度。
12、简述光线的构图作用,并举例说明。
A 影响构图平衡:光线控制着画面的明暗关系,影响着画面的平衡,因此在构图上可以通过光线打破画面的绝对平衡,形成动势,加快叙事的节奏。
B 突出主体形象:影片可以通过光线照明产生明暗效果突出主体,强调画面的兴趣中心。
13、简述色彩的生理感受,并举例分析。
A色彩之冷暖,不同的色彩可以使人产生冷暖、轻重等感觉 B色彩之轻重,色彩的轻重感主要与色彩的明度有关
C色彩之软硬,色彩的软硬感其感觉主要也来自色彩的明度,但也与饱和度有一定的关系
D色彩之远近,色彩的远近感是由于各种不同波长的色彩在人眼视网膜上的成像位置不同产生的,红橙等光波长的色彩在视网膜内侧成像,感觉比较迫近,蓝、紫等光波短的色彩则在视网膜外侧成像,在不同距离内感觉就比较后退,实际上这是视错觉的一种现象。
14、简述场面调度的分类和在动画片中的应用,举例说明。
A镜头场面调度,镜头场面调度是指导演运用摄像机机位的变化——推、拉、摇、移、升、降等运动方法,俯仰、平斜等不同角度以及不同焦距的镜头画面来展示、描摹人物关系与环境气氛的变化及跟进事件发展的手法。
B对像场面调度,是导演通过对角色的运动方向、所处位置以及角色入场等方面的安排和处理来创造镜头画面的不同造型和景别,从而揭示角色关系及情绪的变化,以获得最佳的画面效果。
15、相对于一般概念的电影,动画电影在场面调度方法的运用上有什么不同?
动画场面调度有高度的假设性,可以运用夸张等手法突出剧情,所以有巨大的表现空间和根伟丰富的表现力与创作自由
16、关系轴线中,两人对话镜头的拍摄最为经典的拍摄技法有哪些?分别适用于什么场景?
A 三角形拍摄原理,场景中两个中心角色之间的关系轴线是以他们相互视线的走向为基础的。在关系轴线的两侧顶点与轴线中心外侧顶点构成一个底边与关系线平行的三角形
B 内反拍与外反拍,台摄像机都处于关系轴线同一侧,机位方向基本相背,分别向外对着各自主体进行拍摄,称为内反拍角度。摄像机处于关系轴线的同一侧,向里对着主体,称为外反拍角度。
C 骑轴镜头,骑轴镜头是两个摄像机处在轴线上,背对背或者正面相对分别拍摄各自主体
D平行镜头,两台摄像机的视轴互相平行,分别拍摄各自主体,如果主体是面向摄像机,那么就是正面拍摄,如果主体实测面对着摄像机,那么就是侧面拍摄,这样拍摄得到的镜头称为平行镜头
17、什么叫越轴?越轴会产生什么影响?如何避免越轴镜头的出现?
越轴:拍摄中出现镜头越过轴线,到另一侧进行拍摄,在后期剪辑中又无法有效避免这种不遵循轴线规则的镜头,当前后镜头剪辑在一起时,就会出现人物动作、方向和关系的偏离、称之为“越轴”。
影响:越轴后的画面,被摄主体与前面所摄画面中主体的位置和方向是不一致的,出现镜头方向上的矛盾,造成前后画面无法组接。方法:在影视拍摄和剪辑中,要保证画面的连贯、流畅,就要使画面空间有视觉完整感和统一感,这正是通过掌握轴线的规则实现的。
18、简述镜头剪辑的规律和方法,并举例说明。
A 镜头组接必须符合观众心理和生活逻辑 B景别的变化要采取循序渐进的方法 C镜头组接要遵循轴线规律 D镜头组接要遵循“动接动”“静接静”的规律 E镜头组接的时间长度应遵循观众视觉心理的规律 F镜头组接要注意影调和色彩的过渡 G镜头组接节奏应符合情节发展需要
19、简述根据景别变化进行镜头组接的几种蒙太奇组接方式,并举例说明。
A前进式镜头组接,这种组接方式是指景别由远景、全景向近景、特写过度,用来表现由低沉到高昂向上的情绪和剧情的发展。
B后退式镜头组接,这种组接方式是由近到远,景别从特写向远景过度,表示由高昂到低沉、压抑的情绪,在影片中表现由细节扩展到全部。C环形镜头组接,环形镜头组接就是把前进式镜头组接和后退式镜头组接结合在一起使用。有全景——中景——近景——特写,再由特写——近景——中景——全景,表现情绪由低沉到高昂,再由高昂转向低沉。20、简述蒙太奇的分类,举例说明。
蒙太奇主要可分为两大类:叙事蒙太奇和表现蒙太奇
叙事蒙太奇具体划分为连续蒙太奇、平行蒙太奇、交叉蒙太奇、重复蒙太奇、积累蒙太奇等
表现蒙太奇可划分为隐喻蒙太奇、对比蒙太奇、心理蒙太奇、抒情蒙太奇等
21、简述无技巧转场的方法,并举例说明。
A相同(相似)主体的转换B遮挡镜头转场C主观镜头转场D特写镜头转场E动势转场F运动镜头转场G空镜头转场H声音转场I闪回镜头转场J变换背景转场
22、简述对话的功能,举例说明。
A交代说明。凡需要而又无需用画面表现出来的生活内容或事件过程,诸如剧情发生的时间、地点、时代背景、剧中人物的职业、社会关系,特别是在剧情展开前就介绍了祖巴的地位和他与儿子阿历克斯的关系。
B推进剧情。对话能够展露人物丰富内心活动,并且能够影响其他角色,形成内心交流或者碰撞,最终引起双方心情或相互关系的微妙变化,从而推进剧情。
C塑造人物性格人物性格的反映是通过多种方式来展现的。比如行为动作、心理活动等,而语言同样是塑造人物形象、体现人物性格的重要手段。23,、简述主题音乐和场景音乐的区别,并举例说明。
主题音乐是表达影片主题思想、基本情绪或主要人物性格的音乐。它表现为一个旋律式或者主导动机式的音乐核心,具有鲜明的主体思想、情绪基调和性格特征。与场景音乐相比,它与影片中的情节、画面、人物等场景没有密切关系,而是与画面形成一种并行的关系,并且在影片的重要场面或者情绪高潮段落反复出现,从而使观众领悟到影片的主题和深层的意蕴。相比场景音乐,主题音乐具有更鲜明的形象和跟完整的结构。
三、实践题
1、观赏动画片《小马王》,选择你认为经典的片段,分析在拍摄中所运用的不同焦距镜头的画面及其所包含的意义。
2、观赏那个动画片《埃及王子》,选择你认为经典的片段进行转场分析,分析不同转场手法的运用及其达到的艺术效果。
第二篇:大学C语言课本课后习题相应答案及详细解答
5-1
#include“stdio.h” void main(){ char c1,c2;printf(“c1:”);c1=getchar();if(c1>='a'&&c1<='z')c2=c1-32;else if(c1>='A'&&c1<='Z')c2=c1+32;else c2=c1;printf(“=>%cn”,c2);}
5-2 #include“stdio.h” void main(){ char c;printf(“c:”);c=getchar();if(c>='A'&&c<='Z')
if(c=='A')printf(“没有前面的字母!”);
else if(c=='Z')printf(“没有后面的字母!”);
else printf(“前面的字母=%c,后面的字母=%c”,c-1,c+1);printf(“n”);}
5-3 #include“stdio.h” void main(){ int s;char g;printf(“s:”);scanf(“%d”,&s);if(s>=0&&s<=100){
switch(s/10){
case 9:
case 10: g='A';break;
case 8: g='B';break;
case 7: g='C';break;
case 6: g='D';break;
default: g='E';
}
printf(“g=%cn”,g);} else printf(“成绩不在百分制范围内!n”);} 5-4 #include“stdio.h” void main(){ int y,m,d,dok;int yy,mm,dd;printf(“y,m,d:”);scanf(“%d,%d,%d”,&y,&m,&d);
switch(m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(d>0&&d<=31)dok=4;
else dok=0;
break;
case 4: case 6: case 9: case 11:
if(d>0&&d<=30)dok=3;
else dok=0;
break;
case 2: if(y%4==0&&y%100!=0||y%400==0)
if(d>0&&d<=29)dok=2;
else dok=0;
else
if(d>0&&d<=28)dok=1;
else dok=0;
break;
default: dok=0;
}
if(dok==0)printf(“月份或日期不对!n”);
else{
switch(dok){
case 1: if(d==28){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case 2:if(d==29){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case
3:if(d==30){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case 4:if(d==31)
if(m==12){yy=y+1;dd=1;mm=1;}
else {yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
}
printf(“Tomorrow:%d年%d月%d日n”,yy,mm,dd);
} }
5-5
#include“stdio.h” void main(){ int a,b,c,t;printf(“a,b,c:”);scanf(“%d,%d,%d”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(b>c){t=b;b=c;c=t;}
if(a==b&&b==c)printf(“等边三角形.”);
else if(a==b||b==c||a==c)printf(“等腰角形.”);
else if(c*c==a*a+b*b)printf(“直角三角形.”);
else printf(“任意三角形.”);
printf(“n”);} else printf(“不能构成三角形!n”);} 6-1 #include“stdio.h” void main(){ int a,b,m,n,k;printf(“m,n:”);scanf(“%d,%d”,&m,&n);
a=m;b=n;k=a%b;while(k){
a=b;
b=k;
k=a%b;} printf(“%dn”,(m*n/b));}
6-2 #include“stdio.h” void main(){ int n;int i,j,s;printf(“n=”);scanf(“%d”,&n);for(i=1;i<=n;i++){
s=0;
for(j=1;j
if(i%j==0)s=s+j;
if(s==i){
printf(“%d:”,i);
for(j=1;j
if(i%j==0)printf(“%d ”,j);
printf(“n”);
} } } 6-3
#include“stdio.h” #include“math.h” void main(){ double x,y,zd,zx,x1,x2;zd=zx=50;for(x=0;x<=2;x=x+0.2){
y=2*pow(x,3)-3*pow(x,4)+6*pow(x,5)-4*x+50;
if(y>zd){ zd=y;x1=x;}
if(y 6-4 #include“stdio.h” void main(){ double x,sum=0,a,b,c;int i;printf(“x=”);scanf(“%lf”,&x);a=x;b=1.0;c=1.0;for(i=1;i<=10;i++){ sum=sum+a/(b*c); a=a*x*x; b=b+2; c=c*i;} printf(“y(%.2lf)=%lfn”,x,sum);} 7-1 /*选择排序*/ #include“stdio.h” void main(){ int i,j,n,k,temp;int a[10];printf(“n(<10):”);scanf(“%d”,&n);printf(“Original:”);for(i=0;i k=i; for(j=i+1;j if(a[j]?*/ if(k!=i){ temp=a[i]; a[i]=a[k]; a[k]=temp; } } printf(“Ordered:”);for(i=0;i 7-2 #include“stdio.h” void main(){ int a[3][3];int i,j,s=1;printf(“Input:n”);for(i=0;i<3;i++) for(j=0;j<3;j++){ scanf(“%d”,&a[i][j]); if(i==j)s=s*a[i][j]; } printf(“s=%dn”,s);} 7-3 /*杨辉三角*/ #include“stdio.h” void main(){ int x[7][7];int i,j;for(i=0;i<7;i++){ x[i][0]=1; x[i][i]=1;} for(i=2;i<7;i++) for(j=1;j x[i][j]=x[i-1][j]+x[i-1][j-1];for(i=0;i<7;i++){ for(j=0;j<=i;j++) printf(“%3d”,x[i][j]); printf(“n”);} } 7-4 #include if(str[i]!=str[j])break;if(i>j)printf(“%s是回文n”,str);else printf(“%s不是回文n”,str);} 7-5 /*输入一维数组的10个元素,并将最小值与第1个数交换,最大值与最后一个数交换,然后输出交换后的结果*/ #include printf(“Input:n”);zx=zd=0;for(i=0;i<10;i++){ scanf(“%d”,&a[i]); if(a[i] if(a[i]>a[zd])zd=i;} if(zx!=0){ int t; t=a[0]; a[0]=a[zx]; a[zx]=t;} if(zd!=9){ int t; t=a[9]; a[9]=a[zd]; a[zd]=t;} for(i=0;i<10;i++) printf(“%d ”,a[i]);printf(“n”);} 8-2 #include“stdio.h” double xexp(double x,int n){ double c;if(n==0)c=1.0;else c=x*xexp(x,n-1);return c;} void main(){ int n;double x; printf(“x:”);scanf(“%lf”,&x);printf(“n:”);scanf(“%d”,&n);printf(“Result=%gn”,xexp(x,n));} 8-3 #include“stdio.h” int find(int x[],int n,int y){ int i,pos=-1;for(i=0;i if(x[i]==y)pos=i;return pos;} void main(){ int a[10]={11,1,13,15,18,7,19,27,3,8};int i,y,pos; for(i=0;i<10;i++)printf(“%d ”,a[i]); printf(“ny:”);scanf(“%d”,&y);pos=find(a,10,y);if(pos==-1)printf(“Not found!n”);else printf(“Position=%dn”,pos);} 8-1 #include“stdio.h” #include“conio.h” //getch()#include“stdlib.h” //srand(),rand(),system(“cls”)#include“time.h” //time()void main(){ void init(int a[][5],int m,int n);void input(int a[][5],int m,int n); void output(int a[][5],int m,int n);int min(int b[][5],int m,int n);int a[5][5],ch='0';while(1){ system(“cls”);//清屏 printf(“1.初始化 2.键盘输入 0.结束程序:”); ch=getch();//头文件conio.h printf(“n”); if(ch=='0')break; else if(ch=='1'){ init(a,5,5); output(a,5,5); } else if(ch=='2'){ input(a,5,5); output(a,5,5); } else printf(“Error!n”); printf(“Min element:%dn”,min(a,5,5)); printf(“按任意键继续!n”); getch();} } void init(int a[][5],int m,int n){ int i,j;srand(time(0));//time(0)表示以当前的时间做种子,增加每次运行的随机性 for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=rand()%100;//随机数范围:0~32767,将它控制在0~99的范围 } void input(int a[][5],int m,int n){ int i,j;printf(“Input Array 5X5:n”);for(i=0;i for(j=0;j scanf(“%d”,&a[i][j]);} void output(int a[][5],int m,int n){ int i,j;printf(“Output Array 5X5:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++) printf(“%2d ”,a[i][j]); printf(“n”);} } int min(int b[][5],int m,int n){ int i,j,zx;zx=b[0][0];for(i=0;i for(j=0;j if(i==j&&b[i][j] if(a[i]<0){nsum=nsum+a[i];z++;} else if(a[i]>0){psum=psum+a[i];f++;} else continue;pave=(z!=0?psum/z:0.0);nave=(f!=0?nsum/f:0.0);} void main(){ float a[10]={1.0,11.0,3.0,-1.5,-5.5,-2}; saver(a,10);printf(“pave=%.1f,nave=%.2fn”,pave,nave);} 8-5 #include“stdio.h” #include“math.h” void p1(int a,int b){ printf(“has two equal roots:%8.4fn”,-b/(2*a));} void p2(int a,int b, int disc){ float x1,x2;x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“Has distant real roots:%8.4f and %8.4fn”,x1,x2);} void p3(int a,int b, int disc){ float real,image;real=-b/(2*a);image=sqrt(-disc)/(2*a);printf(“Has complex roots:n”);printf(“%8.4f+%8.4fin”,real,image);printf(“%8.4f-%8.4fin”,real,image);} void main() { int a,b,c,disc;printf(“a,b,c:”);scanf(“%d,%d,%d”,&a,&b,&c); disc=b*b-4*a*c;if(fabs(disc)<=1e-6)p1(a,b);else if(disc>1e-6)p2(a,b,disc);else p3(a,b,disc);} 8-6 #include“stdio.h” #include“stdlib.h” #include“conio.h” #include“time.h” void main(){ void printaverage(int score[][5],int m,int n); void printname(int score[][5],int m,int n);int score[10][5];int i,j;srand(time(0));for(i=0;i<10;i++) for(j=0;j<5;j++) score[i][j]=50+rand()%50+1;printf(“Output Students' score:n”);printf(“Course 1 5n”);printf(“-------------------------n”);for(i=0;i<10;i++){ printf(“No.%2d:”,i+1); for(j=0;j<5;j++) printf(“%3d ”,score[i][j]); printf(“n”);} printaverage(score,10,5);printname(score,10,5);} void printaverage(int score[][5],int m,int n){ int i,j,sum;printf(“nAverage score:n”);for(i=0;i sum=0; for(j=0;j sum=sum+score[i][j]; printf(“No.%d:%.1fn”,i+1,sum/5.0);} } void printname(int score[][5],int m,int n){ int i,j,max0,row0; for(j=0;j<5;j++){ max0=score[0][j]; for(i=0;i<10;i++) if(score[i][j]>max0){ max0=score[i][j]; row0=i; } printf(“Course %d,max score=%d,student:No.%dn”,j+1,max0,row0+1);} } C语言课后习题答案-第四版-第一章 5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d!**************************** #include printf(“**************************nn”);printf(“ Very Good!nn”);printf(“**************************n”);return 0;} 6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include 第3章 1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为 P=(1+r)^n r 为年增长率,n 为年数,p为与现在相比的倍数。#include 2、存款利息计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。 (2)先存2年期,到期后将本息在存3年期。(3)先存3年期,到期后将本息在存2年期。 (4)先存1年期,到期后将本息在存1年期,连续存5次。(5)存活期存款。活期利息每一季度结算一次。2007年12月的银行存款利息如下: 1年定期存款利息为4.14%; 2年定期存款利息为4.68%; 3年定期存款利息为5.4%; 5年定期存款利息为5.85%; 活期存款利息为0.27%(活期利息每一季度结算一次。)如果r 为年利率,n 为存款年数,则计算本息和的公式为 1年期本息和:P=1000*(1+r);n年期本息和:P=1000*(1+n*r);存n次1年期的本息和:P=1000*(1+ r)^n;存活期本息和:P=1000*(1+r/4)^4n。 说明:P=1000*(1+r/4)^4n。是一个季度的本息和。#include // 一次存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); // 存活期存款。活期利息每一季度结算一次 printf(“p1=%fn”,p1); // 输出按第1方案得到的本息和 printf(“p2=%fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3、购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。提示:计算还请月数m 的公式如下: m =[ log p –log(p-d*r)] / log(1+r)可以讲公式该写为 m ={ log [p /(p – d*r)] }/ log(1+r)C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。#include 6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include 7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include //要求输入圆半径r和圆柱高h l=2*pi*r; //计算圆周长l s=r*r*pi; //计算圆面积s sq=4*pi*r*r; //计算圆球表面积sq vq=3.0/4.0*pi*r*r*r; //计算圆球体积vq vz=pi*r*r*h; //计算圆柱体积vz printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s); printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: v=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 第四章 4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include if(b printf(“max=%dn”,c); else printf(“max=%dn”,b); else if(a printf(“max=%dn”,c);else } printf(“max=%dn”,a);return 0; 4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int a,b,c,temp,max;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b; /*将a和b中的大者存入temp中*/ max=(temp>c)?temp:c; /*将a和b中的大者与c比较,取最大者*/ printf(“三个整数的最大数是%dn”,max);return 0;} 5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。#include printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);while(i>M) { printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M); } k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;} 6、有一个函数: scanf(“%d”,&i); x (x<1) y(1<=x<10) 3*x – 11 (x>=10)= 2*x1 (x<0) Y = 0 (x=0) (x>0) 写程序,输入x 的值,输出y 相应的值。#include int x,y; printf(“please enter x:”); scanf(“%d”,&x); y=0; if(x>=0) if(x>0)y=1; else y=-1; printf(“x=%d,y=%dn”,x,y);return 0;{ } 8、给出一百分制成绩,要求输出成绩等级‘A’,’B’,’C’,’D’,’E’。90分以上为‘A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。#include char grade; printf(“请输入学生成绩:”); scanf(“%f”,&score); while(score>100||score<0){ } switch((int)(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;printf(“n 输入有误,请重输”);scanf(“%f”,&score);case 6: grade='D';break;case 5: case 4: case 3: case 2: case 1: case 0: grade='E';} printf(“成绩是 %5.1f,相应的等级是%cn ”,score,grade);return 0;} 9、给出一个不多于5位数的正整数;(1)求出它是几位数;(2)分别输出每一位数字; (3)按逆顺序输出各位数,例如原有数为123,应输出321.#include printf(“请输入一个整数(0-99999):”);scanf(“%d”,&num);if(num>9999) place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);printf(“n反序数字为:”);switch(place){ case 5: printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case break;case 3:printf(“%d%d%dn”,indiv,ten,hundred);break;case 2: printf(“%d%dn”,indiv,ten);break;case 1: printf(“%dn”,indiv);break;} return 0;} 11、输入4个整数,要求按由小到大的顺序输出。#include { t=a;a=b;b=t;} if(a>c)4: printf(“%d%d%d%dn”,indiv,ten,hundred,thousand); { t=a;a=c;c=t;} if(a>d) { t=a;a=d;d=t;} if(b>c) { t=b;b=c;c=t;} if(b>d) { t=b;b=d;d=t;} if(c>d) { t=c;c=d;d=t;} printf(“排序结果如下: n”);printf(“%d %d %d %d n” ,a,b,c,d);return 0;} 12、有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,这4个圆塔高位10cm, 塔以外无建筑物。求该点的建筑物高度(塔外的高度为零)。#include /*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(d1>1 && d2>1 && d3>1 && d4>1) h=0;/*判断该点是否在塔外*/ printf(“该点高度为 %dn”,h);return 0;} 第五章 例5.7 用pi/4=1-1/3+1/5-1/7+„„公式求pi近似值,直到发现某一项的绝对值小于10^6为止。 #include // 程序中用到数学函数fabs,应包含头文件math.n int 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-8) // 检查当前项term的绝对值是否大于或等于10的(-6)次方 { pi=pi+term; // 把当前项term累加到pi中 n=n+2; // n+2是下一项的分母 sign=-sign; // sign代表符号,下一项的符号与上一项符号相反 } pi=pi*4; // 多项式的和pi乘以4,才是π的近似值 printf(“pi=%10.8fn”,pi); // 输出π的近似值 printf(“count=%dn”,count); // 输出循环次数 return 0;} 3、输入两个正整数m和n,求其最大公约数和最小公倍数。#include // 求出下一项的值term count++; // count累加1 { int p,r,n,m,temp;printf(“请输入两个正整数n,m:”);scanf(“%d,%d,”,&n,&m);if(n temp=n; n=m; m=temp;} p=n*m;while(m!=0){ r=n%m; n=m; m=r;} printf(“它们的最大公约数为:%dn”,n);printf(“它们的最小公约数为:%dn”,p/n);return 0;} 4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include 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++; else other++; } printf(“字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn”,letters,space,digit,other); return 0; } 5、求Sn=a+aa+aaa+„„+aa„„a之值,其中a是一个数字,n 表示a 的位数。n 由键盘输入。#include } printf(“a+aa+aaa+...=%dn”,sn);return 0;} 6、求和:1!+2!+3!+„„+20!。#include t=t*n; s=s+t;} printf(“1!+2!+...+20!=%22.15en”,s);return 0;} 7、求1+2+3+„„+100+1+2^2+3^2+4^2++50^2+1+1/2+1/3+1/4+„„+1/10。#include {s1=s1+k;} for(k=1;k<=n2;k++)/*计算1到50各数的平方和*/ {s2=s2+k*k;} for(k=1;k<=n3;k++)/*计算1到10的各倒数和*/ „ „ {s3=s3+1/k;} printf(“sum=%15.6fn”,s1+s2+s3);return 0;} 8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一位水仙花数,因为153=13+53+33。#include } printf(“n”);return 0;i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i + j*j*j + k*k*k)printf(“%d ”,n);} 9、编程求1000之内的完数,并按下面格式输出其因子:its factors are 1,2,3 #include s=0;for(i=1;i if((m%i)==0)s=s+i;if(s==m){ } printf(“%d,its factors are ”,m);for(i=1;i } return 0;} 10、有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,„„ 求出这个数列前20项之和。#include } printf(“sum=%16.10fn”,s);return 0;} 11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高? #include } printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;} 12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子? #include /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ } printf(“total=%dn”,x1);return 0;} 16、输出以下图案: * *** ***** ******* ***** *** * #include for(j=0;j<=2-i;j++) printf(“ ”); for(k=0;k<=2*i;k++) printf(“*”); printf(“n”);} for(i=0;i<=2;i++){ for(j=0;j<=i;j++) printf(“ ”); for(k=0;k<=4-2*i;k++) printf(“*”); printf(“n”);} return 0;} 17、甲队A,B,C 3 人,乙队 X,Y,Z 3人。A不和X比;X,Z比,请编程找出3 对赛手的名单。#include int main(){ C不和 char i,j,k; /*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++) } 第六章 1、用筛选法求100之内的素数。#include for(i=1;i<=100;i++) a[i]=i; a[1]=0; for(i=2;i if(i!=j) for(k='x';k<='z';k++) if(i!=k && j!=k) if(i!='x' && k!='x' && k!='z') printf(“A--%cnB--%cnC--%cn”,i,j,k); return 0; for(j=i+1;j<=100;j++) { if(a[i]!=0 && a[j]!=0) if(a[j]%a[i]==0) a[j]=0; } printf(“n”); for(i=2,n=0;i<=100;i++){ if(a[i]!=0) { printf(“%5d”,a[i]); n++; } if(n==10) { printf(“n”); n=0; } } printf(“n”); return 0;} 2、用选择法对10个整数排序。#include printf(“enter data:n”); for(i=1;i<=10;i++) { printf(“a[%d]=”,i); scanf(“%d”,&a[i]); } printf(“n”); printf(“The orginal numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); for(i=1;i<=9;i++){ min=i; for(j=i+1;j<=10;j++) if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf(“nThe sorted numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 3、求一个3 x 3 的整型矩阵对角线元素之和。#include printf(“enter data:n”); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%3d”,&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(“sum=%6dn”,sum); return 0;} 4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。#include int temp1,temp2,number,end,i,j; printf(“array a:n”); for(i=0;i<10;i++) printf(“%5d”,a[i]); printf(“n”); printf(“insert data:”); scanf(“%d”,&number); end=a[9]; if(number>end) a[10]=number; else { for(i=0;i<10;i++){ if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } printf(“Now array a:n”); for(i=0;i<11;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 5、将一个数组中的值按逆顺序重新存放。例如:8,6,5,4,1。要求改为:1,4,5,6,8.。#include printf(“enter array a:n”); for(i=0;i scanf(“%d”,&a[i]); printf(“array a:n”); for(i=0;i printf(“%4d”,a[i]); for(i=0;i 素的值互换 { temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf(“nNow,array a:n”);for(i=0;i printf(“%4d”,a[i]); //循环的作用是将对称的元 printf(“n”); return 0;} 6、输出以下杨辉三角形(要求输出10行)。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 „„„„„„„„„„„„ #include for(i=0;i { a[i][i]=1; a[i][0]=1; } for(i=2;i for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i printf(“%6d”,a[i][j]); printf(“n”); } printf(“n”); return 0;} 7、输出“魔方阵”。所谓魔方阵就是每行每列和对角线之和相等。例如: 1 6 3 5 7 4 9 2 要求输出1~n^2的自然数构成的魔方阵。#include p=1; while(p==1){ printf(“enter n(n=1--15):”); scanf(“%d”,&n); if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++){ i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1)i=n; if(j>n)j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i<=n;i++) {for(j=1;j<=n;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0;} 9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求折半查找法找出该数是数组中第几个元素值。如果不在数组中则输出“无此数”。#include int i,number,top,bott,mid,loca,a[N],flag=1,sign; char c; printf(“enter data:n”); scanf(“%d”,&a[0]); i=1; while(i { scanf(“%d”,&a[i]); if(a[i]>=a[i-1]) i++; else printf(“enter this data again:n”); } printf(“n”); for(i=0;i printf(“%5d”,a[i]); printf(“n”); while(flag){ printf(“input number to look for:”); scanf(“%d”,&number); sign=0; top=0; //top是查找区间的起始位置 bott=N-1; //bott是查找区间的最末位置 if((numbera[N-1]))//要查的数不在查找区间内 loca=-1; // 表示找不到 while((!sign)&&(top<=bott)) {mid=(bott+top)/2; if(number==a[mid]) { loca=mid; printf(“Has is %dn”,number,loca+1); sign=1; } else if(number bott=mid-1; else found %d,its position top=mid+1; } if(!sign||loca==-1) printf(“cannot find %d.n”,number);; printf(“continu or not(Y/N)?”); scanf(“ %c”,&c); if(c=='N'||c=='n') flag=0; } return 0; } 10、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符个数。 #include char text[3][80]; upp=low=dig=spa=oth=0; for(i=0;i<3;i++) { printf(“please input line %d:n”,i+1); gets(text[i]); for(j=0;j<80 && text[i][j]!=' ';j++) { if(text[i][j]>='A'&& text[i][j]<='Z') upp++; else if(text[i][j]>='a' && text[i][j]<='z') low++; else if(text[i][j]>='0' && text[i][j]<='9') dig++; else if(text[i][j]==' ') spa++; else oth++; } } printf(“nupper case: %dn”,upp); printf(“lower case: %dn”,low); printf(“digit : %dn”,dig); printf(“space : %dn”,spa); printf(“other : %dn”,oth);return 0;} 11、输出以下图案:* * * * * * * * * * * * * * * * * * * * * * * * * #include int i,j,k; char space=' '; for(i=0;i<5;i++) { printf(“n”); printf(“ ”); for(j=1;j<=i;j++) printf(“%c”,space); for(k=0;k<5;k++) printf(“%c”,a[k]); } printf(“n”); return 0;} 12、有一行电文,已按下面规律译成密码:A>Z,B>Y,C>X„„a>z,b>y,c>x„„ 编程译回原文并输出密码和原文。#include char ch[80],tran[80]; printf(“input cipher code:”); gets(ch); printf(“ncipher code :%s”,ch); j=0; while(ch[j]!=' ') { if((ch[j]>='A')&&(ch[j]<='Z')) tran[j]=155-ch[j]; else if((ch[j]>='a')&&(ch[j]<='z')) tran[j]=219-ch[j]; else tran[j]=ch[j]; j++; } n=j; printf(“noriginal text:”); for(j=0;j putchar(tran[j]); printf(“n”); return 0;} 12、有一行电文,已按下面规律译成密码:a>z,b>y,c>x„„ 编程译回原文并输出密码和原文。#include char ch[80]; printf(“input cipher code:n”); gets(ch); printf(“ncipher code:%sn”,ch); j=0; while(ch[j]!=' ') A>Z,B>Y,C>X„„ { if((ch[j]>='A')&&(ch[j]<='Z')) ch[j]=155-ch[j]; else if((ch[j]>='a')&&(ch[j]<='z')) ch[j]=219-ch[j]; else ch[j]=ch[j]; j++; } n=j; printf(“original text:”); for(j=0;j putchar(ch[j]); printf(“n”); return 0;} 15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘ ’ 也要复制过去。‘ ’后面的字符不复制。#include int i=0,j=0; printf(“input string1:”); scanf(“%s”,s1); printf(“input string2:”); scanf(“%s”,s2); while(s1[i]!=' ') i++; while(s2[j]!=' ') s1[i++]=s2[j++]; s1[i]=' '; printf(“nThe new string is:%sn”,s1); return 0;} 15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘ ’ 也要复制过去。‘ ’后面的字符不复制。#include int i; printf(“input s2:”); scanf(“%s”,s2); for(i=0;i<=strlen(s2);i++) s1[i]=s2[i]; printf(“s1:%sn”,s1); return 0;} 第七章 1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。程序有误 #include int lcd(int,int,int); int u,v,h,l; scanf(“%d,%d”,&u,&v); h=hcf(u,v); printf(“H.C.F=%dn”,h); l=lcd(u,v,h); 习题 第三章 #include int d,p; double r,a,m; scanf(“%d %d %lf”,&d,&p,&r); a=(p/(p-d*r)); m=log(a)/log(1+r); if(p>0&&d>0) { if(d<=m*p) printf(“%.1f”,m); else printf(“God”); } else printf(“0.0”); return 0;} 勾股数 #include int a,b,c,n; scanf(“%d”,&n); for(a=1;a<=n;a++) { for(b=1;b<=n;b++) { for(c=1;c<=n;c++) { if(c*c==a*a+b*b) { if(a<=b) { printf(“%d %d %dn”,a,b,c); } } } } } return 0;} 第四章 计算分段函数值 #include float x,y; scanf(“%f”,&x); if(x<1)y=x; else if(x>=1&&x<10)y=2*x-1; else if(x>=10)y=3*x-11; printf(“%.2f”,y); return 0;} 找出三个数中最大的数 #include int a,b,c,max; scanf(“%d%d%d”,&a,&b,&c); max=a>b?a:b; if(c>max) max=c; printf(“%d”,max); return 0;} 10844成绩等级评分 #include int x; scanf(“%d”,&x); if(x>=0&&x<=100) { switch(x/10) { case 10: case 9: printf(“A”);break; case 8 : printf(“B”);break; case 7 : printf(“C”);break; case 6 : printf(“D”);break; default: printf(“E”);break; } } else printf(“error”); return 0;} 前续和后续字符 #include char x; x=getchar();switch(x){ case'0':printf(“first”);printf(“ %c”,x+1);break;case'9':printf(“%c ”,x-1);printf(“last”);break;case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': printf(“%c ”,x-1);printf(“%c”,x+1);break;default: printf(“error”);break; } return 0;} 20秒后的时间 #include int h,m,s; scanf(“%d:%d:%d”, &h,&m,&s); s=s+20; if(s>59) { s=s%60; m++; if(m>59) { m=m%60; h++; if(h>23) h=0; } } printf(“%02d:%02d:%02dn”, h, m, s); return 0;} 分期还款 #include int d,p; double r,a,m; scanf(“%d %d %lf”,&d,&p,&r); a=(p/(p-d*r)); m=log(a)/log(1+r); if(p>0&&d>0) { if(d<=m*p) printf(“%.1f”,m); else printf(“God”); } else printf(“0.0”); return 0;} 第五章 字母分类统计 #include char ch; int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0; while((ch=getchar())!='n') { if(ch<=127&&ch>=123) a++; else if(ch>=97&&ch<=122) b++; else if(ch<=96&&ch>=91) c++; else if(ch<=90&&ch>=65) d++; else if(ch>=58&&ch<=64) e++; else if(ch>=48&&ch<=57) f++; else if(ch>=33&&ch<=47) g++; else if(ch==32) h++; else i++; } printf(“%d %d %d %d”,d+b,f,h,a+c+e+g+i);} 水仙花数 #include int n,a,b,c; for(n=100;n<1000;n++) { a=n/100; b=(n%100)/10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) { printf(“%dn”,n); } } return 0;} 计算数列和 #include int a=1,n,i,sum=0; scanf(“%d”,&n); for(i=1;i<=n;i++) { sum=sum+a; a=a+2; } printf(“%d”,sum); return 0;} 自由落体 #include int i,n; double h=100.0,s=0.0,c=100.0; scanf(“%d”,&n); { s=s+c; h=h/2; c=2*h; } printf(“%.3lf”,s); printf(“%.3lf”,h); return 0;} 迭代法求平方根 #include float x1,x2,a; x2=1; scanf(“%f”,&a); x1=a/x2; while(fabs(x1-x2)>=1e-5) { x1=x2; x2=0.5*(x1+a/x1); } printf(“%.4fn”,x2); return 0;} 打印三角形 #include int n,k,i,j; scanf(“%d”,&n); for(i=0;i<2*n-1;i++) { k=abs(n-1-i); for(j=0;j { printf(“"); } for(j=0;j { printf(”*“); } printf(”n“); } return 0;} 勾股数 #include int a,b,c,n; scanf(”%d“,&n); for(a=1;a<=n;a++) { for(b=1;b<=n;b++) { for(c=1;c<=n;c++) { if(c*c==a*a+b*b) { if(a<=b) { printf(”%d %d %dn“,a,b,c); } } } } } return 0;} 第六章 18052插入数据 int x,i,t; scanf(”%d“,&x); a[15]=x; for(i=15;i>0;i--){ if(a[i] { t=a[i]; a[i]=a[i-1]; a[i-1]=t; } } 大于平均分 #include int a[10]; int i,sum=0,average,count; for(i=0;i<10;i++) { scanf(”%d“,&a[i]); } for(i=0;i<10;i++) { sum=sum+a[i]; } average=sum/10; count=0; for(i=0;i<10;i++) { if(a[i]>average) count++; } printf(”%d“,count); return 0;} 输出不同的数据 #include int a[20]; int i,t,p=0; for(i=0;i<10;i++) { scanf(”%d“,&a[i]); } for(i=0;i<10;i++) { for(t=0;t if(a[t]==a[i])break; if(t==i)printf(”%dn“,a[i]); } } 主对角线上的元素之和 #include int a[3][4],i,j,sum=0; for(i=0;i<3;++i) { for(j=0;j<4;++j) { scanf(”%d“,&a[i][j]); } } for(i=0;i<3;++i) { sum+=a[i][i]; } printf(”%dn“,sum); return 0;} 1051 鞍点 #include for(j=0;j<4;j++) { scanf(”%d“,&a[i][j]); } } for(i=0;i<3;i++){ max=a[i][0]; for(j=0;j<4;j++) { if(max { max=a[i][j];m=i;n=j; } } for(k=0;k<3;k++) { min=a[m][n]; if(min>a[k][n]) flag=1; } if(flag==0) { t=1; printf(”%dn“,a[m][n]);} flag=0;} if(t==0) printf(”NO“); return 0;} ASCII码值之和的差 #include char s1[80]; char s2[80]; int i,sum1=0,sum2=0; gets(s1); gets(s2); for(i=0;i { sum1+=s1[i]; } for(i=0;i { sum2+=s2[i]; } printf(”%d“,sum1-sum2); return 0;} 第七章 所有数字之和 #include if(n<10) return n; int res=0; res=(n%10)+sum(n/10); return res;} main(){ int n; scanf(”%d“,&n); printf(”%d“,sum(n));} 元音字母 #include int i,k=0; char c; for(i=0;*(s+i)!=' ';i++) { c=*(s+i); switch(c) { case'a': case'e': case'i': case'o': case'u': case'A': case'E': case'I': case'O': case'U':*(s2+k)=c;k++;break; default:break; } } *(s2+k)=' ';} int main(){ char str[81],str2[81]; gets(str); yuan(str,str2); printf(”%s“,str2);} 字符统计 #include int nS=0,a; while(*s!=' ') { a=*s; if(a==' ') nS++; else { if(a>='1'&&a<='9') nN++; else if((a>='a'&&a<='z')||a>='A'&&a<='Z') nL++; } s++; } return nS;} int main(){ char s[81]; int nS; gets(s); nS=statistics(s); printf(”%d%d%dn“,nL,nN,nS); return 0;} 选择排序 #include int i,j,k,tmp; for(i=0;i { k=i; for(j=i+1;j if(a[j] tmp=a[k];a[k]=a[j];a[i]=tmp; } } int main(){ int a[10]; int i; for(i=0;i<10;i++)scanf(”%d“,&a[i]); sort(a,10); for(i=0;i<10;i++)printf(”%dn“,a[i]); return 0;} X的N次方 #include if(n==0)return 1; else return x*F(x,(n-1));} int main(){ int x,n; scanf(”%d%d“,&x,&n); printf(”%d“,F(x,n)); return 0;} 行列互换 #include int temp; temp=*a;*a=*b;*b=temp;} void col(int a[][4],int i,int j){ int k; for(k=0;k<4;k++) swap((*(a+k)+i),(*(a+k)+j));} void row(int a[][4],int i,int j){ int k; for(k=0;k<4;k++) swap((*(a+i)+k),(*(a+j)+k));} int main(){ int a[4][4]; int i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) scanf(”%d“,&a[i][j]); col(a,0,2); row(a,0,2); col(a,1,3); row(a,1,3); col(a,0,3); row(a,0,3); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(”%d“,a[i][j]); printf(”n“); } return 0;} 学生信息统计 #include int i,j; for(i=0;i { double sum=0,av; for(j=0;j<5;j++) sum=sum+a[i][j]; av=sum/5.0; printf(”%.2f “,av); } printf(”n“);} void average2(double a[][5],int n){ int i,j; for(j=0;j<5;j++) { double sum=0,av; for(i=0;i sum=sum+a[i][j]; av=sum/n; printf(”%.2f “,av); } printf(”n“);} void top(double a[][5],int n){ int i,j; double max; for(j=0;j<5;j++) { max=a[0][j]; for(i=0;i { if(a[i][j]>max)max=a[i][j]; } printf(”%.2f “,max); } } int main(){ double a[10][5]; int i,j; for(i=0;i<10;i++) for(j=0;j<5;j++) scanf(”%lf",&a[i][j]); average(a,10); average(a,10); top(a,10); return 0;} C语言程序设计实验报告 学院 数学与信息技术 班级 学号 11130730 姓名 指导教师 实验1 简单程序设计 1.实验目的 (1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)输入三个整数,请把这三个数由小到大输出。试编写多种方法。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。 (3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。 4. 常见错误 (1)数据声明或语句后面缺少分号。(2)对被调函数没有声明。 (3)没有main函数或者有多个main函数。 5. 程序代码 #include t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);} 6. 实验结果 7. 心得体会 刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且n斜杠会写反,有时会忘记声明函数。 实验2 顺序结构程序设计 1.实验目的 (1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。(3)掌握算术运算符和赋值运算符。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。 4. 常见错误 (1)变量没有定义,直接使用。 (2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。(4)scanf函数的地址表列因该是变量地址,而不是变量名。 (5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6)没有在对应的位置输入与这些字符相同的字符。 5. 程序代码 #include s=r*r*p;//圆面积 sq=4*p*r*r;//圆球表面积 vq=4.0/3.0*p*r*r*r;//圆球体积 vz=p*r*r*h;//圆柱体积 printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: vq=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 6. 实验结果 7. 心得体会 这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。 实验3 选择结构程序设计 1.实验目的 (1)了解C语言表示逻辑变量的方法(2)学会正确使用关系运算符和逻辑运算符。(3)熟练掌握if语句和switch语句。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。(2)把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)注意关系运算符==和复制运算符=的区别。(2)if和else的匹配原则。 (3)在switch语句中正确使用break。 4. 常见错误 (1)赋值运算符=和关系运算符等号=搞混。(2)在if语句为复合语句时,忘记写{}。(3)if语句出现嵌套时,没正确配对。(4)switch语句中,没正确使用break。 5. 程序代码 #include 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,相应的等级是%cn”,score,grade);return 0;6. 实验结果 7. 心得体会 赋值运算符=和关系运算符等号=搞混。在if语句为复合语句时,忘记写{}。if语句出现嵌套时,没正确配对。 实验4 循环结构程序设计 1.实验目的 (1)熟练掌握循环语句中的for语句、while语句和do while语句的使用方法,以及这三种循环语句之间的转换方法。 (2)掌握编写循环结构程序的方法。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)通过键盘输入任意两个正整数,求其最大公约数和最小公倍数。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)循环结构程序的设计方法。 (2)while和do while循环之间的转换方法。 (3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。 4. 常见错误 (1)循环体为复合语句时,没用{}括起来。 (2)在while()和for()后面添加分号,使得循环体为空语句。(3)for括号里的分号和逗号用错。 (4)循环嵌套时,内循环的初始条件和循环体没正确设计好。 5. 程序代码 #include printf(“最小公倍数:%dn”,p);return 0;} 6. 实验结果 7. 心得体会 循环体为复合语句时,没用{}括起来。在while()和for()后面添加分号,使得循环体为空语句。for括号里的分号和逗号用错。循环嵌套时,内循环的初始条件和循环体没正确设计好。 实验5 数组的应用 1.实验目的 (1)掌握一维数组和二维数组的定义和引用。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。(2)用选择法对10个整数排序。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)在循环中,数组元素的引用。 (2)起泡排序法、选择排序法和插入排序法。 4. 常见错误 (1)数组定义时,没规定数组长度或者长度为一变量。(2)循环中数组元素的下标没正确表示。 (3)起泡排序、选择排序和插入排序算法没理解透。 (4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。(5)字符串的复制和比较直接使用赋值运算符和关系运算符。 5. 程序代码 #include for(j=i+1;j<10;j++) if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } printf(“选择排列:n”);for(i=0;i<10;i++) printf(“%5d”,a[i]);printf(“n”);return 0;} 6. 实验结果 7. 心得体会 数组定义时,没规定数组长度或者长度为一变量。循环中数组元素的下标没正确表示。起泡排序、选择排序和插入排序算法没理解透。起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。字符串的复制和比较直接使用赋值运算符和关系运算符。 实验6 函数的应用 1.实验目的 (1)掌握函数的定义和调用方法。 (1)掌握函数实参与形参的对应关系,以及“值传递”的方式。(1)掌握函数的嵌套调用和递归调用的方法。 (1)掌握全局变量和局部变量,动态变量以及静态变量的概念和使用方法。 2. 实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列,主函数通过调用它实现题目要求。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 3.实验重点和难点 (1)函数的定义和调用方法。 (2)函数的实参数为数组时,形参的形式以及实参和形参之间的数据传递方式。(3)函数的递归调用。 4. 常见错误 (1)函数没定义,就被调用。(2)函数定义了,又没被调用。(3)定义函数时,形参没规定类型。(4)函数调用时,实参前加类型。(5)被调函数没有声明 (6)嵌套调用和递归调用没理解透,使用错误。(7)全局变量和局部变量有效范围没能正确区分。 5. 程序代码 #include第三篇:C语言课后习题答案
第四篇:C语言课后习题
第五篇:c语言课后习题