仲宇航

抄写例题

例题9.1

#include<stdio.h>
struct student    //定义结构体名字为student 
{
    long int num;   //student结构包括长整形num,数组长度为20的name和addr, 单个字节sex.
    char name[20];
    char sex;
    char addr[20];
    
}a={10101,"Li Lin",'M',"123 BeiJing Read"}; //对结构体各个变量赋初始值 
int main()
{
    printf("NO:%d\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr); ///在主函数输出结构体中各个变量 
}

NO:10101
name:Li Lin
sex:M
address:123 BeiJing Read

--------------------------------
Process exited after 0.1988 seconds with return value 52
请按任意键继续. . .

总结:结构关键包括定义结构里面的变量,为结构赋初值,输出时可以按照需要进行输出。

例题9.2

#include<stdio.h>
struct Student   //定义结构体Student 
{
    int num;  //结构体包括整形num,数组长度为20的name,单精度score 
    char name[20];
    float score;
    
 } student1,student2; //结构体包括两个结构 
 int main()
 {
 
 scanf("%d%s%f",&student1.num,student1.name,&student1.score);
 scanf("%d%s%f",&student2.num,student2.name,&student2.score);  //输入student1和student2的各个值 
 printf("the higher score is:\n");
 if(student1.score>student2.score)
 printf("%d  %s  %6.2f\n",student1.num,student1.name,student1.score);  //如果student1得值大于student2,的值则输出student1各个值 
 else if(student1.score<student2.score)
 printf("%d  %s  %6.2f\n",student2.num,student2.name,student2.score);  //反之输出student2的各个值 
 else
 {
     printf("%d  %s  %6.2f\n",student1.num,student1.name,student1.score);
 
 printf("%d  %s  %6.2f\n",student2.num,student2.name,student2.score);  //如果等于则全部输出 
     
 }
 
 
 return 0; 
}

110 警察 89
112 医生 88
the higher score is:
110  警察   89.00

--------------------------------
Process exited after 24.69 seconds with return value 0
请按任意键继续. . .

总结:输入结构要注意的关于字符数组,在定义输入是不能带赋值符,因为本身代表的是地址,所以要是带有会显得画蛇添足。

例题9.3

#include<stdio.h>
#include<string.h> //因为调用strcmp函数所以定义头文件 
struct Person
{
    char name[20];
    int count;
    
}leader[3]={{"皮皮虾",0},{"雷伊",0},{"盖亚",0}};  //定义结构体Person并对投票人头赋初始票数0 
int main()
{
    int i,j;
    char leader_name[20];  
    for(i=1;i<=10;i++)
    {
        scanf("%s",leader_name);  //定义leader_name并使用for循环来进行输入10个量  
        for(j=0;j<3;j++)             
        if(strcmp(leader_name,leader[j].name)==0)  //再次使用for循环进行投票并输入数为成员名则计票 
        leader[j].count++;
        
     } 
     printf("\nresult:\n");
     for(i=0;i<3;i++)            //最后使用for循环输出票最多结构体leader[i] 
     printf("%5s:%d\n",leader[i].name,leader[i].count);
     return 0;
} 

皮皮虾
皮皮虾
盖亚
雷伊
雷伊
雷伊
雷伊
盖亚
盖亚
皮皮虾

result:
皮皮虾:3
 雷伊:4
 盖亚:3

--------------------------------
Process exited after 45.46 seconds with return value 0
请按任意键继续. . .

总结:投票系统是运用函数进行比较区分输入的人名,来进行计票,从中体现了结构的方便,功能强大。

例题9.4

#include<stdio.h>
struct Student
{
    int num;
    char name[20];
    float score;
    
 };   //定义结构体Student 
 int main()
 {
     struct Student stu[5]={{110,"警察",11},{112,"医生",22},{119,"火警",33},{111,"不知道",44},{999,"红十字",55}};
     struct Student temp;  //生成结构体temp和数组并对结构体数组各个量赋值 
      
     int i,j,k;
     printf("the order is:\n");
     for(i=0;i<4;i++)       
     {k=i;
     for(j=i+1;j<5;j++)
     if(stu[j].score>stu[k].score)
     k=j;
     temp=stu[k];
     stu[k]=stu[i];
     stu[i]=temp;   //使用两次for循环使头一个学生成绩跟下一个学生进行比较,并进行互换 
     
     
      }
      for(i=0;i<5;i++)
      printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score); //最后使用for循环由大到小输出结构各个量 
       
 }

the order is:
   999   红十字  55.00
   111   不知道  44.00
   119     火警  33.00
   112     医生  22.00
   110     警察  11.00

--------------------------------
Process exited after 0.1743 seconds with return value 23
请按任意键继续. . .

总结:此程序k与j交换非常巧妙,从中可以衍生很多方法,可以指名交换结构里具体的变量,既可以笼统又可以具体。

例题9.5

#include<stdio.h>
#include<string.h>
int main()
{
    struct student{
        long num;
        char name[20];
        char sex;
        float score;
    };  //定义结构体student内容 
    struct student stu_1;
    struct student *p;  //定义结构体stu_1和指针p,并让指针p指向stu_1 
    p=&stu_1;
    stu_1.num=10086;
    strcpy(stu_1.name,"yi dong");   //使用strcpy复制yi dong给stu_1.name 
    stu_1.sex='m';
    stu_1.score=45;
    printf("num=%d\n name:%s\n sex:%c\n score:%d\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
    printf("\n");
    
    printf("num=%d\n name:%s\n sex:%c\n score:%d\n",(*p).num,(*p).name,(*p).sex,(*p).score);
//最后直接输出结构体各个量和用指针来输出 
 } 

num=10086
 name:yi dong
 sex:m
 score:0

num=10086
 name:yi dong
 sex:m
 score:0

--------------------------------
Process exited after 0.217 seconds with return value 40
请按任意键继续. . .

总结:运用指针输出结构体变量总共有两种方法,再加上普通输出结构体变量的方法,可以根据不同情况来进行输出。

例题9.6

#include<stdio.h>
struct Student{
    int num;
    char name[20];
    char sex;
    int age;
};   //定义结构体Student 
struct Student stu[3]={{110,"火警",'M',110},{111,"医生",'W',111},{112,"警茶",'l',112} }; //对结构体数组赋值 
int main()
{
    struct Student *p;  //定义结构体指针 
    for(p=stu;p<stu+3;p++)  //使用for循环指针指向变量来输出各个值 
    printf("%5d %-20s %2c %4d\n",p->num,p->name,p->sex,p->age);
}

 

  110 火警                  M  110
  111 医生                  W  111
  112 警茶                  l  112

--------------------------------
Process exited after 0.1359 seconds with return value 4206752
请按任意键继续. . .

总结:结构的指针跟普通的指针几乎是一样的,都是指向首地址的变量,而对于结构体要先定义结构体的指针,以保与其他结构区分开来。

posted on 2017-04-09 23:05  长心人  阅读(148)  评论(0编辑  收藏  举报

导航