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;