博文

07钱能的《C++程序设计教程》序列七:chapter7第三部分(2005-08-09 00:41:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。以后这里的答案简称“网络版” 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列七:chapter7 7.4 为了比较直接在原程序上修改 //#include <iostream.h> #include<iostream> using namespace std; void bubble(int[],int); void main() {   //int array[]={55,2,6,4,32,12,9,73,26,37};   int array[]={2,4,6,32,12,9,73,26,37};//为了测验,把原数组修改了一下   int len=sizeof(array)/sizeof(int);    //元素个数   for(int i=0; i<len; i++)              //原始顺序输出     cout <<array[i] <<",";   cout <<endl<<endl;   bubble(array, len);      //调用排序函数 } void bubble(int a[],int size)  ......

阅读全文(4239) | 评论:0

钱能的《C++程序设计教程》序列七:chapter7第二部分(2005-08-06 15:05:00)

摘要:序列七:chapter7 二、课后习题 7.1 这道题应该考虑若最小值不只一个的情况,这时应该把所有最小值的下标都打印出来 #include<iostream> using namespace std; void main() {     //int array[10]={12,91,83,12,29,93,56,12,88,72};     int array[10]={34,91,83,56,29,93,56,12,88,72};     int temp[10]={0};//记录所有最小值的下标值,开始时第一个元素最小     int i,count=1,temp2=array[0];         for(i=1;i<10;i++)         {             if(array[i]==temp2)                 temp[count++]=i;             if(array[i]<temp2)             {                 count=0;    ......

阅读全文(3273) | 评论:0

钱能的《C++程序设计教程》序列七:chapter7第一部分(2005-08-05 00:13:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。以后这里的答案简称“网络版” 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列七:chapter7 一、疑难知识点: 1.数组定义中的方括号里面必须是常量表达式,但是逗号表达式不行。基本上同switch——case 2.字符数组不必以\0结尾,字符数组经典的赋值方法是:char aa[]="hello";这时注意字符数组的元素共6个,包括\0,也可以是char aa[]={"hello"};或者最原始的char aa[]={'h','e','l','l','o','\0'};字符数组一般没有赋值的元素都是\o(这个仅是在我的机器上做的有限的实验的结论,没有标准依据) 3.当传递一个数组作为参数时,若要用到这个数组的大小时也必须一起传递过去,因为数组参数不能通过sizeof求得数组大小。如下例子: #include<iostream> using namespace std; int AA(int aa[]) {     return sizeof(aa); } void main() {     int aa[10]={1,2,3,5,7,8};     cout<<sizeof(aa)<<endl;     cout<<AA(aa)<<endl; } 结果是: 40 4 从这个结果我们还得出: 把sizeof用于数组时求得的是数组所占空间的大小而不是数组的元素的个数。在这里数组元素的个数为:si......

阅读全文(3625) | 评论:0

钱能的《C++程序设计教程》序列六:chapter6(2005-08-03 17:37:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处, 欢迎大家批评指正。 这一序列说明: 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() { &......

阅读全文(5771) | 评论:0

钱能的《C++程序设计教程》序列五:chapter5第二部分(2005-08-03 15:02:00)

摘要:二、课后习题 5.4这道题出得很不错,考察了很多知识点,只要有一点细节你没有注意就可能出现错误。 主要注意点: (1)数值调用是不改变值 (2)全局变量在任何一个函数内都会改变它的值 (3)静态变量只初始化一次(在函数调用时只在第一次赋值) 答案: Main--x=5,y=1,n=1 Func--x=6,y=21,n=11 Main--x=5,y=1,n=11 Func--x=8,y=31,n=21 5.5 #include<iostream> using namespace std; int fib(int n);//函数声明 void main() {     int n;     cout<<"Input an integer:";     cin>>n;     cout<<"第n项的值是:"<<fib(n)<<endl; } int fib(int n) {     int i,a=1,b=1,c=1;     for(i=3;i<=n;i++)     {         c=a+b;         a=b;         b=c;     }     return c; } 5.6 #include<iostream> using namespace std; double p(int n, double x)//函数声明和定义一起 {   if(n==0)     re......

阅读全文(3595) | 评论:0

钱能的《C++程序设计教程》序列五:chapter5第一部分(2005-08-03 02:59:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处, 欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能 达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。以 后这里的答案简称“网络版” 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列五:chapter5 一、疑难知识点: 1.函数概述: (1)区分函数定义和函数声明(其实就是函数原型) (2)函数定义不允许嵌套 (3)若函数定义和函数声明不一致,也就是参数类型不一致,则可以正常编译但会出现错误链接。若是返回 类型或者参数个数不一样,则会误认为是重载,这时返回类型不一样的是错的,另一个重载若都提供了各自 的函数定义则是正确的。当然,没有被调用的函数可以只有声明没有定义。 (4)函数没有返回类型在新的标准下是错的,不过我载VC++6.0上面竟然可以通过^_^ (5)无返回的函数也可以使用return,但不能返回值 (6)内联函数用inline声明,定义时可以省略inline。反之也可以只在定义时放inline,而声明时没有,但 是这时其实已经变成普通的函数了而不是inline函数。 2.注意分清代码、各类变量、常量等在内存中的存储区域 3.局部变量的类型修饰是auto,习惯上省略 4.全局变量定义前的所以函数定义不知道该变量。由此,全局变量的定义位置也是比较重要的。 5.在p94有这么一句话:C++允许int到long,int到double的转换。当实参是整数而重载函数一为long型参数 ,一为double参数时应该给以一个显式转化。我原来觉得在这种情况下应该时调用long参数的函数,因为说 到底long也是int。我在vc++6.0上试验结果就是这样. 例子: int aa(long); int bb(double); void main() {     int b=6;   ......

阅读全文(4059) | 评论:0

钱能的《C++程序设计教程》序列四:chapter4第四部分(2005-07-21 12:43:00)

摘要:因为字数限制,进行分割。 二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 4.09其实这三小题都是类似的,只是些许改动即可。因为我对第二章输出形式控制符不熟悉,因此直接打空格来对其显示。当然你可以使用setw()来显示空格。 (3) #include<iostream> using namespace std; void main() {     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&l......

阅读全文(3204) | 评论:0

钱能的《C++程序设计教程》序列四:chapter4第三部分(2005-07-21 12:42:00)

摘要:因为字数限制,进行分割。 二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 4.08其实这两小题都是类似的,只是些许改动即可。 (1) #include<iostream> using namespace std; void main() {     int i,j;     for(i=1;i<=19;i+=2)     {         for(j=1;j<=19-i;j++)//显示每一行前面的空白             cout<<" ";                  for(j=1;j<=i;j++)//显示#             cout<<"# ";         cout<<"\n\n";     } } (2) #include<iostream> using namespace std; void main() {     int i,j;     for(i=17;i>=10;i--)     {         for(j=1;j<=17-i;j++)//显示每......

阅读全文(3066) | 评论:0

钱能的《C++程序设计教程》序列四:chapter4第二部分(2005-07-21 12:41:00)

摘要:因为字数限制,进行分割。 二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 4.02 #include <iostream> using namespace std; void main() {   int i,temp1=1,temp2=0;   for(i=1;i<=15;i++)   {       temp1*=i;       temp2+=temp1;   }   cout<<"所求的值为:"<<temp2<<endl; } 4.03.这一题是求水仙花数 #include <iostream> using namespace std; void main() {   int i,a,b,c;   for(i=100;i<=999;i++)   {       a=i%10;//个位       b=(i/10)%10;//十位       c=i/100;//百位       if(a*a*a+b*b*b+c*c*c==i)cout<<i<<"是水仙花数\n";   } } 4.04这一题是求完数 #include <iostream> using namespace std; void main() {   int i,j,temp=0;   for(i=1;i<1000;i++)   {       for(j=1;j<=i......

阅读全文(3571) | 评论:0

钱能的《C++程序设计教程》序列四:chapter4第一部分(2005-07-21 12:41:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。以后这里的答案简称“网络版” 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列四:chapter4 一、疑难知识点: 1.三种循环while,do-while,for的一些注意点 (1)文中提到,在这三种循环的判断语句中可以使用逗号语句。其实在C++中好像可以使用语句的地方大多都可以使用逗号语句(但是case里面的常量表达式不能使用逗号语句)。 但需要注意的是:在Java中是没有逗号语句的,在Java中唯一可以使用逗号表达式的是在for循环的第一和第三个语句(第二的判断语句不行哦)。 (2)do-while的do的循环块中可以是没有语句、一条语句或者是多条语句。没有语句和有多条语句时均不能省略{},若只有一跳语句则可以省略{} . 还应该注意while语句的后面要分号; 2.有关switch (1)case里面只能是常量表达式,但不能是逗号表达式(逗号表达式也可以得到常量) (2)switch和case里面只能是int型(当然也包括char、enum、bool) (3)当把case放在最后一个是不能省略冒号;,若不是在最后一句可以省略冒号 (4)注意default语句出现的位置对输出结果的影响 相关例子: #include<iostream> using namespace std; void main() {     const int  b=6;     int c=5;     int a;     cin>>a;    &n......

阅读全文(3963) | 评论:0