C语言及程序设计_第1页
C语言及程序设计_第2页
C语言及程序设计_第3页
C语言及程序设计_第4页
C语言及程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第10章结构体、位运算结构体

typedef语句共用体枚举位运算1

例如:期末考试结束,已知5位学生的考试成绩,如下:

编写程序,要求:计算出每位学生的总成绩,并按总分由高到低输出一张成绩单,格式如下:RanknameC

LanguageEnglishmathsComputerSum1

****

***********

2****

***********3****

***********4****

***********5***************

解决的办法:将一位学生的数据作为结构体类型分析:charna[5][10]={…};

intscore[5][4]={{…},…};

ints[5];/*每个同学的总分*/10.0

结构体导入为什么要使用结构体?姓名C语言英语高数计算机JiangJun86907868WangHong62658070LiSijia65769275ChangMi79806067LiWeiwei958573882

1.什么是结构体类型?将一组不同类型的数据组织在一起形成的一种新的数据类型。

2.结构体类型的定义例1:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;};

定义语句的格式:struct

结构体名

{

数据类型1成员名1;数据类型2成员2名;…;数据类型n成员名n;

};

结构体名、成员名:用户标识符

结构体类型的标识符:struct

结构体名结构体类型的作用域:类似于变量的作用域10.1

结构体类型的定义3

1.结构体变量的定义:有3种方法

①先定义结构体类型,再定义结构体变量例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;};main(){struct

s_type

student1,student2;….}10.2

结构体变量4

②在定义结构体类型的同时,定义结构体变量例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student;main(){struct

s_typestudent1,student2;….}

1.结构体变量的定义:有3种方法10.2

结构体变量5

③直接定义结构体变量例如:struct

{charnum[15];charname[20];

intscore[4];

ints;}student;main(){….}

1.结构体变量的定义:有3种方法10.2

结构体变量6表达式:sizeof(student)或sizeof(struct

s_type)的值为:45例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student;结构体变量成员的表示:结构体变量名.成员名

2.结构体变量需要的内存

等于结构体变量所有成员占内存之和10.2

结构体变量7结构体变量student及其各个成员占用内存的情况见下图:例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student;

注意:结构体变量成员表示的含义:内存地址?存储单元?student.scorestudent.sstudent系统为结构体变量分配内存,但不会为结构体类型分配内存。10.2

结构体变量8例如:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student={"2007101010","wang",{89,90,87,80},0};2007101010908780student.score0student.sstudent10.2

结构体变量

3.结构体变量的初始化:为结构体变量的成员赋初值9例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student={"2007101010","wang",{89,90,87,80},0};main(){struct

s_typestudent1;

student1=student;…….}①允许将一个结构体变量直接赋值给另一个具有相同结构的结构体变量

10.2

结构体变量

4.结构体变量的使用10例如:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student={"2007101010","wang",{89,90,87,80},0};main(){struct

s_typestudent1;

printf("

%s",student);/*错误*/…….}②不能将一个结构体变量作为一个整体进行输入或输出10.2

结构体变量

4.结构体变量的使用11例如:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}student;

③只能对结构体变量中的各个成员分别输入或输出或进行其它操作main(){inti;

printf("Inputnum:");gets(student.num);

printf("Inputname:");gets();

printf("Inputscore:");

for(i=0;i<4;i++){scanf("%d",&student.score[i]);

student.s+=student.score[i];}

printf("%s\n",student.num);

printf("%s\n",);

for(i=0;i<4;i++)

printf("%d",student.score[i]);printf("\n");

printf("%d\n",student.s);}10.2

结构体变量

4.结构体变量的使用12例如:

struct

s1{inty;

intm;

intd;};

struct

s2{charnum[15];charname[20];

structs1bday;

intscore[4];

ints;};当结构体成员的数据类型为另一个结构体类型时:main(){structs2student={"2007101010","wang",

{1987,11,12},{87,90,89,80},0};printf("%s\n",student.num);

printf("%s\n",);printf("y-m-d:%d-%d-%d",

student.bday.y,student.bday.m,

student.bday.d);

for(i=0;i<4;i++)

printf("%d",student.score[i]);printf("\n");

printf("%d\n",student.s);}10.2

结构体变量

5.结构体成员的数据类型:可以是任意类型

13例:定义一个结构体变量来表示一个日期(年月日),编程实现:根据输入的日期确定该日在本年中是第几天。

structDATA{inty;intm;intd;};main(){intm_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int

i,days=0;int

t,a,b;

structDATEadate;

printf("inputadateas:YYYY-MM-DD\n");

scanf("%d-%d-%d",&adate.y,&adate.m,&adate.d);a=(adate.y%4==0)&&(adate.y%100!=0);b=(adate.y%400==0);t=a||b;

if(t)m_day[2]=29;

for(i=1;i<adate.m;i++)days+=m_day[i];days+=adate.d;

printf("%d-%d-%disthe%ddaysoftheyear",

adate.y,adate.m,adate.d,days);}10.2

结构体变量

6.结构体变量应用举例

14在定义一个结构体变量时系统分配给它的存储空间是()A)该结构体变量中第一个成员所需存储空间B)该结构体变量中最后一个成员所需存储空间C)该结构体变量中所有成员所需存储空间的总和D)结构体变量本身并不占用存储空间,即系统并不给结构体变量分配存储空间10.2

结构体变量

5.思考讨论15例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;};main(){struct

s_typestu[3];….}

1.结构体数组的定义:有3种方法,与结构体变量类似

①先定义结构体类型,再定义结构体数组10.3

结构体数组16例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}stu[3];main(){struct

s_typestudent;….}

③直接定义结构体数组

1.结构体数组的定义:有3种方法,与结构体变量类似

②在定义结构体类型的同时定义结构体数组10.3

结构体数组17

表达式:sizeof(struct

s_type)的值为:45

sizeof(stu)的值:135例如:struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}stu[3];

2.

结构体数组需要的内存

等于结构体数组所有元素占内存之和10.3

结构体数组18例如:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}stu[3]={{"2007101010","wang",{89,90,87,80},0},{"2007101011","Li",{88,95,77,70},0},{"2007101012",Jiang",{79,65,69,76},0}};

3.结构体数组的初始化:将一组结构体数据存储在结构体数组的过程10.3

结构体数组19结构体数组元素类似于一个结构体变量只能对结构体数组元素的成员进行输入、输出或其它基本操作例如:

struct

s_type{charnum[15];charname[20];

intscore[4];

ints;}stu[3]={{"2007101010","wang",{89,90,87,80},0},{"2007101011","Li",{88,95,77,70},0},{"2007101012",Jiang",{79,65,69,76},0}};main(){inti;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

stu[i].s+=stu[i].score[j];….}

4.结构体数组元素的使用10.3

结构体数组20#include<stdio.h>

main(void){struct

s_typetemp;inti,j;

/*输入成绩单并计算总分*/

for(i=0;i<N;i++)

{

printf("enterstudent%d\n",i);

gets(stu[i].num);gets(stu[i].name);

stu[i].s=0;

for(j=0;j<4;j++)

{scanf("%d",&stu[i].score[j]);

stu[i].s+=stu[i].score[j];}

getchar();/*跳过多余的回车键*/}……;}例I:某班有38名学生,期末考试结束,已知每位学生的成绩单包括:学号、姓名、4门课的成绩,要求写程序实现:求出每个学生的总分,并按总分由高到低的顺序输出全班学生的成绩单。格式如下:名次学号姓名C语言高数……总分1***

5.结构体数组应用举例10.3

结构体数组#defineN5struct

s_type

{charnum[15];charname[20];

intscore[4];

ints;}stu[N];

/*按总分由高到低排序*/

for(i=1;i<N;i++)

for(j=0;j<N-i;j++)if(stu[j].s<stu[j+1].s){temp=stu[j];

stu[j]=stu[j+1];stu[j+1]=temp;}

……;}

/*按格式输出*/printf("%-6s%-15s%-20%-5s%-5s%-5s%-5s%-5s\n","No.","num","name","Lge","Esh","Math","Cter","Sum");

for(j=0;j<N;j++){printf("%-6d%-15s",j+1,stu[j].num);printf("%-20s",stu[j].naue);

for(i=0;i<4;i++)printf("%-5d",stu[j].score[i]);printf("%-5d",stu[j].s);

printf("\n");}}21例II:候选人得票统计程序。设有5个候选人,每次输入一个得票候选人的名字,最后输出每个人得票结果。

5.结构体数组应用举例10.3

结构体数组struct

p_type{charname[10];

intvote;}pn[5]={{"wang",0},{"li",0},{"chen",0},{"lin",0},{"sun",0}};main(){charstr[10];inti;do{printf(“name:”);gets(str);

for(i=0;i<5;i++)if(strcmp(str,pn[i].name)==0)pn[i].vote++;}while(strlen(str)

);printf("%-10s%-6s\n",“name”,“count”);

for(i=0;i<5;i++)printf("%-10s%-6d\n",pn[i].name,pn[i].vote);}22第1题:建立一个结构体数组存放五个学生的成绩单,成绩单中包括每个学生的姓名(字符串)和总分(整型)。要求输出总分最高的学生的姓名及总分。

main(){struct

stu_type{charna[10];

ints;}student[5]={{"Wang",634},{"Li",709},{"Jiang",686},{"Sun",647.5},{"Pei",688}};

int

j,max=0;

for(j=1;j<5;j++)

if(student[j].s>student[max].s)max=j;printf("%-10s%-10d\n",student[max].na,student[max].s);}

10.3

结构体数组

6.思考讨论23第2题:建立一个结构体数组存放五个学生的成绩单,成绩单中包括每个学生的姓名(字符串)和总分(整型)。要求查找姓名为“wang”的学生,如果找到则显示其姓名和总分,否则显示“NO”。

#include<string.h>main(){struct

stu_type{charna[10];

ints;}student[5]={{"Wang",634},{"Li",709},{"Jiang",686},{"Sun",647.5},{"Pei",688}};

int

j,flag=0;

for(j=0;j<5;j++)if(strcmp(student[j].na,"Wang")==0){flag=1;printf("%-10s%-10d\n",student[j].na,student[j].s);}

if(flag==0)printf("NO");}

10.3

结构体数组

6.思考讨论243.举例例I定义基本类型名为新类型名。如:

typedef floatREAL;

则此后可以使用REAL代替floa。即:REALa,b;等价于

floata,b;

2.作用:用新类型名代替已有类型名。新类型名为用户标识符。而已有类型名可以是:基本数据类型名、指针、结构体、共用体、枚举类型。10.4

typedef

语句

1.

typedef语句的一般格式为:

typedef

已有类型名

新类型名;2510.4

typedef

语句3.举例例II将已经定义的结构体类型的标识符重新定义为新类型名。如:structdata{intyear;

intmonth;

intday;};

typedef

structdataDATA;

则此后语句:DATAd;等价于structdatad;

263.举例例III将结构体类型直接定义为新类型名。如:

typedef

structdata{intyear;

intmonth;

intday;}DATA;则可以使用新类型名定义变量:DATAd;

10.4

typedef

语句274.对

typedef

语句的说明:①typedef只是为现有的类型提供了一个易于使用、可识别的别名,它并没有创建一种新的类型。②typedef的作用域取决于typedef语句所在的位置。与变量作用域类似。10.4

typedef

语句5.思考讨论设有如下说明

typedef

struct

ST

{longa;

int

b;

char

c[2];

}NEW;

则下面叙述中正确的是____________。

A)以上的说明形式非法B)ST是一个结构体类型

C)NEW是一个结构

温馨提示

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

评论

0/150

提交评论