正文

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

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/3630.html

分享到:

声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。

这一序列说明:
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;
    }
}



阅读(4107) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册