第11讲结构体共用休和用户定义类型
- 格式:ppt
- 大小:699.50 KB
- 文档页数:45
《C语言程序设计》教学大纲课程名称:中文名称:C语言程序设计;英文名称:C Language Programming课程编码:161002学分:4.5分总学时:72学时,其中,理论学时:52学时;上机学时:20学时。
适用专业:全校理工科各专业先修课程:计算机基础执笔人:审订人:一、课程的性质与任务《C语言程序设计》是为全校所有的理工科专业的学生开设的公共基础课,也是一门重要的必修课。
其目的是使学生掌握程序设计的基本方法,培养学生掌握利用计算机处理问题的思维方法与应用能力。
要求学生掌握程序的三种基本结构及结构化的程序设计方法,了解并掌握几种典型的算法,并且能够熟练地运用C语言编写各种应用程序,为进一步学习其它相关课程奠定基础。
二、教学内容与学时分配第一章程序设计基本概念(3学时)本章重点:一、算法及特性;二、结构化程序设计方法。
难点:算法设计及其表示。
第一节程序和程序设计一、程序;二、程序设计。
第二节算法第三节结构化程序设计方法第四节C语言程序的基本结构第二章数据类型、运算符和表达式(5学时)本章重点:一、标识符的正确使用;二、各种基本数据类型的使用;三、算术运算符的优先级和结合性;四、表达式计算中的类型转换。
难点:一、各种类型数据在计算机内存中的存储形式;二、自增自减运算。
第一节C语言的数据类型第二节常量与变量第三节整型数据第四节实型数据第五节字符型数据第六节算术运算符与算术表达式第七节赋值运算符与赋值表达式一、赋值运算符和赋值表达式;二、复合的赋值表达式;三、自加、自减运算符;四、赋值运算中的类型转换。
第八节逗号运算符与逗号表达式第三章顺序结构程序设计(4学时)本章重点:一、printf函数;二、scanf函数。
难点:输入与输出时的格式控制。
第一节C语句概述第二节赋值语句第三节数据的输入与输出一、printf函数;二、putchar函数;三、scanf函数;四、getchar函数第四节顺序结构程序举例第四章选择结构程序设计(4学时)本章重点:一、逻辑值的表示、使用及其运算;二、关系运算符的运算规则及关系表达式;三、逻辑运算符的运算规则及逻辑表达式;四、if语句;五、switch语句的形式与执行过程。
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
c语言结构体共用体数据类型求大小例题C语言中的结构体和共用体是非常重要的数据类型,它们能够帮助程序员更好地组织和管理数据。
在本文中,我将为你详细介绍C语言中结构体和共用体的特点、用法及例题。
一、结构体的定义和特点1. 结构体是什么?在C语言中,结构体是一种用户自定义的数据类型,它可以包含不同类型的数据,用于表示和管理复杂的数据结构。
结构体的定义以关键字struct开头,后面跟着结构体的名称和大括号内包含的成员变量列表。
2. 结构体的特点结构体的成员变量可以是不同的数据类型,包括基本数据类型、指针类型和其他结构体类型。
这使得结构体非常适合用于表示复杂的数据结构,如学生信息、员工信息等。
二、共用体的定义和特点1. 共用体是什么?共用体也是C语言中的一种用户自定义数据类型,它与结构体类似,不同的是共用体的成员变量共享同一块内存空间。
这意味着共用体的所有成员变量使用同一块内存,修改一个成员变量会影响其他成员变量。
2. 共用体的特点共用体的成员变量共享同一块内存空间,因此共用体非常节省内存。
但也正是由于这种特点,使用共用体需要特别小心,避免出现数据混淆和错误。
三、结构体和共用体的例题为了更好地理解结构体和共用体的用法,我们来看一个例题:如何计算结构体和共用体的大小?```c#include <stdio.h>// 定义一个结构体struct Student {char name[20];int age;float score;};// 定义一个共用体union Data {int num;char str[20];};int main() {// 计算结构体的大小printf("Size of struct Student: %lu bytes\n", sizeof(struct Student));// 计算共用体的大小printf("Size of union Data: %lu bytes\n", sizeof(union Data));return 0;}```在这个例题中,我们定义了一个学生结构体和一个数据共用体,并在主函数中分别计算了它们的大小。
结构体、共用体户定义类型————————————————————————————————作者:————————————————————————————————日期:用typedef说明一种新类型名选择题1)设有如下说明:typedef struct ST{long a;int b;char c[2];}NEW;则下列叙述中正确的是———c———a)以上的说明形式非法b)ST是一个结构体类型c)NEW是一个结构体类型d)NEW是一个结构体变量2)设有以下语句:typedef struct s{int g;char h;}T;则下面叙述中正确的是———b———a)可用S定义结构体变量b)可以用T定义结构体变量c)S是struct类型的变量d)T是struct S类型的变量结构体类型选择题1)有以下程序#include <stdio.h>struct st{int x,y;}data[2]={1,10,2,20};main(){struct st *p=data;printf(“%d,”,p->y);printf(“%d\n”,(++p)->x);}程序运行结果是____c_____a)10,1 b)20,1 c)10,2 d)20,22)有以下程序#include <stdio.h>main(){struct STU{char name[9]; char sex; double score[2];};struct STU a={“Zhao”,’m’,85.0,90.0},b={“Qian”,’f’,95.0,92.0}; b=a;printf(“%s,%c,%2.0f,%2.0f\n”,,b.sex,b.score[0],b.score[1]); }程序运行的结果是____D_____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,903) 将定已建立以下链表结构,且指针p 和q 已指向如图所示的结点:则以下选项中科将q 所指结点从链表中删除并释放该结点的语句是_____d____a) (*p).next=(*q).next;free(p); b)p=q->next; free(q);c) p=1; free(q); d) p->next=q->next;free(q);4)以下结构体类型说明和变量定义中正确的是____a____a) typedef struct b)struct REC;{int n; char c;}REC; {int n; char c; };REC t1,t2; REC t1,t2;c)typedef struct REC; d) struct{int n=0; char c=’A ’; }t1,t2; {int n; char c; }REC;REC t1,t2;5)有以下程序#include <stdio.h>#include <string.h>typedef struct {char name[9]; char sex ; float score[2]; }STU;void f(STU a){STU b={“Zhao ”,’m ’,85.0,90.0}; int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];}main(){STU c={“Qian ”,’f ’,95.0,92.0};f(c); printf(“%s,%c,%2.0f,%2.0f\n ”,,c.sex,c.score[0],c.score[1]);}程序的运行结果是_____a____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,906)有以下程序#include <stdio.h>struct tt{int x; struct tt *y; }*p;struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main(){int i;p=a;for(i=1;i<=2;i++) {printf(“%d,”,p->x); p=p->y;}}程序的运行结果是____d_____ ab cdatnex p q heada) 20,30, b) 30,17 c)15,30, d)20,15,7)有以下程序#include <stdio.h>#include <string.h>typedef struct { char name[9]; char sex; float score[2]; }STU;STU f(STU a){STU b={“Zhao”,’m’,85.0,90.0};int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];return a;}main(){STU c={“Qian”,’f’,95.0,92.0},d;d=f(c); printf(“%s,%c,%2.0f,%2.0f\n”,,d.sex,d.score[0],d.score[1]); }程序的运行结果是_____c___a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,m,85,90 d)Zhao,f,95,928) 有以下程序typedef stuct {int b,p;}A;void f(A c) /*c是结构变量名*/{int j;c.b+=1;c.p+=2;}main(){int i;A a={1,2};f(a);printf(“%d,%d\n”,a.b,a.p);}程序运行后的结果是____d____a)2,3 b)2,4 c)1,4 d)1,29)有以下程序struct S {int n;int a[20];};void f(int *a,int n){int i;for(i=0;i<n-1;i++) a[i]+=i;}main(){int i;struct S s={10,{2,3,1,6,8,7,5,4,10,9}};f(s.a,s.n);for(i=0;i<s.n;i++) printf(“%d,”,s.a[i]);}程序运行后的输出结果是______a____a) 2,4,3,9,12,12,11,18,9, b)3,4,2,7,9,8,6,5,11,10,c)2,3,1,6,8,7,5,4,10,9, d)1,2,3,6,8,7,6,5,10,9,10) 有以下程序段typedef struct NODE{int num;struct NODE *next;}OLD;以下叙述中正确的是——————ca)以上的说明形式非法b) NODE 是一个结构体类型c) OLD是一个结构体类型d)OLD是一个结构体变量11)有以下程序:#include <string.h>struct STU{int num;float TotalScore;};void f(struct STU p){ struct STU s[2]={{20041,703},{20045,537}};p.num=s[1].num;p.TotalScore=s[1].TotalScore;}main(){struct STU s[2]={{20041,703},{20045,537}};f(s[0]);printf(“%d %3.0f\n”,s[0].num,s[0].TotalScore);}程序运行后的输出结果是____d___a) 20045 537 b)20044 550 c)20042 580 d)20041 70312) 有以下程序#include <string.h>struct STU{char name[10];int num;};void f(char *name,int num){struct STU s[2]={{“SunDan”,20044},{“Penghua”,20045}}; num=s[0].num;strcpy(name,s[0].name);}main(){struct STU s[2]={{“YangSan”,20041},{“LiSiGuo”,20042}},*p; p=&s[1];f(p->name,p->num);printf(“%s %d\n”,p->name,p->num);程序运行后的输出结果是___a____a) SunDan 20042 b)SunDan 20044 c)LiSiGuo 20042 d)YangSan 2004113) 有以下程序:struct STU{char name[10];int num;float TotalScore;};void f(struct STU *p){struct STU s[2]={{“SunDan”,20044,550},{“Penghua”,20045,537}},*q=s;++p;++q;*p=*q;}main(){struct STU s[3]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}};f(s);printf(“%s %d %3.0f\n”,s[1].name,s[1].num,s[1].TotalScore);}程序运行后的输出结果____b____a)SunDan 20044 580 b)Penghua 20045 537c)LiSiGuo 20042 580 d)SunDan 20041 703填空题1)以下程序运行后的输出结果是_____5_____struct NODE{int num; struct NODE *next; }main(){struct NODE s[3]={{1,’\0’},{2,’\0’},{3,’\0’}},*p,*q,*r;int sum=0;s[0].next=s+1;s[1].next=s+2;s[2].next=s;p=s;q=p->next;r=q->next;sum+=q->next->num;sum+=r->next->num;printf(“%d\n”,sum);}2)以下程序运行后的输出结果是______13431___struct NODE{int k;struct NODE *link;main(){struct NODE m[5],*p=m,*1=m+4;int i=0;while(p!=q){p->k=++i;p++;q->k=i++;q--;}q->k=i;for(i=0;i<5;i++)printf(“%d”,m[i].k);printf(“\n”);}3)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。