《C语言程序设计》作业4解答
一、选择题
1. 假定有“struct  BOOK {char  title[40]; float  price;};  struct  BOOK  * book;”,则不正确的语句为 (  A  )。
        A. struct  BOOK  * x=malloc(book);
        B. struct  BOOK  x={"C++ Programming",27.0};
        C. struct  BOOK  * x=malloc(sizeof(struct BOOK));       
        D. struct  BOOK  **x=&book;
2. 假定有“struct  BOOK {char  title[40]; float  price;} book;”,则正确的语句为 (  B  )。
        A. struct  BOOK  x=&book;
        B. struct  BOOK  * x=&book;
        C. struct  BOOK  x=calloc(BOOK);       
        D. struct  BOOK  *x=BOOK;
3. 表示文件结束符的符号常量为(  C  )。
        A. eof            B. Eof                C. EOF                D. feof
4. C语言中的系统函数fopen( )是(  D  )一个数据文件的函数。
        A. 读取            B. 写入                C. 关闭                D. 打开
5. 从一个数据文件中读入以换行符结束的一行字符串的函数为(  B  )。
        A. gets( )            B. fgets( )            C. getc( )                D. fgetc( )
6. 向一个二进制文件中写入信息的函数fwrite( )带有(  D  )个参数。
        A. 1                B. 2                    C. 3                    D. 4
二、填空题
1. 假定一个结构类型的定义为“struct  A {int a, b; struct  A  * c;};”,则该类型的大小为    12    字节。
2. 假定一个结构类型的定义为“struct  B {int a[5]; char  * b;};”,则该类型的大小为    24      字节。
3. 假定一个结构类型的定义为“struct  D {int a; union {int  b; double  c}; struct  D * d[2];};”,则该类型的大小为      20      字节。
4. 假定要动态分配一个类型为struct  Worker的具有n 个元素的数组,并由r指向这个动态数组,则使用的语句表达式为struct  Worker * r=  calloc(n, sizeof(struct  Worker));   
5. 假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为      *(x.a)      c语言struct头文件
6. 假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为    *(p->b)     
7. 与结构成员访问表达式(*fp).score等价的表达式是  fp->score 
三、写出下列每个程序运行后的输出结果
1.        #include <stdio.h>
        struct  Worker {
            char  name[15];            // 姓名
            int  age;                    // 年龄
            float  pay;                // 工资
        };
        void main( )
        {
            struct  Worker  x={"wanghua", 52, 2350};
            struct  Worker  y, * p;
            y=x;  p=&x;
            printf("%s  %d  %6.2f\n",y.name, y.age, y.pay);
printf("%s  %d  %6.2f\n",p->name, p->age, p->pay);d资
        }
        程序的运行结果是:        wanghua  52  2350.00
                                wanghua  52  2350.00
2.        #include  <stdio.h>
        #include  <string.h>
        struct  Worker {
            char  name[15];            // 姓名
            int  age;                    // 年龄
            float  pay;                // 工资
        };
        void  main( )  {
            struct  Worker x;
            char *t="liouting";
            int  d=38;  float  f=493;
            strcpy(x.name, t);
            x.age=d;  x.pay=f;
            x.age++;  x.pay*=2;
            printf("%s  %d  %6.2f\n",x.name, x.age, x.pay);
        }
        程序的运行结果是:    liouting  39  986.00
3.        #include  <stdio.h>
        struct  Worker {
            char  name[15];            // 姓名
            int  age;                    // 年龄
            float  pay;                // 工资
        };
        int  Less(struct  Worker  r1, struct  Worker  r2)  {
            if(r1.age<r2.age)  return  1;
            else  return  0;
        }
        void  main( )  {
            struct  Worker  a[4]={{"abc",25,420},{"def",58,638},
                                {"ghi",49,560,{"jkl",36,375}};
            struct  Worker x=a[0];
            int i;
            for(i=1; i<4; i++)
                if(Less(x,a[i]))  x=a[i];
            printf("%s  %d  %6.2f\n",x.name, x.age, x.pay);
        }
        程序的运行结果是:    def  58  638.00
四、写出下列每个函数的功能
1.        void  QA(struct  Worker  a[ ], int  n)  {
            int  i;
            for(i=1; i<n; i++)
                scanf("%s  %d  %f", &a[i].name, &a[i].age, &a[i].pay);
        }
        假定结构类型struct  Worker的定义如下:
        struct  Worker {
            char  name[15];            // 姓名
            int  age;                    // 年龄
            float  pay;                // 工资
        };
        函数的功能是: 将键盘输入的n-1个职工记录,包括职工姓名、年龄和工资保存在结构数组a中。
2.        struct  StrNode  * QB(int n)  {
            struct  StrNode  * f, * p;
            if(n==0)  return  NULL;
            f=malloc(sizeof(struct  StrNode));
            scanf("%s",f->name);
            p=f;
            while(--n)  {
                p=p->next=malloc(sizeof(struct  StrNode));
                scanf("%s", p->name);
            }
            p->name=NULL;
            return f;
        }
        假定结构类型struct  StrNode的定义如下:
        struct  StrNode  {
            char  name[15];                // 字符串域
            struct  StrNode  * Next;        // 指针域
        };
        函数功能是: 将键盘输入的n个长度小于15的字符存储在一个链表中,先输入的字符串存储在链表的表头,最后输入的字符串存储在链表的表尾,函数返回链表的表头指针。
3.        struct  IntNode  * FindMax(struct  IntNdoe * f)  {
            struct  IntNode  * p=f;
            if(!f)  return  NULL;
            f=f->next;
            while(f)  {
                if(f->data<p->data)  p=f;
                f=f->next;
            }
            return p;
        }
        假定struct  IntNode的类型定义为:
        struct  IntNode  {
            int  data;                    // 结点值域
            struct  IntNode * next;        // 结点指针域

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