c程序设计 第九章 结构体
c语言中结构体的定义和使用
c语言中结构体的定义和使用结构体是C语言中的一种自定义数据类型,它可以包含多个不同类型的变量,这些变量称为结构体成员。
结构体的定义形式为:```struct structure_name {member1_type member1_name;member2_type member2_name;...};```其中,`structure_name`为结构体名称,用于标识该结构体的类型;`member1_type`、`member2_type`等为结构体成员的数据类型,可以是整型、浮点型、字符型等基本数据类型,也可以是指针、数组、甚至是其他结构体类型;`member1_name`、`member2_name`等为结构体成员的名称,用于访问该成员的值。
例如,下面定义了一个名为`person`的结构体,包含3个成员:`name`、`age`和`gender`,分别为字符串、整型和字符型:定义完结构体后,就可以根据该结构体类型定义相应的结构体变量,并通过`.`操作符访问该结构体变量的成员。
例如,下面定义了一个名为`p`的结构体变量,通过`.`操作符赋值和访问该变量的成员:```struct person p;strcpy(, "Jack");p.age = 30;p.gender = 'M';```除了上述基本的结构体定义和访问方法外,还可以通过以下方式扩展结构体的功能:1. 结构体指针```struct date {int year;int month;int day;};struct person p;strcpy(, "Jack");p.birth.year = 1990;p.birth.month = 6;p.birth.day = 20;printf("Name: %s\nBirthday: %d/%d/%d", , p.birth.year, p.birth.month, p.birth.day);```结构体是C语言中非常灵活和强大的一种数据类型,可以方便地组织和管理多个不同类型的数据。
C语言 第九章 结构体数据类型期末测试习题与答案
程序运行后的输出结果是( )。
A.SunDan 20044
B.YangSan 20041
C.SunDan 20042
D.LiSiGuo 20042
参考答案:D
3、以下程序运行的结果是_( )。
#nclude”stdio.h
main()
{
struct date
{
int year , month , day ;
D.struct color
{ int red;
int green;
int blue;
} c l;
参考答案:B
7、有以下程序:
struct stu
{
char[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
} today ;
printf(“%d\n”,sizeof(struct date));
}
A.10
B.6
C.8
D.12
参考答案:D
4、设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是______。
A.ST是一个结构体类型
B.NEW是一个结构体类型
A.typedef struct
{ int red;
int green;
int blue;
} COLOR;
COLOR cl;
B.struct color cl
C程序设计第四版Chap9(新)-谭浩强
21
结构体数组
struct student s[ ] = { {10001001,"张三",20, "M",{1985,1,1},"XXX",123456 }, {……}, {……} };
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
25
结构体指针
指针的基类型可以是一个结构体类型。 例如: struct student s1,*ps; …… ps = &s1;
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
15
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
1
第 9章
结构体
2013 - 2014 Lu & Xiao. All rights reserved.
2
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
c语言程序设计电子书
c语言程序设计电子书C语言程序设计是一门基础且广泛应用的编程语言课程,它以其高效、灵活和强大的功能而著称。
C语言由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初期于贝尔实验室开发,至今仍是许多系统软件和应用软件的首选语言。
本电子书将从C语言的基本概念、语法结构、数据类型、控制结构、函数、数组、指针、结构体、文件操作等方面进行详细介绍。
第一章:C语言概述C语言是一种过程式编程语言,它支持结构化编程。
C语言的设计哲学是提供一种通用、高效、易于使用的语言,同时保持对硬件的控制。
C 语言广泛应用于操作系统、嵌入式系统、高性能计算等领域。
第二章:C语言环境和基本语法在开始编写C程序之前,需要配置C语言开发环境,如GCC编译器。
C 程序的基本结构包括预处理指令、函数、变量声明和语句。
程序从`main`函数开始执行。
第三章:数据类型和变量C语言提供了多种数据类型,包括整型、浮点型、字符型等。
变量是程序中存储数据的容器,需要先声明后使用。
C语言是静态类型语言,每种变量在使用前必须指定数据类型。
第四章:运算符和表达式C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。
表达式是由变量、常量和运算符组成的组合,用于执行计算。
第五章:控制结构控制结构是程序流程控制的基本构件。
C语言提供了三种基本的控制结构:顺序结构、选择结构(if语句、switch语句)和循环结构(for 循环、while循环、do-while循环)。
第六章:函数函数是C语言中实现代码复用的重要手段。
函数允许将代码组织成独立的块,每个块可以执行特定的任务。
C语言支持函数的定义、声明、调用和递归。
第七章:数组数组是相同数据类型元素的集合。
C语言支持一维数组和多维数组。
数组在内存中是连续存储的,这使得数组操作高效但也需要小心越界问题。
第八章:指针指针是C语言的核心特性之一。
指针变量存储的是另一个变量的内存地址。
C语言结构体的定义和使用方法
C语言结构体的定义和使用方法结构体是C语言中一种自定义的数据类型,它可以将不同类型的变量组合在一起,形成一个新的复合数据类型。
结构体的定义和使用方法在C语言中非常重要,下面将详细介绍。
一、结构体的定义在C语言中,我们可以通过关键字struct来定义结构体。
结构体的定义通常包含在函数外部,以便在整个程序中都可以使用。
下面是一个简单的结构体定义的示例:```struct Student {char name[20];int age;float score;};```在上面的示例中,我们定义了一个名为Student的结构体,它包含了三个成员变量:name、age和score。
name是一个字符数组,age是一个整数,score是一个浮点数。
二、结构体的使用定义结构体之后,我们可以通过以下两种方式来使用结构体:1. 声明结构体变量我们可以通过声明结构体变量的方式来使用结构体。
下面是一个示例:```struct Student stu1;```在上面的示例中,我们声明了一个名为stu1的结构体变量,它的类型是Student。
2. 访问结构体成员我们可以使用点运算符来访问结构体的成员变量。
下面是一个示例:```strcpy(, "Tom");stu1.age = 18;stu1.score = 95.5;```在上面的示例中,我们使用strcpy函数将字符串"Tom"复制给了stu1的name 成员变量,使用赋值运算符将整数18赋给了stu1的age成员变量,使用赋值运算符将浮点数95.5赋给了stu1的score成员变量。
三、结构体的初始化我们可以在声明结构体变量的同时对其进行初始化。
下面是一个示例:```struct Student stu2 = {"Jerry", 20, 90.0};```在上面的示例中,我们声明了一个名为stu2的结构体变量,并对其进行了初始化。
C语言程序设计-杨路明第9章课件
9.3.3 结构体数组的使用
(3) 不能把结构体数组元素作为一个整体直接进行输入或输出,只能以单个成 员对象进行输入输出。例如:
/*学号*/
char name[20]; /*姓名*/
char sex;
/*性别*/
int age;
/*年龄*/
float score;
/*C成绩*/
char addr[40];
};
注:‘;’不能省
结构体类型定义描述结构 的组织形式,不分配内存
9.1 结构体类型的定义
例如,考虑10门课程成绩, 加上总成绩与平均成绩,可作如下定义:
struct是关键字,不能省略
struct
[结构体类型名] {
成员说明列表: ……….
}
成员类型可以是 基本型或构造型
9.1 结构体类型的定义
实例:定义结构体类型,描述下列数据 (1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、C语言课程成绩,地址:
struct student
{ int num;
输出stud变量,应该使用如下方式:
应该如何输出stud变量?
printf(″%s,%s,%ld\n″,,stud.addr,stud.num); 输入stud变量的各成员值,则用:
scanf(″%s%s%ld″,,stud.addr,&stud.num);
9.3 结构体类型数组
9.4.2 指向结构体数组元素的指针
C语言第9章结构体、共用体、枚举
结构体变量.成员
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语言中一种自定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个具有自定义属性和特性的数据结构。
结构体的定义和输入是使用结构体的基本操作,它们是结构体的核心概念,也是我们使用结构体进行编程的基础。
本文将围绕结构体的定义和输入展开详细的阐述。
一、结构体的定义结构体的定义是指给结构体类型命名,并描述它的成员。
结构体的定义通常放在函数外部,在全局范围内声明。
结构体的定义由关键字"struct"、结构体名称和花括号括起来的成员列表组成。
每个成员由类型和名称组成,成员之间用分号分隔。
下面是一个示例:```struct Student{char name[20];int age;float score;};```在这个示例中,我们定义了一个名为Student的结构体,它有三个成员:name、age和score。
name是一个字符数组,用来存储学生的姓名;age是一个整型变量,用来存储学生的年龄;score是一个浮点型变量,用来存储学生的成绩。
二、结构体的输入结构体的输入是指为结构体变量的每个成员赋值。
结构体变量是根据结构体类型定义的变量,用来存储结构体的实际数据。
结构体的输入通常在函数内部进行,可以通过直接赋值或者使用scanf函数来实现。
下面是两种常见的结构体输入方式:1.直接赋值直接赋值是指通过点运算符(.)为结构体的每个成员赋值。
例如:```struct Student stu;strcpy(,"Tom");stu.age=18;stu.score=90.5;```在这个示例中,我们定义了一个名为stu的结构体变量,并为它的成员赋值。
通过strcpy函数将字符串"Tom"赋值给,将整数18赋值给stu.age,将浮点数90.5赋值给stu.score。
2.使用scanf函数使用scanf函数可以从标准输入设备(通常是键盘)获取用户输入的数据,并为结构体的每个成员赋值。
C语言_实验九、结构体程序设计
实验九、结构体程序设计一、实验目的1.掌握结构、结构数组、结构指针的定义及使用;2.掌握简单的链表的定义及使用;3.掌握共用体和枚举类型的定义及使用;4.掌握文件的简单的定义、打开、写、关闭等操作。
二、实验内容1.[题目内容]某考点建立一个考生人员情况登记表、表格内容如下:1)根据上表正确定义该表格内容要求的数据类型。
2)分别输入各成员项数据,并打印输出(为简便,假设有3个考生)编程序,然后上机调试运行程序。
2.[题目内容]某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
3.[题目内容]设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。
4.[题目内容]定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。
编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。
5.[题目内容]利用上一题的结构类型,创建包含10个结点的无序链表。
编写5个函数分别实现下述功能(参考前面第三部分内容):(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩排序。
三、课后作业(写实验报告)1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。
从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。
(1)定义学生结构体。
(2)用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。
C语言程序设计第9单元
9.3 结构体指针
*(结构体指针变量).成员名 (*p).sno=20160101; (*p).name="李磊"; (*p).grade[0]=90; 结构体指针变量->.成员名 p->.sno=20160101; p->. name="李磊"; p->. grade[0]=90;
9.3 结构体指针
9.1 结构体类型 9.1.4 结构体变量的引用
9.1.4 结构体变量的引用
如何引用结构体变量中的一个成员,其语法结构是:
结构体变量名.成员名 【例】 stu1.sno=20160101;
="李磊";
stu1.classname="软件16级1班"; stu1.grade[0]=90;
【例】要求通过键盘输入一个学生信息,并且输出这个学生的 所有信息。(用指针变量引用结构体变量的成员。)
9.4 结构体与函数
9.4 三种:
结构体变量作为函数参数
结构体指针作为函数参数 函数的返回值是结构体类型。
#include <stdio.h> struct student { int sno; char name[20]; double grade[3]; }; void showStuInfo(struct student stu) 值传递 { printf("学号:%d\n",stu.sno); printf("姓名:%s\n",); printf("课程1:%lf\n",stu.grade[0]); printf("课程2:%lf\n",stu.grade[1]); printf("课程3:%lf\n",stu.grade[2]); } int main() { struct student stu1={20160101,"李磊",{90,85,80}}; showStuInfo(stu1); return 0; }
《C语言程序设计》 课后习题答案 高等教育出版社
《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。
其特点包括语法简洁、执行效率高、可移植性强等。
第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。
整型可以进一步细分为有符号整型和无符号整型。
第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。
这些运算符用于执行各种数学和逻辑操作。
第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。
if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。
第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。
函数定义包括函数返回类型、函数名、参数列表和函数体等部分。
第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。
C语言中可以使用数组来存储和操作大量数据。
第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。
通过指针,可以直接访问和修改对应内存地址中的数据。
第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。
C语言通过字符数组来表示和操作字符串。
第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。
第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。
C语言提供了一系列函数来实现文件的读写操作。
总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。
希望本文对读者有所帮助。
第9章C语言程序设计
9.1位运算符
例9.2 按位或程序举例 main() { int a=9,b=5,c; c=a|b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); } 运行结果:
9.1位运算符
9.1.3 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数 各对应的二进位相异或,当两对应的二进位相异时,结果为1。参 与运算数仍以补码出现,例如9^5可写成算式如下: 00001001 ^00000101 00001100 (十进制为12) 9^5结果为12。按位异或通常用来: (1)与0异或,可以保留原值不变。如10^0 00001010 ^ 00000000 00001010
00001001 &00000101 00000001
按位与运算通常用来对某些位清0或保留某些位。例如即想让 某一个字节或多个字节中的位为0。例如:00001001(十进制9) 只要找到这样的数00000110、11110110、00000000等都可以, 即只要和要清零数中每一个二进制位相反即可,或者某一位二进制 位为0和0与结果也是0。
9.1位运算符
9.1.4求反运算
求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算 的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110。
9.1位运算符
9.1.5 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算 数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数, 高位丢弃,低位补0。例如: a<<2 指把a的各二进位向左移动2位。 如a=2,十进制00000010,左移2位后为00001000 (十进制8)。 高位左移,低位补0。并且左移一位相当于乘以2的运算,左移两位 相当于乘以4即22。 例9.4 左移程序举例 main() { int a=2; a=a<<2; printf(“a=%d\n”,a); } 运算结果:
(完整版)C语言程序设计第四版第九章答案谭浩强
The shortest way to do many things is
average=0; max=0; maxi=0; for(i=0;i<3;i++) {sum=0; for(j=0;j<3;j++)
sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if(sum>max) {max=sum; maxi=I; } } average/=N; printf(“NO. name score1 score2 score3 average\n”); for(I=0;I<N;I++) {printf(“%5s%10s”,stu[i].num, stu[i].name); for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]); printf(“%8.2f\n”,stu[i].avr); } printf(“average=%6.2f\n”,average); printf(“The highest score is:%s,score total:%d.”stu[maxi].name,max); } 9.6 编写一个函数 new,对 n 个字符开辟连续的存储空间,此函数应返回一个指针,指向字 符串开始的空间。New(n)表示分配 n 个字节的内存空间。 解:new 函数如下: #define NULL 0 #define NEWSIZE 1000 char newbuf[NEWSIZE]; char *newp=newbuf; char *new(int n) {if (newp+n<=newbuf+ NEWSIZE)
c程序设计(第2版)谭浩强
c程序设计(第2版)谭浩强C程序设计(第2版)是谭浩强教授编写的一本C语言程序设计教材,它以通俗易懂的语言和丰富的实例,为初学者提供了一个学习C语言的良好平台。
本书适合作为高等院校计算机专业或相关专业的教材,同时也适合自学者使用。
第一章:C语言概述本章主要介绍了C语言的发展历程、特点和应用领域。
C语言以其高效性、灵活性和强大的功能,在操作系统、嵌入式系统、高性能计算等领域有着广泛的应用。
谭浩强教授通过对比C语言与其他编程语言的特点,帮助读者建立对C语言的基本认识。
第二章:C语言程序的构成在本章中,作者详细解释了C语言程序的基本结构,包括预处理指令、函数、变量声明和语句等。
通过实例演示了如何编写一个简单的C程序,并介绍了编译和链接的过程。
第三章:数据类型、运算符和表达式本章深入探讨了C语言中的数据类型,包括整型、浮点型、字符型等,以及它们在内存中的存储方式。
同时,介绍了C语言中的运算符,如算术运算符、关系运算符、逻辑运算符等,以及它们的优先级和结合性。
第四章:控制语句控制语句是程序设计中的重要组成部分,本章讲解了C语言中的三种基本控制结构:顺序结构、选择结构和循环结构。
通过大量的实例代码,帮助读者理解如何使用if、switch、for、while和do-while等语句来控制程序流程。
第五章:数组数组是C语言中一种重要的数据结构,用于存储具有相同类型的多个数据项。
本章详细介绍了一维数组和二维数组的定义、初始化和使用,以及数组在程序设计中的应用。
第六章:指针指针是C语言中的核心概念之一,它允许程序员直接操作内存地址。
本章讲解了指针的基本概念、指针的声明、指针与数组的关系,以及指针在函数中的应用。
第七章:函数函数是C语言中实现模块化编程的基本单位。
本章详细介绍了函数的定义、声明、调用以及参数传递机制。
同时,探讨了递归函数和指针函数等高级主题。
第八章:预处理指令预处理指令是C语言提供的一组特殊指令,用于在编译之前对源代码进行预处理。
C语言程序设计-结构体
struct student {
char name[20]; float math; float physics; float english; float aver; float count; }; … struct student s={“王军”,84,88,71,81,243};
结构体变量的引用
3. 如果是嵌套定义,用若干个
char publisher[40]; struct date pub_date; int pages; float price;
成员运算符,一级一级地找 } ebook,mbook;
到最低的一级成员
ebook.pages=200;
ebook.pub_date.month ebook.pub_date.year ebook.pub_date.day
相关的数据组织起来, {
作为一个整体(集合)。
char name[20]; float math;
• 结构体的定义:
float physics;
struct 结构体名
成员 {
列表
数据类型 成员1;
float english; float aver; float count; };
struct book {
结构体变量的引用
• 结构体整体引用
– 在程序中可以使用结构体指针或结构体名完成结构体 变量的整体引用
struct student {
char name[20]; float math; float physics; float english; float aver; float count; };
name
name
publisher
Math
C语言结构体习题及答案
第9章结构体1.定义以下结构体类型struct s{int a;char b;float f;};则语句printf("%d",sizeof(struct s))的输出结果为【】。
A) 3 B) 7 C) 6 D) 42.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量B)结构中第一个成员所需的内存容量C)结构体中占内存容量最大者所需的容量D)结构中各成员所需内存容量之和3.定义以下结构体类型struct s{ int x;float f;}a[3];语句printf("%d",sizeof(a))的输出结果为【】A) 4 B) 12 C) 18 D) 6 7.定义以下结构体类型struct student{char name[10];int score[50];float average;}stud1;则stud1占用内存的字节数是【】。
A) 64 B) 114 C) 228 D) 79、设有一结构体类型变量定义如下:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;} person;若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A. year=1976B. birthday.year=1976C. person.birthday.year=1976D. person.year=19761、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。
struct abc s1,s2;则会发生的情况是______。
A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错。
C语言 结构体
}
第六页,编辑于星期三:五点 四十五分。
9.1.2 结构的概念与定义
结构与数组比较:
使用结构来表示学生信息: •都是构造类型,是多个变量
struct student{
的集合
int num;
/* 学号 */
•数组成员类型相同,结构成
char name[10];
/* 姓名 */ 员类型不同
int computer, english, math; /* 三门课程成绩 */
第二十二页,编辑于星期三:五点 四十五分。
9.2.2 结构数组操作
结构数组的初始化
struct student students[50] = { { 101,"zhang", 76, 85, 78 }, {102, "wang", 83,
92, 86} };
students[0] 101 Zhang 76 85 78
struct student{
int num;
/* 学号 */
char name[10];
/* 姓名 */
int computer, english, math; /* 三门课程成绩 */
double average;
/* 个人平均成绩 */
};
struct student s1,s2;
第十二页,编辑于星期三:五点 四十五分。
int main(void)
{ int course, i, n, num, pos, score;
struct student students[50]; /* 定义结构数组 */ … /* 输入n个学生信息 */
在我们的实际生活中,一个较大的实体可能由多个成 员构成,而这些成员中有些又有可能是由一些更小的 成员构成。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、概念题二、判断题1. 结构体中的成员不可以单独使用(F)。
2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T)。
3. 不能将一个结构体变量作为一个整体进行输入输出(T)。
4. 结构体变量所占内存长度是各成员占的内存长度之和(T)。
5. 结构体中的成员不可以单独使用(F )。
9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T)。
10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T )。
三、单选题1. 设变量定义如下,则对其中的结构分量num正确的引用是( )。
struct student {int num ;char name[20];float score;} stud[10];A. stud[1].num=10;B. student.stud.num=10;C. struct.stud.num=10;D. struct student.num=10;2. 已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是()。
struct worker{int no;char name[20];char sex;struct birth{ int day; int month; int year;}a;};struct worker w;A day=25;month=10;year=1993;B w.birth.day=25; w.birth.month=10; w.birth.year=1993;C w.day=25; w.month=10; w.year=1993;D w.a.day=25; w.a.month=10; w.a.year=1993;3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。
struct node {float x,y;char s[10];} point={1,2,”abc”},*p;A. *p=point;B. p=&point;C. point=p;D. p->x=point.y;4. 设有以下语句typedef struct S{ int g;char h;} T;则下面叙述中正确的是()。
A. 用S定义结构体变量B. 可以用T定义结构体变量C. S是struct类型的变量D. T是struct S类型的变量5. 设有如下说明typedef struct na{ int n; char c; double x;}STD;则以下选项中,能正确定义结构体数组并赋初值的语句是()。
A. STD tt[2]={{1,'A',62},{2, 'B',75}};B. STD tt[2]={{1,"A",62},2, "B",75};C. struct tt[2]={{1, 'A'},{2, 'B'}};D. struct tt[2]={{1,"A",62.5},{2, "B",75.0}};6. 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是()。
A. typedef STP char *s;B. typedef *char STP;C. typedef stp *char;D. typedef char* STP;7. 设有如下定义:struct ss{ char name[10];int age;char sex;}std[3],*p=std;下面各输入语句中错误的是()。
A. scanf("%d",&(*p). age);B. scanf("%s",&std.n ame);C. scanf("%c",&std[0].sex)D. scanf("%c",&(p-> sex));8. 以下程序执行后输出结果是()。
main(){ union { unsigned int n;unsigned char c;}u1ul.c=’A’;printf("%c\n",u1.n);}A. 产生语法错B. 随机值C. AD. 65四、程序填空题1. 运行以下程序将打印出如下结果:#define NULL 0struct person{ char *nam;char sex;struct person *next;};main(){ struct person a,b,c,d,*head,*s;a.nam="Li ming"; a.sex='W';b.nam="Hang kai"; b.sex='M';c.nam="Liu fei"; c.sex='M';d.nam="Fang ke"; d.sex='W'【1】 ;head=&a;a.next= &b 【2】 ;b.next= &d 【3】 ;d.next=NULL;s=head;do{printf("%s :【4】%c \n",s->nam,s->sex);s=s->next;}while(s!=NULL);}2. 以下程序中给指针p 分配三个double 型动态内存单元,请填空。
# include <stdlib.h>main ( ){ double *p;p=(double *) malloc(sizeof(double)【1】);p[0]=1.5;p[1]=2.5;p[2]=3.5;printf("%f%f%f\n",p[0],p[1],p[2]);}3. 已知结构数组person 中存有N 个人员的姓名和年龄,以下程序的功能为输出数组中最大者的姓名和年龄。
请填空:#define N 3struct man{char name[20];int age;};struct man find(struct man *p ,int n){struct man *q;int i;q=p;Li ming: W Hang kai: M Fang ke: Wfor(i=0;i<n;i++){if( p->age>q->age【5】)q=p;p++;}return q;}main(){ struct man *p, *q;struct man person[N]={“zhang”,27,”li”,18,”wang”,73};p=person;q= find(p,N)【6】;printf(“年龄最大者为:%s,其年龄为:%d\n”,q->name, q->age【7】)}4.已知head指向一个带头结点的链表,链表中每个结点包含整型数据域(data)和指向链表结点的指针域(next),以下函数返回链表中所有结点数据域之和,请填空:struct list{ int data;struct list *next;};main(){struct list *head;int s;s=sum(head);}sum( struct list *h 【5】){struct list *p;int s=0;p=h->next;while(p!=NULL){s= p->data【6】;p= p->next 【7】;}return s;}5.下列程序读入时间数值,将其加1秒后,输出,时间格式为hh:mm:ss,即时:分:秒。
当小时等于24小时,置为0。
#include<stdio.h>struct{int hour;int minute;int second;}time;main(){scanf(“%d:%d:%d”, &time.hour,&time.minute,&time.second【1】); time.second++;if(【2】time.second ==60){time.minute++;【3】time.second=0;if(time.minute==60){time.hour++;time.minute=0;if(time.hour==24)time.hour=0;}}printf(“%d:%d:%d\n”,time.hour,time.minute,time.second);}6.下列函数用于将链表中各结点的数据依次输出。
请填空:struct student{int data;struct student *next;}void out(struct student *head){【8】struct student *p;p=head;if(head!=NULL)do{printf(“%d\n”,p->data);【9】p=p->next;}while(【10】p!=NULL);}五、程序阅读题1. 以下程序执行后输出结果:struct STU{ char name[10];int num; };void f1(struct STU c){ struct STU b={"LiSiGuo",2042};c=b;}void f2(struct STU *c){ struct STU b={"SunDan",2044};*c=b;}main( ){ struct STU a={"YangSan",2041},b={"WangYin",2043};f1(a);f2(&b);printf("%d %d\n",a.num,b.num);}2041 20442. 以下程序执行后输出结果是:struct STU{ char name[10];int num;int Score;};main( ){ struct STU s[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},{"wangYin",20043,680},{"SunDan",20044,550},{"Penghua",20045,537}},*p[5],*t;int i,j;for(i=0;i<5;i++) p[i]=&s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(p[i]->Score>p[j]->Score){ t=p[i];p[i]=p[j];p[j]=t;}printf("5d %d\n",s[1].Score,p[1]->Score);}580 5503. 以下程序的运行结果是:。