数组的初级运用

#include "stdio.h"

short count = 0;

/* 两个结构,一个用来存放成绩,一个用来表示学生的基本信息*/

typedef struct {
 float frist;
 float second;
 float third;
}result;

typedef struct{
 short num;
 char name[10];
 result cj;
} stu;

/*录入、插入函数*/

void addstu(stu *myStu)
{
 short i, num,yn = 1;//i循环变量,num增加的学号(用以判断该号是否已经存在),yn/ch条件
 char ch;
 while (ch)
 {
  fflush(stdin);
  printf("/t/t请输入学号:");
  scanf("%d",&num);
  
  for (i = 0 ; i <= count ; i ++)
  {
   if (myStu[i].num == num)
   {
    printf("/t/t有重复的学号,请重新输入./n");
    yn = 0;
    break;
   }
   else
    yn = 1;
  }

  if(yn)
  {
   myStu[count].num = num;
   fflush(stdin);
   printf("/t/t请输入姓名:");
   scanf("%s",myStu[count].name );
   
   printf("/t/t请输入第一门功课的成绩:");
   scanf("%f",&myStu[count].cj.frist );
   printf("/t/t请输入第二门功课的成绩:");
   scanf("%f",&myStu[count].cj.second );
   
   printf("/t/t请输入第三门功课的成绩:");
   scanf("%f",&myStu[count].cj.third);
   count++;
  }

  printf("/t/t是否还要输入,要退出按0键,其他继续..");
  fflush(stdin);
  scanf("%c",&ch);
  if(ch == '0')
   break;
 }
}

/*排序*/
void sort(stu * myStu)
{
 short i , j;//循环变量
 stu temp;//stu类型的中间变量,用来排序
 for (i = 0 ;i <= count ; i++)
 {
  for (j = i+1; j <= count ;j++)
  {
   if((myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third ) < (myStu[j].cj .frist +myStu[j].cj.second +myStu[i].cj.third ))
   {
    temp = myStu[i];
    myStu[i] = myStu[j];
    myStu[j] = temp;
   }
  }
 }
}
/*打印*/
void display(stu *myStu)
{
 short i;//条件变量
 
 printf("/n");
 printf("/t/t=========打印===========/n");

 printf("/t/t学  号/t姓   名/t平均成绩/n");
 for(i = 0 ; i < count ; i++)
 {
  printf("/t/t %d/t %s/t %1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);
 }
}
/*删除*/
void del(stu *myStu)
{
 short i ,num ,yn = 0;

 printf("/t/t请输入你要删除的学生学号:");
 scanf("%d",&num);
 
 for(i = 0 ; i <= count ; i++)
 {
  if(myStu[i].num != num)
   yn = 0;
  else
  {
   yn = 1;
   break;
  }
 }

 
 if (yn)
 {
  for (i = 0 ; i <= count ; i++)
  {
   if(myStu[i].num ==num)
    break;
  }
  printf("/t/t你要删除的学生的详细情况是:学号:%d/t姓名:%s/t平均分:%1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);

  printf("/t/t确定要删除(1.确定):");
  scanf("%d",&yn);
  if(yn == 1)
  {
   for (i ; i < count; i++)
   {
    myStu[i] = myStu[i+1];
   }
   count--;
   
  }
  else
   printf("/t/t没有删除:%d/t%s/t%1.1f/n",myStu[i].num ,myStu[i].name ,(myStu[i].cj .frist +myStu[i].cj.second +myStu[i].cj.third)/3);
 }
 else
  printf("/t/t没有该学生/n");
}

void main()
{
 stu myStu[100];
 short ch;

 while(1)
 {
  printf("/n/n");
  printf("/t/t     1.录   入/n");
  printf("/t/t     2.插   入/n");
  printf("/t/t     3.删   除/n");
  printf("/t/t     4.退   出/n");

  printf("/n/t/t请选择你要的操作:");  
  scanf("%d",&ch);

  if((ch <1) || (ch > 4))
   continue;

  printf("/n/n");
  
  switch(ch)
  {
  case 1:
  case 2:
   {
    addstu(myStu);
    sort(myStu);
    display(myStu);
    break;
   }
  case 3:
   {
     del(myStu);
     display(myStu);
     break;
   }

  case 4:
   return;
  }
 }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值