C语言例题第八章_第1页
C语言例题第八章_第2页
C语言例题第八章_第3页
C语言例题第八章_第4页
C语言例题第八章_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章structscore{intno;charname[20];intenglish;intmath;intcomputer;intclang;};1、先定义结构类型,再定义结构变量。如:structscore{intno;charname[20];intenglish;intcomputer;intclang;};structscorestu1,stu2;定义了两个变量stu1和stu2为score结构类型。2、在定义结构类型的同时定义结构变量。例如:structscore{intno;charname[20];intenglish;intmath;intcomputer;intclang;}stu1,stu2;3.也可以直接定义结构变量。例如:struct{intno;charname[20];intenglish;intmath;intcomputer;

intclang;}stu1,stu2;例如,下面是一个新的结构类型的定义:structdate{intmonth;intday;intyear;}struct{intnum;charname[20];charsex;structdatebirthday;floatscore;}stu1,stu2;【例8.1】从键盘上输入一个人的姓名、年龄、性别和身高,然后将它们打印出来。#include"stdio.h"main(){structperson{charname[20];intage;intsex;floatheight;}person1;printf("pleaseinputname:\n");scanf("%s",);printf("pleaseinputage:\n");scanf("%d",&person1.age);printf("pleaseinputsex(0formaleand1forfemale):\n");scanf("%d",&person1.sex);printf("pleaseinputheight:\n");scanf("%f",&person1.height);printf("theresultis:\n");printf("name:%s\nage:%d\n",,person1.age);if(person1.sex==0)printf("sex:male\n");if(person1.sex==1)printf("sex:female\n");printf("height:%.2fm\n",person1.height);}

【例8.2】给结构变量赋值并输出其值。#include"stdio.h"main(){structstu{intnum;char*name;charsex;floatscore;}stu1,stu2;stu1.num=101;="张三";printf("请输入性别和成绩:\n");scanf("%c%f",&stu1.sex,&stu.score);stu2=stu1;printf("学号=%d\n姓名=%s\n",stu2.num,);printf("性别=%c\n成绩=%f\n",stu2.sex,stu2.score);}【例8.3】外部结构变量初始化。#include"stdio.h"structstudent/*定义外部结构变量{intnum;*/char*name;charsex;floatscore;}stu2,stu1={101,"张三",'M',90};main(){stu2=stu1;printf("学号=%d\n姓名=%s\n",stu2.num,);printf("性别=%c\n成绩=%f\n",stu2.sex,stu2.score);}【例8.4】静态结构变量初始化。#include"stdio.h"main(){staticstructstudent/*定义静态结构变量*/{intnum;char*name;charsex;floatscore;}stu2,stu1={101,"张三",'M',90};stu2=stu1;

printf("学号=%d\n姓名=%s\n",stu2.num,);printf("性别=%c\n成绩=%f\n",stu2.sex,stu2.score);}structstu{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Liping","M",45},{102,"Zhangping","M",62.5},{103,"Hefang","F",92.5},{104,"Chengling","F",87},{105,"Wangming","M",58};}【例8.5】计算学生的平均成绩和不及格的人数。#include"stdio.h"structstu{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};main(){inti,c=0;floatave,s=0;for(i=0;i<5;i++){s+=boy[i].score;if(boy[i].score<60)c+=1;}printf("s=%f\n",s);ave=s/5;printf("average=%f\ncount=%d\n",ave,c);

}【例8.6】通讯录#include"stdio.h"#defineNUM3structmem{charname[20];charphone[10];};main(){structmemman[NUM];inti;for(i=0;i<NUM;i++){printf("inputname:\n");gets(man[i].name);printf("inputphone:\n");gets(man[i].phone);}printf("name\t\t\tphone\n\n");for(i=0;i<NUM;i++)printf("%s\t\t\t%s\n",man[i].name,man[i].phone);}此外,结构数组的成员也可以是数组变量。例如:structa{intm[3][5];floatf;chars[20];}y[4];为了访问结构a中结构变量y[2]的这个变量,可写成:y[2].m[1][4]。6个优秀团员。下面编写一个程序来统计【例8.7】在某班中共有30个同学,要选出每一个候选人的得票数量。#include"stdio.h"#include"string.h"structperson{charname[20];intsum;};

main(){structpersoncandidate[6]={{"Zhang",0},{"Wang",0},{"Li",0},{"Zhao",0},{"Liu",0},{"Qian",0}};inti,j;chartname[20];for(i=0;i<30;i++){scanf("%s",tname);for(j=0;j<6;j++)if(strcmp(candidate[j].name,tname)==0)candidate[j].sum++;}printf("\n");for(j=0;j<6;j++)printf("%10s:%d\n",candidate[j].name,candidate[j].sum);}【例8.8】结构指针变量的使用方法举例。#include"stdio.h"structstu{intnum;char*name;charsex;floatscore;}boy1={102,"ZhangSan",'M',88},*pstu;main(){pstu=&boy1;printf("Number=%d\nName=%s\n",boy1.num,);printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);printf("Number=%d\nName=%s\n",pstu->num,pstu->name);printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);}【例8.9】用指针变量输出结构数组。#include"stdio.h"structstu{intnum;char*name;charsex;floatscore;

}boy[5]={{101,"Zhouping",'M',45},{102,"Zhangping",'M',62.5},{103,"Lioufang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};main(){structstu*ps;printf("No\tName\t\t\tSex\tScore\t\n");for(ps=boy;ps<boy+5;ps++)printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);}【例8.10】用结构指针变量作函数参数计算一组学生的平均成绩和不及格人数。#include"stdio.h"structstu{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};main(){structstu*ps;voidave(structstu*ps);ps=boy;ave(ps);}voidave(structstu*ps){intc=0,i;floatave,s=0;for(i=0;i<5;i++,ps++){s+=ps->score;if(ps->score<60)c+=1;}printf("s=%f\n",s);ave=s/5;printf("average=%f\ncount=%d\n",ave,c);}

【例8.11】定义一个共用体类型,用于存储教师或学生的信息。编程输入相关信息并输出。#include"stdio.h"main(){struct{charname[10];intage;charjob;union{intclass;charoffice[10];}depa;}body[2];intn,i;for(i=0;i<2;i++){printf("inputname,age,jobanddepartment\n");scanf("%s%d%c",body[i].name,&body[i].age,&body[i].job);if(body[i].job=='s')scanf("%d",&body[i].depa.class);elsescanf("%s",body[i].depa.office);}printf("name\tagejobclass/office\n");for(i=0;i<2;i++)/*输出各成员项的值*/{if(body[i].job=='s')printf("%s\t%3d%3c%d\n",body[i].name,body[i].age,body[i].job,body[i].depa.class);elseprintf("%s\t%3d%3c%s\n",body[i].name,body[i].age,body[i].job,body[i].depa.office);}}【例8.12】枚举类型使用举例。#include"stdio.h"main(){enumbody{a,b,c,d}month[31],j;inti;j=a;for(i=1;i<=30;i++){month[i]=j;

j++;if(j>d)j=a;}for(i=1;i<=30;i++){switch(month[i]){casea:printf("%2d%c\t",i,'a');break;caseb:printf("%2d%c\t",i,'b');break;casec:printf("%2d%c\t",i,'c');break;cased:printf("%2d%c\t",i,'d');break;default:break;}}printf("\n");}8.4习题8-1选择题1.有定义如下:structsk{inta;floatb;}data,*p;如果p=&data;则对于结构变量data的成员a的正确引用是()。A.(*).data.aB.(*p).aC.p->data.aD.p.data.a2.已知:structst{intn;structst*next;};staticstructsta[3]={1,&a[1],3,&a[2],5,&a[0]},*p;2,则对p的赋值是()。printf("%d",++(p->next->n));A.p=&a[0];B.p=&a[1];C.p=&a[2];D.p=&a[3];3.已知:如果下述语句的显示是structperson{charname[10];intage;}class[10]={"LiMing",29,"ZhangHong",21,"WangFang",22};下述表达式中,值为72的一个是____。A.class[0]->age+class[1]->age+class[2]->ageB.class[1].name[5]C.person[1].name[5]D.clase->name[5]4.已知:

struct{inti;charc;floata;}test;则sizeof(test)的值是。A.4B.5C.6D.75.已知:union{inti;charc;floata;}test;则sizeof(test)的值是A.4B.5C.6D.76.已知:()。unionu_type{inti;charch;floata;}temp;现在执行"temp.i=266;printf("%d",temp.ch)"的结果是()。A.266B.256C.10D.17.若有以下程序段:structdent{intn;int*m;};inta=1,b=2,c=3;structdents[3]={{101,&a},{102,&b},{103,&c}};structdent*p=s;则以下表达式中值为2的是()。A.(p++)->mB.*(p++)->mC.(*p).mD.*(++p)->m8.若有以下说明语句,则对结构变量structpupil{charname[20];intsex;pup中sex域的正确引用是()。}pup,*p;p=&pup;A.p.pup.sexB.p->pup.sexC.(*p).pup.sexD.(*p).sex9.以下对结构变量stul中成员age的非法引用是()。structstudent{intage;intnum;

}stu1,*p;p=&stu1;A.stu1.ageB.student.ageC.p->ageD.(*p).age10.若有以下定义和语句:uniondata{inti;charc;floatf;}a;intn;则以下语句正确的是()。A.a=5;B.a={2,'a',1.2};C.printf("%d\n",a);D.n=a;11.已知:structsk{inta;intage;}date,*p;如果要使指针p指向data中的成员a,正确的赋值语句是()。A.p=(structsk*)&data.a;B.p=(structsk*)data.a;C.p=&data.a;D.*p=data.a;12.已知enumweek{sun,mon,tue,wed,thu,fri,sat}day;则正确的赋值语句是A.sun=0;B.san=day;C.sun=mon;D.day=sun;13.已知enumcolor{red,yellow=2,blue,white,black}ren;执行下述语句的输出结果是printf("%d",ren=white);()。()A.0B.1C.3D.414.已知enumname{zhao=1,qian,sun,li}man;执行下述程序段后的输出是man=0;____。switch(man){case0:printf("People\n");case1:printf("Man\n");case2:printf("Woman\n");default:printf("Error\n");}A.PeopleB.ManC.WomanD.Error15.下述关于枚举类型名的定义中,正确的是____。A.enema={one,two,three};B.enema{one=9,two=-1,three};C.enema={"one","two","three"};D.enema{"one","two","three"};8-2程序填空1.下面程序的功能是输入学生的姓名和成绩,然后输出。#include<stdio.h>structstuinf{charname[20];/*学生姓名intscore;/*学生成绩}stu,*p;*/*/

main(){p=&stu;printf("Entername:");gets(①);printf("Enterscore:");scanf("%d",②);printf("Output:%s,%d\n",③,④);}2.下面程序的功能是按学生的姓名查询其成绩排名和平均成绩。查询时可连续进行,直到输入0时才结束。#include<stdio.h>#include<string.h>#defineNUM4structstudent{intrank;char*name;floatscore;};①stu[]={3,"liming",89.3,4,"zhanghua",78.2,1,"anli",95.1,2,"wangqi",90.6};•main(){charstr[10];•inti;•do{printf("Enteraname");•••scanf("%s",str);•••

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论