文档库 最新最全的文档下载
当前位置:文档库 › 第八章 语言的接触 2

第八章 语言的接触 2

第八章 语言的接触 2
第八章 语言的接触 2

第八章语言的接触

一、名词解释

借词

语言联盟

语言替换

语言底层

共同语

洋泾浜

克里奥耳语

二、填空

1、语言发生接触的前提条件是。

2、语言接触从根本上说是接触。

3、共同语分为两种:和。

4、现代汉民族共同语,即,是以为基础方言,以为标准音,这主要是的原因。

5、世界语是由波兰医生提出来的。

三、简答题

1.谈谈语言接触与语言分化的差异与联系。

2.从音义关系看,举例说明汉语的借词有哪些表现形式。

3.谈谈借词与社会的关系。

4.从语言接触的角度谈谈汉语方言中文白异读的形成与发展。

5.谈谈语言替换过程中“双语”的作用。

6.谈谈洋泾浜与混合语的联系与区别。

7.世界语为什么不能代替自然语言。

答案:

一、名词解释

1.借词也叫音义外来词,它指的是音与义都借自外语的词。如英语中的telephone借子到汉语中是“德律风”,其音义都来自英语。借词是民族关系的一种见证,是研究民族发展史的一项重要材料。借词在语言历史的研究中也有非常重要的作用。

2.语言联盟即“语言的区域分类”。是指一片地理区域内的不同语言不仅在词汇上相互有大量的借贷,而且在语音、语法系统的结构格局、结构规则方面也十分相似,但各语言仍有相当数量的核心词跟彼此不同。

3.语言换用也称“语言替代”或“语言融合”,是不同民族在长期接触或融合过程中产生的一种语言现象。指的是一个民族的全体或部分成员放弃使用本民族语言而转用另一民族语言的现象。

4.在语言替换的过程中,换用的强势语言会留下被替换语言的痕迹,这类痕迹通常称为语言底层。

5.共同语是社会打破地域隔阂、走向统一时出现的一种语言形式,是在一种方言基础上建立起来的一个民族或一个国家通用的语言。

6. “洋泾浜”是当地人在和外来的商人、水手、传教士等打交道的过程中学来的一种变了形的外语。“洋泾浜”的共同特点是:语音经过当地语言音系的适当改造,语法规则减少到最低限度,词汇的项目比较少,往往要借助于迂回曲折的说法指称事物。

7. 混合语是由洋泾浜发展而来的一种有声交际工具,是一种建立在两种或两种以上语言系统基础上形成的并被特定的言语社团作为母语学习使用一种语言。洋泾浜的特点之一在于它是一定场合下使用的特殊语言,没有人把它当作母语来学习使用。但是在一定条件下,它也可能被社会采用为主要的交际工具,由孩子们作为母语来学习。在这种情况下,洋泾浜就变成了混合语,又叫克里奥耳语(Creole,是混血儿的意思)

二、填空

1.社会的接触

2.使用语言的人之间

3.民族共同语国家共同语

4.普通话北方方言北京语音政治

5.柴门霍夫

三、简答题

1. 一种语言内部分成几种不同的方言,或者这些方言进而分成几种不同的语言,这种现象,叫做语言分化。语言分化的原因:社会的分化。社会在自己的发展过程中会因为各种不同的

原因导致社会内部分隔甚至分裂。分隔开来的各部分之间的交际减少甚至消失,而各个部分之间的交往要相对频繁,这样,它们在语言使用上会出现出现各自不同的特点,彼此变得不同,久而久之,同一种语言就会分化成不同的方言。如果社会分裂成不同的社会,同一种语言就可能分化成不同的语言。

语言的社会属性决定了语言发生接触的前提条件是社会接触,从根本上说是使用语言的人之间的接触,由于人接触到了不同语言,也就是不同的表达方式,随之产生了改变自己语言习惯的需求。社会接触有不同的方式和不同的程度,这样就造成语言接触的不同。

语言接触可以分为五种主要类型: 1.不成系统的词汇借用:如果不同的社会、民族在地域上不相邻,接触上也只有一般的贸易往来或文化交流,则语言的变动就只限于吸收对方语言中有而自己语言中没有的事物或观念的名称,也即只有文化层面的、为数有限的借词。

2.语言(区域)联盟和系统感染:在地域上比邻而居、深度接触(指有大量同地混居的人口,有通婚关系)的若干民族,许多人会成为双语或多语者。如果接触是相对平衡的,则各民族的语言会长期地“和平互协”:不仅各民族的词汇会互相大量借用,音系和语法上也会互相感染而趋同。结果是一片区域内的若干语言在语音、语法结构类型上都十分相似(即系统感染),但各个语言仍保持着相当数量自己语言的核心词根,这就是语言联盟。

3.语言替换和底层残留如果若干民族在地域上比邻而居,接触极为密切但不平衡(指经济文化、人口的不平衡),则经过长期的双语或多语并存阶段后,各语言相对平衡的状态会打破,经济文化和人口占优势的民族的语言会替换其他民族的语言,成为唯一的胜利者。被替换的语言不再使用,只在优势语言中留下自己的一些特征,这就是“底层”。

4.通用书面语、民族共同语进入方言或民族语的层次随着社会的发展,通用书面语发展成为更高形式的民族共同语或国家共同语。语言的这些高层形式通过读书识字等特别途径传播,所及之地不一定地域相邻。因社会分化程度的不同,通用书面语或民族共同语与地方方言或民族语言的差异程度不同,对地方方言或民族语言的影响也有不同。推平方言或替换民族语言是一种常见的可能

5.洋泾浜和混合语两种或几种语言混合而成的临时交际语叫做洋泾浜。如果后来作为母语传递给后代,就叫做混合语。

语言的接触与分化的共同原因都是社会的接触和分化。原来不同的社会会有后起的接触,亲属语言和方言在分化后也可能会有后起的新的接触。

2. 1)音译:用汉语近似音节转写外来词读音。词是音义结合的统一体,只有音和义都是从另一民族语言借来的词语,即音译词,才算是严格意义上的借词。汉语的借词很早就有了。

“菩萨”、“塔”、“袈裟”、“刹那”等是随佛教的传入借自印度;“胡同”、“褡裢”、“站”、“蘑菇”等是借自蒙语的词;

2)音译加汉语语素:先音译外语词,再加上一个表示类名的汉语语素,使词义明确。啤酒,卡车,卡片,法兰绒,拖拉机等。

3)半音译半意译:这种借词是一部分是音译,一部分是意译。如“冰激凌←(英)ice cream ,ice 意译为“冰”,cream音译为“激棱”;“迷你裙”←(英) miniskirt, mini(小)音译为“迷你”,“skirt”意译为“裙”。对于这类既非完全音译,又非完全的意译的词语,使用词语的人仍觉得它是“舶来品”,而非“国货”。

4)音译兼意译:即在音译的同时,又选用与原词意义相关的汉语语素意译,既照顾到了原词的语音形式,又能显示意义,音义双关。如,酷cool,秀show。很多音译兼意译词是对外语的词义经过各种不同角度的联想而创造出来的。在这个创造过程中,为了保证意思上的关联或感情上的褒贬,甚至可以放弃语音上更为相近的音节。如:Coca,cola:可口可乐。保持了原词的韵律结构,具有饮料的意义,还含有“可口、令人愉悦”的内部意义。再如:TOEFL:托福。

3. (1.)社会接触的强度决定了借词的限度。一方面,社会接触的程度浅则语言的接触程度也浅,两个不相邻的,交流很少的国家之间介入彼此词汇的概率就小的多,如中国和一些阿拉伯国家。另一方面,社会接触的程度深,则语言的接触程度也深。日语借入大量的汉语词就是很好的例证。

(2.)语言社会在文化中的接触状况决定了借词的方向与内容。如,随着佛教的传入,汉语就借用相应的梵语中的佛教词汇,傣族地区的汉语常常借入表示当地事物的傣语词。

在词语的借用过程中存在着借出去又借回来的现象。最典型的是汉语中的所谓借形词,即把日语中用汉字记录的词直接吸收到汉语中来并按汉语普通话来读音。

有的是日语赋予了汉语借词以新的意义,而汉语又从日语中借了回来。

选举、劳动、助教、讲师、教授、封建、反对、博士、学士

有的则是日语借用汉语材料构成新词,而这些新词又被汉语借用。

哲学、共产、政党、支部、反应

4.文白异读是最早被学者们注意到的方言字音分歧现象,也是比较初步的研究结论。文白异读是汉语方言中一种特有的现象,一些汉字在方言中有两种读音。一种是读书识字所使用的语音,称为文读,又叫读书音、文言音、字音;另一种是平时说话时所使用的语音,称为白读,又叫做说话音、白话音或话音。在一些方言中,同一个字在不同的词中、不同的用途时有着不同的读法,如客家话里,无论在口语还是书面语中,“生”字单用表示“生娩”或表

示“活着”的时候读作【seng1】,而在固定的词中却读作【sang1】,这种现象也被称为文白异读,前者是白读,後者是文读。文白异读中的文读是用方言的音系模拟标准音,白读是方言土音。所以文白异读最普遍的特点是,文读一般比较接近官方标准语言。由於不同历史时期汉字标准音不同,文读大致分两种情况:一、古代以《广韵》为标准音,方言模拟《广韵》的发音作为文读音,官话区的文白异读多为此种情况,闽南语的文读也是保留唐朝官话语音。二、元代以来以北方官话作为通用音,南方方言模拟官话的发音作为文读音,比如上海话中“大衣”的“大”念做 [da],是文读,接近普通话;“大人”的“大”念做 [du],是白读。第二种情况导致了北方方言文白异读的现象较少,而南方方言则较多。更精确的说法是,一种「方言」之内的「白读层」与「文读层」通常代表该语言在历史上的不同时期中接触当时代某种汉语(通常来自北方)的读音,从而像地层一样有所积淀而并存。例如闽南语原本保留三国时代、魏晋南北朝时代的汉字读音,成为该语言的「白读层」;至唐代以後又引进新一套可能与当时官话类似的读音,便形成该语言的「文读层」。另外,一般来说,方言固有语词、日常生活上常用的动作、器物、语法功能词多是白读,借自于古代文言文、官话或现代华语(普通话)以及其他不同「方言」的词、科学术语、成语、专有名词、姓名等则多是文读。而在不同的人群中,文白异读的现象也不一样。一般来说,年轻人、教育水平高的人、会说普通话的人更多使用文读。在不同的环境中,文白异读也不一样。正式场合多用文读,日常生活则多用白读。但是,两者实是担负该语言当中不同的功能,习惯用白读音读出的固有语词并不适合改用文读音代换;习惯用文读音读出的借词也无法改用白读音。因此不应当将文读音与白读音赋予不同的文化评价,而应当同等地视为该语言不可或缺的两套汉字读音;并且也不宜为了「标准化」或「优雅化」某种语言起见而强迫将固有语词全部改用文读音发出。

5.双重语现象:指一个社会同时使用两种或多种语言作为交际工具的现象。

民族杂居地区,一个民族或其中的多数人能同时讲两种不同语言的现象大量存在。双语现象是语言融合中的必然现象,是两种或几种语言统一为一种语言的必经过渡阶段。民族杂居区,不同民族间的交际、来往非常频繁,掌握双语以至多语是生活的基本要求,也是非常平常的事情,所以人们同时掌握几种语言也就一点不奇怪了。

同一种语言的方言和共同语之间也是一种双语现象。如一个人从小生长在某个方言区,一直使用这种方言,当他走出该方言区与其它方言区的人进行交际时,为顺利沟通,他就必须放弃自己的方言而使用双方都能听懂的普通话或学习对方的方言,这种现象在我们日常生活中是经常可以见到的。

语言融合过程大体上是先出现双重语言现象,最后导致一种语言排挤、替代另一种语言而完成语言的统一。

语言融合的过程不是通过语言结构从量变到质变的方式来实现的,是通过单语和双语的交替转换实现的,即经历了一个从单语到双语,再由双语到新的单语的过程。

由此可见,语言的融合必然要经过一个双语阶段,没有这个阶段,语言融合就不可能实现。因为只有双语这种形式才能保证在用别的语言来置换本民族语言的过程中不会造成语言使用的中断。

双语现象是两种语言融合的相持阶段,可能很短或很长。其发展结果有两种:如两个民族向融合的方向发展,相互间的关系越来越密切,其中一个民族就会放弃自己民族的语言而使用经济文化较发达一方的语言,最后完成语言的融合;如两个民族向分离的方向发展,那么,他们就会继续各说自己的语言,语言各自独立,最后也不融合。

6. 洋泾浜又称皮钦语,是两种或几种语言在一定社会条件下因互相接触而产生的混杂语言。最早是17世纪以后殖民地、半殖民地的通商口岸常见的一种语言现象,是当地人在同外来殖民者打交道过程中学来的一种变形外语,是彼此在语言上妥协而产生的一种能使双方勉强沟通的临时性交际工具。洋泾浜语具有以下的一些特征:

第一,在语音上往往为了适应当地语言的语音系统而有较大的改动。

第二,词汇成分比较贫乏,主要来自外来语言,有时也夹杂一些当地语言的词汇成分。

第三,结构简单,语法则是不同语言的混合,且尽可能简化,形态变化基本消失。常常用一些描述件的短语,来表达别的语言中用单词表达的意义。

第四,洋泾浜语一般只用于口头交际,所以只有口语形式而没有书面语形式。

洋泾浜语的前途只有两个:随着社会条件和交际环境的变迁而消亡;进一步发展为一个国家或地区的通用的交际工具,即克里奥尔语。

克里奥耳(Creole)又称混合语,是作为某个社会群体的母语来使用的、由两种或多种语言混合而成的语言。

B.克里奥耳语也是一种洋泾浜语。不同的是:洋泾浜语是一定场合下使用的一种特殊语言,没有人把它当作母语来学习和使用;克里奥耳语是某一社会的主要交际工具,可作为母语或第一语言来学习和使用。

C.洋泾浜语一旦在某个社会的全体成员的头中扎下了根,转变为克里奥耳语,就会扩大词汇量,完善语法规则,并迅速发展丰富起来,最后可能变得同其他语言一样完备。它还会有自己的文字系统,有自己的书面语言,并形成自己的文学传统。

7. 世界语有很多优点1)“世界语”(Esperanto)兼采欧洲各种语言的词汇材料和语法格局,加以简化划一,可以说是欧洲各大语言的一个合理化的公分母,也可以说是一种人造的洋泾浜;2)它模拟自然语言,没有枯燥乏味矫揉造作的味道;3)它简单易学,懂得欧洲语言的人都有一种似曾相识的感觉。世界语正因为有这些优点,所以问世以后受到广泛的欢迎,各国都有爱好者用它来互相交往,举行国际大会,翻译出版各种译著。现在,各国的爱好者有几百万人。我国也有世界语爱好者的组织,并出版了刊物和读物。

(2)缺陷

不过,世界语毕竟是一种人造的国际辅助语,它不能代替自然语言作为人们的母语或第一语言。前面谈过,语言一进入使用就会发生演变,演变的结果就会出现分歧而形成方言。世界语作为一种国际辅助语,更需要不时进行规范,统一口径,才能保持其通用性。就语言的基础来讲,世界语的国际性其实只限于印欧系语言区,对其他地区的人来说,它仍然是一种陌生的不易掌握的工具。这也不能不说是一个很大的局限。

c语言 第8章 函数习题

第8章函数习题 A卷 1. 单项选择题 (1)C 语言总是从函数开始执行。 A A. main B. 处于最前的 C.处于最后的 D. 随机选一个 (2)函数在定义时,省略函数类型说明符,则该函数值的类型为。A A. int B. float C. long D. double (2)以下函数,真正地没有返回值。 B A. int a(){int a=2;return (a);} B. void b(){printf("c");} C. int a(){int a=2;return a;} D. 以上都是 (3)在C 语言中,有关函数的说法,以下正确的是。A A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用 C. 函数不可嵌套定义,但可嵌套调用 D. 函数不可嵌套定义,也不可嵌套调用 (4)以下函数调用语句中,含有实参的个数为。C fun((2,3),(4,5+6,7)); A. 1 B. 2 C. 5 D. 6 (5)函数调用可以在。D A. 函数表达式中 B. 函数语句中 C. 函数参数中 D. 以上都是 (6)被调函数返回给主调函数的值称为。C A. 形参 B. 实参 C. 返回值 D. 参数 (7) ,可以不进行函数类型说明。D A. 被调函数的返回值是整型或字符型时 B. 被调函数的定义在主调函数定义之前时 C. 在所有函数定义前,已在函数外预先说明了被调函数类型 D. 以上都是 (8)被调函数通过语句,将值返回给主调函数。D A. if B. for C. while D. return (9)被调函数调用结束后,返回到。D A.主调函数中该被调函数调用语句处 B.主函数中该被调函数调用语句处

c语言第八章函数上机作业

第八章 通过本章实验作业应达目标 1. 掌握定义和调用函数的方法 2.掌握函数嵌套调用的方法 3.掌握通过“值传递”调用函数的方法 4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法 本章上交作业 程序8_1.c、8_2.c、8_4.c、8_5.c上传至211.64.135.121/casp。 实验一判断素数的函数 【实验目的】 掌握用函数实现判断素数的方法。 【实验内容】 编写一个函数int prime(int a),判断参数是否为素数。函数有一个形参a,当a 为素数时,返回1,反之,返回0。以8_1.c命名本程序并上交。 函数声明如下: int prime( int a ); 主函数如下: #include #include void main ( ) { int a, b; printf("please input a number:\n"); scanf("%d", &a); b = prime( a ); if ( b = =1 ) printf("the number is a prime number."); else printf("the number is not a prime number."); } int prime( int a ) { …… }

实验二求最大公约数与最小公倍数 【实验目的】 熟练函数的嵌套调用。 【实验内容】 编写两个函数,分别求两个正整数的最大公约数和最小公倍数,结果作为函数返回值返回。在main函数中实现输入与输出。以8_2.c命名本程序并上交。 主函数如下: #include void main( ) { int gongyueshu( int a, int b ); int gongbeishu( int a, int b ); int a, b, c, d; printf("please input two integer numbers:"); scanf("%d%d", &a, &b); c=gongyueshu(a, b); d=gongbeishu(a. b); printf("gongyueshu is %d\n gongbeishu is %d",c,d); } int gongyueshu( int a, int b ) { ……} int gongbeishu( int a, int b ) { …… } 【实验提示】 可以在最小公倍数中嵌套调用最大公约数函数。最小公倍数=a*b/最大公约数 实验三求数组逆序的函数 【实验目的】 熟练掌握操作数组的方法及数组名作函数参数的使用方法。 【实验内容】 从键盘输入int型数组a[ 20 ]的20 个元素值,编写一个函数实现对数组元素数据的逆序放置。即第1个元素与第20个元素互换,第2个元素与第19个元素互换,……,第10个元素与第11个元素互换。请完善下述程序并以8_3.c命名本程序。 #include void main( ) { void nixu( int a[ ], int n ); /* 逆序函数声明 */

C语言第8章习题及答案

第八章 用一个数组存放图书信息,每本书是一个结构,包括下列几项信息:书名、作者、出版年月、借出否,试写出描述这些信息的说明,并编写一个程序,读入若干本书的信息,然后打印出以上信息。#include <> typedef struct { char Name[20]; char Author[20]; int Date_Year; int Date_Month; int loaned; } BOOK; #define N 10 void main() { BOOK books[N]; int i; for (i=0;i #include <> typedef struct { char s[20];

C语言课后习题答案第八章

作业八:函数程序设计答案 (一)选择题(30分) 1.以下正确的函数定义形式是A__。 A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y); 2.以下正确的函数形式是D__。 A)double fun(int x,int y) { z=x+y; return z; } B)fun(int x,y) { int z; return z; } C)fun(x,y) { int x,y; double z; z=x+y; return z; } D)double fun(int x,int y) { double z; z=x+y; return z; }(重要) 3.以下正确的说法是A__。 在C语言中A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 4.若调用一个函数,且此函数中没有return语句,则正确的说法是D__。 该函数A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值(重要) 5.以下不正确的说法是B__。 C语言规定A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是B__。 A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 7.以下程序有语法性错误,有关错误原因的正确说法是C__。 main() { int G=5,k; void Prt_char(); ……

第八章 语言的接触 2

第八章语言的接触 一、名词解释 借词 语言联盟 语言替换 语言底层 共同语 洋泾浜 克里奥耳语 二、填空 1、语言发生接触的前提条件是。 2、语言接触从根本上说是接触。 3、共同语分为两种:和。 4、现代汉民族共同语,即,是以为基础方言,以为标准音,这主要是的原因。 5、世界语是由波兰医生提出来的。 三、简答题 1.谈谈语言接触与语言分化的差异与联系。 2.从音义关系看,举例说明汉语的借词有哪些表现形式。 3.谈谈借词与社会的关系。 4.从语言接触的角度谈谈汉语方言中文白异读的形成与发展。 5.谈谈语言替换过程中“双语”的作用。 6.谈谈洋泾浜与混合语的联系与区别。 7.世界语为什么不能代替自然语言。 答案: 一、名词解释

1.借词也叫音义外来词,它指的是音与义都借自外语的词。如英语中的telephone借子到汉语中是“德律风”,其音义都来自英语。借词是民族关系的一种见证,是研究民族发展史的一项重要材料。借词在语言历史的研究中也有非常重要的作用。 2.语言联盟即“语言的区域分类”。是指一片地理区域内的不同语言不仅在词汇上相互有大量的借贷,而且在语音、语法系统的结构格局、结构规则方面也十分相似,但各语言仍有相当数量的核心词跟彼此不同。 3.语言换用也称“语言替代”或“语言融合”,是不同民族在长期接触或融合过程中产生的一种语言现象。指的是一个民族的全体或部分成员放弃使用本民族语言而转用另一民族语言的现象。 4.在语言替换的过程中,换用的强势语言会留下被替换语言的痕迹,这类痕迹通常称为语言底层。 5.共同语是社会打破地域隔阂、走向统一时出现的一种语言形式,是在一种方言基础上建立起来的一个民族或一个国家通用的语言。 6. “洋泾浜”是当地人在和外来的商人、水手、传教士等打交道的过程中学来的一种变了形的外语。“洋泾浜”的共同特点是:语音经过当地语言音系的适当改造,语法规则减少到最低限度,词汇的项目比较少,往往要借助于迂回曲折的说法指称事物。 7. 混合语是由洋泾浜发展而来的一种有声交际工具,是一种建立在两种或两种以上语言系统基础上形成的并被特定的言语社团作为母语学习使用一种语言。洋泾浜的特点之一在于它是一定场合下使用的特殊语言,没有人把它当作母语来学习使用。但是在一定条件下,它也可能被社会采用为主要的交际工具,由孩子们作为母语来学习。在这种情况下,洋泾浜就变成了混合语,又叫克里奥耳语(Creole,是混血儿的意思) 二、填空 1.社会的接触 2.使用语言的人之间 3.民族共同语国家共同语 4.普通话北方方言北京语音政治 5.柴门霍夫 三、简答题 1. 一种语言内部分成几种不同的方言,或者这些方言进而分成几种不同的语言,这种现象,叫做语言分化。语言分化的原因:社会的分化。社会在自己的发展过程中会因为各种不同的

C语言第8章练习及答案

1、有以下程序 int fun1(double a){return a*=a;} int fun2(double x,double y) {double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b);} main() {double w;w=fun2(1.1,2.0);……} 程序执行后变量w中的值是 ( C ) A)5.21 B)5 C)5.0 D)0.0 2、有以下程序: fun(int x,int y){return(x+y);} main() {int a=1,b=2,c=3,sum; sum=fun((a++,b++,a+b),c++); printf("%d\n",sum); } 执行后的输出结果是(C)。 A)6 B)7 C)8 D)9 3、有以下程序 int f1(int x,int y){return x>y?x:y;} int f2(int x,int y){return x>y?y:x;} main() { int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f; printf("%d,%d%d\n",e,f,g);} 程序运行后的输出结果是(A) A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7 4、有以下程序: fun(int x) {int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p;} main() { printf("%d\n",fun(7));} 执行后的输出结果是(C)。 A)7 B)3 C)2 D)0 5、有以下程序: void fun2(char a,char b) { printf("%c%c",a,b);} char a='A',b='B'; void fun1(){ a='C'; b='D';} main() {fun1(); printf("%c%c",a,b); fun2('E','F'); } 程序的运行结果是(A)。 A)CDEF B)ABEF C)ABCD D)CDAB 6、有以下程序 int fun(int x[],int n) {static int sum=0,i; for(i=0;i,程序的输出结果是10 。 9、以下程序运行后的输出结果是15。int f(int a[], int n) { if (n >= 1) return f(a, n-1)+a[n-1]; else return 0; } main()

C语言知识学习上机题目整合百科园第八章南信大

第八章 以下叙述中正确的是() 若有以下语句 typedefstruct S {int g; char h;}T; A.可用T定义结构体变量 B.T是struct S类型的变量 C.可用S定义结构体变量 D.S是struct类型的变量 当定义一个结构体变量时,系统分配给它的内存是()。 A.结构体中最后一个成员所需内存量 B.成员中占内存量最大的容量 C.结构体中第一个成员所需内存量 D.各成员所需内存量的总和 若有以下定义: struct link { int data; struct link *next; }a,b,c,*p,*q;

且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。 则能把c插入到a和b之间形成新的链表的语句是() A.p->next=&c;q->next=p->next; B.p.next=q;q.next=p.next; C.p->next=q; q->next=&b; D.a.next=c; c.next=b; /*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。 请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/ #include #include #define N 8 struct slist { double s;

C语言程序设计教案 第八章 函数

第八章函数课题:第八章函数§1~§4 教学目的:1、掌握函数定义的一般形式 2、掌握函数调用的一般形式 教学重点:教学难点:函数定义、调用的一般形式形式参数和实际参数 步骤一复习引导 一个C语言源程序可由一个主函数和若干个辅助函数组成。 由主函数调用其他函数,其他函数也可以互相调用。 步骤二讲授新课 §8.1 概述 例8.1 main( ) { printstar( ); print_message( ); printstar( ); } printstar( ) { printf( “ ********** \n”); } print_message( ) { printf(“How do you do ! \n”); } 说明: ?1、一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位。 ?2、一个C程序由一个或多个源程序文件组成。这样可以分别编写、分别编译,提高调度效率。 ?3、C程序的执行从main 函数开始,在main函数中结束整个程序的运行。 ?4、所有函数都是平行的,即函数不能嵌套定义,函数可以互相调用,但不能调用main 函数。 ?5、从用户使用的角度看,函数有两种:标准函数(库函数)和用户自己定义的函数 ?6、从函数的形式看,函数分为两类:无参函数和有参函数 §8.2 函数定义的一般形式 (一)无参函数的定义形式 类型标识符函数名( ) { 函数体(包括声明部分和执行部分) } 例:printstar( ) { printf( “ ********** \n”); } (二)有参函数定义的一般形式 类型标识符函数名(形式参数表) { 函数体(包括声明部分和执行部分) }

C语言第八章函数部分复习题

函数复习题 一.选择题 1.以下正确的函数定义形式是:() a) double fun(int x,int y) b) double fun(int x;int y) c) double fun(int x,int y); d) double fun(int x,y); 2.以下正确的函数形式是:() a) double fun(int x,int y) { z=x+y; return z; } b) fun(int x,y) { int z; return z; } c) fun(x,y) { int x,y; double z; z=x+y; return z; } d) double fun(int x,int y) { double z; z=x+y; return z; } 3. 以下正确的说法是:() a) 实参和与其对应的形参各占用独立的存储单元 b) 实参和与其对应的形参共占用一个存储单元 c) 只有当实参和与其对应的形参同名时才共占用存储单元 d) 形参是虚拟的,不占用存储单元 4. 以下程序有语法性错误,有关错误原因的正确说法是:()

main() { int G=5,k; void prt_char(); …… k=prt_char(G); …… } a) 语句void prt_char();有错,它是函数调用语句,不能用void 说明 b) 变量名不能使用大写字母 c) 函数说明和函数调用语句之间有矛盾 d) 函数名不能使用下划线 5. 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式是:() a) f(int array[][6]) b) f(int array[3][]) c) f(int array[][4]) d) f(int array[2][5]) 6. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:() a) extern b) register c) auto d) static 7. 若使用一维数组名作函数实参,则以下正确的说法是:()

C语言程序设计(第3版)何钦铭 颜 晖 第8章 指针

第8章指针 【练习8-1】如果有定义”int m, n = 5, *p = &m;”与m = n等价的语句是B 。 A.m = *p; B. *p = *&n; C. m = &n; D. m = **p; 解答: A:p是指向m的指针变量,所以*p等价于m。即m=m。 B:&n是n的地址,*&n是n的值,即把n的值赋给p指向的值m。即m=n。 C:&n是n的地址。即把n的地址赋给m。 D:**p是指p指向的指针所指向的值,在此无意义。 故选B。 【练习8-2】调用函数求两个数的和与差:计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2, float *psum, float *pdiff),其中op1和op2是输入的两个数,*psum 和*pdiff 是计算得出的和与差。 解答: #include void sum_diff(float op1,float op2,float *psum,float *pdiff); int main(void) { float op1,op2,sum,diff; printf("Input op1 and op2: ");

scanf("%f%f",&op1,&op2); sum_diff(op1,op2,&sum,&diff); printf("%f+%f=%f;%f-%f=%f \n",op1,op2,sum,op1,op2,diff); return 0; } void sum_diff(float op1,float op2,float *psum,float *pdiff) { *psum=op1+op2; *pdiff=op1-op2; } 【练习8-3】两个相同类型的指针变量能不能相加?为什么? 解答: 不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C 语言中指针变量相加是非法的。 【练习8-4】根据表8.2 所示,这组数据的冒泡排序其实循环到第6 遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1 次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。 解答: 设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag 值为1。当该轮循环结束后检查flag 值,如果变为1 说明发生了数据

c语言第8章函数

第8章函数 1.以下程序的输出结果是( ) A、6 9 9 B、6 6 9 C、6 15 15 D、6 6 15 int d=1; fun(int p) { static int d=5; d+=p; printf("%d ",d); return(d); } main( ) { int a=3;printf("%d \n",fun(a+fun(d)));} 答案:C 注解:函数fun调用两次,第一次调用的实参是全局变量d的值1,在函数调用执行过程中,输出的是局部静态变量d;第二次调用的实参是第一次调用的返回值和变量a的和,输出的仍是局部静态变量d的值。注意静态变量的定义和初始化是在第一次使用时进行的,在以后的使用过程中,保留上一次的值,不再初始化。2.若有以下调用语句,则不正确的fun函数的首部是() A、void fun(int m,int x[]) B、void fun(int s,int h[41]) C、void fun(int p,int *s) D、void fun(int n,int a) main( ) { … int a[50],n; … fun(n,&a[9]); … } 答案:D 注解:从主函数中fun函数的调用格式可以看出,fun函数的两个形参的类型,第一个形参是整型变量,第二个形参是变量的地址,则必须是数组名或者是指针。 3.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是() A、3 B、4 C、5 D、有语法错 答案:A 注解:该函数调用语句中,含有的实参分别是rec1,rec2+rec3表达式计算后的值和(rec4,rec5)逗号表达式计算后值。 4.有如下程序 int runc(int a,int b) { return(a+b);} main( ) { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r);

第八章 C语言习题及答案(第八章)

8-1 编写程序,将10个数34,3,29,63,70,16,85,82,90,93存放于一组数组中,求出这十个数的和及平均值。 解:#include "stdio.h" void main() { int a[10]={34,3,29,63,70,16,85.82,90,93}; int i ,sum=0; float average ; for(i=0;i<10;i++) { sum=sum+a[i] ; } average=sum/10.0; printf("sum=%d,average=%f\n",sum,average); } 运行结果:sum=565,average=56.5000 思考:数组有何特点?此问题如果不用数组进行处理将会怎样? 8-2 编写程序,求存放于上题数组中10个数的最大值,最小值及所在的位置。 解:#include "stdio.h" void main() { int a[10]={34,3,29,63,70,16,85,82,90,93}; int i,sum,max,min,d_max,d_min; max=min=a[0]; d_max=d_min=0; for(i=1;i<10;i++) { if(a[i]>max) {max=a[i];d_max=i;} if(a[i]

运行结果:max=93,a[9] Min=3,a[1] 思考:数组a[i]中i的变化意味着什么? 8-3 编写程序,从键盘读入50个数存放于一数组中,求出该数组中最大值、最小值及所在位置。 解:#include "stdio.h" void main() { float a[50],max,min; int i,d_max,d_min; for(i=0;i<50;i++) scanf("%f",&a[i]); max=min=a[0]; d_max=d_min=0; for(i=1;i<50;i++) { if(a[i]>max) {max=a[i];d_max=i;} if(a[i]

C语言——第八章函数

定义无参函数: 类型标识符函数名() {声明+语句} 定义有参数的函数: 类型标识符函数名(形式参数列表) {声明+语句} 不带返回值的函数类型为空类型,即void类型。该函数中不应出现return语句。 若需要返回值,则在语句部分加入return(表达式); 语句。return的数据类型必须与函数类型标识符相同。 return后面的括号可以不要,直接使用return 表达式的方式。 return语句代表着函数结束,return后的语句不再执行。 如果在定义函数时,未指明函数类型,则默认为int型,故函数标识符可省略,但一般建议写出。 定义函数时所用的参数叫做形参,在未调用函数时,不为其分配内存单元,当函数被调用时,为形参分配内存单元,在调用结束时释放。在函数调用时,所输入的参数叫做实参。实参形参的类型必须相同或者赋值相容。函数调用中,实参的值不会发生变化。即函数调用处理的是与实参值相同的形参。 不同系统在接受实参时,对实参的处理顺序不一样,有的自右向左,有的自左向右。如: i=2;f(i,++i); 自右向左为f(3,3); 自左向右为f(2,3); 应尽量避免这种容易产生混乱的引用方法。 程序所要调用的函数必须是已经存在的库函数或者已经定义的用户函数。若用户函数的定义的位置在调用它的函数的定义位置前,则无需声明,若用户函数的定义的位置在调用它的函数的后面,则需要进行声明。声明方式和定义变量相类似,如:int a(); 声明函数时,形参的参数名可以省略。编译系统只检查参数个数及参数类型。 另外,若被调用函数为整型或已在文件的开头进行了申明,则可以在main函数内不进行声明。 C语言中的函数定义不能进行嵌套定义,即一个函数内部定义另一个函数,但可以进行嵌套调用。注意:是函数的定义内部不能有其他函数的定义,但可以在函数的定义内部调用另一个函数的定义。 在调用一个函数过程中又出现间接或直接调用该函数本身,称为函数递归调用。 直接调用即:f1调用f1;间接调用即f1调用f2,f2再调用f1; 递归问题经典问题: 汉尼塔问题:定义一个函数hanoi,运用递归思路来解决问题。

c语言第8章 编译预处理及位运算习题答案

编译预处理习题 一.单项选择题 1.在宏定义#define A 3.897678中,宏名A代替一个()。 A)单精度数 B)双精度数 C)常量 D)字符串 2.以下叙述中正确的是 A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间 3.C语言的编译系统对宏命令的处理()。 A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行的 D)在对源程序中其它语句正式编译之前进行的 4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式 是()。 A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅在源程序所在目录搜索 D)仅仅搜索当前目录 5.以下说法中正确的是 A)#define和printf都是C语句 B)#define是C语句,而printf不是 C)printf是C语句,但#define不是D)#define和printf都不是C语句 6.#define A 3.897678 #include main( ) { printf(“A=%f ”,A); } 程序运行结果为()。 A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b #define LJ(a,b) (a)*(b) 在后面的程序中有宏引用:x=LI(3+2,5+8); y=LJ(3+2,5+8); 则x、y的值是()。 A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=21 8.有以下程序 # define f(x) (x*x) main() { int i1, i2; i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ; printf("%d, %d\n",i1,i2); } 程序运行后的输出结果是

谭浩强C语言完整详细答案(第8章)

谭浩强C语言答案 8.1//最大公约数与最小公倍数 #include int gys(int a,int b) { int m,n,t,r; if(a

#include void gen(float a,float b,float c) { float k1,k2; if(b*b-4*a*c<0) printf("该函数没有实数根!\n"); else if(b*b-4*a*c==0) { k1=-b+sqrt(b*b-4*a*c); printf("该函数有两个相同的根为:%3.2f",k1/2); printf("\n"); } else { k1=(-b+sqrt(b*b-4*a*c))/(2*a); k2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("该函数有两个不同的根为:%3.2f,%3.2f",k1,k2); printf("\n"); } } void main() { float a,b,c; printf("请输入三个实数:\n"); scanf("%f%f%f",&a,&b,&c); gen(a,b,c); } 8.3//是否为素数 #include #include void sushu(int a) { int i; for(i=2;i<=a-1;i++) if(a%i==0) {printf("%d不是素数",a);break;} else {printf("%d是素数",a);break;} } void main() { int a; printf("请输入一个实数:\n");

C语言函数章节选择题(新)

1.在C语言中,全局变量的存储类别是: A) static B) extern C) void D) register A 2.C语言中,凡未指定存储类别的局部变量的隐含存储类别是: A) 自动(auto) B) 静态(static) C) 外部(extern) D) 寄存器(register) A 3. 在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:________。 A) extern B) register C) auto D) static D 4. 若有以下调用语句,则正确的fun函数首部是 main() { ∶ ∶ int a;float x; ∶ ∶ fun(x,a); ∶ ∶ } A) void fun(int m,float x) B) void fun(float a,int x) C) void fun(int m,float x[]) D) void fun(int x,float a) B 5. 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 A) 3 B) 4 C) 5 D) 有语法错误 A 6. 以下程序的运行结果是。 #include main() { int k=4,m=1,p; p=func(k,m); printf("%d, ",p); p=func(k,m); printf("%d\n",p); } func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; } A) 8,17, B) 8,17

第八章 函数(含答案)

第八章函数 一、选择题 1.以下正确的说法是【A】。 在c语言中:A)实参和与其对应的形参各占用独立的存储单元 B)实参相与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 2.以下正确的说法是【C】。 A)定义函数时,形参的类型说明可以放在函数体内 B)return后边的值不能为表达式 C)如果函数值的类型与返回值类型不一致,以函数值类型为准 D)如果形参与实参的类型不一致,以实参类型为准 3.c语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是【C】。 A. 地址传递 B. 由实参传给形参,再由形参传回给实参 C. 单向值传递 D. 由用户指定传递方式 4. 以下程序有语法性错误.有关错误原因的正确说法是【 C 】。 main() {int G=5,k; void prt_char(); ..... k=prt_char(G); .....} A)语句void prt_char();有错,它是函数调用语句,不能用void说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 5.c语言允许函数值类型缺省定义,此时该函数值隐含的类型是【B】。 A)float型 B)int型 C)long型 D)double型 6.c语言规定,函数返回值的类型是由【D】。 A)return语句中的表达式类型所决定 B)调用该函数时的主调函数类型所决定 C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定 7.下面函数调用语句含有实参的个数为【B】 func((expl,eexp2),(exp3,2xp4,exp5)) A)1 B)2 C)4 D)5 8.以下正确的描述是【B】。 在c语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以识套 c)函数的定义和函数的调用均不可以嵌套 D)函数的定义相函数的调用均可以嵌套 9.以下子程序段是选出能被3整除且至少有一位是5的两位数,打印出这样的数及其个数,请选择填空。

C语言程序设计第四版第八章答案

第八章指针 8.1输入三个整数,按由小到大的顺序输出。main() { int a,b,c,*p1,*p2,*p3,t; scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&c; 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("%d,%d,%d\n",*p1,*p2,*p3); } 或 main() {int a,b,c,*p1,*p2,*p3,t; scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&c; if(a>b) {t=*p1;*p1=*p2;*p2=t;} if(a>c) {t=*p1;*p1=*p3;*p3=t;} if(b>c) {t=*p2;*p2=*p3;*p3=t;} printf("%d,%d,%d\n",a,b,c); } 8.2输入三个字符串,按由小到大的顺序输出#define N 3 #define M 20 main() {char str0[N][M],str1[M],*p,*q; int i,l,m,n; q=str0; for(;p0) {strcpy(str1,q);strcpy(q,q+1);strcpy(q+1,str1);} m=strcmp(q,q+2); if(m>0) {strcpy(str1,q);strcpy(q,q+2);strcpy(q+2,str1);} n=strcmp(q+1,q+2); if(n>0)

【C语言】第八章-指针作业

第八天—指针课后作业 注意:本次课是面向所有想学和爱学的同学们,所以,希望大家能真真正正的在这里学到技能,这是我们安排的相应课后作业,希望大家认真完成,及时提交到QQ群里,QQ群号:344401117,加群请备注。不然我们不会通过哦,因为这个群也是服务于我们此次直播课的学生。最后,大家有任何的疑问和建议都可以在群里提出来哦,我们虚心倾听。也希望大家帮助我们扩散、宣传,我们希望让更多想学和爱学的同学们听见我们的声音。 指针小结: 1.指针是一个变量,它存储另一个对象的内存地址。 2.指针的声明由基本类型、星号(*)和变量名组成。 3.为指针赋值,赋值运算符右侧必须是一个地址。如果是普通变量,则需要在前面加一个 取地址运算符&;如果是另一个指针变量或者是一个数组,不需要加&运算符。 4.运算符*用于返回指针指向的内存地址中存储的值。 5.指针算术运算的含义是指针的移动,将指针执行加上或者减去一个整数值n的运算相当 于指针向前或向后移动n个数据单元。 6.指针可以执行比较相等的运算,用来判断两个指针是否指向同一个变量。 7.指向数组的指针,存储的是数组中元素的地址。数组data的第(i+1)个元素的地址可表示 为&data[i]或(data+i)。 课后作业 跟我选 1.()提供了直接操作内存地址的变量。 A.结构 B.指针 C.数组 D.变量 2.下面声明一个指向整型变量x的指针p的语句,正确的是()。 A.int *p,x; p = x; B.int *p,x; p = *x; C.int *p,x; p = &x; D.int *p,x; *p = &x;

3.已知: float y,*ptr_val; ptr_val = &y; 则与*ptr_val等同的是()。 A.*y B.ptr_val C.y D.&y 4.()运算符用于获取变量的地址。 A.* B.? C.= D.& 5.已知:int arr[] = {1,2,3,4},*p = arr; 下列对数组元素的地址值的引用中正确的是()。 A.++p B.*p C.&arr D.&arr[2] 6.已有定义int k = 2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。 A.k = *ptr1 +*ptr2 B.ptr2 = k C.ptr1 = ptr2 D.k = *ptr1 *(*ptr2) 7.若有定义:int a[5];则a数组中首元素的地址可以表示()。 A.&a B.a+1 C.k = *ptr1 +*ptr2 D.k = *ptr1 +*ptr2 跟我练 1.使用指针交换两个数的值。 2.定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出。 3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一数对换。 4.编程输入一行字符,运用指针找出其中的大写字母,空格,数字,及其他字符的个数。

相关文档