结构体数组

2019-08-21  本文已影响0人  1墨家巨子
/*************************************************
   学生结构体
   姓名 成绩
   输入5个学生信息,求平均数
***************************************************/

typedef struct student{
  char name[N];
  int grade;
}students;
void structTest(void){
    int sum=0,avg=0,n=0;
    int i;
    students stu[5]={
        {"zhangsan",21},
        {"lisi",56},
        {"test",55}
    };
    strcpy(stu[0].name,"Tom");//字符串赋值
    for(i=0;i<sizeof(stu)/sizeof(stu[0]);i++){
     scanf("%d %s",&stu[i].grade,&stu[i].name);
     sum=sum+stu[i].grade;
    }
    for(i=0;i<sizeof(stu)/sizeof(stu[0]);i++){
     printf("%d %s\n",stu[i].grade,stu[i].name);
    }
    printf("\n");
    avg=sum/(sizeof(stu)/sizeof(stu[0]));
    printf("avg=%d\n",avg);
    n=sizeof(stu[5].name)/sizeof(char);
    printf("n=%d\n",n);
//    fflush(stdin);
}

/************************************************
***   定义结构体指针                              ***
***   传入学生姓名和成绩                       ***
***   求得学生平均成绩并且输出低于,  ***
***   平均成绩学生的姓名。                    ***
*************************************************/
typedef struct students{
    char name[10];
    float score;
} student;
/***********************************************
 ***  参数:                                             ***
 ***    结构体指针                                    ***
 ***    结构体数组元素个数                      ***
************************************************/
void demo(student *stu,int size){
   int i;
   float sum=0;
   for(i=0;i<size;i++){
       sum+=stu[i].score;
   }
   float avg=sum/size;
   printf("%f\n",avg);
   for(i=0;i<size;i++){
       if(stu[i].score<avg)
   printf("%s\n",stu[i].name);
   }
}

/**************************************************
 *******              动态结构体数组           *******
 **************************************************/
typedef struct student{
    char name[20];
    int sroce;
}my_stu;
void dyn_str_arr(void){
    int n=3;
    printf("输入动态空间大小");
    scanf("%d",&n);
    my_stu *pstu=(my_stu *)malloc(sizeof(my_stu)*n);
    int sum=0;
    int i;
    int avg=0;
    for(i=0;i<n;i++){
        srand((unsigned short int)time(NULL));//获取随机数的种子
        (pstu+i)->sroce=rand()%30+60;//获取60~90随机成绩
        sum+=pstu[i].sroce;//平均成绩求和
        printf("请输入第%d个学生的姓名:\n",i+1);
        scanf("%s",&(*(pstu+i)->name));
    }
    avg=sum/n;
    printf("平均成绩%d\n",avg);
    for(i=0;i<n;i++){
        if(pstu[i].sroce<=avg){
           printf("低于平均成绩的人%s\n",&(*(pstu+i)->name));
        }
    }
    free(pstu);
    pstu=NULL;
}
上一篇下一篇

猜你喜欢

热点阅读