C语言程序设计(第二版)习题参考答案

发布时间 : 星期日 文章C语言程序设计(第二版)习题参考答案更新完毕开始阅读

void main()

{ int n=1,i;

for(i=1;i<4;i++){ s[i].a=n; s[i].b=&s[i].a; n+=2;

}

p=&s[0]; p++;

printf(\ } 解:3,1 4.

#include <>

struct s {int a;float b;char *c;}; void main()

{ struct s x={19,, \

struct s *px=&x; printf(\ printf(\ printf(\ } 解:19,,zhang 19,,zhang

y,hang 三、程序填空题

1.已知head指向一个单向链表,链表中每个节点包含整型数据域(data)和指针域(next)。以下函数max求出链表中数据域值最大节点的位置,由指针s传回主调函数。

#include <> struct link

{ int data;struct link *next;}; void main()

{ struct link *head,*q;

struct link *max(struct link *); um=i+1;scanf(\ for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(a[j].x

printf(\ }

5.有10个学生,每个学生的数据包括学号、姓名、三门课的成绩。数据从键盘输入,要求打印出每个学生的总分、三门课的总平均成绩,以及总分最高的学生数据。

解:#include \ struct student

{ char num[6]; um);

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

scanf(\ }

printf(“ 姓名 总分\\n”); for(i=0;i<10;i++) { sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j]; stu[i].avr=sum/; aver+=stu[i].avr;

if(sum>max){max=sum;maxi=i;}

printf(“%-8s %-7d\\n”,stu[i].name,sum); }

aver=aver/10; for(i=0;i<10;i++)

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

printf(\ printf(\ }

printf(\平均成绩是%5.2f\\n\

printf(\最好成绩的学生是%s,总分是 %d\\n\ }

6.建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,将此结点删除。

解:#include \ #define NULL 0

#define LEN sizeof(struct student) struct student

{ char num[6]; um,stu[i].name); scanf(“%c%d”,&stu[i].sex,&stu[i].age);

sum=0;

for(j=0;j<5;j++)

{ scanf(“%f”,&stu[i].score[j]); sum+=stu[i].score[j]; }

stu[i].aver=sum/5; }

for(i=0,j=0;i

if(stu[i].sex==’w’) girl[j++]=stu[i];

m=j;

for(i=0;i

for(j=i;j

if(girl[j].aver>girl[k].aver) k=j;

temp=girl[i]; girl[i]=girl[k]; girl[k]=temp; }

for(i=0;i

{ printf(“ss”,girl[i].num,girl[i].name); printf(“,=”,girl[i].sex,girl[i].age);

for(j=0;j<5;j++) printf(“%3.0f”,girl[i].score[j]); printf(“%3.0f\\n”, girl[i].aver); } }

*8.输入不超过100个通讯录数据(姓名、电话号码,电话号码为7位数字),要求输入通讯录个数。将原7位的电话号码改为8位,规则是原来以2、4开头的号码的在前面加一位6,原来以1、5开头的号码的在前面加一位9,其他在原号码前面加一位8。输出处理后的通讯录数据。

解:#include <> #define N 100 void main() { struct {

char name[10],tel[9]; } addr[N]; int i,j,n;

printf(“请输入通讯录数:”); while(scanf(“%d”,&n),n>100); for(i=0;i

{ scanf(“%s%s”,addr[i].name,addr[i].tel); addr[i].tel[8]='\\0';

if(*addr[i].tel==’2’||*addr[i].tel==’4’)

{ for(j=6;j>=0;j--)addr[i].tel[j+1]=addr[i].tel[j]; addr[i].tel[0]=’6’; }

else if(*addr[i].tel==’1’||*addr[i].tel==’5’) { for(j=6;j>=0;j--)addr[i].tel[j+1]=addr[i].tel[j]; addr[i].tel[0]=’9’; } else

{ for(j=6;j>=0;j--)addr[i].tel[j+1]=addr[i].tel[j]; addr[i].tel[0]=’8’; } }

printf(“新的通讯录:\\n”); for(i=0;i

printf(“ss\\n”,addr[i].name,addr[i].tel);

}

9.在一有序(设为升序)链表中查找某数(由键盘输入),如果存在则将它删除,如果不存在则将它按其大小次序插入到链表中。

解:#include <> #include <>

struct link { int data; struct link *next; }; struct ling *find(struct link *head,int x) { struct link *p,*q,*s;

if(head->data==x) head=head->next; else if(xdata)

{ s=(struct link *)malloc(sizeof(struct link)); s->data=x; s->next=head; head=s; } else

{ q=head; p=head->next; while(p!=NULL)

{ if(p->data==x){ q->next=p->next; break; } else if(xdata)

{ s=(struct link *)malloc(sizeof(struct link)); s->data=x; s->next=p; q->next=s; break; }

p=p->next; }

if(p==NULL)

{ s=(struct link *)malloc(sizeof(struct link)); s->data=x; s->next=NULL; q->next=s; } }

return head; }

*10.输入一英文句子(以“.”结束),输出其中所包含的英文字母,要求用链表完成,每一节点的数据成员存放一个所出现的字母。

解:#include <> #include <>

struct node { char c; struct node *next; }; void main()

{ struct node *head,*p,*q; char str[81]; int i=0;

联系合同范文客服:xxxxx#qq.com(#替换为@)