第十章 结构体与共用体
一、 选择题
1、 定义结构类型时,下列叙述正确的是____
A、 系统会按成员大小分配每个空间
B、 系统会按最大成员大小分配空间
C、 系统不会分配空间
D、 以上说法均不正确
2、 已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是___
A、 Struct s{int no;int x,y,z};
B、 Struct s{char no[2];int x,y,z};
C、 Struct s{int no;float x,y,z};
D、Struct s{char no[2];float x,y,z};
3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发生的情况是____
A、 编译时会有错误
B、 链接时会有错误
C、 运行时会有错误
D、 程序没有错误
二 、编程
1、 已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
参考答案
选择题
1、C 2、D 3、A
二、编程题
1、#include
#define null 0
#define LEN sizeof(struct student)
Struct student
{long num;
Int score;
Struct student *next;
};
Struct student listA,listB;
Int n,sum=0;
Main()
{struct student *creat(void)
Struct student *insert(struct student *,struct student *);
Void print(struct student *);
Struct student *ahead,*bhead,*abh;
Printf(“\ninput list a:\n”);
ahead=creat();
sum=sum+n;
printf(“input list b:\n”);
bhead=creat();
sum=sum+n;
abh=insert(ahead,bhead);
print(abh);
}
Struct student *creat(void)
{struct student *p1,*p1,*head;
n=0;
p1=p2=(struct student *)malloc(LEN);
printf(“input number & scores of student:\n”);
printf(“if number is 0,stop inputing,\n”);
scanf(“%ld,%d”,&p1->num,&p1->score);
head=null;
while(p1->num!=0)
{n=n+1;
If(n==1)head=p1;
Else p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf(“%ld,%d”,&p1->num,&p1->score);
}
p2->next=null;
return(head);
}
Struct student *insert(struct student*ah,struct *bh)
{struct student *pa1,*pa2,*pb1,*pb2;
pa2=pa1=ah;
pb2=pb1=bh;
do
{while((pb1->num>pa1->num)&&(pa1->next!=null))
{pa2=pa1;
p1=pa1->next;
}
If(pb1->num<=pa1->num)
{if(ah==pa1)
ah=pb1;
else pa2->next=pb1;
pb1=pb1->next;
pb2->next=pa1;
pa2=pb2;
pb2=pb1;
}
}
While((pa1->next!=null)||(pa1==null&&pb1!null));
If((pb1->num>pa1->num)&&(pa1->next==null))
pa1->next=pb1;
return(ah);
}
Void print(struct student *head)
{struct student *p;
Printf(“\n there are %d records:\n”,sum);
p=head;
if(p!=null)
do
{printf(“%ld %d\n”,p->num,p->score);
p=p->next;
}
While(p!=null);
}
第十一章 位运算
编程题
1、 设计一个函数,使给出一个数的原码,能得到该数的补码
参考答案
Main()
{unsigned int a;
Unsigned int getbits(unsigned);
Printf(“\ninput an octal number:”);
Scanf(“%o”,&a);
Printf(“result :%o\n”,getbits(a));
}
Unsigned int getbits(unsigned value)
{unsigned int z;
z=value&0100000;
if(z==0100000)
z=~value+1;
else
z=value;
return(z);
}
第十二章 文件
一、 选择题
1、在C语言,文件由_____
A、 记录组成
B、 由数据行组成
C、 由数据块组成
D、 由字符(字节)序列组成
2、C语言中的文件类型只有____
A、索引文件和文本文件两种
B、ASCII文件和二进制文件两种
C、文本文件一种
D、二进制文件一种
3、C语言中文件的存取方式___
A、只能顺序存取
B、只能随机存取(或称直接存取)
C、可以顺序存取,也可随机存取
D、只能从文件的开头进行存取
参考答案
选择题
1、D 2、B 3、C