欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    (中职)C语言程序设计模块九电子课件.pptx

    • 资源ID:88422984       资源大小:2.38MB        全文页数:62页
    • 资源格式: PPTX        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    (中职)C语言程序设计模块九电子课件.pptx

    YCF正版可修改PPT(中职)C语言程序设计模块九ppt电子课件LOGO结构体与联合体模块99.1结构体(变量)的定义与说明9.1.1结构体的定义结构体使用struct关键字进行定义。struct 结构体名数据类型 成员名1;数据类型 成员名2;数据类型 成员名n;/*注意别丢了分号*/例如,定义一个名为student的结构体:struct studentchar name8;char sex;char nation10;int age;float score;9.1结构体(变量)的定义与说明9.1.2结构体变量的定义与赋值(1)先定义结构,后定义变量。struct studentchar name8;char sex;char nation10;int age;float score;struct student x,y;/*这里定义了x,y两个结构体变量*/(2)结构体和结构体变量同时定义。struct studentchar name8;char sex;char nation10;int age;float score;x,y;/*这里同时定义了x,y两个结构体变量*/1.结构体变量的定义方法9.1结构体(变量)的定义与说明9.1.2结构体变量的定义与赋值定义时可以省略结构体名。struct char name8;char sex;char nation10;int age;float score;x,y;/*这里同时定义了x,y两个结构体变量*/不建议省略结构体名。一个明晰的结构体名可以帮我们直观地了解到本结构体是针对哪个方面的数据构造类型。9.1结构体(变量)的定义与说明9.1.2结构体变量的定义与赋值(3)结构体的嵌套定义。所谓结构体的嵌套定义指的是一个结构体的变量做另一个结构体的成员。例如:struct dateint year;int month;int day;struct studentchar name20;char sex;char nation10;int age;struct date birthday;/*这里就是date结构体变量birthday做student的成员*/x;9.1结构体(变量)的定义与说明9.1.2结构体变量的定义与赋值2.结构体变量的赋值给结构体变量赋值,实质是给各个成员进行赋值,见表9-1。例如:struct studentchar name20;char sex;char nation10;int age;float score;x=Lixiaomei,f,dongze,18,456;表9-1给结构体变量赋值给结构体变量赋值时,要以成员顺序为依据按序赋值,用 括起来。9.1结构体(变量)的定义与说明9.1.3结构体变量的使用结构体变量的使用实质是结构体成员的引用,即其单个成员的运算操作(如赋值、输入/输出等)。结构体成员的引用方法是:结构体变量名.成员名其中,“.”为成员运算符。成员运算符“.”、成员指向运算符“-”、变址符“”和括号“()”运算符在C语言中具有最高的运算级别。9.1结构体(变量)的定义与说明9.1.3结构体变量的使用【例9-1】对结构体变量进行动态赋值。#include#include struct dateint year;int month;int day;struct studentchar name20;char sex;char nation10;int age;float score;struct date birthday;y=zhangjie,m,don,18,340;/*注意birthday没有赋值*/int main();struct student x,z;/*下面对结构体变量x各成员进行赋值*/strcpy(x.name,Lily);/*不能写成x.name=Lily,因为name数组名是地址常量*/x.sex=f;strcpy(x.nation,dongzi);x.age=18;x.score=428;9.1结构体(变量)的定义与说明9.1.3结构体变量的使用x.birthday.year=1999;/*嵌套定义时须用成员运算符一级一级地找到最底层一级成员*/x.birthday.month=5;x.birthday.day=23;/*具有相同结构的结构体变量可以进行相互赋值*/y=x;/*变量x的各成员值赋给了变量y的各成员*/*也可进行结构体变量单个成员的相互赋值*/z.nation=x.nation;z.sex=y.sex;printf(%s,%c,%s,%d,%.1f,x.name,x.sex,x.nation,x.age,x.score);printf(%d-%d-%d,x.birthday.year,x.birthday.month,x.birthday.day);9.1结构体(变量)的定义与说明9.1.4结构体变量的内存长度计算结构体是一种构造数据类型,定义时系统并不分配内存空间,但结构体变量则是会分配内存空间的。那么,系统是如何给结构体变量分配内存空间的呢?在程序运行中,结构体变量各成员是同时存在于内存中的,因而结构体变量的内存长度是各成员的长度之和。例如:char nation10;int age;float score;struct date birthday;x;struct dateint year;int month;int day;struct studentchar name20;char sex;9.1结构体(变量)的定义与说明9.1.4结构体变量的内存长度计算结构体变量x的内存长度计算如下:(1)成员char name20,长度为20 B;(2)成员char sex,长度为1 B;(3)成员char nation10,长度为10 B;(4)成员age,长度为2 B;(5)成员score,长度为4 B;(6)成员birthday,长度为2 B(year)+2 B(month)+2 B(day)=6 B。故x的内存长度为20 B+1 B+10 B+2 B+4 B+6 B=43 B。9.2结构体数组9.2.1结构体数组的定义与赋值示例:struct studentchar name20;char sex;char nation10;int age;float score;stu15=Tangwei,m,hang,18,524,wuyan,f,dong,19,543;struct student stu25;(1)示例中定义了两个结构体数组,其中数组stu1初始化了两个元素。(2)要注意给结构体数组初始化或给元素赋值时,因为每个元素又是结构体类型的变量,因此各元素的初值列表也要用 括起来。9.2结构体数组9.2.2结构体数组长度的计算示例:struct studentchar name20;char sex;char nation10;int age;float score;stu15;结构体数组长度的计算方法是:(1)每个数组元素的长度是:20+1+10+2+437 B。(2)共有5个元素,故该数组长度为:537=185 B。9.2结构体数组9.2.3结构体数组元素的引用结构体数组元素的引用同样必须用成员运算符带成员名的格式:结构体数组名下标.成员名【例9-2】定义一个名为student的结构体,该结构体包含姓名和成绩两个成员。定义一个含5个元素的结构体数组stu,输出5个同学的姓名和成绩。输入完毕自动计算出每位同学的总分和平均分。#include struct studentchar name20;int score3;stu5;int main()int i,j;int sum;printf(Please input the other students infomation:n);for(i=0;i5;i+)9.2结构体数组9.2.3结构体数组元素的引用printf(Input name:);scanf(%s,stui.name);/*数组元素的引用:输入姓名*/printf(Input%ss 3 score:,stui.name);for(j=0;j3;j+)scanf(%d,&stui.scorej);/*数组元素的引用:输入每个同学的3科成绩*/for(i=0;i5;i+)sum=0;for(j=0;j3;j+)sum+=stui.scorej;/*数组元素的引用:统计出每个同学的3科总分*/printf(%ss total score is:%d,Average is%dn,stui.name,sum,sum/3);9.2结构体数组9.2.3结构体数组元素的引用要注意的是:(1)成员中若有float/double型成员,有的编译环境(如TC)没有关于浮点数的运算,在链接时不会链接上浮点链接库,因而会出现编译成功但无法使用的情况。一个简单的解决方法是:调用数学头文件“math.h”,并在主函数main()的第1行加一个关于浮点数运算的表达式,最好带一个库函数,如sqrt()。这样,编译时就可链接上浮点链接库了。(2)在for循环输入中,若成员中有char 字符变量成员,不要以单字符格式“%c”输入,因为无结尾符0,循环输入时编译环境会忽视其操作。应以“%s”进行输入,因为字符串系统会自动加0。9.2结构体数组9.2.3结构体数组元素的引用#include#include struct studentchar name20;int class;char sex6;float score3;/*3科成绩,浮点型*/stu2;int main()float x=sqrt(1);/*浮点数运算表达式,目的是链接上浮点链接库*/int i,j;float sum;printf(Please input the other students information:n);for(i=0;i2;i+)printf(Input name:);scanf(%s,stui.name);9.2结构体数组9.2.3结构体数组元素的引用printf(Input class:);scanf(%d,&stui.class);printf(Input sex:);scanf(%s,stui.sex);printf(Input%ss 3 score:,stui.name);for(j=0;j3;j+)scanf(%f,&stui.scorej);putchar(n);for(i=0;i2;i+)sum=0;for(j=0;j3;j+)sum+=stui.scorej;printf(Name:%s Class:%d Sex:%s Total:%.1f Average:%.1fn,stui.name,stui.class,stui.sex,sum,sum/3);9.2结构体数组9.2.3结构体数组元素的引用【例9-3】投票统计。某班进行班长投票选举,班长一职将在李阳、赵明和吴莉3位同学中产生。该班共45位同学,李、赵、吴3位同学不能参加投票。下面利用结构体数据类型进行投票,共投42次,输出每个人的票数。注意,只能在这3位同学中产生,投票错误无效,必须重新投票(为方便查看效果,程序模拟仅投10次)。9.2结构体数组9.2.3结构体数组元素的引用#include struct leaderchar name20;int num;int main()struct leader xx3=Liyang,0,Zhaoming,0,Wuli,0;int i,j;char xm20;printf(Begin to cast:n);for(i=0;i10;i+)printf(Please cast NO.%d vote:,i+1);scanf(%s,xm);if(strcmp(Liyang,xm)!=0&strcmp(Zhaoming,xm)!=0&strcmp(Wuli,xm)!=0)9.2结构体数组9.2.3结构体数组元素的引用while(1)printf(Error!Please cast again:);scanf(%s,xm);if(strcmp(Liyang,xm)=0|strcmp(Zhaoming,xm)=0|strcmp(Wuli,xm)=0)break;for(j=0;j3;j+)if(strcmp(xxj.name,xm)=0)xxj.num+;break;for(i=0;iname”,故“strcpy(x.name,Wujie);”等价于“strcpy(*p).name,Wujie);”和“strcpy(p-name,Wujie);”。下面同理:(2)“x.sex=m”等价于“(*p).sex=m”和“p-sex=m”。(3)“x.age=15”等价于“(*p).age=15”和“p-age=15”。(4)“x.score=623”等价于“(*p).score=623”和“p-score=623”。9.3结构体指针9.3.2结构体指针的运用同样以模块9.3.1中定义的结构体数组stu和结构体数组指针p1为例。我们知道,数组名为首元素(0号元素)首地址,因为“struct student*p1=stu;”,故结构体数组指针p1也指向该结构体数组首元素首地址(注意不是结构体成员地址)。而p1+则指向下一元素(1号元素)的首地址,以此类推。(1)“stu0.name”等价于“(*p1).name”和“p1-name”,故“strcpy(stu0.name,Jack);”等价于“strcpy(*p1).name,Jack);”和“strcpy(p1-name,Jack)”。2.结构体数组指针在元素引用时的使用9.3结构体指针9.3.2结构体指针的运用下面同理:(2)“stu1.age=16”等价于“*(p1+1).age=16”和“(p1+1)-age=16”。(3)“stu2.score=598”等价于“*(p1+2).score=598”和“(p1+2)-score=598”。因此,若要输出9.3.1中结构体数组各元素的成员值,可以使用for循环语句:for(p1=stu,p1name,p1-sex,p1-age,p1-score);结构体数组指针指向各元素首地址如图9-1所示,要清楚这个首地址并非元素成员的地址。图9-1结构体数组指针指向各元素首地址9.3结构体指针9.3.2结构体指针的运用【例9-4】三种模式输出示例。#include struct studentchar name8;char sex;int age;float score;struct student x=Wujie,m,15,623;struct student stu3=Jack,m,17,612,Tom,m,16,645,Lucy,f,18,598;struct student*p=&x;struct student*p1=stu;int main()9.3结构体指针9.3.2结构体指针的运用printf(%s-%s-%sn,(*p).name,p-name,x.name);printf(%s-%s-%sn,(*p1).name,p1-name,stu0.name);printf(%d-%d-%dn,(*(p1+1).age,(p1+1)-age,stu1.age);printf(%.0f-%.0f-%.0fn,(*(p1+2).score,(p1+2)-score,stu2.score);printf(%sn,strcpy(p-name,Jack);printf(%.0f-%.0f-%.0fn,(*p1).score,(p1+1)-score,(p1+2)-score);for(p1=stu;p1name,p1-sex,p1-age,p1-score);9.4结构体与函数9.4.1以结构体成员做实参进行值传递结构体多个成员做实参进行值传递。以下程序功能是:输入3个学生的姓名和其4科成绩,计算其总分。#include struct studentchar name8;int score4;int total;stu3,*p=stu;int add(int a,int b,int c,int d);int main()int i,j;for(i=0;i3;i+)printf(Input NO.%d students names and 4 score:n,i+1);9.4结构体与函数9.4.1以结构体成员做实参进行值传递scanf(%s,stui.name);for(j=0;j4;j+)scanf(%d,&stui.scorej);printf(Output 3 students score:n);for(i=0;i3;i+)/*下面是结构体成员做实参进行值传递*/stui.total=add(stui.score0,stui.score1,stui.score2,stui.score3);printf(Name:%ss total=%dn,stui.name,stui.total);int add(int a,int b,int c,int d)return a+b+c+d;很明显,多个实参进行值传递,系统必须开辟多个存储单元,效率是低下的。在函数调用中提高工作效率的参数传递方式莫过于地址传递,形实参指向同一个存储单元,可想而知,相对于值传递来说,效率是翻倍的。9.4结构体与函数9.4.2以结构体指针做实参进行地址传递结构体指针做实参传递,大大提高运算效率。以下程序的功能是输入3个学生的姓名和其4科成绩,计算并输出每个学生的总分和平均分。同时,判断成绩,总分大于等于320,输出“Excellent”,小于320大于等于240,输出“pass”,其他输出“Fail”,最后对总分用冒泡法进行降序排序。#include#include struct studentchar name8;float score4;/*每个学生有4科成绩*/float total;float average;stu3,*p=stu;/*结构体指针p指向结构体数组*/int main()float x=sqrt(1);/*用于链接到浮点链接库*/9.4结构体与函数9.4.2以结构体指针做实参进行地址传递void add(struct student*p1);/*函数调用在函数定义之前,必须先对函数做声明。该函数声明的形参为结构体指针。声明在main()函数中,只能为main()函数调用*/add(p);/*调用时以结构体指针p作为实参*/void add(struct student*p1)/*定义add函数*/int i,j,t;printf(Input 3 students name and 4 score:n);for(i=0;i3;i+)/*循环输入3个学生的姓名和每个学生的4科成绩*/scanf(%s,stui.name);for(j=0;j4;j+)scanf(%f,&stui.scorej);printf(Output 3 students score:n);for(p1=stu;p1total=0;for(i=0;itotal+=p1-scorei;/*每个学生的总分计算*/p1-average=p1-total/4;/*每个学生的平均分计算*/printf(Name:%s Total=%.1f average=%.2f-,p1-name,p1-total,p1-average);/*下面进行成绩判断*/if(p1-total=320)printf(Excellent);else if(p1-total=240&p1-total320)printf(pass);elseprintf(Fail);putchar(n);/*每一次外循环完毕,换一行*/9.4结构体与函数9.4.2以结构体指针做实参进行地址传递/*用冒泡法对总分进行从大到小的排序,一般用数组的方式*/for(j=0;j2;j+)for(i=0;i2-j;i+)if(stui.totalstui+1.total)t=stui.total;stui.total=stui+1.total;stui+1.total=t;for(i=0;i3;i+)/*从高到低输出总分*/printf(%.1f,stui.total);9.5typedef、malloc的使用在C语言中,typedef是类型别名定义符,它定义一个类型的别名,然后就可以通过这个别名来定义其他同类型的变量。在结构体中,typedef尤其有用,可以为用户减少不少的工作量;malloc函数在“堆栈”一节有简述,它是动态获取(分配)内存空间的函数,它包含于malloc.h、stdlib.h等头文件中,所申请的空间用完后用free()函数来释放。9.5typedef、malloc的使用9.5.1typedef的用法先来看一个例子:“char*p;”定义了一个字符指针p;“typedef char*PCHAR;”定义了一个字符类型指针别名PCHAR;“PCHAR p1,p2;”定义了2个字符指针p1,p2。这个例子清楚地表明了typedef 作为类型别名定义符的功能。要指出的是:别名一般要用大写字符,以区别于变量一般用小写字符的写法。9.5typedef、malloc的使用9.5.1typedef的用法在结构体中,如:typedef struct student char xm10;int age;int class;float score;STUD;/*这里定义了一个结构体类别名STUD*/STUD*p;/*用这个类别名定义了一个结构体指针,等同于“struct student*p;”*/STUD x;/*用这个类别名定义了一个结构体变量,等同于“struct student x;”*/9.5typedef、malloc的使用9.5.1typedef的用法1.malloc申请内存空间的方法(返回的指针类型)malloc(指定的长度(字节数)示例1:typedef struct student char xm10;int age;int class;float score;STUD;STUD*p;p=(STUD*)malloc(sizeof(STUD);“p=(STUD*)malloc(sizeof(STUD);”意为:结构体指针p指向动态分配的长度为(sizeof(STUD)的内存块,即18 B的内存长度。它等同于:p=(struct student*)malloc(sizeof(struct student)9.5typedef、malloc的使用9.5.1typedef的用法示例2:接上面结构体示例:“p=(struct student*)malloc(100);”意为:给p动态分配100 B的内存空间。9.5typedef、malloc的使用9.5.1typedef的用法2.释放malloc动态申请的内存空间方法:free(指针名);例如,malloc动态内存申请与释放:用malloc动态申请的内存须用“free(指针名)”进行释放。例如:free(p);例如,malloc动态内存申请与释放:#include#include int main()typedef struct stuint num;char*name;char sex;int score;9.5typedef、malloc的使用9.5.1typedef的用法STU;STU*ps,*pt,*pu;ps=(STU*)malloc(sizeof(STU);/*三个指针动态分配长度不一的内存空间*/pt=(STU*)malloc(sizeof(double);pu=(STU*)malloc(100);ps-num=6;ps-name=Lucy;ps-sex=f;ps-score=100;pu=pt=ps;printf(NO.%d:Name:%s SEX:%c SCORE:%d,ps-num,ps-name,ps-sex,ps-score);putchar(n);printf(NO.%d:Name:%s SEX:%c SCORE:%d,pu-num,pu-name,pu-sex,pu-score);putchar(n);9.5typedef、malloc的使用9.5.1typedef的用法printf(NO.%d:Name:%s SEX:%c SCORE:%d,pt-num,pt-name,pt-sex,pt-score);putchar(n);free(pu);/*释放内存后,内存中不再保留原数据*/free(ps);free(pt);(1)如果malloc动态分配内存成功,则返回指向被分配内存的指针。(2)如果malloc动态分配内存不成功,则返回空指针NULL。(3)malloc不能自动计算长度,需指定长度或由sizeof()计算。9.6联合体(变量)的定义与说明9.6.1联合体的定义联合体使用union关键字进行定义:union结构体名数据类型成员名1;数据类型成员名2;数据类型成员名n;/*注意别丢了分号*/例如,定义一个名为student的联合体:union studentchar name8;char sex;char nation10;int age;float score;9.6联合体(变量)的定义与说明9.6.2联合体变量的定义1.先定义结构,后定义变量union studentchar name8;char sex;char nation10;int age;float score;union student x,y;/*这里定义了x,y两个联合体变量*/9.6联合体(变量)的定义与说明9.6.2联合体变量的定义2.联合体和联合体变量同时定义union studentchar name8;char sex;char nation10;int age;float score;x,y;/*这里同时定义了x,y两个联合体变量*/定义时可以省略联合体名。union char name8;char sex;char nation10;int age;float score;x,y;/*这里同时定义了x,y两个联合体变量*/9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算联合体变量的使用实质是联合体成员的引用,即其某个成员的运算操作(如赋值、输入/输出等)。联合体成员的引用方法是:联合体变量名.成员名(1)联合体变量各成员共同占用一段内存。(2)内存长度最长的成员就是该联合体变量的内存长度。(3)因为各成员共同占用一段内存,因而:联合体变量不能像结构体变量那样进行初始化,只能在程序中进行赋值。每次只能对联合体变量某一成员进行赋值,因此,一个联合体变量的值就是联合体变量的某一个成员的值。联合体变量在运行中任何时候只能有一个成员存在。例如,联合体变量各成员共占一段内存示意图如图9-2所示。9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算图9-2联合体变量各成员共占一段内存示意图unionint i;char ch;float score;a,b,c;成员score的内存长度就是结构体变量a、b、c的内存长度,为4 B。任何时候只能有一个成员(ch、i或者score)存在。各成员不能初始化,只能在程序中进行赋值。9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算【例9-5】结构体中的联合体。下面为一个学生和教师共用的结构体,学生和教师都有共同的结构体变量成员:姓名、年龄和工作。学生和教师的不同之处是班级(学生)和部门(教师),这两个就作为联合体变量成员。程序的功能是:输入人员的信息(结构体),如果身份是学生,就输入班级;如果身份是教师,就输入部门(联合体)。最后把输入结果显示出来。9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算#include structchar name10;int age;char identy20;unionint class;char office10;depa;/*联合体变量作为结构体成员*/body2;/*结构体数组*/int main()int i;9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算for(i=0;i2;i+)printf(Input name,age and identy:n);scanf(%s%d%s,bodyi.name,&bodyi.age,bodyi.identy);if(strcmp(bodyi.identy,student)=0)/*注意字符串的比较要用strcmp函数*/printf(Input class:);scanf(%d,&bodyi.depa.class);/*在程序中给联合体成员赋值,只能给一个成员赋值,且只允许一个成员存在*/elseprintf(Input office:);scanf(%s,bodyi.depa.office);/*在程序中给联合体成员赋值,只能给一个成员赋值,且只允许一个成员存在*/9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算printf(nametagetidentytclass/officen);for(i=0;i2;i+)if(strcmp(bodyi.identy,student)=0)printf(%st%dt%st%dn,bodyi.name,bodyi.age,bodyi.identy,bodyi.depa.class);elseprintf(%st%dt%st%sn,bodyi.name,bodyi.age,bodyi.identy,bodyi.depa.office);9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算【例9-6】进一步理解联合体在程序中只允许一个成员存在。int main()unionunsigned int n;unsigned char c;u;/*联合体变量*/u.n=66;u.c=A;/*在程序中每次只能给一个成员赋值,因此第1个赋值无效*/printf(%c,u.n);/*内存中只保留有A这个值,故输出字符A*/9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算【例9-7】联合体中的结构体。联合体变量a有两个成员,其中一个成员为结构体变量u。就外层(联合体)来说,在程序中只允许一个成员存在;就内层来说(结构体),结构体各成员是同时存在的。union structint x;char y;float z;u;/*结构体变量作为联合体的一个成员*/int k;/*联合体成员*/a;/*联合体变量*/int main()a.u.x=4;a.u.y=A;a.u.z=3.14;/*给结构体各成员赋值,该赋值是存在的*/a.k=97;/*给联合体成员k赋值,在共同的这一段内存中,将取代结构体中成员x的值*/9.6联合体(变量)的定义与说明9.6.3联合体变量的使用及内存长度的计算printf(%dn,a.u.x);/*输出97*/printf(%cn,a.u.y);/*输出A*/printf(%fn,a.u.z);/*输出3.140000*/共占一段内存示意图如图9-3所示。图9-3共占一段内存示意图联合体同样可以定义指针和数组,但是联合体变量不能作为函数参数,函数也不能返回指向联合体的指针变量。9.7枚举9.7.1枚举类型及枚举变量的定义enum 枚举名枚举值表变量名;图示如图9-4所示。图9-4枚举变量的定义9.7枚举9.7.1枚举类型及枚举变量的定义例如:enum weekdaySunday=0,Monday,Tuesday,Wednsday,Thursday,Friday,Saturdaya,b,c;(1)枚举名为:weekday,注意标识符之间只能用逗号“,”隔开,最后一个标识符后省略逗号。(2)定义了3个枚举变量:a、b、c。(3)标识符为Sunday到Saturday,即星期天到星期六。(4)标识符Sunday初始化为0,其后的标识符都没有初始化,则顺次加1,即Monday值为1,Tuesday值为2,以此类推。9.7枚举9.7.2枚举的具体规则(1)枚举值表只能是整型常量,不能是变量,因此不能对枚举值进行任何赋值。例如:enumweekdaySunday,Monday,Tuesday,Wednsday,Thursday,Friday,Saturdaya,b,c;Sunday=0;/*这是错误的*/(2)枚举元素由系统自定义,从0开始按序加1,即0,1,2,3,4,因而枚举值表都是整型常量。(3)要注意枚举值的变化情况。例如:enum bodya,b=2,c,d=9,e,f=-1,h,i;在上面的枚举中:a的值为0。b=2,则c的值为3;d=9,则e的值为10;f=-1,则h,i的值为别为0,1,即当枚举中的某个成员赋值后,其后的成员按依次加1的规则确定其值。9.7枚举9.7.2枚举的具体规则(4)变量也可以单独定义。例如:enumweekdaySunday,Monday,Tuesday,Wednsday,Thursday,Friday,Saturday;enum weekday a,b,c;(5)只能把枚举值赋给枚举变量,不能把元素值赋给枚举变量。例如:enumweekdaySunday,Monday,Tuesday,Wednsday,Thursday,Friday,Saturday;enum weekday a,b,c;a=Sunday;/*这是对的,把枚举值赋给枚举变量*/a=0;/*这是错的,不能把元素值赋给枚举变量*/若要把元素值赋给枚举变量,应把元素值强制转换为枚举类型。b=(enum weekday)1;/*这是对的,等同于“b=Monday;”*/c=(enum weekday)5;/*这是对的,等同于“c=Friday;”*/(6)枚举变量的取值范围只能是枚举值表中的某一个,不能是其他值。9.7枚举9.7.3枚举的应用寝室里有李林(a)、张明(b)、杨磊(c)和赵伟(d)4名同学,4人轮流安排打扫寝室卫生,每个月按30天计算,按日编出卫生打扫安排表。#include void duty()enum studenta,b,c,dday30,j;int i;j=a;/*初始化枚举变量j为a,即从李林开始*/for(i=1;id)/*如果枚举值大于了d*/j=a;/*又从李林开始*/9.7枚举9.7.3枚举的应用for(i=1;i=30;i+)switch(dayi)case a:printf(No.%d day is%st,i,Lining);break;case b:printf(No.%d day is%st,i,Zhangming);break;case c:printf(No.%d day is%st,i,Yanglei);break;case d:printf(No.%d day is%st,i,Zhaowei);break;default:break;if(i%3=0)/*按每行3个输出*/putchar(n);int main()duty();9.7枚举9.7.3枚举的应用No.1 day is LiningNo.4 day is Zhaowei No.7 day is Yanglei No.10 day is ZhangmingNo.13 day is Lining No.16 day is Zhaowei No.19 day is Yanglei No.22 day is zhangmingNo.25 day is Lining No.28 day is Zhaowei No.2 day is ZhangmingNo.5 day is LiningNo.8 day is ZhaoweiNo.10 d

    注意事项

    本文((中职)C语言程序设计模块九电子课件.pptx)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开