码迷,mamicode.com
首页 > 编程语言 > 详细

「C语言」「例题」结构体与共用体

时间:2016-03-06 11:12:23      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

    本篇收集《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 } 
9.1 一个学生基本信息的输入和输出

 

技术分享
 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 }
9.2 选票的统计

 

技术分享
 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 }
9.3 编写一个竞赛用的时钟程序,按S键开始计时,按E键停止计时

 

技术分享
 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 }
9.4 学生成绩的管理(录入、平均值、排序、输出)

 

技术分享
 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 } 
9.5 通过共用体变量,将一个整数的2字节分别按十六进制和字符方式输出

 

技术分享
 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 } 
9.6 男女生的体育成绩

 

技术分享
 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 } 
9.7 摸不同颜色球的方案

 

技术分享
 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 } 
9.8 编写程序输出初始化好的结构体数组中的元素信息

 

技术分享
 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 }
9.9 typedef及结构体指针实现学生的基本信息

 

「C语言」「例题」结构体与共用体

标签:

原文地址:http://www.cnblogs.com/corvoh/p/5246717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!