1.10位改成了3位。
struct student
{
char StuID[15];
char Name[10];
float Grade[3];
}stu[N];
int main()
{
int i=0, j;
for (i=0; i < N; i++)
{
printf("请输入第%d位学生的ID、名字:\n",i+1);
scanf("%s %s", &stu[i].StuID, &stu[i].Name);
printf("请输入第%d位学生三门课的成绩:\n",i+1);
for (j = 0; j < 3; j++)
{
scanf("%f", &stu[i].Grade[j]);
}
}
for (i = 0; i < N; i++)
{
float sum=0;
printf("%s %s\n", stu[i].StuID, stu[i].Name);
for (j = 0; j < 3; j++)
{
sum = sum + stu[i].Grade[j];
}
printf("第%d位同学的平均分为:%f\n",i+1,sum/3.0);
}
return 0;
}
int main()//主函数
{
int i,k,n,m;//定义整型变量
int num[50];//定义整型数组
int *p;//定义指针变量
printf("输入n=");//提示语句
scanf("%d",&n);//键盘输入
p=num;
for(i=0;i<n;i++)
{
*(p+i)=i+1; //以1至n为序给每个人编号
}
i=0; //i为每次循环时计数变量
k=0; //k为按1,2,3报数时的计数变量
m=0; //m为退出人数
while(m<n-1)
{ //当退出人数比n-1少时执行循环体
if(*(p+i)!=0)
{
k++;
}
if(k==3)
{
*(p+i)=0; //对退出的人的编号置为0
k=0;
m++;
}
i++;
if(i==n)
{ //报数到尾后,i恢复为0
i=0;
}
}
while(*p==0)
{
p++;
}
printf("最后一个数是:%d\n",*p);//输出结果
return 0;//主函数返回值为0
}
struct address_book
{
char birth[9];
char name[31];
char phone[18];
struct address_book *next;
};
/*创建书籍目录*/
void creat_book(struct address_book *head,int n)
{
int i;
struct address_book *q;
q=head;
for(i=0;i<=n;i++)
{
struct address_book *p;
if((p=((struct address_book *)malloc(sizeof(struct address_book))))==NULL)
{
printf("Sorry 分配内存失败。。。\n");
exit(0);
}
q->next=p;
p->next=NULL;
q=p;
}
}
/*录入书籍信息*/
void input_book(struct address_book *head,int n)
{
int i;
//double jpr;
//char tname[31];
struct address_book *q;
q=head->next;
printf("录入 %d 组通讯录信息\n(姓名 生日 电话)\n",n);
for(i=0;i<n;i++)
{
fflush(stdin);//清除缓存,消除回车影响 --这就是个坑
scanf("%s%s%s",&q->name,&q->birth,&q->phone);
q=q->next;
}
}
/*查找并输出**最大年龄,数值最小*/
void pout_book(struct address_book *head,int n)
{
int i,j;
struct address_book *q ,*min_p,*mark_p;
q=head->next;
min_p=q;
/*查找最大年龄*/
for(i=0;i<n;i++)
{
if(strcmp(min_p->birth,q->birth)>0)
min_p=q;
q=q->next;
}
mark_p=min_p;//标记最大年龄
//printf("%s %s %s\n",mark_p->name,mark_p->birth,mark_p->phone);
/*从大到小输出年龄*/
for(i=0;i<n;i++)
{
q=head->next;
min_p=q;
/*循环输出每组循环中的最大年龄*/
printf("%s %s %s\n",mark_p->name,mark_p->birth,mark_p->phone);
for(j=0;j<n;j++)//查找剩下的数据中的最小值 节点
{
/*大于已经输出的最大年里 and 小于当前记录 最大年龄*/
if(strcmp(q->birth,mark_p->birth)>0&&strcmp(min_p->birth,q->birth)>0)
min_p=q;//重新标记
q=q->next;//向下比较
}
mark_p=min_p;//标记最大年龄节点
}
printf("\n\n");
}
/*主函数*/
int main()
{
printf("******通讯录排序******\n\n");
struct address_book *head;//定义头结点,指定书籍目录入口
if((head=(struct address_book *)malloc(sizeof(struct address_book)))==NULL)
{
printf("Sorry 分配内存失败......\n");
exit(0);
}
int n;
printf("要排序的通讯录数量: ");
scanf("%d",&n);//指定录入通讯录的数量
creat_book(head,n);//按需创建指定数量的链表
input_book(head,n); //录入信息
printf("\n\n"); //区分输出
pout_book(head,n);//排序并输出信息
system("pause");
}
|