2013-7-15学习作业

技术小美 2017-11-16

函数 排序 void

//题目1

//int a[3];

//a[0]=0; a[1]=1; a[2]=2;

//int *p, *q;

//p=a;

//q=&a[2];

//a[q-p]的值是多少?为什么?

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])

{

    int a[3];

    a[0]=0;

    a[1]=1;

    a[2]=2;

    int *p,*q;

    p=a;

    q=&a[2];

    cout<<a[q-p]<<endl;

    cout<<q<<endl;

    cout<<p<<endl;

    cout<<q-p<<endl;  //相差八个字节,因为int类型是4个字节,所以下标为2,所以a[2]=2

    return 0;

}


//题目2

//const 有什么用途?请用附上代码例子佐证!

#include <iostream>

//const作用

1.可以定义const常量,具有不可变性

例如:const int MAX=100;int Array[MAX];

2.便于编译器进行类型检查,使编译器对处理内容有更多的了解,消除一些隐患。例如:void f(const int i){} 编译器就知道i是一个常量,不允许修改;

3.可以避免意义模糊的数字出现,同样可以很方便的进行参数的调整和修改。同宏定义一样,可以做到不变则以,一变都变!在(1)中,如果想修改MAX的内容,只需要修改:const int MAX=you want即可;

4.可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错,例如:

void f(const int i){i=10;//error}

5.为重载函数提供了一个参考

    class A{

        void f(int i){...}//一个函数

        void f(int i)const{...}//上一个函数的重载

    };

6.可以节省空间,避免不必要的内存分配。例如

    #define PI 3.14159 //常量宏

    const double Pi=3.14159;//此时并未将Pi放入ROM中。。。

    double i=Pi;//此时为Pi分配内存,以后不再分配!

    double i=PI;//编译起见进行宏替换,分配内存

    double j=Pi;//没有内存分配

    double J=Pi;//再次进行宏替换,又一次分配内存!

    const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,#define定义的常量在内存中又若干份拷贝

7.提高了效率,编译器通常不为普通的const常量分配内存空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读取内存的操作,是的它的效率更高。


//题目3:

//引用跟指针的区别?请用附上代码例子佐证!

//1.从内存上来讲,系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内存空间

//2.指针初始化后可以改变指向的对象,而引用定义的时候必须要初始化,而且初始化后不允许再重新绑定对象

//3.所以引用访问对象是直接访问的。指针访问对象是间接访问的。

//4.如果pa是指针,那么*pa就是引用了。但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。

#include <iostream>

using namespace std;


void pt(int *pta,int *ptb)

{

    int *ptc;

    ptc=pta;

    pta=ptb;

    ptb=ptc;

}


void ref(int &ra,int &rb)

{

    int rc;

    rc=ra;

    ra=rb;

    rb=rc;

}


int main(int argc, const char * argv[])

{


    int a=3;

    int b=4;

    int *pa=&a;

    int *pb=&b;

    pt(pa,pb);

    cout<<a<<' '<<b<<endl;

    ref(a,b);

    cout<<a<<' '<<b<<endl;

    return 0;

}




//题目4:

//学生类:学生的姓名成绩及相关的运算,添加英语成绩,并根据总成绩对学生姓名进行排序


#include <iostream>

using namespace std;


class Student

{

private:

    char name[20];

    float ChineseScore,MathScore,EnglishScore,Total;

public:

    void student(char *Name,float chinese,float math);

    void addEnglishScore();

    void countTotalScore(double &total);

    void getScores(char **name,double &chinese,double &math,double &english);

    void showStudent(char *name,double ch,double ma,double en,double total);

    float total();

    char* Name();

    float ch();

    float ma();

    float en();

    void setTotal(float p);

};


void Student:: setTotal(float p)

{

    Total=p;

}


char * Student::Name(){

    char *p=name;

    return p;

}


float Student::ch()

{

    return ChineseScore;

}


float Student:: ma()

{

    return MathScore;

}


float Student::en()

{

    return EnglishScore;

}


void Student::student(char *Name,float chinese,float math)

{

    int i=0;

    while (*Name!='\0') {

        name[i]=*Name;

        Name++;

        i++;

    }

    name[i] = '\0'; //加上\0结束,防止输出的name有乱码

    ChineseScore = chinese;

    MathScore = math;

}

void Student::addEnglishScore()

{

    cout<<"请添加英语成绩"<<endl;

    cin>>EnglishScore;

}

void Student::countTotalScore(double &total)

{

    total = ChineseScore + MathScore + EnglishScore;

}


void Student::getScores(char **Name,double &chinese, double &math, double &english)

{

    char *p=name;

    *Name=p;

    chinese=ChineseScore;

    math=MathScore;

    english=EnglishScore;

}


float Student::total()

{

    return Total;

}

void Student::showStudent(char *name,double ch,double ma,double en,double total)

{

    cout<<"姓名:"<<name<<" "<<"语文:"<<ch<<" "<<"数学:"<<ma<<" "<<"英语:"<<en<<" "<<"总分:"<<total<<endl;

}


float *funB(float *pNum,int N)

{

    if (N>0) {

        for (int i=0; i<N-1; i++) {

            for (int j=0; j<N-1-i; j++) {

                if(pNum[j]>pNum[j+1])

                {

                    float temp;

                    temp=pNum[j];

                    pNum[j]=pNum[j+1];

                    pNum[j+1]=temp;

                }

            }

        }

    }

    float* p=pNum;

    return p;

}


int main(int argc, const char * argv[])

{

    cout<<"请输入N:"<<endl;

    int N;

    cin>>N;

    Student stu[N];

    int i=0;

    float a[N];

    do {

        //Student stu[i];

        stu[i].student("dingxiaowei", 90, 91);

        stu[i].addEnglishScore();

        char *Name;

        double ch,ma,en,total;

        stu[i].getScores(&Name,ch, ma, en);

        stu[i].countTotalScore(total);

        stu[i].showStudent(Name, ch, ma, en,total);

        a[i]=total;

        stu[i].setTotal(total);

        //cout<<a[i]<<endl;

        i++;

    } while (i<N);

//    打印存储的数据

    cout<<"\n"<<"total的成绩:\n";

    for (int i=0; i<N; i++) {

        printf("%.2f \n",stu[i].total());

    }

    //排序后的顺序

    cout<<"\n按照成绩排序后的学生:"<<endl;

    float *p = funB(a, N);

    for (int j=0; j<N; j++) {

        for (int i=0; i<N; i++) {

            if (p[j]==stu[i].total()) {

                stu[i].showStudent(stu[i].Name(), stu[i].ch(), stu[i].ma(), stu[i].en(),stu[i].total());

                break;

            }

        }

    }

    

    

//    Student stu1;

//    stu1.student("dingxiaowei", 90, 91);

//    stu1.addEnglishScore();

//    char *Name1;

//    double ch1,ma1,en1,total1;

//    stu1.getScores(&Name1,ch1, ma1, en1);

//    stu1.countTotalScore(total1);

//    stu1.showStudent(Name1, ch1, ma1, en1,total1);

//

//    

//    

//    Student stu2;

//    stu2.student("wangnin", 90, 92);

//    stu2.addEnglishScore();

//    char *Name2;

//    double ch2,ma2,en2,total2;

//    stu2.getScores(&Name2,ch2, ma2, en2);

//    stu2.countTotalScore(total2);

//    stu2.showStudent(Name2, ch2, ma2, en2,total2);

//    

//    

//    

//    if (total1>=total2) {

//        cout<<"成绩由高到低排序"<<endl;

//        stu1.showStudent(Name1, ch1, ma1, en1, total1);

//        stu2.showStudent(Name2, ch2, ma2, en2, total2);

//    }

//    else{

//        cout<<"成绩由高到低排序"<<endl;

//        stu2.showStudent(Name2, ch2, ma2, en2, total2);

//        stu1.showStudent(Name1, ch1, ma1, en1, total1);

//    }

    

    return 0;

}



2013-7-15作业 - 蓬莱仙羽 - IT达人的博客
 






















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366448,如需转载请自行联系原作者
登录 后评论
下一篇
云攻略小攻
476人浏览
2019-10-21
相关推荐
2013-7-15学习作业
434人浏览
2013-08-07 11:34:25
0
0
0
761