C语言程序设计答案(第三版)杜友福版 联系客服

发布时间 : 星期日 文章C语言程序设计答案(第三版)杜友福版更新完毕开始阅读bb38c73fad1ffc4ffe4733687e21af45b307fe04

char name[8]; float score[3]; float avr; }stu[N]; void main() {

int i,j,maxi; float sum,max,average; for(i=0;i

printf(\ printf(\

scanf(\ printf(\

scanf(\ for(j=0;j<3;j++) {

printf(\

scanf(\ } } average=0; max=0; maxi=0; for(i=0;i

sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/; average+=stu[i].avr; if(sum>max) { max=sum; maxi=i; } } average/=N; printf(\ No. name scorel score2 for(i=0;i

score3 average\\n\ printf(\ %\\n\ } printf(\ printf(\stu[maxi].num,stu[maxi].name); printf(\stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2], stu[maxi].avr); }

4.设单向链表head1和head2已建立。编写将单向链表head2连接到单向链表head1之后的函数,以head1返回,如图所示。 /* 结点结构 Node */ struct Node {

int data;

struct Node *next; };

提示:函数原型为:struct Node *link(struct Node *head1, struct Node *head2);

struct Node *link(struct Node *head1,struct Node *head2) {

struct Node *p,*head0; p=head1; head0=head1; while(p->next!=NULL) p=p->next; p->next=head2; return head0; }

5.有两个链表a 和 b。设结点中包括学号、姓名。从a链表中删除去与b链表中有相同学号的那些结点。 #include <> #include <> #define LA 4 #define LB 5 struct student {

int num;

char name[8];

struct student *next; }a[LA],b[LB]; void main() {

struct student a[LA]={{101,\{105,\

struct student b[LB]={{103,\{107,\ int i;

struct student *p,*p1,*p2,*head1,*head2; head1=a; head2=b; printf(\ \\n\

for(p1=head1,i=1;i<=LA;i++) {

if(inext=a+i;

else p1->next=NULL;

printf(\ if(inext; }

printf(\

for(p2=head2,i=1;i<=LB;i++) {

if(inext=b+i;

else p2->next=NULL;

printf(\ if(inext; }

p1=head1;

while(p1!=NULL) { p2=head2;

while((p1->num!=p2->num)&&(p2->next!=NULL)) p2=p2->next; if(p1->num==p2->num) if(p1==head1)

head1=p1->next; else

{ p->next=p1->next;p1=p1->next; } else

{ p=p1;p1=p1->next; } }

printf(\ p1=head1;

while(p1!=NULL) {

printf(\ \\n\ p1=p1->next; }

}

习题十二 一、选择题

1~8: C B D B C A A B

二、填空题 1. 32 2.__ a&0__

3. _ x|0xFF00_ 4. 64

三、编程题

1.取一个整数a从右端开始的4~7位。 #include <> void main() {

int num,mask;

printf(\ scanf(\ printf(\

num >>= 4; /* 右移4位,将4~7位移到低4位上 */

mask=~(~0<<4); /* 间接构造1个低4位为1、其余各位为0的整数 */ printf(\ }

2.编一个将十六进制数转换成二进制形式显示的程序。 #include <> void main() {

int num,mask,i;

printf(\scanf(\

mask=1<<15; /* 构造1个最高位为1、其余各位为0的整数(屏蔽字) */ printf(\for(i=1;i<=16;i++) {

putchar(num&mask'1':'0'); /* 输出最高位的值(1/0) */ num<<=1; /* 将次高位移到最高位上 */ if(i%4==0)putchar(','); /* 四位一组,用逗号分开 */ }

printf(\}

习题十三