钱能C++教材习题答案七

   /2005-05-08

 

//********************
//*     8.3.(2)      *
//********************
# include <iostream.h>
# include <stdlib.h>

int compare(const void * a,const void * b);
double list1[10]={32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5};
double * list[10]={& list1[0],& list1[1],&list1[2],&list1[3],&list1[4],&list1[5],&list1[6],&list1[7],&list1[8],&list1[9]};

void main()
{
        qsort((void *) list,10,sizeof(list[0]),compare);
        for(int i=0;i<10;i++)
        {
                cout<<*list<<endl;
        }
}
int compare(const void * a,const void * b)
{
        double temp1=**(double**)a;
        double temp2=**(double**)b;
        if(temp1<temp2)
                return -1;
        else
        {
                if(temp1==temp2)
                        return 0;
                else
                        return 1;
        }
}

//********************
//*     8.3.(3)*******
//********************
# include <iostream.h>
# include <stdlib.h>
# include <string.h>

int compare(const void * a,const void * b);

char * list[10]={"enter","number","size","begin","of","cat","case","program","centain","a"};

void main()
{
        qsort((void *) list,10,sizeof(list[0]),compare);
        for(int i=0;i<10;i++)
        {
                cout<<list<<endl;
        }
}
int compare(const void * a,const void * b)
{
        int l,m;
        const char * p;
        const char * q;
        p=(const char *)a;
        q=(const char *)b;

        for(l=0; * p != '/0';l++)
                p++;
       
        for(m=0; * q != '/0';m++)
                q++;

        if(l<m)
                return -1;
        else
        {
                if(l>m)
                        return 1;
                else
                        return strcmp(*(char**)a,*(char**)b);
        }
}

//********************
//*     8.4***********
//********************
# include <iostream.h>
# include <stdlib.h>
# include <string.h>

char list[]={"the result of 3 and 2 is not 8"};
//注意使用list[]
char unlist[]={"xqk/"zlvyuz/"wm#7>gpl's$ry/"vvw$A"};
int num[]={4,9,6,2,8,7,3};

char * convert(char * a);
char * unconvert(char * b);

void main()
{
        char * m=list;
        char * n=convert(m);
        cout<<endl;
        for(;*n!='/0'
        {
                cout<<*n;
                n++;
        }
        cout<<endl<<endl;

       char * x=unlist;
        char * y=unconvert(unlist);
        cout<<endl;
        for(;*y!='/0'
        {
                cout<<*y;
                y++;
        }
        cout<<endl;
}

char * convert(char * a)
{

        int i=0,j,k=0;
        for(;*(a+k)!='/0'
        {
               
                j=num;
                i=(i+1)%7;
                cout<<"("<<*(a+k)<<""<<int(*(a+k))<<"+"<<j<<",";
                        a[k]=char((int(*(a+k))-33+j)%91+33);

                k++;
        }

        return a;
}

char * unconvert(char * b)
{
        int i=0,j,k=0;
        for(;*(b+k)!='/0'
        {
               
                j=num;
                i=(i+1)%7;
                cout<<"("<<*(b+k)<<""<<int(*(b+k))<<"+"<<j<<",";

                if(int(*(b+k))-33<j)
                        b[k]=char(91+(int(*(b+k))-j));//如何转换为原来的代码?
                else
                        b[k]=char(int(*(b+k))-j);

                k++;
        }

        return b;
}

//**********
//*     8.5*
//**********
# include <iostream.h>

int strcmp(const char * str1,const char * str2);

void main()
{
        char list1[]={" "};
        char list2[]={" "};
        int a=strcmp(list1,list2);
        cout<<a<<endl;
}

 

int strcmp(const char * str1,const char * str2)
{
        if((*str1=='/0')&&(*str2=='/0'))
                return 0;
        if((*str1=='/0')&&(*str2!='/0'))
                return -1;
        if((*str1!='/0')&&(*str2=='/0'))
                return 1;

        if(int(*str1)<int(*str2))
                return -1;
        else
                        if(int(*str1)>int(*str2))
                                return 1;
                        else
                        {
                                str1++;str2++;
                                return strcmp(str1,str2);
                        }
}

//**********
//*     8.6*
//**********
# include <iostream.h>

char * strcpy(char * dest,const char * source);

void main()
{
        char list1[]={"sdfhdahaha"};
        char * list2=NULL;
        list2=strcpy(list2,list1);
        cout<<list2<<endl;
}

 

char * strcpy(char * dest,const char * source)
{
        int k=0;
        const char * l=source;
        for(;*l!='/0';k++)
                l++;
        dest=new char[k+1];

        for(int i=0;i<k;i++)
        {
                dest=*source;
                source++;
        }

        dest[k]='/0';

        return dest;
}

//*************
//*     8.7****
//*************
# include <iostream.h>

int strcmp(const char * str1,const char * str2);

void main(int argc,char * argv[])
{
       

       
        int i=strcmp(argv[0],argv[1]);
        if (i==0)
                cout<<"equal"<<endl;
        else
                if (i=-1)
                        cout<<"<"<<endl;
                else
                        if (i=1)
                                cout<<">"<<endl;

}

 

int strcmp(const char * str1,const char * str2)
{
        if((*str1=='/0')&&(*str2=='/0'))
                return 0;
        if((*str1=='/0')&&(*str2!='/0'))
                return -1;
        if((*str1!='/0')&&(*str2=='/0'))
                return 1;

        if(int(*str1)<int(*str2))
                return -1;
        else
                        if(int(*str1)>int(*str2))
                                return 1;
                        else
                        {
                                str1++;str2++;
                                return strcmp(str1,str2);
                        }
}


相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19