声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 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) //冒泡排序 { int i,temp; int noswap=1;//设定一个标志,若有经过交换则令为0 for(int pass=1; pass<size; pass++){ //共比较size-1轮 for(i=0; i<size-pass; i++) //比较一轮 if(a[i]>a[i+1]){ temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; noswap=0; } if(noswap)break;//没有经过交换,也就是已经排序完成了 else noswap=1; for(i=0; i<size; i++) //比较一轮后就输出 cout <<a[i] <<","; cout <<endl; } } 7.5 #include<iostream> using namespace std; void main() { const int n=4; int i,j,sum=0; int array[n][n]; cout<<"请输入"<<n*n<<"个整数"<<endl; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>array[i][j]; for(i=0;i<n;i++)//斜对角线 sum+=array[i][i]; for(i=0,j=n-1;i<n;i++,j--)//反斜杆对角线 sum+=array[i][j]; cout<<"所求的数值是:"<<sum<<endl; } 7.6 这题不难但是比较繁琐,不知道我对题目的意思是否正确 #include<iostream> using namespace std; int FindHightest(int n,int j); int FindFailure(int i,int m); double Average(int n,int j); int student[5][4]={{88,95,92,91}, {61,65,37,77}, {92,81,73,80}, {51,55,60,60}, {77,63,70,80}}; void main() { char *course[4]={"math","English","physical","computer"}; int i,j,temp; for(i=0;i<4;i++) { temp=FindHightest(5,i); cout<<"课程"<<course[i]<<"成绩最高的学生号是:"<<temp<<endl; } for(i=0;i<5;i++) { temp=FindFailure(i,4); if(temp==0) { cout<<"学生号是:"<<i<<"的学生有不及格课程," <<"其各课成绩分别是:"; for(j=0;j<4;j++) cout<<course[j]<<":"<<student[i][j]<<","; cout<<endl; } } for(i=0;i<4;i++) { cout<<course[i]<<"的平均成绩是:"<<Average(5,i)<<endl; } } int FindHightest(int n,int j)//找出这个课程成绩最高的学生号 { int i,temp=0; for(i=0;i<n;i++) if(student[i][j]>student[temp][j])temp=i; return temp; } int FindFailure(int i,int m) { int j; for(j=0;j<m;j++) if(student[i][j]<60)return 0; return 1; } double Average(int n,int j) { int i; double sum=0; for(i=0;i<n;i++) sum+=student[i][j]; return sum/n; } 7.7这题应该是很容易的 #include <iostream> using namespace std; int a[3][3]={{5,7,8},{2,-2,4},{1,1,1}}; int b[3][3]={{4,-2,3},{3,9,4},{8,-1,2}}; int c[3][3]; void main() { int i,j; for(i=0; i<3; i++) { for(j=0; j<3; j++) { c[i][j]=a[i][j]+b[i][j]; cout <<c[i][j] <<" "; } cout <<endl; } }

评论