标签:
本篇收集《C语言程序设计教程》第九章“结构体与共用体”的所有例题。
1 #include <stdio.h> 2 3 /*输入一个学生的基本信息, 4 包括学号、姓名、性别、年龄、出生日期、三门成绩, 5 输出该学生的基本信息和平均成绩*/ 6 7 struct date 8 { 9 int year;/* 年份 */ 10 int month;/* 月份 */ 11 int day; /* 日期 */ 12 }; 13 14 struct student 15 { 16 char num[9];/* 学号 */ 17 char name[21];/* 姓名 */ 18 char sex;/* 性别 */ 19 int age;/* 年龄 */ 20 struct date birthday;/* 引用了struct dat e类型 */ 21 int score[3];/* 三门成绩 */ 22 float aver;/* 三门成绩的平均值 */ 23 }; 24 25 int main() 26 { 27 struct student stu; 28 int i,sum=0; 29 printf("please input the information:\n"); 30 printf("please input num:"); 31 scanf("%s",&stu.num); 32 printf("please input name:"); 33 scanf("%s",&stu.name); 34 printf("please input sex:"); 35 flushall();/* 清楚输入缓存区。以便正确输入性别 */ 36 scanf("%c",&stu.sex); 37 printf("please input age:"); 38 scanf("%d",&stu.age); 39 printf("please input birthday:"); 40 scanf("%d%d%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day); 41 printf("please input scores:"); 42 for(i=0;i<3;i++)/* 循环输入该学生的三门成绩 */ 43 scanf("%d",&stu.score[i]); 44 for(i=0;i<3;i++)/* 计算该学生的三门成绩的总和 */ 45 sum+=stu.score[i]; 46 stu.aver=sum/3.0;/* 计算该学生的三门成绩的平均值 */ 47 printf("\nthe information is:"); 48 printf("\nthe num is %s",stu.num); 49 printf("\nthe name is %s",stu.name); 50 printf("\nthe sex is %c",stu.sex); 51 printf("\nthe age is %d",stu.age); 52 printf("\nthe birthday is %02d-%02d-%02d",stu.birthday.year,stu.birthday.month,stu.birthday.day); 53 printf("\nthe score is"); 54 for(i=0;i<3;i++) 55 printf("%d ",stu.score[i]); 56 printf("\nthe aver is %.2f\n",stu.aver); 57 return 0; 58 }
1 #include <stdio.h> 2 #include <string.h> 3 4 /*选票的统计:设有3个班长候选人"fu"、"lu"、"shou",全班共80个人, 5 个人只能选一位班长候选人的名字,再按票数从高到低的顺序输出各候选人的得票数 */ 6 7 struct person 8 { 9 char name[20]; 10 int count; 11 }; 12 13 int main() 14 { 15 struct person leader[3]={"fu",0,"lu",0,"shou",0},t; 16 int i,j,k; 17 int n=3,m;/* 班长候选人数 */ 18 char name[20]; 19 printf("please input count of votes:"); 20 scanf("%d",&m); 21 printf("please input the elestion`s name:\n"); 22 for(i=1;i<=m;i++) 23 { 24 printf("No.%d:",i); 25 scanf("%s",&name); 26 for(j=0;j<3;j++) 27 if(strcmp(name,leader[j].name)==0) 28 leader[j].count++; 29 } 30 for(i=0;i<n-1;i++)/* 以得票数为关键,进行升序排序 */ 31 { 32 k=i; 33 for(j=i+1;j<n;j++) 34 if(leader[k].count<leader[j].count) 35 k=j; 36 if(k!=i) 37 { 38 t=leader[i]; 39 leader[i]=leader[k]; 40 leader[k]=t; 41 } 42 } 43 printf("the vote leader is:\n"); 44 for(i=0;i<3;i++) 45 printf("%s\t%d\n",leader[i].name,leader[i].count); 46 return 0; 47 }
1 #include <stdio.h> 2 #include <conio.h> 3 #include <windows.h> 4 5 //编写一个竞赛用的时钟程序,按S键开始计时,按E键停止计时 6 7 struct clock 8 { 9 int hours; 10 int minutes; 11 int seconds; 12 }; 13 14 void display(struct clock t)/* 显示时钟时间,结构体变量整体作为函数参数 */ 15 { 16 printf("\r%02d:",t.hours); 17 printf("%02d:",t.minutes); 18 printf("%02d",t.seconds); 19 } 20 21 struct clock update(struct clock t)/* 时钟时间每隔1秒进行更新 */ 22 {/* 结构体类型作为函数的返回值 */ 23 t.seconds++; 24 if(t.seconds==60) 25 { 26 t.seconds=0; 27 t.minutes++; 28 } 29 if(t.minutes==60) 30 { 31 t.minutes=0; 32 t.hours++; 33 } 34 if(t.seconds==24) 35 t.hours=0; 36 sleep(1000);/* 系统暂定一秒 */ 37 return t; 38 } 39 40 int main() 41 { 42 struct clock cl={0,0,0};/* 初始化从0开始 */ 43 char ch; 44 printf("please press \"s\" to start my clock\n"); 45 printf("please press \"e\" to end my clock\n"); 46 display(cl); 47 ch=getch(); 48 while(1) 49 { 50 if(ch==‘s‘ || ch==‘S‘) 51 { 52 cl=update(cl); 53 display(cl); 54 if(kbhit())/* 检测当前是否有键盘输入 */ 55 { 56 ch=getch(); 57 if(ch==‘e‘ || ch==‘E‘) 58 break; 59 } 60 } 61 else if(ch==‘e‘ || ch==‘E‘) 62 break; 63 else 64 ch=getch(); 65 } 66 printf("\n"); 67 return 0; 68 }
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 20 /*学生总人数不超过20人*/ 4 5 //编写程序完成对学生成绩的管理,要求实现的功能包括: 6 //(1)学生信息录入:从键盘按学号顺序输入n名学生信息(学号、姓名、3门课程成绩)。 7 //(2)计算平均值:计算每个学生3门课程成绩的平均值。 8 //(3)学生信息排序:按照平均值从低到高的顺序对录入的学生信息进行排序。 9 //(4)学生信息输出:将排好序的学生信息输出。 10 11 struct student/* 学生结构体类型定义 */ 12 { 13 int id; 14 char name[20]; 15 int score[3]; 16 float aver; 17 }; 18 19 void Input(struct student st[],int n)/* n个学生信息的录入 */ 20 { 21 int i,j; 22 printf("Please input Information:\n"); 23 for(i=0;i<n;i++) 24 { 25 scanf("%d",&st[i].id); 26 scanf("%s",st[i].name); 27 for(j=0;j<3;j++) 28 scanf("%d",&st[i].score[j]); 29 } 30 } 31 32 void CalAver(struct student st[],int n)/* 计算n个学生3门课的平均值 */ 33 { 34 int i,j; 35 for(i=0;i<n;i++) 36 { 37 int s=0; 38 for(j=0;j<3;j ++) 39 s+=st[i].score[j]; 40 st[i].aver=s/3.0; 41 } 42 } 43 44 void Sort(struct student st[],int n)/* 依据平均值,对n个学生的信息进行排序 */ 45 { 46 int i,j,k; 47 struct student t; 48 for(i=0;i<n-1;i++) 49 { 50 k=i; 51 for(j=i+1;j<n;j++) 52 if(st[k].aver>st[j].aver) 53 k=j; 54 if(k!=i) 55 { 56 t=st[k]; 57 st[k]=st[i]; 58 st[i]=t; 59 } 60 } 61 } 62 63 void Output(struct student st[],int n)/* n个学生的信息输出 */ 64 { 65 int i,j; 66 for(i=0;i<n;i++) 67 { 68 printf("%d\t%s",st[i].id,st[i].name); 69 for(j=0;j<3;j++) 70 printf("\t%d",st[i].score[j]); 71 printf("\t%f\n",st[i].aver); 72 } 73 } 74 75 int main() 76 { 77 int n; 78 struct student st[N]; 79 printf("please input numbers: "); 80 scanf("%d",&n); 81 Input(st,n);/* 调用输入函数 */ 82 CalAver(st,n);/* 调用计算平均值函数 */ 83 Sort(st,n);/* 调用排序函数 */ 84 Output(st,n);/* 调用输出函数 */ 85 return 0; 86 }
1 #include <stdio.h> 2 3 //通过共用体变量,将一个整数的2字节分别按十六进制和字符方式输出 4 5 union int_char 6 { 7 char ch[2]; 8 int i; 9 }; 10 11 void OutPut(union int_char x) 12 { 13 printf("i=%d\ti=%X\n",x.i,x.i); 14 printf("ch0=%X,ch1=%X\n",x.ch[0],x.ch[1]); 15 printf("ch0=%c,ch1=%c\n",x.ch[0],x.ch[1]); 16 } 17 18 int main() 19 { 20 union int_char x; 21 x.i=19788; 22 OutPut(x); 23 return 0; 24 }
1 #include <stdio.h> 2 #define N 10 3 4 /* 5 一个班体育课成绩,男生测验1500米成绩x分x秒,女生测验柔韧性(分A、B、C、D和E5等) 6 和俯卧撑次数,将测验数据放在一张表中,表中包括学号、姓名、 性别和体育成绩。 7 最后一项“体育成绩 ”的内容根据性别填写不同的内容。 8 编程输入成绩数据,再以表格形式输出。 9 */ 10 11 struct boyscore 12 { 13 int minute; 14 int second; 15 }; 16 17 struct girlscore 18 { 19 char flexibility; 20 int number; 21 }; 22 23 struct student 24 { 25 char num[9]; 26 char name[21]; 27 char sex; 28 union 29 { 30 struct boyscore bs; 31 struct girlscore gs; 32 }score; 33 }; 34 35 int main() 36 { 37 struct student st[N]; 38 int n,i; 39 printf("please input number of students:"); 40 scanf("%d",&n); 41 printf("please input num name sex score:\n"); 42 for(i=0;i<n;i++) 43 { 44 printf("No%d.stu is: ",i+1); 45 scanf("%s%s %c",st[i].num,st[i].name,&st[i].sex); 46 if(st[i].sex==‘b‘ || st[i].sex==‘B‘) 47 scanf("%d%d",&st[i].score.bs.minute,&st[i].score.bs.second); 48 else if(st[i].sex==‘g‘ || st[i].sex==‘G‘) 49 scanf(" %c%d",&st[i].score.gs.flexibility,&st[i].score.gs.number); 50 else 51 printf("input error!"); 52 } 53 printf("\nthe information is:\n"); 54 for(i=0;i<n;i++) 55 { 56 printf("%-8s %s\t",st[i].num,st[i].name,st[i].sex); 57 if(st[i].sex==‘b‘ || st[i].sex==‘B‘) 58 printf("%d:%d\n",st[i].score.bs.minute,st[i].score.bs.second); 59 else if(st[i].sex==‘g‘ || st[i].sex==‘G‘) 60 printf("%c and %d\n",st[i].score.gs.flexibility,st[i].score.gs.number); 61 } 62 return 0; 63 }
1 #include <stdio.h> 2 3 //已知口袋中有红、黄、白、蓝、黑共5种不同颜色的小球,若依次从袋中取3个 4 //,问得到3种不同色球的可能取法。以每行显示5种的方式,输出所有的排列情况。 5 6 enum color {red,yellow,white,blue,black};/* 定义枚举类型 */ 7 8 int main() 9 { 10 enum color b[3]; 11 int i,count=0; 12 for(b[0]=red;b[0]<=black;b[0]++) 13 for(b[1]=red;b[1]<=black;b[1]++) 14 for(b[2]=red;b[2]<=black;b[2]++) 15 if(b[0]!=b[1] && b[0]!=b[2] && b[1]!=b[2])/* 三种球颜色不同 */ 16 { 17 count++;/* 使累加器count+1 */ 18 printf("No.%-2d ",count); 19 for(i=0;i<3;i++) 20 { 21 switch(b[i])/* 根据不同情况,输出球的颜色 */ 22 { 23 case red: 24 printf("红"); 25 break; 26 case yellow: 27 printf("黄"); 28 break; 29 case white: 30 printf("白"); 31 break; 32 case blue: 33 printf("蓝"); 34 break; 35 case black: 36 printf("黑"); 37 break; 38 } 39 } 40 if(count%5==0)/* 每行输出5种情况 */ 41 printf("\n"); 42 else 43 printf("\t"); 44 } 45 return 0; 46 }
1 #include <stdio.h> 2 3 //编写程序输出初始化好的结构体数组中的元素信息 4 5 typedef struct student/* 结构体类型定义 */ 6 { 7 int id; 8 char name[20]; 9 int score; 10 }STUDENT,*STU; 11 12 int main() 13 { 14 STUDENT st[3]={{10101,"Li Lin",98},{10102,"Zhang Fun",87},{10103,"Wang Min",79}};/* 结构体数组初始化 */ 15 STUDENT *p;/* STU p;也可以定义结构体类型指针变量p */ 16 for(p=st;p<st+3;p++) 17 printf("%-6d%s\t%d\n",p->id,p->name,p->score); 18 return 0; 19 }
1 #include <stdio.h> 2 3 //编写程序输入一个学生的基本信息,包括学号、姓名、三门课程的成绩、 4 //并计算该学生三门课程成绩的平均值,最后输出该学生信息 5 6 typedef struct person 7 { 8 int num; 9 char name[21]; 10 int s[3]; 11 float aver; 12 }PERSON; 13 14 void Input(PERSON *p)/* 用指向结构体的指针变量作形参 */ 15 { 16 scanf("%d%s%d%d%d",&p->num,p->name,&p->s[0],&p->s[1],&p->s[2]); 17 p->aver=(p->s[0]+p->s[1]+p->s[2])/3.0; 18 } 19 20 int main() 21 { 22 PERSON st; 23 printf("please input information\n"); 24 Input(&st);/* 实现引用传递 */ 25 printf("\nthe information is:\n"); 26 printf("%d\t%s\t %d %d %d %5.2f\n",st.num,st.name,st.s[0],st.s[1],st.s[2],st.aver); 27 return 0; 28 }
标签:
原文地址:http://www.cnblogs.com/corvoh/p/5246717.html