一、选择题
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(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;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=__(Worker*)malloc(n*sizeof(Worker));_____。
5.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为__x.(*a)___。
6.假定要访问一个结构指针p所指向对象中的b指针成员所指的对象,则表示方法为_____ *(p->b)___
7.与结构成员访问表达式(*fp).score等价的表达式是__fp->score______。
molloc函数三、写出下列每个程序运行后的输出结果
1. #include<stdio.h>
struct Worker{
    char name[15]; //姓名
    int age;  //年龄
    float pay; //工资
};
void main(){
    struct Worker x={"wanghua",52,23.50};
    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);
}
输出结果为:
wanghua 52  23.50
wanghua 52  23.50
Press any key to continue
2. #include<stdio.h>
#include<string.h>
struct Worker{
    char name[15]; //姓名
    int age;  //年龄
    float pay; //工资
};
void main(){
    struct Worker x;
    char *t="louting";
    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);
}
输出结果为:
louting 39 986.00
Press any key to continue
3. #include<stdio.h>
#include<string.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
Press any key to continue
四、写出下列每个函数的功能
1.
void QA(struct Worker a[],int n){
    int i;
    for(i=0;i<n;i++)
        scanf("%s %d %f",&a[i].name,a[i].age,a[i].pay);
}
假定结构struct Worker的定义如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Worker{
    char name[15]; //姓名
    int age;  //年龄
    float pay; //工资
};
函数功能为:
输入struct Worker 类型的对象a[n]的各个元素的值
2. struct StrNode *QB(int n){
    StrNode *    f,*p;
    if(n==0)return NULL;
    f=(StrNode*)malloc(sizeof(struct StrNode));
    scanf("%s",f->name);
    p=f;
    while(--n){
        p=p->next=(StrNode*)malloc(sizeof(struct StrNode));
        scanf("%s",p->name);
    }
    p->next=NULL;
    return f;
}
假定结构struct StrNode的定义如下:
struct StrNode{
    char name[5];
    struct StrNode *next;
};
函数功能为:
建立一个具有n个结点,每个结点的类型是StrNode的链表
3. struct IntNode* FindMax(struct IntNode *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 StrNode的定义如下:
struct IntNode{
    int data;
    struct IntNode * next;
};
函数功能为:
在一个具有n个结点,每个结点的类型是IntNode的链表中寻data值最大的结点
4. int Count(struct IntNode *f)
{
    int c=0;while(f){
        c++;
        f=f->next;
    }
    return c;

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