声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处, 欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能 达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。以 后这里的答案简称“网络版” 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列六:chapter6 一、疑难知识点: 1.弄懂extern和static存储类型: (1)extern:修饰全局变量 默认修饰函数,一般省略 (2)static:修饰局部变量 修饰全局变量,这时变量只在其原文件内有效 修饰函数,函数只在其原文件中有效,也就是改变了默认extern函数特性 (3)在文件作用域下,inline函数默认是static型(不是extern),const常量默认为static型,当然可以 加extern来改变这种默认类型。 2.掌握一个由多个文件构成的程序该如何编写,包括包含头文件。见习题6.3 3.注意各类局部作用域,特别是if——else,switch,for等。书上p107的for作用域的例子有错误。 二、课后习题 6.1来自网络版加上一点自己,主要是不想打程序 (1) //file1.cpp int x=1; int func() { //... } //file2.cpp extern int x; int func(); void g() { x=func(); } //file3.cpp extern int x=2; //error: extern int变量若有赋值,则成定义 int g(); //error: 函数声明与前面不一致 void main() { x=g(); //... } (2) //file1.cpp int x=5; int y=8; extern int z; //file2.cpp int x; //error: int x;重复定义 extern double y; //error: y同一名字不同类型定义 extern int z; //error: z只有声明,却无定义。 若这时你没有使用这个声明就不会有问题 6.2比较容易的 答案: 25 6.3 我使用VC++6.0 我的做法是分别编写各个文件(包括头文件),然后打开含有主函数的文件,在工程菜单中选择添加工程,把其它文件都添加进来,最后还要把总的添加完的工程插入到一个工作区,否则下次还有重新添加。 6_3 #include<iostream> #include"multi_table.h" using namespace std; void main() { multi_table1(); cout<<"\n\n\n"; multi_table2(); cout<<"\n\n\n"; multi_table3(); cout<<"\n"; } 6_3_1 #include<iostream> #include"multi_table.h" using namespace std; extern int a; void multi_table1() { int i,j; for(i=0;i<=9;i++) { if(i==1)cout<<"----------------------------------------------------\n"; for(j=0;j<=9;j++) { if(i==0&&j==0)cout<<" * "; else if(i==0&&j)cout<<j<<" "; else if(j==0)cout<<" "<<i<<" "; else if(i*j<10)cout<<i*j<<" "; else cout<<i*j<<" "; } cout<<endl; } } 由于字数限制, 6_3_2 6_3_3 省略 头文件:multi_table.h void multi_table1(); void multi_table2(); void multi_table3();

评论