浙江长征职业技术学院—计算机与信息技术系—相方莉制作 记录 学生成绩表 学号 姓名 高等数学 C语言 英语 总分 101 张圣丹 75 86 77 232 102 徐丽萍 92 88 90 270 103 周京京 79 68 225 104 申洪伟 83 93 82 258 105 胡瀚文 76 87 78 241 106 张腾伟 80 226 107 於斌 64 98 222 108 孙盛兵 84 60 220 109 任高翔 53 197 110 方辘恒 238 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3 结构体 有时需要将不同类型的数据组合成一个有机的整体以便于引用。 如:一个学生的学号、姓名、3门课成绩、总分。 分别定义简单变量难以反映它们之间的联系。 应当将它们组成一个组合项,其中可以包含若干个类型不同的数据项 C提供的结构体相当于记录。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 结构体类型的定义 结构体类型定义的一般形式为: struct 结构体名 { 成员列表 }; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 结构体类型的定义 说明: (1)struct是声名结构体类型时必须使用的关键字,不能省略。 (2)struct 结构体名是一个类型名,它的功能和基本数据类型有着同样的地位和作用,都可以用来定义变量的类型,只不过这种类型是要用户自己制定而已。 (3)成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:类型说明符 成员名; (4)大括号和外面的分号都不能省略。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 三、相关知识 关键字 不能省略 结构体名,和标准类型 名一样可以定义变量 struct student {int num; char name[20]; float math; floatc_language; float english; float sum; }; 成员列表, 每个成员又称分量或域. 成员名定名规则与变量同 作为语句,必须以分号结束 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
思考:简易的选票统计器的结构体类型可以如何定义? 5.2.3.1 结构体类型的定义 思考:简易的选票统计器的结构体类型可以如何定义? struct person { char name[20]; int count; } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 定义结构体变量 (1)先声明结构体类型再定义结构体变量。 struct 结构体名 { 成员表列; } [struct] 结构体名 变量名表列; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 定义结构体变量 struct stu { char id[6],name[10]; int m1,m2,m3; float avg; } main( ) struct stu x,y; …… struct stu { char id[6],name[10]; int m1,m2,m3; float avg; } main( ) stu x,y; …… 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 定义结构体变量 (2)在声明类型的同时定义变量 struct [结构体名] { 成员表列; }变量名表列; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.1 定义结构体变量 main( ) { struct stu char id[6],name[10]; int m1,m2,m3; float avg;}x,y; …… } main( ) { struct char id[6],name[10]; int m1,m2,m3; float avg;}x,y; …… } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 说 明 1、结构体变量:能够赋值、存取或运算,编译时,分配空间 结构体类型:不能赋值、存取或运算,编译时,不分配空间 2、成员可以是一个结构体变量 3、成员名可以与程序中的变量名相同,两者不代表同一对象 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.3 结构体变量的使用 结构体变量名. 成员名 “.”是成员(又叫分量)运算符。它的优先级最高 例如:x.m1=78 scanf(“%s”,&x.id); printf(“%s”x.id); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.3 结构体变量的使用 struct student {int num; char name[20]; char sex; float score; struct date birthday; }student1; 不能将一个结构体变量为一个整体进行输入输出 printf(“%d,%s,%c,%f\n”,student1);× 只能对最低级的成员进行赋值或存取以及运算 student1.birthday.month 对成员变量可以象普通变量一样进行各种运算 sum=student1.score + student2.score struct date {int month; int day; int year; }birthday; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例】在键盘上输入一个学生的信息(包含学号、姓名、三门课 的成绩)并在显示器上输出。 #include "stdio.h" main() { struct {char id[6],name[10]; int m1,m2,m3; float avg;}x; printf("请输入学生的信息\n"); scanf("%s%s%5d%5d%5d",x.id,x.name,&x.m1,&x.m2,&x.m3); printf("学生的信息为:\n"); printf("%s\t%s\t%5d%5d%5d\n",x.id,x.name,x.m1,x.m2,x.m3); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.5 结构体数组 在实际应用中,经常用结构体数组来表示具有相同数据结构的一个群体。 如一个班的学生档案、一个车间职工的工资表,还有学生通讯录管理系统等。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.4 结构体变量的初始化 #include "stdio.h" main() { struct char id[6],name[10]; int m1,m2,m3; float avg;}x={"00101","李小明",87,88,92}; printf("%s\t%s\t%5d%5d%5d\n",x.id,x.name,x.m1,x.m2,x.m3); } 输出结果为: 00101 李小明 87 88 92 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.5 结构体数组 1. 结构体数组的定义 (1)由于结构体数组的成员为结构体类型,所以在定义结构体数组之前必须先定义结构体类型。 struct stu { char id[6],name[10]; int m1,m2,m3; float avg; } main() { struct stu x[10],y; …… struct stu { char id[6],name[10]; int m1,m2,m3; float avg; } main( ) { stu x[10],y; …… 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.2.3.5 结构体数组 (2)也可以直接定义结构体数组 main() { struct stu char id[6],name[10]; int m1,m2,m3; float avg;}x[10],y; …… } main() { struct char id[6],name[10]; int m1,m2,m3; float avg;}x[10],y; …… } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 2. 结构体数组的初始化 struct student {int num; char name[20]; char sex; }stu[3]={{101,"Li Lin",'M'}, {102,“Yet",‘M'}, {103,“Susan",‘F'}}; struct student {int num; char name[20]; char sex; }stu[ ]= {{101,"Li Lin",'M'}, {102,“Yet",‘M'}, {103,“Susan",‘F'}}; struct student {int num; char name[20]; char sex; }; struct student stu[ ]= {{101,"Li Lin",'M'}, {102,“Yet",‘M'}, {103,“Susan",‘F'}}; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例】计算三个同学的总成绩、平均成绩。 分析: (1)需要定义一个结构体,其成员有学号,姓名,三门课的成绩,总分,平均分; (2)定义一个结构体数组,并赋初值; (3)计算三个同学的总分及平均分; (4)输出这三个同学的信息; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例】计算三个同学的总成绩、平均成绩。 #include "stdio.h" #define N 3 struct stu {char id[6]; char name[10]; int m1,m2,m3; float avg,sum;} main( ) {stu student[N]={ {"001","李小明",78,89,90}, {"008","陈小东",85,81,67}, {"016","王永民",89,78,90} }; int i; for (i=0;i<N;i++) { student[i].sum=student[i].m1+student[i].m2+student[i].m3; student[i].avg=student[i].sum/3.0; } printf("他们的成绩单为:\n"); printf("学号\t姓名\t数学 英语 语文 总分 平均分\n"); for(i=0;i<N;i++) printf("%s\t%s\t%d%6d%7d%7.1f%6.1f\n",student[i].id,student[i].name, student[i].m1,student[i].m2,student[i].m3,student[i].sum,student[i].avg); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.3 项目分析与实现 首先每个候选人的姓名和票数统计,而且这两个量姓名是字符型数据,票数统计是整型数据,所以涉及不同类型的数据,要解决这种问题,就要用到结构体。其次候选人可能有多个,于是就要用到结构体数组。 1.定义变量 定义如下: struct person { char name[20]; int count; } leader[3]; 说明:该统计的是3个候选人的票数。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.3 项目分析与实现 2.数据赋值 struct person { char name[20]; int count; } leader[3]={"JACK",0,"SUSAN",0,"MIKE",0}; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.3 项目分析与实现 /*目的:简易的选票统计器实现*/ #include <stdio.h> void main() #include "string.h" #include "stdio.h" struct person { char name[20]; int count; } leader[3]={"JACK",0,"SUSAN",0,"MIKE",0}; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.3 项目分析与实现 main() { int i,j; char leader_name[20]; printf("----------------投票统计器V1.0------------------\n\n候选人名单:\n\n"); for(i=0;i<3;i++) printf("%5s\t",leader[i].name); printf ("\n"); printf ("--------------------------------\n"); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 5.3 项目分析与实现 for(i=1;i<=10;i++) { printf("请%d号同学投票:",i); scanf("%s",leader_name); for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } printf ("\n"); printf ("--------------------------------\n"); printf ("最后得票结果为:\n"); for(i=0;i<3;i++) printf("%5s:%d票\n",leader[i].name,leader[i].count); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作