博文

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(......

阅读全文(3958) | 评论: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)
            {
        &n......

阅读全文(3054) | 评论: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;

   &nb......

阅读全文(3381) | 评论: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来自......

阅读全文(3819) | 评论: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;
}
......

阅读全文(3300) | 评论: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参数时应该给以一个显......

阅读全文(3720) | 评论: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<<"    ";
            el......

阅读全文(3019) | 评论: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--......

阅读全文(2724) | 评论: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;......

阅读全文(3301) | 评论: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;
  &n......

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