博文
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(......
钱能的《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......
钱能的《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......
钱能的《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来自......
钱能的《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;
}
......
钱能的《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参数时应该给以一个显......
钱能的《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......
钱能的《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--......
钱能的《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;
钱能的《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......