课外天地 李树青学习天地C语言程序设计 → [推荐]第十课代码讲义:结构体


  共有12302人关注过本帖树形打印复制链接

主题:[推荐]第十课代码讲义:结构体

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
[推荐]第十课代码讲义:结构体  发帖心情 Post By:2015/11/30 10:55:46 [只看该作者]

结构体基本用法
#include "math.h"
int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    };
    struct Student
    {
        int id;
        char name[100];
        char gender;
        int age;
        struct Date birthday;
        char addr[100];
    };
    struct Student s1= {1,"张三",'M',18,{1997,8,27},"南京仙林大学城"};
    struct Student s2= {2,"李四",'M',19,{1996,1,10},"南京仙林大学城"};
    printf("第一个学生ID是%d,姓名是%s,性别是%c,年龄是%d,出生日期是%d年%d月%d日,住址是%s",
           s1.id,s1.name,s1.gender,s1.age,s1.birthday.year,s1.birthday.month,s1.birthday.day,s1.addr);

 

    return 0;
}

投票1:
#include <stdio.h>
#include <string.h>

struct person
{
    char name[20];
    int count;
} leader[3]= {"Li",0,"Zhang",0,"Wang",0};

void main()
{
    int i,j;
    char leader_name[20];
    for(i=1; i<=10; i++)
    {
        scanf("%s",leader_name);
        for(j=0; j<3; j++)
            if(strcmp(leader_name,leader[j].name)==0)
                leader[j].count++;
    }
    printf("\n");
    for(i=0; i<3; i++)
        printf("%5s:%d\n",leader[i].name,leader[i].count);
}


投票2:
#include <stdio.h>
#include <string.h>

struct person
{
    char name[20];
    int count;
} leader[3]= {"Li",0,"Zhang",0,"Wang",0};

void main()
{
    int i,j;
    int id;
    for(i=0; i<3; i++)
        printf("%d:%s\n",i,leader[i].name);
    printf("请输入序号!\n");
    for(i=1; i<=10; i++)
    {
        scanf("%d",&id);
        leader[id].count++;
    }
    printf("\n");
    for(i=0; i<3; i++)
        printf("%5s:%d\n",leader[i].name,leader[i].count);
}

成绩统计1:
#include <stdio.h>
#define N 5

struct student
{
    char num[6];
    char name[8];
    int score[4];
} stu[N];

int main()
{
    void input(struct student stu[]);
    void print(struct student stu[]);
    input(stu);
    print(stu);
    return 0;
}

void input(struct student stu[])
{
    int i,j;
    for (i=0; i<N; i++)
    {
        printf("input scores of student %d:\n",i+1);
        printf("NO.: ");
        scanf("%s",stu[i].num);
        printf("name:   ");
        scanf("%s",stu[i].name);
        for (j=0; j<3; j++)
        {
            printf("score %d:",j+1);
            scanf("%d",&stu[i].score[j]);
        }
        printf("\n");
    }
}

void print(struct student stu[])
{
    int i,j;
    printf("\n   NO.      name    score1   score2   score3\n");
    for (i=0; i<N; i++)
    {
        printf("%5s%10s",stu[i].num,stu[i].name);
        for (j=0; j<3; j++)
            printf("%9d",stu[i].score[j]);
        printf("\n");
    }
}

 

 


指针写法
#include <stdio.h>
#define N 3

struct student
{
    char num[6];
    char name[8];
    int score[3];
} stu[N];

int main()
{
    void input(struct student *stu);
    void print(struct student *stu);
    input(stu);
    print(stu);
    return 0;
}

void input(struct student *stu)
{
    int i,j;
    for (i=0; i<N; i++)
    {
        printf("input scores of student %d:\n",i+1);
        printf("NO.: ");
        scanf("%s",stu->num);
        printf("name:   ");
        scanf("%s",stu->name);
        for (j=0; j<3; j++)
        {
            printf("score %d:",j+1);
            scanf("%d",&stu->score[j]);
        }
        printf("\n");
        stu++;
    }
}

void print(struct student *stu)
{
    int i,j;
    printf("\n   NO.      name    score1   score2   score3\n");
    for (i=0; i<N; i++)
    {
        printf("%5s%10s",stu->num,stu->name);
        for (j=0; j<3; j++)
            printf("%9d",stu->score[j]);
        printf("\n");
        stu++;
    }
}

 

 

成绩统计2:
#include <stdio.h>
#define N 3

struct student
{
    char num[6];
    char name[8];
    int score[3];
} stu[N];

int main()
{
    void input(struct student stu[]);
    void print(struct student stu[]);
    input(stu);
    print(stu);
    return 0;
}

void input(struct student *stu)
{
    int i,j;
    for (i=0; i<N; i++)
    {
        printf("input scores of student %d:\n",i+1);
        printf("NO.: ");
        scanf("%s",stu->num);
        printf("name:   ");
        scanf("%s",stu->name);
        for (j=0; j<3; j++)
        {
            printf("score %d:",j+1);
            scanf("%d",&stu->score[j]);
        }
        stu++;
        printf("\n");
    }
}

void print(struct student *stu)
{
    int i,j;
    printf("\n   NO.      name    score1   score2   score3\n");
    for (i=0; i<N; i++)
    {
        printf("%5s%10s",stu->num,stu->name);
        for (j=0; j<3; j++)
            printf("%9d",stu->score[j]);
        stu++;
        printf("\n");
    }
}

增加统计功能:
#include <stdio.h>
#define N 3
struct student
{
    char num[6];
    char name[8];
    float score[3];
    float avr;
} stu[N];

int main()
{
    int i,j,maxi;
    float sum,max,average;
    for (i=0; i<N; i++)
    {
        printf("input scores of student %d:\n",i+1);
        printf("NO.:");
        scanf("%s",stu[i].num);
        printf("name:");
        scanf("%s",stu[i].name);
        for (j=0; j<3; j++)
        {
            printf("score %d:",j+1);
            scanf("%f",&stu[i].score[j]);
        }
    }

    average=0;
    max=0;
    maxi=0;
    for (i=0; i<N; i++)
    {
        sum=0;
        for (j=0; j<3; j++)
            sum+=stu[i].score[j];
        stu[i].avr=sum/3.0;
        average+=stu[i].avr;
        if (sum>max)
        {
            max=sum;
            maxi=i;
        }
    }
    average/=N;

    printf("   NO.      name   score1   score2   score3     average\n");
    for (i=0; i<N; i++)
    {
        printf("%5s%10s",stu[i].num,stu[i].name);
        for (j=0; j<3; j++)
            printf("%9.2f",stu[i].score[j]);
        printf("    %8.2f\n",stu[i].avr);
    }
    printf("average=%5.2f\n",average);
    printf("The highest score is : student %s,%s\n",stu[maxi].num,stu[maxi].name);
    printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.\n",
           stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
    return 0;
}

[此贴子已经被作者于2015-12-08 12:40:45编辑过]

 回到顶部