发布时间 : 星期六 文章C语言程序设计(第二版)习题参考答案更新完毕开始阅读97814d3d27c52cc58bd63186bceb19e8b9f6ec00
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(x { 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(x { 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;