单元8 结构体源代码
【例8-1】输入输出学生信息
学生信息包括:学号、姓名、性别、年龄、成绩,定义为如下是结构体: #define XH 11 #define XM 21 struct student { };
编写函数void Input(struct student *stu)实现学生信息的输入,函数void Print(struct student *st)实现学生信息的输出。
#include \#include \#define N 3 #define XH 11 #define XM 21 struct student { };
void Input(struct student *stu) {
char num[XH]; char name[XM]; char sex; int age; double score;
char num[XH]; char name[XM]; char sex; int age; double score;
int i; char str[XM]; for(i=0;i printf(\请输入第%d个学生信息(学号、姓名、性别、年龄、 成绩):\\n\ } void Print(struct student *st) { } int main() { struct student stud[N]; Input(stud); Print(stud); int i; printf(\学号\\t姓名\\t性别\\t年龄\\t成绩\\n\for(i=0;i printf(\ } gets(stu[i].num); gets(stu[i].name); stu[i].sex=getchar();getchar(); gets(str); stu[i].age=atoi(str); gets(str); stu[i].score=atof(str); st->sex, st->age, st->score); return 0; } 【例8-2】复数加法运算。 编写程序实现两个复数的加法运算。 #include \typedef struct comp { double x;//实部 double y;//虚部 }CP; CP Add(CP *a,CP *b) {//复数加法运算 CP c; c.x=a->x+b->x; c.y=a->y+b->y; return c; } void Show(CP c) {//输出一个复数 if(c.y>0) printf(\ else if(c.y<0) printf(\ else printf(\} int main() { CP a,b,c; printf(\输入复数1的实部和虚部:\ scanf(\ printf(\输入复数2的实部和虚部:\ scanf(\ c=Add(&a,&b); Show(a);putchar('+');Show(b);putchar('=');Show(c);putchar('\\n'); return 0; } 【例8-3】输入和统计候选人得票程序。 某单位要评选一名先进工作者,假设有N个候选人,XP个人投票。每个人的信息包括:姓名、性别、年龄和得票数;每张选票写且只写一个人的姓名,通过输入选票上的姓名,统计每位候选人的得票数,最后输出每位候选人的信息和得票结果。 #include \#include \#include \#define N 3 #define M 10 //候选人数 //姓名长度 #define XP 5 //投票人数 typedef struct person { char name[M]; //姓名 char sex; int age; int count; //性别 //年龄 //得票数 }PERSON; void Init(PERSON *lead) {//得票数初始化 } void Input(PERSON *lead) {//输入候选人信息 } void Output(PERSON *lead) {//输出候选人信息和得票数 } void Candidate(PERSON lead[]) {//统计候选人得票 int i,j; char lname[M]; for(i=1;i<=XP;i++) int i; system(\ printf(\候选人信息及得票结果\\n\printf(\姓名\\t性别\\t年龄\\t得票\\n\for(i=0;i printf(\int i; char str[3]; for(i=0;i printf(\请输入第%d个候选人姓名:\gets(lead->name); printf(\请输入第%d个候选人性别:\lead->sex=getchar(); getchar(); printf(\请输入第%d个候选人年龄:\gets(str); lead->age=atoi(str); int i; for(i=0;i lead->count=0; lead->count); } { } printf(\请输入第%d张选票姓名:\gets(lname); for(j=0;j if(strcmp(lname,lead[j].name)==0) lead[j].count++; int main() { PERSON leader[N]; Init(leader); Input(leader); Candidate(leader); Output(leader); return 0; } 【例8-4】扑克牌模拟程序。 模拟一副扑克牌洗牌、发牌和理牌。要求:将一副牌分发给北家、东家、南家和西家;对每家牌先按花色顺序(黑桃、红桃、方块、梅花)、再面值顺序(A、K、Q、J、10、9、8、7、6、5、4、3、2)进行整理;显示整理好的每家牌。 #include \#include \#include \typedef struct card { int suit; //花色 int face; //面值 }Card; void InitPoker(Card *Poker) {//初始化一副牌 int i; for(i=0;i<52;i++) { Poker[i].suit=i/13; Poker[i].face=i; } } void Shuffle(Card *Poker)