2013-7-15学习作业
  JDh7sMsPQI0Y 2023年11月02日 38 0


//题目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;
}




 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jJVxqmfuiDRw   2023年11月02日   59   0   0 sqli++System
JDh7sMsPQI0Y