模块六 构造数据类型应用训练 电子教案(表格式) C语言程序设计(高教版)

资源下载
  1. 二一教育资源

模块六 构造数据类型应用训练 电子教案(表格式) C语言程序设计(高教版)

资源简介

第3章 面向对象(上)
模块六 构造数据类型应用训练
职业本科规划教材
《C语言程序设计》
教学设计
课程名称: C语言程序设计
授课年级: 2022年级
授课学期: 2022学年第一学期
教师姓名: XXX
2021年10月22日
课题名称 模块六 构造数据类型应用训练 计划学时 4 学时
内容分析 在C语言中提供了一种新的称为结构的构造型数据类型。结构是一组相关的不同类型的数据的集合。结构类型为处理复杂的数据提供了便利的手段。
教学目标及基本要求 (1) 掌握结构体类型定义、变量的声明及其引用;(2) 了解枚举类型及其变量的定义和引用。
教学重点 结构体类型、共用体类型
教学难点 结构体类型
教学方式 教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解。操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。
教学过程 第一、二学时(结构体类型及其变量、结构体数组)一、引例任务,提出需求(1)通过引力任务,引出本节所需知识内容。【引例任务】输入一条学生成绩,并显示。【程序代码】#include struct stu{ char name[30]; float score[3];}stu1;void main( ){ printf("请输入学生姓名及三门课的成绩:\n"); scanf("%s%f%f%f",stu1.name,&stu1.score[0],&stu1.score[1],&stu1.score[2]); printf("学生:%s的三门课成绩分别为:",stu1.name); printf("%.2f,%.2f,%.2f\n",stu1.score[0],stu1.score[1],stu1.score[2]); }【程序运行】请输入学生姓名及三门课的成绩:杨甜 80 90 70学生:杨甜的三门课成绩分别为:80.00,90.00,70.00(2)明确学习方向。【知识点】结构体类型结构体数组【能力点】掌握结构体类型及其变量掌握结构体数组明确目标,完成任务从引例可以看到,在主程序前面定义一个struct stu类型,其中包括存储姓名的字符数组name[30]和存储三门课成绩的单精度实型数组score[3],这就是C语言中的结构体,即把不同类型的而关系又非常密切的数据项组织在一起,就构成了结构体,它是一种用户自定义数据类型。【做中学6-1】结构体变量的定义、引用和初始化。【程序代码】#include struct birthday{ int year; int month; int day; };struct exam{ char name[30]; char sex; int age; char addr[40]; int number; float score[3]; struct birthday birth; };void main( ){ struct exam exame1={"张申",'M',23,"山丹街1号",301,{98,67,87},{1982,9,3}}; struct exam exame2={"李淼",'F',24,"小北街2号",304,{82,89,97},{1981,5,14}}; printf("%s %c %d ",exame1.name,exame1.sex,exame1.age); printf("%4d.%2d.%2d ",exame1.birth.year,exame1.birth.month,exame1.birth.day); printf("%s %d ",exame1.addr,exame1.number); printf("%3.0f %3.0f %3.0f\n",exame1.score[0],exame1.score[1],exame1.score[2]); printf("%s %c %d ",exame2.name,exame2.sex,exame2.age); printf("%4d.%2d.%2d ",exame2.birth.year,exame2.birth.month,exame2.birth.day); printf("%s %d ",exame2.addr,exame2.number); printf("%3.0f %3.0f %3.0f\n",exame2.score[0],exame2.score[1],exame2.score[2]);}1.结构体类型的定义结构体类型的一般语法格式: struct 结构体类型名{ 类型名1 成员变量名1; 类型名2 成员变量名2; …… 类型名n 成员变量名n; };struct为定义结构体的关键字,结构体类型名的命名应该符合C语言中标识符的命名规则。结构体的成员变量表列应该用花括弧括起来,结构体定义完成时加分号结束。结构体各成员变量的定义方法与变量的定义方法相同:类型名代表各个成员变量的数据类型,它可以是C语言提供的任何数据类型;成员变量名的命名规则也与变量的命名规则相同,各成员变量定义以分号结束,成员变量简称成员。2.结构体变量的定义、引用和初始化结构体类型定义只提供了一个类型,这个类型就象整型(int)一样是一个数据类型,其中并没有具体的数据,系统不会给它分配存储单元。要使用它,应该定义结构体类型的变量,并利用这种变量来处理具体数据。(1) 结构体变量的定义结构体变量的定义方法有3种:① 用已定义的结构体类型来定义结构体变量。② 定义结构体类型的同时定义结构体变量。③ 直接定义结构体变量。结构体类型中的成员变量名可以与程序中的其它变量名相同;结构体中成员的类型也可以是结构体类型,这个被引用的结构体类型的定义必须写在本结构体类型前面。 (2) 结构体变量的引用引用结构体变量的一般格式为: 结构体变量.成员“.”是成员运算符,也称为分量运算符,它的优先级在所有的运算符中最高,因此exam1.name将作为一个整体等同于一个变量名来参与各种运算,其运算规则与同类型的变量相同。(3) 结构体变量的初始化同其它类型的变量一样,结构体变量的初始化可以在定义时完成。如果需要在程序中进行初始化,则需要逐个成员逐级对最低一级的成员赋初值。3. 结构体数组的定义、初始化将若干个相同结构体类型的数据组合在一起构成的集合,就成为结构体数组。结构体数组与一般数组不同的是,每个数组元素都是结构体类型的数据。【做中学6-2】输入5个考生的姓名及考试成绩,并统计各科的平均成绩。【程序代码】#include #define N 5struct stu{ char name[30]; float score[3];}stu1[N];void main( ){ int i,j; float aver[3]={0}; printf("请输入考生姓名及三门课的成绩:\n"); for (i=0;ienum week{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat}; /*定义枚举类型*/void main( ){enum week day; /*定义枚举类型变量*/int i=2;char* name[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Satday","Sunday"};for (day=Mon;day<=Sun;day=(enum week)i++) /*用枚举类型变量控制循环输出*/printf("%2d: %s\n",day,name[day-1]); }3. 自定义数据类型以前用的类型名,除结构体类型,共用体类型和枚举类型名由用户自己指定外,其它类型名都是系统预先定义好的标准名称,如int,float,char等。C语言还允许在程序中用typedef来定义新类型名来代替已有的类型名。下面介绍typedef的几种用法。1)简单的名字替换2)定义一个类型名代表一个结构体类型3)定义数组类型4)定义指针类型用typedef只是起了一个新的类型名字,并未建立新的数据类型。真正好处是,用typedef往往能增加程序的可读性。三、上机练习【练中学6-1】设计一个程序,输入、显示和修改某个学生的信息。【程序代码】 #include "stdio.h"#include "string.h"#define RS 10 //人数#define KM 3 //课程数struct st{ int num; /*学号*/ char classname[10]; /*班级*/ char name[20]; /*姓名*/ char sex[3]; /*性别*/ float score[KM]; /*各科成绩*/}student[RS]=`0`; /*存储学生资料的结构体数组*/void addst(struct st stu[]){ /*在结构体数组插入多位学生的资料*/ int i; struct st *p; p=stu; while(p->num!=0) p++; /*查找插入位置,即学号为零的结构体数组元素*/ printf("请输入班级,学号,姓名,性别,%d科成绩:\n",KM); do{ scanf("%s",p->classname); if (strcmp(p->classname,"end")!=0) { /*班级名不为"end"*/ scanf("%d",&p->num); scanf("%s",p->name); scanf("%s",p->sex); for (i=0;iscore[i]); } while(p->num!=0) p++; /*查找下一插入位置,即学号为零的结构体数组元素*/ }while(strcmp(p->classname,"end"));/*班级名为"end",结束资料输入操作*/}void displayst(struct st stu[]){ int i,k; struct st *p; p=stu; printf("*****************成绩单*****************\n"); printf("班级\t学号\t姓名\t性别\t各科成绩\n"); for(k=0;knum!=0){ printf("\n%s\t",p->classname); printf("%d\t",p->num); printf("%s\t",p->name); printf("%s\t",p->sex); for (i=0;iscore[i]); } p++; }}void changest(struct st stu[],int n){ int i; struct st *p; p=stu; while(p->num!=n) p++; /*查找学号为n的学生的资料*/ printf("请输入班级名,姓名,性别,%d科成绩:\n",KM); scanf("%s",p->classname); scanf("%s",p->name); scanf("%s",p->sex); for (i=0;iscore[i]); }void main( ){ char ch; int n; do{ printf("\n请选择你想要进行的操作:\n"); printf("1.输入信息\t2.显示信息\t3.修改信息\t4.退出\n"); scanf("%c",&ch); if (ch=='1') {addst(student),scanf("%c",&ch);} if (ch=='2') {displayst(student),scanf("%c",&ch);} if (ch=='3'){ printf("请输入要修改的学生学号:"); scanf("%d",&n); changest(student,n); scanf("%c",&ch); } }while(ch!='4');}四、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描二维码查看相应资源,完成课后作业。
教学后记
2

展开更多......

收起↑

资源预览