实验3

对结构体的练习

1.有三个学生,每个学生的数据包括,学号、姓名和三科成绩,从键盘输入这三个学生的数据,要求输入每门课的总平均成绩及最高分学生的数据(包括学号、姓名)。(题与课本上有差别,懒得做全了,太繁琐)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    int num;
    char name[9];
    int score[3];
};
int main()
{
    struct student Stu[3];
    int i=0,j=0;
    char temp[9];
    int max[3],n=0,m=0;
    double average[3];
    for(i=0;i<3;i++)
    {
        printf("请输入%d个学生的学号:
",i+1);
        scanf("%d",&Stu[i].num);
        printf("请输入%d个学生的姓名:
",i+1);    
        fflush(stdin);
        gets(temp);
        strcpy(Stu[i].name,temp);
        for(j=0;j<3;j++)
        {
            printf("请输入%d个学生的第%d科成绩:
",i+1,j+1);
            scanf("%d",&Stu[i].score[j]);
        }
    }
     for(i=0;i<3;i++)
     {
         n=0;
         for(j=0;j<3;j++)
         {
             n+=Stu[j].score[i];
         }
         average[i]=n/3.0;
     }
     for(i=0;i<3;i++)
     {
         printf("第%d课的平均成绩为%lf。
",i+1,average[i]);
     }
     for(i=0;i<3;i++)
     {
         m=0;
         for(j=0;j<3;j++)
         {
             if(Stu[j].score[i]>Stu[m].score[i])
             {
                 m=j;
             }
         }
         max[i]=m;
     }
     for(i=0;i<3;i++)
     {
         printf("第%d课成绩,最高分为%d:
",i+1,Stu[i].score[max[i]]);
         printf("学生的学号是%d
",Stu[i].num );
         printf("学生姓名是:%s
",Stu[i].name );
     }
     return 0;
}

2.对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的姓名,要求最后输出各人得票结果。

#include<stdio.h>
#include<string.h> 
#include<stdlib.h>
struct num
{
    char name[9];
    int n;
 } ;
 int main()
 {
     struct num cd[3];
     char a[9],b[]={"0"};
     int i=0;
     for(i=0;i<3;i++)
     {
         printf("请输入第%d个候选人的名字:",i+1);
         gets(a);
         strcpy(cd[i].name ,a);
     }
     while(1)
     {
         printf("请输入你要投候选人的姓名,输入0结束:
");
         gets(a);
         if(strcmp(a,b)==0)
         {
             break;
         }
        for(i=0;i<3;i++)
        {
            if(strcmp(a,cd[i].name)==0)
            {
                cd[i].n++;
                break;
            }
        }
     }
     for(i=0;i<3;i++)
     {
         printf("第%d名候选人的票数是%d
",i+1,cd[i].n);
     }
     return 0;
 }

总结:不能对结构体整体进行==或!=的判断,对结构体可以进行整体赋值,但两个结构体必须类型相同。

   结构体只声明时,不分配内存。

   对结构体,以多种类型从键盘输入时,容易出先问题,最好采用:1.转换函数。2.接触简单变量,间接赋值。

原文地址:https://www.cnblogs.com/TX980502/p/6594752.html