-- 作者:admin
-- 发布时间:2008/12/1 13:07:07
-- 关于结构体的第一次课件
11 结构体 ——“我们应该换种角度看世界”
1 为什么使用结构体 思考如何表达班级中的很多学生这个问题,利用数组是常见的方法,但是目前的数组只能支持单一数据类型 假设一个学生有这些需要表达的数据,如姓名、性别和年龄,再假设有三个学生 char names[3][10]={"黎明","胡哥","白雪"}; char sexs[3]={\'M\',\'M\',\'F\'}; int ages[3]={18,19,16};
# include <stdio.h>
void main() { char names[3][10]={"黎明","胡哥","白雪"}; char sexs[3]={\'M\',\'M\',\'F\'}; int ages[3]={18,19,16}; int i; for(i=0;i<3;i++) { printf("第%d个学生的姓名是:%s,性别是%c,年龄是%d\\n",i+1,names[i],sexs[i],ages[i]); } }
结构体的表达方法 然而,数组是一种将事物属性割裂开来的数据表达方法 能否有一种可以完整表达学生信息的独立成员实体? 结构体表达方法: struct student{ char name[10]; char sex; int age; }; struct student stus[3]={{"黎明",\'M\',18},{"胡哥",\'M\',19},{"白雪",\'F\',16}};
# include <stdio.h>
struct student{ char name[10]; char sex; int age; };
void main() { struct student stus[3]={{"黎明",\'M\',18},{"胡哥",\'M\',19},{"白雪",\'F\',16}}; int i; for(i=0;i<3;i++) { struct student stu=stus[i]; printf("第%d个学生的姓名是%s,性别是%c,年龄是%d\\n",i+1,stu.name,stu.sex,stu.age); } }
2 结构体的定义 更为完整的学生例子 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
# include <stdio.h>
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
void main() { struct student student1,student2; }
三种定义方法 先声明结构体类型再定义变量名 在声明类型的同时定义变量 直接定义结构体类型变量
嵌套的定义方法 struct date { int year; int month; int day; };
# include <stdio.h>
struct date { int year; int month; int day; };
struct student { int num; char name[20]; char sex; int age; struct date birthday; float score; char addr[30]; };
void main() { struct student student1; student1.num=1001; strcpy(student1.name,"黎明"); student1.sex=\'M\'; student1.age=18; student1.birthday.year=1990; student1.birthday.month=10; student1.birthday.day=1; student1.score=80; strcpy(student1.addr,"江苏"); printf("学生的姓名是%s\\n",student1.name); printf("学生的生日是%d年%d月%d日\\n",student1.birthday.year,student1.birthday.month,student1.birthday.day); }
3 例子 3.1 投票 直接从书上粘贴进行操作 #include <string.h> #include <stdio.h>
struct person { char name[20]; int count; };
void main() { struct person leader[3]={"Li",0, "Zhang",0, "Fun",0}; 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); }
增加字符大小识别 #include <string.h> #include <stdio.h>
struct person { char name[20]; int count; };
void main() { struct person leader[3]={"li",0, "zhang",0, "fun",0}; int i,j; char leader_name[20]; for(i=1;i<=10;i++) { scanf("%s",leader_name); for(j=0;j<strlen(leader_name);j++) { leader_name[j]=tolower(leader_name[j]); }
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); }
增加提示信息 #include <string.h> #include <stdio.h>
struct person { char name[20]; int count; };
void main() { struct person leader[3]={"li",0, "zhang",0, "fun",0}; int i,j; char leader_name[20]; printf("请按序号投票\\n"); for(i=0;i<3;i++) printf("%d号候选人:%s\\n",i+1,leader[i].name);
for(i=1;i<=10;i++) { scanf("%d",&j); leader[j-1].count++; } printf("\\n"); for(i=0;i<3;i++) printf("%5s:%d\\n",leader[i].name,leader[i].count); }
增加对无效票的重新统计 #include <string.h> #include <stdio.h>
struct person { char name[20]; int count; };
void main() { struct person leader[3]={"li",0, "zhang",0, "fun",0}; int i,j; char leader_name[20]; printf("请按序号投票\\n"); for(i=0;i<3;i++) printf("%d号候选人:%s\\n",i+1,leader[i].name);
for(i=1;i<=4;i++) { scanf("%d",&j);
if(j>=1 && j<=3) leader[j-1].count++; else i--; } printf("\\n"); for(i=0;i<3;i++) printf("%5s:%d\\n",leader[i].name,leader[i].count); }
增加任意退出能力 #include <string.h> #include <stdio.h>
struct person { char name[20]; int count; };
void main() { struct person leader[3]={"li",0, "zhang",0, "fun",0}; int i,j; char leader_name[20]; printf("请按序号投票\\n"); for(i=0;i<3;i++) printf("%d号候选人:%s\\n",i+1,leader[i].name);
while(1) { scanf("%d",&j);
if(j==0) break;
if(j>=1 && j<=3) leader[j-1].count++; else i--; } printf("\\n"); for(i=0;i<3;i++) printf("%5s:%d\\n",leader[i].name,leader[i].count); }
[此贴子已经被作者于2010-12-13 20:05:32编辑过]
|