第七章习题参考答案
一、选择题
B    D    D    A    A    B    D    C    C    B
二、问答题
1. p[2][3]、 (*(p+2))[3]、*(*(p+2)+3)
2. 传地址和传值;第一个参数是指向型如函数(* int (float,char))的指针,按地址传递的方式传递;第二个参数按值传递。
3. 用new分配数组空间时,需要用[]指明数组的大小;delete运算符释放内存时,如果是数组空间,需要用delete []的形式。
4. 本题印刷有误,应为“for(i=3;i>=0;i--,i--)
一、变量p是指针数组;
二、B
三、L
四、SO
五、LO
5.
一、1、3、4、5、7
二、3、4
三、1、5、7
三、阅读程序,回答问题
1.
*p:60
60,50,40,30,20,
20,30,40,50,60,
*p:30
2.
将程序中for(i=0;i<9;;i++)改为for(i=0;i<6;i++),则输出为:
Sum=30
Sum=34
Sum=21;
30,0,34
21,0,3
四、完善程序题
float()函数1. 
int n
②n==1
③x+1
④a
2.
①sum+a[i];
②return i;
③data,sizeof(data)/4,x,s或data,9,x,s
④index==-1
⑤data[index]或x
⑥index+1
五、程序设计题
1.
#include <iostream.h>
#include <string.h>
void catlog(char *s1, char *s2,char *s3)
{
    while(*s3++=*s1++);
    s3--;
    while(*s3++=*s2++);
}
void main()
{
    char s1[]="I am a student,";
    char s2[]="You are a teacher!";
    int n=strlen(s1)+strlen(s2)+1;
    char *p=new char [n];
    catlog(s1,s2,p);
    cout<<p<<endl;
    delete[] p;
}
2.
#include <iostream.h>
void insert(float * &p,float x,int n)
{
    float *p1;
    if(n==1){
        p1=new float[n];
        p1[n-1]=x;
        p=p1;
        return;
    }
    else{
        p1=new float[n];
        for(int i=n-2;i>=0;i--){
            if(x>=p[i]){
                for(int j=0;j<=i;j++)p1[j]=p[j];
                p1[i+1]=x;
                for(j=i+2;j<n;j++)p1[j]=p[j-1];
                delete []p;
p=p1;
                return ;
            }
        }
        for(i=1;i<n;i++)p1[i]=p[i-1];
        p1[0]=x;
        delete []p;
        p=p1;   
        return;
    }
}
void main()
{
    float *p;
    float x;
    int n=0;
    cout<<"请输入要插入数组的实数:";cin>>x;
    while(x!=-1){
        n++;
        insert(p,x,n);
        cout<<"请输入要插入数组的实数:";
cin>>x;
    }
    for(int j=0;j<n;j++)
        cout<<p[j]<<endl;
    delete[] p;
}
3.
#include <iostream.h>
void main()
{
    int num[26]={0};
    char str[100];
    cin>>str;
    int i=0;
    while(str[i]){
        if(str[i]<97)str[i]+=32;
        num[str[i]-97]++;
        i++;
    }
   
    for(i=0;i<26;i++)
        if(num[i])
            cout<<char(i+97)<<'='<<num[i]<<endl;
}
4.
student *ssort(student *head)
{    //本排序算法为:
    //  1.定义一个空的指针head1;
    //  2.从head链取下一个节点p;
    //  3.将p插入到head1中去
    //  4.重复2、3,直到head为空。
    student *head1=NULL,*p,*p1,*p2;
    while(head)
    {    p=head;                //取下head链首结点
        head=head->next;
        p->next=NULL;
        if(head1==NULL)    head1=p;
        else
        {    p1=p2=head1;
            while(p2&&p2->num<p->num)    //在head1中查适合p->num的位置
            {    p1=p2;p2=p2->next;    }
            if(p1==head1)head1=p;    //插在链首
else p1->next=p;        //插在链中或链尾
p->next=p2;
        }
    }
    return head1;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。