第2课 C++中的引用
- 格式:doc
- 大小:50.00 KB
- 文档页数:7
电子信息学院实验报告书课程名:面向对象程序设计题目:实验2 C++对C的扩充实验类别:设计研究型班级:BX1004学号:姓名:施程程1、实验目的〔1〕了解在面向过程程序设计中功能的扩充与增强,并善于在编写过程中应用这些新的功能。
〔2〕进一步熟悉在所用的系统上编辑、编译、连接和运行C++程序的方法。
〔3〕进一步熟悉C++程序的结构和编程方法。
2、实验内容要求事先编好解决下面问题的程序,然后上机输入并调试运行。
(1)输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,再进行编译,直到没有错误,然后进行连接和运行,分析运行结果。
#include<iostream>using namespace std;int main〔〕{int a,b;c=add〔a,b〕cout<<“a+b=”<<c<<endl;return 0;}int add〔int x,int y〕{z=x+y;return〔z〕;}(2)编一个程序,用来求2个或3个正整数中的最大数。
1、用不带默认参数的函数实现。
2、用带有默认参数的函数实现。
比照两种方法,分析用带有默认参数的函数的优点和应用场合,总结如何选择默认b参数的值。
请分析此题中默认参数的值应该在什么范围。
(3)对3个变量按由小到大顺序排序,要求使用变量的引用。
1、使用指针方法2、使用变量的的引用请总结引用时要注意什么问题。
(4)有5个字符串,要求对他们按由小到大的顺序排列,用string方法,(5)编译一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。
1、用重载函数实现。
2、用函数模板实现。
比较这两种方法各有什么特点,什么情况下可以用函数模板代替重载函数?3.实验结果〔1〕程序:#include <iostream>using namespace std;int main( ){int add(int x,int y);int a,b,c;cin >> a >> b;c=add(a,b);cout <<" a+b=" << c <<endl;return 0;}int add(int x,int y){int z;z=x+y;return(z);}运行结果:〔2〕程序1:用不带默认参数的函数实现#include <iostream>using namespace std;int main( ){int max(int a,int b,int c);int max(int a,int b);int a,b,c;cin >> a >> b >> c;cout << " max(a,b,c)= " << max(a,b,c) << endl;cout << " max(a,b)= " <<max(a,b) << endl;return 0;}int max(int a,int b,int c){if(b>a) a=b;if(c>a) a=c;return a;}int max(int a,int b){if(a>b) return a;else return b;}运行结果:程序2:用带有默认参数的函数实现#include <iostream>using namespace std;int max(int a,int b,int c=0){if (b>a)a=b;if (c>a)a=c;return a;}int main(void){int a,b,c;cin >> a >> b >> c;cout << " max(a,b,c)= " << max(a,b,c) << endl;cout << " max(a,b)= " <<max(a,b) << endl;return 0;}运行结果:有时多次调用同一函数时用的是同样的实参直,C++提供的带有默认参数的的使用更加方便,给形参一个默认值,这样形参就不必一定要从实参取值了。
《C语言程序设计》教学大纲课程名称:C语言程序设计课程英文名称:C Language Programming课程代码:RJ21001K40学分:4总学时:64讲课学时:56实验学时:8课程性质: 必修课考核方式:考试总评成绩:平时成绩30%+期末考试成绩70%先修课程:无适用专业:软件工程、物联网工程等工科专业开课教研室(系):软件工程系一、课程简介本课程是软件工程专业及相关工科专业的专业必修课(通识课程),没有前导课程,所需的计算机信息技术基础,在中学已经涉及。
后续课程有《数据结构》及其它需要进行编程实践课程。
它是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行,是培养计算机编程理论知识和实践能力的基础课程。
很多国内外大学计算机专业和理工类专业,都将其作为一门必修的课程。
二、课程目标通过本课程的学习,学生应了解C语言发展历史, 掌握C语言的基本语法、程序设计的基本思想。
通过本课程的学习,使学生掌握传统的结构化程序设计的一般方法,以C为语言基础,培养学生严谨的程序设计思想、灵活的思维方式及较强的编程实践能力,掌握顺序、选择和循环等程序结构。
培养学生阅读程序、编写程序和调试程序的能力,使学生能够选择与熟练运用现代化集成开发工具编写、测试和调试程序。
并以此为基础,让学生逐渐掌握复杂软件的设计和开发手段,理解面向对象程序设计思想,为后续专业课程的学习打下扎实的理论和编程实践基础。
三、课程与毕业要求、知识和能力对应关系该课程属于专业基础课,重点培养计算机编程语言理论基础知识和编程实践能力,为后续课程如数据结构、操作系统等涉及的算法程序实现或伪代码描述奠定基础。
该课程将培养学生基本的程序设计与实现能力,结合后续课程学习进一步培养应用计算机语言和基础软件平台,完成软件系统的构造、测试与实现能力。
四、课程重点、难点(一)课程重点第1章: C程序的组成和书写规范; C程序的上机步骤。
第2章: 数据基本类型和运算符,++和--运算的含义和正确使用;赋值表达式的正确使用; C语言的逻辑运算。
第2课说和做——记闻一多先生言行片段课时练习1.阅读下面的文段,完成题目。
他正向古代典藉(钻研研究钻探),有如向地壳.寻求宝藏.。
仰之弥高,越高,攀得越起劲;钻之弥坚,越坚,钻得越qiè而不舍。
他想吃尽、消化尽我们中华民族几千年来的文化史,jiǒnɡjiǒnɡ目光,一直远射到有史以前。
他要给我们(衰弱衰微衰败)的民族开一剂(救良拯救救济)的文化药方。
(1)给文段中加点字注音,根据拼音写汉字。
地壳.()宝藏.()qiè()而不舍jiǒngjiǒng()目光(2)文段中有错别字的一个词语是“”,这个词语的正确写法是“”。
(3)从括号内选择恰当的词语填写在文段中的横线上。
2.下列句中加点的成语运用有误的一项是()A.中学举行中考前誓师大会,庄严的国旗下,十六个教学班方阵棋布操场,声震山河,气冲斗牛....,引得校园外的路人纷纷驻足,交口称赞。
B.他家的保姆是个品行端正的人,从来都是目不窥园....。
C.上课时如果心不在焉....,课后做练习就会遇到困难。
D.我们与父母在许多方面都是迥乎不同....的,但这并不能成为我们排斥父母的借口。
3.下列句子中没有语病的一项是()A.他无法理解劳动内涵、无法珍视劳动价值的根本原因是没有经历过劳动造成的。
B.能否在公众场所保持人与人之间的安全距离,是巩固防疫成果的重要前提。
C.参加庆功会的老科学家们欢聚一堂,兴致勃勃地畅谈祖国航天事业的未来。
D.我不但认识他,我妈妈也认识他。
4.对下列各句运用的修辞手法分析正确的一项是()(1)人家说了再做,我是做了再说。
(2)(闻先生)大骂特务,慷慨淋漓,并指着这群败类说:“你们站出来!你们站出来!”(3)他正向古代典籍钻探,有如向地壳寻求宝藏。
(4)他,是口的巨人。
他,是行的高标。
A.引用反复拟人排比B.对比反复比喻对偶C.对比引用拟人比喻D.引用引用比喻排比5.依次填入下面一段文字横线上的语句,衔接最恰当的一项是()“二八原则”的简单定义是:花百分之二十的力气,达到百分之八十的效果。
四川电子机械职业技术学院《C语言》课程标准适用专业:工业机器人技术专业编写单位:工业机器人技术教研室编写人:毛鹏枭审核人:审批人:批准时间:工业机器人技术《C语言》课程标准课程名称:C语言课程性质:专业基础学分:4计划学时:64适用专业:工业机器人技术一、制定依据课程定位:《C语言》是一门专业必修课,是学习其它工科课程的基础。
掌握程序设计的前提是掌握程序设计语言,C语言以其灵活性和实用性受到了广大计算机应用人员的喜爱。
一旦掌握了C语言,就可以较为轻松地学习后续的Java程序设计、数据库技术等程序设计语言。
本课程以程序设计思想为主线,介绍C语言的基本概念和程序设计的思想和方法,培养学生运用C语言解决实际问题能力。
本课程是高职高专工业机器人的一门专业基础必修课。
本课程目的是培养高职高专学生计算机编程基本思想、编程基本技能及逻辑思维能力,掌握运用C语言编程来解决岗位工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础。
二、课程性质设计思路,根据本专业职业岗位能力的要求,确定了以"市场为导向、能力为本位"的专业人才培养模式和课程体系,- 1 -以培养职业技能为重点,结合职业证书的考证需要来对本课程进行课程设计,具体思路如下:首先成立由本专业骨干教师和IT行业技术专家组成的专业指导委员会,对《C语言》课程进行总体规划和设计,制定课程教学标准、确定课程教学内容,并定期召开专业指导委员会会议,根据行业的发展变化,实时对教学方案进行调整和修改。
其次通过一、两个涵盖C语言的主要内容的典型项目,提出问题,通过对问题的分析将项目分解成若干任务模块,从而引导出相关的知识点。
在具体的知识点的介绍中又可精选案例,加强学生的感性认识,加深学生对基本概念和基本方法的理解,调动他们的学习积极性。
教学中做到理论与实践相结合,基础理论突出实用性、适应性。
由于计算机行业的特点,知识更新快,技术进步快,如果关起门来教学,理论与实际脱节,学生就业时就不能适应市场的需求。
c语言函数的课程设计一、课程目标知识目标:1. 理解C语言中函数的基本概念,掌握函数的定义、声明和调用方法。
2. 学会使用标准库函数,理解常用库函数的功能及其参数。
3. 掌握函数的返回值、形参和实参的概念,理解局部变量和全局变量的作用域。
4. 掌握函数递归调用的原理和实现方法。
技能目标:1. 能够编写具有独立功能的C语言函数,并进行正确的声明和调用。
2. 能够运用函数实现模块化编程,提高代码的可读性和可维护性。
3. 能够通过函数递归解决实际问题,如计算阶乘、斐波那契数列等。
4. 学会使用调试工具对函数进行调试和优化,提高程序的稳定性。
情感态度价值观目标:1. 培养学生主动探究、解决问题的学习态度,增强其对编程的兴趣。
2. 培养学生的团队合作意识,学会在团队中分工与协作,共同完成项目任务。
3. 培养学生的创新思维,鼓励其在编程实践中尝试新方法,勇于挑战困难。
4. 培养学生的责任感和规范意识,使其养成良好的编程习惯,遵循编程规范。
本课程针对高年级学生,在学生已掌握C语言基本语法的基础上,进一步深化对函数的理解和应用。
课程注重实践,强调学生的主动参与和动手能力。
通过本课程的学习,使学生能够熟练运用函数,提高编程水平,为后续学习数据结构、算法等课程打下坚实基础。
二、教学内容1. 函数的定义与声明- 函数的概念及其作用- 函数的定义格式- 函数的声明与调用- 函数参数与返回值2. 函数的调用与传参机制- 传值调用与引用调用- 形参与实参的关系- 函数调用的栈帧原理3. 标准库函数的使用- 常用标准库函数介绍- 数学函数、字符串处理函数等- 头文件与库函数的关系4. 局部变量与全局变量- 局部变量的作用域与生存周期- 全局变量的定义与使用- 静态变量的概念与作用5. 函数递归- 递归的概念与原理- 递归函数的编写与调试- 阶乘、斐波那契数列等递归问题6. 函数模块化编程实践- 模块化编程的思想与方法- 函数封装与接口设计- 实际项目案例分析与实现本教学内容按照课程目标,结合教材章节安排,由浅入深地组织。
2《梅岭三章》分层作业一、积累运用1.下列加点字的注音有误的一项是( )A.丛莽.(mǎng) 旌.旗(jīng) 投身.革命(shēn)B.阎.罗(yán) 国门悬.(xuán) 义成仁.(rén)C.有涯.(yá) 当.纸钱(dāng) 人间遍种.(zhònɡ)D.烽.烟(fēnɡ) 艰.难(jiān) 血雨腥.风(xīng)2.写出下列加点词语在诗句中的意思和运用的修辞方法。
(1)南国烽烟..正十年意思:_____ 修辞:_____(2)血雨腥风....应有涯意思:_____ 修辞:_____(3)取义成仁....今日事意思:_____ 修辞:_____(4)人间遍种自由花...意思:_____ 修辞:_____3.下列句子的朗读节奏划分不恰当的一项是()A.投身革命/即为家B.血雨腥风/应有涯C.人间/遍种/自由花D.创业/艰难百战/多4.下面的诗句与“此去泉台招旧部,旌旗十万斩阎罗”的意境相同的是()A.生当作人杰,死亦为鬼雄。
(李清照)B.王师北定中原日,家祭无忘告乃翁。
(陆游)C.生命诚可贵,爱情价更高。
若为自由故,二者皆可抛。
(裴多菲)D.人生自古谁无死?留取丹心照汗青。
(文天祥)5.下列句子排序正确的一项是()①诗这种文学样式,偏重于抒怀言志。
②诗与其他文体相比,能更为充分地显示作者的品格和情怀。
③优秀的诗篇承担着丰富和美化人们精神生活的使命,它向我们展示世界,表达心灵,并启示真理④情绪和感情是诗的基础⑤但它一般不直接告诉读者应如何如何,而是以潜移默化的方式净化人们的灵魂A.①③④②⑤B.③④①⑤②C.②①③⑤④D.①④②③⑤6.下列对诗歌内容的理解有误的一项是( )A.这三首诗在形式上独立成篇,内容上却是一个整体。
B.这三首诗中运用了多种修辞手法,如引用“阎罗”的典故和“取义成仁”的传说。
C.“此头须向国门悬”运用典故表明心迹:大业未成,诗人死不瞑目。
第2课 C++中的引用 1.引用是C++新增的概念,C没有。 2.C没有真正意义上的布尔类型,C++有! 3.true和false在C++中是关键字。 4. C到C++的升级8 C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool; C++中的bool可取的值只有true和false; 理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。有些这么做,有些可能不这么做。 Tip: true代表真值,编译器内部用1来表示 false代表非真值,编译器内部用0来表示 5.下面的代码输出什么? #include int main(int argc, char *argv[]) { int a; bool b = true; printf("b = %d, sizeof(b) = %d\n", b, sizeof(b)); b = 3; a = b; printf("a = %d, b = %d\n", a, b); b = -5; a = b; printf("a = %d, b = %d\n", a, b); a = 10; b = a; printf("a = %d, b = %d\n", a, b); b = 0; printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; } 6. bool类型只有true(非0)和false(0)两个值 C++编译器会在赋值时将非0值转换为true,0值转换为false。 7. C到C++的升级9 三目运算符的升级 下面的代码正确吗?如果正确输出什么? #include int main(int argc, char *argv[]) { int a=1; int b=2; (aprintf("a=%d,b=%d\n",a,b); printf("Press enter to continue ..."); getchar(); return 0; } 8. C语言中的三目运算符返回的是变量值,不能作为左值使用 C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方; 注意: 三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。 9. C++中的引用 变量名回顾 变量是一段实际连续存储空间的别名; 程序中通过变量来申请并命名存储空间; 通过变量的名字可以使用存储空间; 10. 在C++中新增加了引用的概念 引用可以看作一个已定义变量的别名。 引用的语法:Type& name = var; #include int main(int argc, char *argv[]) { int a = 4; int& b = a; b = 5; printf("a = %d\n", a); printf("b = %d\n", b); printf("&a = %08X\n", &a); printf("&b = %08X\n", &b); printf("Press enter to continue ..."); getchar(); return 0; } Tip: 普通引用在声明时必须用其它的变量进行初始化 11. 引用的意义 引用作为其它变量的别名而存在,因此在一些场合可以代替指针; 引用相对于指针来说具有更好的可读性和实用性。 #include void swap(int& a, int& b) { int t = a; a = b; b = t; } int main(int argc, char *argv[]) { int a = 4; int b = 5; swap(a, b); printf("a = %d\n", a); printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; } Tip: 引用作为函数参数声明时不进行初始化。 12. const引用 在C++中可以声明const引用; const Type& name = var; const引用让变量拥有只读属性。 #include int main(int argc, char *argv[]) { int a = 4; const int& b = a; int* p = (int*)&b; //b = 5; *p = 5; printf("a = %d\n", a); printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; } 13. 当使用常量对const引用进行初始化时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名。 #include int main(int argc, char *argv[]) { const int& b = 1; int* p = (int*)&b; //b = 5; *p = 5; printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; } Tip: 使用常量对const引用初始化后将生成一个只读变量。 可以用常量对const引用进行初始化,但不能用常量对普通引用进行初始化。 14. 引用有自己的存储空间吗? #include struct TRef { int& a; int& b; }; int main(int argc, char *argv[]) { printf("sizeof(TRef) = %d\n", sizeof(TRef)); printf("Press enter to continue ..."); getchar(); return 0; } 15. 引用在C++中的内部实现是一个常指针。 Type& name←→Type* const name Importance: C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。 从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏。 void f(int& a) void f(int * const a) { { a=5; ←→ *a = 5; } } 在本质和原理上是这样的 Type& name←→Type* const name int& b=a ←→ int* const b=&a 16.证据 #include struct TRef { int& a; int& b; int& c; }; int main(int argc, char *argv[]) { int a = 1; int b = 2; int c = 3; TRef rA = {a, b, c}; printf("&a = %08X\n", &a); printf("&b = %08X\n", &b); printf("&c = %08X\n", &c); printf("&rA = %08X\n", &rA); printf("sizeof(TRef) = %d\n", sizeof(rA)); printf("Press enter to continue ..."); getchar(); return 0; } 17. 当函数返回值为引用时 若返回栈变量 不能成为其它引用的初始值 不能作为左值使用 若返回静态变量或全局变量 可以成为其他引用的初始值 即可作为右值使用,也可作为左值使用 18. 引用返回值示例 #include int& f() { static int a = 0; return a; } int& g() { int a = 0; return a; } int main() { int a = g(); int& b = g(); f() = 10; printf("a = %d\n", a); printf("b = %d\n", b); printf("f() = %d\n", f()); printf("Press enter to continue ..."); getchar(); return 0; } 19. C++对三目运算符做了什么?