结构体、共用体、枚举
10 结构体
![10 结构体](https://img.taocdn.com/s3/m/2afd80f8941ea76e58fa0401.png)
}
程序运行结果如下:
Number:102
Name:Zhang ping
Sex:M
Age:20
Score:78.5
本例中,对结构体变量 boy1 作了初始化赋值,然后把 boy1 的值整体赋予 boy2,最后 用 printf 函数输出 boy2 各成员的值。
10.3 结构体数组
10.3.1 结构体数组的定义 结构体数组的每一个元素都具有相同的结构体类型。在实际应用中,经常用结构体数
10.4.1 指向结构体变量的指针 指向结构体变量或结构体数组的指针称为结构体指针变量(可简称为结构指针),其
值为所指向的结构体变量或结构体数组的首地址。 定义结构体指针变量的一般形式为: struct 结构体名 *结构体指针变量名 例如: struct stu boy,*pstu; 定义了结构体变量 boy 和结构体指针变量 pstu,通过赋值语句可使 pstu 指向 boy,即: pstu=&boy; /* boy 的地址赋给 pstu */ 注意: (1) 结构体指针变量与普通指针变量的性质一样,赋值前不能使用。 (2) 编译系统不给代表结构类型的结构体名分配空间,所以下面的用法是错误的。 pstu=&stu; 利用结构体指针可以访问结构体变量的各个成员,一般形式为: 结构体指针变量->成员名 其中,运算符“->”的优先级比较高,高于算术运算符、关系运算符、逻辑运算符等。
char sex;
int age;
float score;
}boy2,boy1={102,"Zhang ping",'M',20,78.5};
boy2=boy1;
printf("Number:%d\nName:%s\n",boy2.num,);
C语言数据结构-第9章 结构体共用体与枚举
![C语言数据结构-第9章 结构体共用体与枚举](https://img.taocdn.com/s3/m/56188b6d71fe910ef02df865.png)
"Shang Hai","13901000003"}}; int i; for(i=0;i<3;i++) { printf("%s,%d,%s,%s,",stud[i].name,stud[i].age,stud[i].sex,stud[i].xh); printf("%d,%d,%d,",stud[i].birthday.year,stud[i].birthday.month, stud[i].birthday.day); printf("%s,%s,%s\n",stud[i].nation,stud[i].address,stud[i].tel); } }
成员运算符“.”的优先级最高,在表达式中的结构体变量成员不 需要加括号。例如:
wang.age++;
相当于
(wang.age)++;
注意
13
结构体变量的成员名可以相同,但必须处在不同的层次。 例如:
sturct student { int no;
char name[20]; struct { int no; char classname[20]; }class; struct { int no; char groupname[20]; }group; }wang;
定义结构体类型名的同时定义结构体数组,例如:
struct student{…} stud[50];
Lesson4.5_structure
![Lesson4.5_structure](https://img.taocdn.com/s3/m/3e772e4f767f5acfa1c7cd67.png)
注意事项
• 使用typedef只能定义各种用户定义类型名, 而不能用于定义变量 • 用户定义类型相当于原类型的别名,例如 typedef char * NAME; NAME p; 等价于 char *p; • typedef定义类型名有利于程序的移植
• typedef与# define的区别 1) typedef (int*) pINT; pINT a,b; 2) #define pINT2 int* pINT2 a,b; 1)相当于int *a, *b; 2)相当于int *a, b; typedef并不只是做简单的字符 串替换
共用体变量的特点
• 共用体变量中的所有成员共享一段公共存 储区,所以共用体变量所占内存字节数与 其成员中占字节数最多的那个成员相等 • 举例: union data { int i; char ch; float f; } 占用4字节
• 每一瞬时,共用体变量只有一个成员起作 用,其它的成员不起作用 • 共用体变量中起作用的成员是最后一次存 放的成员 • 举例: a.i = 1; a.c = 'a'; a.f = 1.5;
• 枚举元素是按常量处理的,如果没有进行 初始化,第一个枚举元素的值是0,第二个 枚举元素的值是1,依此类推 • 例如: week = Fri; printf("%d",week);
输出结果是4
• 对应的枚举变量只能取“枚举元素表”中 的某个元素,而不能取其他值,如果不能 把整数直接赋给枚举变量,例如: week = Wed; //正确 week = 2; //错误 • 若想将整数值赋给枚举变量,需要强制类 型转换,例如: week = (enum week_day)2;
程序6
• code list: 7-8-8.c • 编写一个程序,从键盘输入一行字符,调 用一个函数建立反序的单链表,然后输出 整个链表 • 链表定义如下: typedef struct node { int data; struct node *next; } NODE;
结构体公用体枚举类型习题
![结构体公用体枚举类型习题](https://img.taocdn.com/s3/m/32d1950ba6c30c2259019edd.png)
5.根据下面的定义,能打印出字母M的语句是 。 D struct person{ char name[9]; int age; }; struct person c[10]={"John",17,"Paul",19,"Mary",18,"Adam",1 6}; A)printf("%c\n",c[3].name); B)printf("%c\n",c[3].name[1]); C)printf("%c\n",c[2].name[1]); D)printf("%c\n",c[2].name[0]);
12.下面程序的运行结果为: word value:6b7d struct tag{ char low; low value:7d char high; }; high value:6b union word{struct tag byte; word value:567d short word; }w; main( ) { w.word=0x6b7d; printf("word value:%x\n",w.word); printf("low value:%x\n",w.byte.low); printf("high value:%x\n",w.byte.high); w.byte.high=0x56; printf("word value:%x\n",w.word); }
13.下面程序的运行结果为: 13 (提示: c[0]在低字节,c[1]在高字节) #include <stdio.h> union p{ int i; char c[2]; }x; main() { x.c[0]=13; x.c[1]=0; printf("%d\n",x.i); }
学习情境七结构体、共用体与枚举习题
![学习情境七结构体、共用体与枚举习题](https://img.taocdn.com/s3/m/8da1c16ab307e87101f696b5.png)
学习情境七结构体、共用体与枚举习题一、选择题1.若有如下说明,则的叙述是正确的(已知int类型占两个字节)。
struct st{ int a;int b[2];}a;A.结构体变量a与结构体成员a同名,定义是非法的B.程序只在执行到该定义时才为结构体st分配存储单元C.程序运行时为结构体st分配6个字节的存储单元D.类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)2.设有以下说明语句:struct ex{ int x ;float y;char z ;} example;则下面的叙述中不正确的是。
A.struct是结构体类型的关键字B.example是结构体类型名C.x,y,z都是结构体成员名D.struct ex是结构体类型3.若有以下结构体定义:struct example{ int x;int y;}v2;则是正确的引用或定义。
A.example.x=10 B.example v2.x=10;C.struct v2; v2.x=10; D.struct example v2={10};4.已知:struct{ int i ;char c;float a;} ex;则sizeof(ex)的值是。
A.4B.5C.6D.75.下面程序的运行结果是main(){struct sample{int x;int y;}a[2]={1,2,3,4};printf(“%d\n”,a[0].x+a[0].y*a[1].y);}A.7B.9C.13D.166.已知:union{ int i ;float a;char c ;} ex;则sizeof(ex)的值是。
A.4B.5C.6D.77.有如下定义struct person{char name[9]; int age;};struct person class[10]={“Johu”, 17,“Paul”, 19“Mary”,18,“Adam”, 16,};根据上述定义,能输出字母M的语句是。
实验9 结构体、共用体与枚举类型答案
![实验9 结构体、共用体与枚举类型答案](https://img.taocdn.com/s3/m/98571f911a37f111f1855b66.png)
率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);
c语言中各种数据类型
![c语言中各种数据类型](https://img.taocdn.com/s3/m/a8cf77be900ef12d2af90242a8956bec0975a5dc.png)
c语言中各种数据类型C语言中的各种数据类型在C语言中,数据类型是非常重要的概念。
它定义了变量的类型及其在内存中所占据的空间大小。
C语言中有多种数据类型,包括基本数据类型和派生数据类型。
本文将依次介绍这些数据类型,并给出一些使用示例。
1. 基本数据类型1.1 整型(int)整型是C语言中最常用的数据类型之一。
它用于表示整数,包括正整数、负整数和零。
整型的大小取决于机器的架构,但通常情况下,int类型占用4个字节的内存空间。
下面是一个整型变量的声明和赋值的示例:```int num = 10;```1.2 浮点型(float和double)浮点型用于表示实数,包括小数和指数形式的数。
C语言中提供了两种浮点型:float和double。
float类型占用4个字节的内存空间,而double类型则占用8个字节的内存空间。
下面是一个浮点型变量的声明和赋值的示例:```float pi = 3.14;double e = 2.71828;```1.3 字符型(char)字符型用于表示单个字符,它占用1个字节的内存空间。
在C语言中,字符型变量使用单引号来表示。
下面是一个字符型变量的声明和赋值的示例:```char ch = 'A';```2. 派生数据类型2.1 数组(array)数组是一种派生数据类型,它可以存储多个相同类型的元素。
数组的大小在声明时指定,并且在程序运行期间不能改变。
下面是一个整型数组的声明和赋值的示例:```int nums[5] = {1, 2, 3, 4, 5};```2.2 结构体(struct)结构体是一种可以包含多个不同类型变量的数据类型。
它可以将不同类型的变量组合在一起,形成一个逻辑上的整体。
下面是一个结构体的声明和使用的示例:```struct Student {char name[20];int age;float score;};struct Student stu;strcpy(, "Alice");stu.age = 18;stu.score = 95.5;```2.3 枚举(enum)枚举是一种用户自定义的数据类型,它可以定义一组具有名称的常量。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/9b15ff2a783e0912a2162a8f.png)
4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
C语言第9章结构体、共用体、枚举
![C语言第9章结构体、共用体、枚举](https://img.taocdn.com/s3/m/441e45e783c4bb4cf6ecd180.png)
结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
C语言知识总结——宏,枚举,结构体,共用体
![C语言知识总结——宏,枚举,结构体,共用体](https://img.taocdn.com/s3/m/68f952d82dc58bd63186bceb19e8b8f67c1cefff.png)
C语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。
因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。
它的常量值只能是字符串或数字。
该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。
不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。
如有错误,只能在编译已被宏展开后的源程序时发现。
注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
宏定义其作用域为宏定义命令起到源程序结束。
如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。
带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。
定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
第9章 结构体、共用体和枚举类型
![第9章 结构体、共用体和枚举类型](https://img.taocdn.com/s3/m/7c048147336c1eb91a375d79.png)
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型
9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •
c语言允许的数据类型
![c语言允许的数据类型](https://img.taocdn.com/s3/m/1137b502326c1eb91a37f111f18583d049640fd5.png)
c语言允许的数据类型C语言允许的数据类型在C语言中,数据类型是用来定义变量或函数返回值的属性。
C语言中允许的数据类型包括基本数据类型和派生数据类型。
本文将详细介绍C语言允许的数据类型及其特点。
1. 基本数据类型1.1 整型(int)整型是C语言中最基本的数据类型之一,用于表示整数。
整型可以分为有符号整型和无符号整型。
有符号整型可以表示正数、负数和零,而无符号整型只能表示非负数和零。
整型的大小取决于编译器和操作系统,但一般情况下,int类型占用4个字节。
1.2 浮点型(float和double)浮点型用于表示带有小数点的数值。
C语言中提供了两种浮点型数据类型:float和double。
float类型占用4个字节,而double类型占用8个字节。
double类型的精度比float类型更高,可以表示更大范围的数值。
1.3 字符型(char)字符型用于表示单个字符。
在C语言中,字符型变量通常占用1个字节。
字符型可以表示ASCII码、字母、数字、符号等各种字符。
2.1 数组(array)数组是由相同类型的元素组成的集合。
在C语言中,数组可以存储多个元素,并通过下标来访问各个元素。
数组的大小在定义时确定,并且不可改变。
2.2 指针(pointer)指针是用于存储内存地址的变量。
通过指针,可以间接访问存储在内存中的数据。
指针在C语言中非常重要,它可以用于动态分配内存、传递函数参数等。
2.3 结构体(struct)结构体是由不同类型的变量组成的集合。
在C语言中,结构体可以用来表示复杂的数据结构。
通过结构体,可以将多个不同类型的变量组织在一起,形成一个逻辑上的整体。
2.4 共用体(union)共用体是一种特殊的数据类型,可以在相同的内存位置存储不同的数据类型。
共用体的大小取决于最大的成员变量的大小。
2.5 枚举(enum)枚举用于定义一组命名的常量。
通过枚举,可以为一组相关的常量赋予有意义的名称,提高代码的可读性。
datatype在c语言中用法
![datatype在c语言中用法](https://img.taocdn.com/s3/m/6321e6692bf90242a8956bec0975f46527d3a725.png)
datatype在c语言中用法在C语言中,数据类型(datatype)是用来告诉编译器变量的类型以及变量可以存储的数据范围。
数据类型对于编程非常重要,它决定了变量在内存中的占用空间大小和所能存储的数据种类。
C语言中的数据类型包括基本数据类型和自定义数据类型,下面将对它们的用法进行详细介绍。
一、基本数据类型1.整型(int)整型数据类型用于存储整数,可以是正数、负数或零。
在C语言中,整型有不同的类型,根据存储范围和内存占用大小可以选择不同的整型类型。
常见的整型类型有:- char(字符型):用于存储单个字符,占用1个字节。
- int(整型):可以用于存储整数,占用4个字节。
- short(短整型):用于存储较小的整数,占用2个字节。
- long(长整型):用于存储较大的整数,占用4个字节或8个字节。
2.浮点型(float和double)浮点型数据类型用于存储实数,可以表示小数或科学计数法形式的数值。
在C语言中,浮点型有两个主要类型:- float(单精度浮点型):用于存储较小范围的小数,占用4个字节。
- double(双精度浮点型):用于存储较大范围的小数,占用8个字节。
3.字符型(char)字符型数据类型用于存储单个字符,例如字母、数字或符号等。
在C语言中,字符型变量可以通过使用单引号来表示。
例如,字符'a'可以定义为:char ch = 'a'。
4.布尔型(bool)布尔型数据类型用于存储逻辑值,可以表示真(True)或假(False)的状态。
在C语言中,布尔型变量的大小是一个字节。
例如,可以定义一个布尔型变量isTrue并将其赋值为true:bool isTrue = true;。
二、自定义数据类型除了基本数据类型,C语言还允许用户自定义数据类型,以适应特定的需求。
自定义数据类型包括结构体(struct)、共用体(union)和枚举(enum)。
1.结构体(struct)结构体是用户自定义的数据类型,可以包含不同类型的数据成员。
8章 c语言程序设计 结构体,共用体与枚举类型
![8章 c语言程序设计 结构体,共用体与枚举类型](https://img.taocdn.com/s3/m/bbed100abb68a98271fefa17.png)
当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
结构体、共用体、枚举类型、typedef的区别
![结构体、共用体、枚举类型、typedef的区别](https://img.taocdn.com/s3/m/30452b6a27d3240c8447ef45.png)
值 2,此时引用 jh.i 不能取值,已经被 jh.f 覆盖了. (3)共用体变量的地址和它各成员的地址都是同一地址. (4)不能对共用体赋值或引用共用体的变量名取值,也不能在定义共用体变量
时对它初始化. (5)不能把共用体变量作函数参数,也不能使函数返回共用体变量,但可以使
引用: p = cd; 为枚举型变量 p 赋值 cd,p 的值就是成员表列中 cd 的值. 可以理解为 p = 2;,但是 2 是整型常量,要先强制类型转换,写成 p = (enum
jh)2;. 枚举型变量可以用作判断比较,if(p > (enum jh)1)或 if(p > bc).
-------------------------------------------------------------------------------------------------typedef
(2)直接定义结构体类型变量.方法为声明类型的同时定义变量,并且不写结构 体名 jh,这种方法用于只定义 1 次变量,而且每用这种方法定义 1 个变量,虽然都 为无名结构体类型,但不属于同一类型.
引用结构体类型变量: 结构体变量名.成员名
例:
struct jh{int ห้องสมุดไป่ตู้;char b;}a; a.b = 'z';
enum jh{ab=1,bc=2,cd=3,de=4}; 或
enum jh{de=4,ab,bc,cd}; 其中(de=4,ab,bc,cd)就是把最后一个 de 作为 0 放在最前面,然后改变值为最 后一位的值,第二开始就是从 1 算起了.
结构体
![结构体](https://img.taocdn.com/s3/m/eda27814866fb84ae45c8dde.png)
C语言:结构体、共用体、枚举、类型重定义、位运算、预处理C语言除了提供象int,long,float,double、和char这样的基本数据类型之外,还支持数组、Struct、Union、和Enum数据类型。
结构体类型(struct)我们一个数组包含多个成员(元素),每个成员具有相同的数据类型。
一个结构体也能包含多个成员,但每个成员的数据类型可以不同。
例如:(a) struct Student { char Name[10], char Sex, int Age ;float Height; }(b) struct Student S1;这里,(a)定义了struct类型Student,而(b)定义了S1是Student类型的变量。
Student类型包含四个成员:Name,Sex,Age,Height,它们的数据类型分别是字符数组、字符型、整型、和浮点型。
以下是另一例子:struct DATE { int YEAR; int MONTH, int DAY ;}struct DATE d1,d2;注意,struct类型是泛指,而Student和DATE是两个特定的结构体类型。
当定义一结构体类型时,你要指定它的结构体类型名,当定义变量时,要同时写上关键字struct和结构体类型名。
定义结构体类型:我们struct 结构体类型名 { 成员1;成员2;…;成员n; }每一个成员可以是基本类型的变量、数组或指针变量,也可以是其他结构体或共用体类型的变量、数组或指针。
成员虽然不能是本结构体类型的变量,但可以是本结构体类型的指针变量。
定义结构体类型的变量:struct 结构体类型名变量名1,变量名2,…定义结构体变量时也可初始化,如:struct Student S1,S2={ “Zhang San”, ‟M‟, 19, 1.76 },S3;引用结构体类型的变量:(1)引用其成员:结构体变量名。
成员如 strcpy(,”Li Si”); S1.Sex=‟F‟; S1.Age=18; S1.Height=1.72;[0]=‟L‟; [1]=‟i‟; [2]=‟u‟; [3]=‟\0‟;S2.Height = S1.Height + 0.01 ;(1)引用整体就用变量的名字。
C语言 第八章 结构体
![C语言 第八章 结构体](https://img.taocdn.com/s3/m/7e2bd8016bd97f192279e938.png)
共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
c 语言中类型
![c 语言中类型](https://img.taocdn.com/s3/m/894391f30d22590102020740be1e650e52eacf22.png)
c 语言中类型在 C 语言中,类型是非常重要的概念。
C 语言类型可分为基本类型和派生类型两种。
一、基本类型C 语言的基本类型有以下五种:1. 整型(int):用来表示整数,通常占用 2 或 4 个字节。
整型可分为有符号整型和无符号整型,而有符号整型还可分为 short、int 和 long 三种。
2. 浮点型(float):用来表示小数,通常占用 4 个字节。
浮点型可分为单精度(float)和双精度(double)两种。
3. 字符型(char):用来表示字符,占用 1 个字节。
字符型主要用于字符串的处理和字符的输入输出操作。
4. 布尔型(bool):用来表示真或假,占用 1 个字节。
5. 空类型(void):用来表示无类型。
通常用于函数的返回类型或指针的类型。
二、派生类型派生类型是基本类型的组合或修改,包括以下几种:1. 数组类型(array):由一组相同类型元素组成的有序集合,可以通过下标访问数组中的元素。
2. 结构体类型(struct):由不同类型的成员组成的复合类型。
结构体的成员可以是基本类型或其他结构体类型。
3. 共用体类型(union):一种特殊的结构体类型,只能存储其中一个成员的值。
4. 枚举类型(enum):由一组命名的常量组成的类型。
枚举类型的常量通常用于表示一组相关的值。
5. 指针类型(pointer):用来存储变量的地址。
指针类型通常与基本类型或派生类型一起使用。
C 语言类型的正确使用是写出高质量代码的基础。
在使用类型时,应尽量遵循类型匹配的原则,并根据实际情况选择适当的类型。
了解C 语言类型的基本规则和使用方法可以更好地理解 C 语言的语法和语义,并为写出可靠的、高效的、易于维护的代码提供基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最终排名Time Limit: 1000MS Memory limit: 65536K题目描述第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。
但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。
现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。
为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。
输入第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。
每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。
接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。
ID为队伍的编号,M为做出的题数。
输出每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。
示例输入181 216 311 220 33 526 47 122 4示例输出3 526 422 416 3 20 3 1 2 11 2 7 1#include <stdio.h>void main(){struct team{int ID;int M;}t[10000],T;int N,n,i,j,k,time=0;scanf("%d",&N);while(time!=N){scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d",&t[i].ID,&t[i].M);}for (j=1; j<n; j++){for (k=0; k<n-j; k++){if(t[k].M<t[k+1].M){T=t[k];t[k]=t[k+1] ;t[k+1]=T;}}}for(i=0;i<n;i++){printf("%d %d\n",t[i].ID,t[i].M);}time++;}}英文金曲大赛Time Limit: 1000MS Memory limit: 65536K题目描述我们在“渊子数”的题目中已经了解了渊子是个什么样的人了,他在大一的时候参加过工商学院的“英语聚乐部”。
告诉你个秘密,这个俱乐部是个好地方,不但活动精彩而且有MM。
这不,英语俱乐部举办了一个叫做“英文金曲大赛”的节目。
这个节目有好多人参加,这不,成绩出来了,渊子当是很勇敢,自告奋勇接下了算出大家的总得分的任务。
当时有7个评委,每个评委都要给选手打分,现在要求去掉一个最高分和去掉一个最低分,再算出平均分。
结果精确到小数点后两位。
输入测试数据包括多个实例。
每组数据包括7个实数,代表评委们对该选手的评分。
紧接着是选手的名字,名字的长度不超过30个字符,且没有空格。
输入直到文件结束。
输出算出每位选手名字和最终得分,结果保留两位小数。
示例输入10 10 10 10 10 10 9 xiaoyuanwang0 0 0 0 0 0 0 beast示例输出xiaoyuanwang 10.00beast 0.00#include <stdio.h>void main(){struct player{int score[7];char s;}p;int i,big,small;float sum;while(~scanf("%d",&p.score[0])){for(i=1;i<7;i++)scanf("%d",&p.score[i]);scanf("%s",&p.s);big=small=sum=p.score[0];for(i=1;i<7;i++){big=p.score[i]>p.score[i-1]?p.score[i]:p.score[i-1];small=p.score[i]<p.score[i-1]?p.score[i]:p.score[i-1];sum+=p.score[i];}sum=sum-big-small;printf("%s %.2f\n",&p.s,sum/5);}}选夫婿1Time Limit: 1000MS Memory limit: 32768K题目描述倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。
前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。
每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。
最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。
潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。
作为一个程序员,你没有钱也没有权,擅长的也就是编程了。
潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
输入潘小姐给你了所有报名男生的信息。
输入数据的第一行是一个正整数N(0 < N < 1000)。
然后N行数据,每行包含三部分,用空格隔开。
第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300),第三部分是整数体重w (0 < w < 200)。
最后一行是四个整数a,b,c,d.表示身高的合格范围是[a,b],体重的合格范围是[c,d](0 < a < b < 200, 0 < c < d < 300)。
输出你需要把合格的男生信息按照身高从低到高输出,格式跟输入一样,也是每行三个信息,共N行,如果身高相同则按体重从轻到重输出,若没有合格人选则输出No,具体格式见样例。
示例输入8武大郎 70 40西门庆 180 70李逵 160 150燕青 175 69鲁智深 180 100武松 180 75小泉纯一狼 30 20孙二娘 169 60165 190 60 90示例输出孙二娘 169 60燕青 175 69西门庆 180 70武松 180 75#include <stdio.h>void main(){struct boys{char s[20];int high,weight;}b[100],t[100],T;int n,i,j,k,l,low1,low2,tall1,tall2,sum=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%s%d%d",&b[i].s,&b[i].high,&b[i].weight);scanf("%d%d%d%d",&low1,&tall1,&low2,&tall2);l=0;for(i=0;i<n;i++){if((b[i].high<=tall1)&&(b[i].high>=low1)&&(b[i].weight<=tall2)&&(b[i].weight>=low2)){t[l]=b[i];l++;sum++;}}for(i=0;i<l-1;i++){k=i;for(j=i+1;j<l;j++)if(t[k].high>t[j].high)k=j;if(k!=i){T=t[i];t[i]=t[k];t[k]=T;}}for(i=0;i<l-1;i++){k=i;for(j=i+1;j<l;j++)if(t[k].high==t[j].high&&t[k].weight>t[j].weight)k=j;if(k!=i){T=t[i];t[i]=t[k];t[k]=T;}}if(sum){for(i=0;i<l;i++){printf("%s %d %d\n",&t[i].s,t[i].high,t[i].weight);}}else printf("No\n");}选夫婿2Time Limit: 1000MS Memory limit: 32768K题目描述倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。
前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。
每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高,以及个人简历。
最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。
潘小姐不爱名利,只看人,第一关就是身高要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。
作为一个程序员,你没有钱也没有权,擅长的也就是编程了。
潘小姐也发现了这一点,所以把首轮根据身高进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
输入潘小姐给你了所有报名男生的信息。
输入数据的第一行是一个正整数N(0 < N < 100)。
然后N行数据,每行包含两部分,用空格隔开。
第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300)。
最后一行是两个整数a,b.表示身高的合格范围是[a,b]。
输出你需要把合格的男生信息按照身高从低到高输出,格式跟输入一样,也是每行两个信息,共N行,若没有合格人选则输出No,具体格式见样例。
示例输入8武大郎 70西门庆 182李逵 160燕青 175鲁智深 195武松 180小泉纯一狼 30孙二娘 169165 190示例输出孙二娘 169燕青 175武松 180西门庆 182#include <stdio.h>void main(){struct boys{char s[20];int high;}b[100],t[100],T;int n,i,j,k,l,low,tall,sum=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%s%d",&b[i].s,&b[i].high);scanf("%d%d",&low,&tall);l=0;for(i=0;i<n;i++){if((b[i].high<=tall)&&(b[i].high>=low)){t[l]=b[i];l++;sum++;}}for(i=0;i<l-1;i++){k=i;for(j=i+1;j<l;j++)if(t[k].high>t[j].high)k=j;if(k!=i){T=t[i];t[i]=t[k];t[k]=T;}}if(sum){for(i=0;i<l;i++){printf("%s %d\n",&t[i].s,t[i].high);}}else printf("No\n");}期末考试之排名次Time Limit: 1000MS Memory limit: 65536K题目描述期末考试结束了,童鞋们的成绩也出来的了,可是为了排名次可忙坏了老师,因为学生太多了。