第7章 结构体习题正

合集下载

C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

教材课后题答案-第7章

教材课后题答案-第7章

习题7一 单选题1.设有如下定义,则表达式sizeof(y)的值是【 】。

struct data {long *ln; char c;struct data *last,*next; }y; A.7 B.9 C.13 D.17 【答案】C【解析】指针变量在内存中占用4个字节,所以sizeof(y)的值是4+1+4+4=13 2.设有以下程序段,则表达式的值不为100的是【 】。

struct st{int a;int *b;}; void main(){int m1[]={10,100},m2[]={100,200}; struct st *p,x[]={99,m1,100,m2}; p=x; ... }A.*(++p->b)B.(++p)->aC.++p->aD.(++p)->b 【答案】D【解析】根据题意,p 指向x 数组,x[0]的b 成员指向m1数组,x[1]的b 成员指向m2数组,如图7-1所示。

选项A 中p->b 指向m1[0],通过“++”运算p->b 指向m1[1],所以选项A 的表达式的值为100。

选项B 中++p 使p 指向x[1],x[1]的a 成员的值是100。

选项C 中p 指向x[0],x[0]的a 成员做“++”运算,结果为100。

选项D 中++p 使p 指向x[1],x[1]的b 成员的值是指针,所以选择选项D 。

m1m2p图7-13.设有以下定义,且如图7-2所示,指针head 和p 指向链表的第一个结点,指针q 指向新的结点,则不能把新结点插入在第一个结点之前的语句是【 】。

headpq图7-2struct node{int a;struct node *next;}*head,*p,*q;A.head=q,q->next=p;B.head=q,q->next=head;C.q->next=head,head=q;D.head=q,head->next=p;【答案】B4.设有如下结构体说明和变量定义,且如图7-3所示,指针p指向变量one,指针q指向变量two,则不能将结点two接到结点one之后的语句是【】。

习题解答(第七章)

习题解答(第七章)
struct date birthday;
};
7.5有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),三门课成绩(score[3])。
(1)要求在main函数中输入这几个学生的数据,然后调用一个函数count,在该函数中计算出每个学生的总分和平均分,然后打印出所有各项数据(包括原有的和新求出的)。
}
7.7建立一个链表,每个节点包含的成员为:职工号、工资。
(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据。然后把这些节点的数据打印出来。要求用函数creat来建立链表,用list函数来输出数据。这5个职工的号码为0601,0603,0605,0607,0609。
printf("工龄: ");
a[i].ls=atoi(gets(numstr));
printf("工资: ");
a[i].wage=atof(gets(numstr));
printf("地址: ");
gets(a[i].addr);
}
printf("职工号职工名性别年龄工龄工资地址\n");
for(i=0; i<N; i++)
{
printf("请输入第%d个学生的记录:\n", i);
gets(numstr); student[i].num=atol(numstr);
gets(student[i].name);
student[i].sex=getchar(); getchar();
gets(numstr); student[i].age=atoi(numstr);

第七章 数组

第七章  数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。

C语言第7章_文件及应用

C语言第7章_文件及应用

精选ppt课件
16
7.2.2 用于文件操作的函数
2.文件的读写函数
1)字符读写函数:
int fputc ( int ch, FILE *fp); int fgetc(FILE *fp);
2)串读写函数
int fputs(const char *str, FILE *fp); char *fgets(char *str,int length,FILE *fp);
cchh=agretachd(d);r[20];
} sitf;(ch=='e' || ch=='E' ) break;
}i;f ((fp=fopen("mail","w"))==NULL)
f{close(fp);}
printf("file open failed!!!\n");exit(精0)选; ppt课件
21
}
7.2.2 用于文件操作的函数 /* 功 能: 建立一个学生通讯录的数据库文件*/
/* 说 明: 使用块写入函数fwrite()*/
#m{ inawcinlhu(i)dlee(1【录")std。例io.7h."15】如例7.11,用块写函数来建立学生通讯
FIL{E p*rfipn;tf("姓名:"); scanf("%s",);
返回值为指向此文件的指针,以后使用。 如果打开失败,返回值为NULL。
精选ppt课件
15
7.2.2 用于文件操作的函数
1.文件的打开与关闭函数
2)关闭文件 函数fclose()关闭由fopen()函数打开的流。 fclose()函数把遗留在缓冲区的数据写入文 件,实施操作系统级的关闭操作。同时释 放与流联系的文件控制块。

C程序设计(第四版)第7章结构体与共用体

C程序设计(第四版)第7章结构体与共用体

7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;

第7章 结构体和联合体数据类型

第7章  结构体和联合体数据类型

结构体数组

结构体数组元素的使用




通过操作数组的每一个元素达到操作数组的目的。结构体 数组元素需要用下标变量的形式表示。 结构体数组元素就相当于一个结构体变量,将引用数组元 素的方法和引用结构体变量的方法结合起来就形成了引用 结构体数组元素成员分量的方法,其一般形式为: 数组名[下标].成员名 不能将结构体数组元素作为一个整体直接进行输入输出, 也需要通过输入输出数组元素的每一个成员分量达到输入 输出结构体数组元素的目的。 可以将结构体数组元素作为一个整体赋给同类型数组的另 外一个元素,或赋给一个同类型的结构体变量。
Ex0707 结构体数组操作(数组元素引用、数组元素的输入输出)示例。
结构体数组

结构体数组作函数的参数



在函数调用期间实参结构体数组将它的全部存储区域或者 部分存储区域提供给形参结构体数组共享。 如果需要把整个实参结构体数组传递给被调函数中的形参 结构体数组,可以使用实参结构体数组的名字或者实参结 构体数组第一个元素(0号元素)的地址。 如果需要把实参结构体数组中从某个元素值后的部分传递 给被调函数中的形参结构体数组,则使用实参结构体数组 某个元素的地址。
Ex0704 结构体变量的输入/输出示例。
结构体类型的定义和使用

结构体变量的使用——做函数参数



结构体类型变量和结构体类型变量的成员都可以作为函数 的参数在函数间进行传递,数据的传递仍然是“值传递方 式”。 使用结构体类型变量作为函数参数时,被调函数的形参和 主调函数的实参都是结构体类型的变量,而且属于同一个 结构体类型。 使用结构体类型变量的成员作为函数参数时,其中被调函 数中的形参是普通变量,而主调函数中的实参是结构体类 型变量中的一个成员,并且形参和实参的数据类型应该对 应一致。

C语言习题答案1-7章

C语言习题答案1-7章

程序设计基础(C语言版)习题第01章绪论一.选择题1.以下叙述中正确的是________。

A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整参考答案:D【解析】程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。

所以选项A)、B)、C)说法都不完整。

2.以下关于简单程序设计的步骤和顺序的说法中正确的是。

A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构参考答案:B【解析】设计一个能解决实际问题的计算机程序需要经过以下几个过程:①建立模型。

②算法设计:给出解决问题的步骤,即算法。

③算法表达:选择一种表达算法的工具,对算法进行清晰的表达。

④编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。

⑤程序调试:对编写好的程序进行调试,修改程序中的错误。

⑥程序文档编写与程序维护。

综上所述,B)选项是符合上述描述的,其他选项不恰当。

3.以下叙述中正确的是________。

A)C程序的基本组成单位是语句B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束D)C语句必须在一行内写完参考答案:C【解析】函数是C程序的基本组成单位;C语言书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。

故本题答案为C)。

4.以下叙述中正确的是。

A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中参考答案:C【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误。

CH7-自定义类型练习题及答案

CH7-自定义类型练习题及答案
2、下面程序的运行结果是()
fun(int **a,int p[2][3])
{**a=p[1][1];}
main()
{int x[2][3]={2,4,6,8,10,12},*p;p=(int *)malloc(sizeof(int));fun(&p,x);printf("%d\n",*p);}
A)10 B)12 C)6 D)8
A)用typedef可以定义各种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符来代表
D)用typedef有利于程序的通用和移植
10、有以下定义和语句,则以下引用形式不合法的是()。
struct s
{ int i1; struct s *i2,*i0;};
this=this->next;
}while(this!=NULL);
endif
}
}
插入
struct work *insert( struct work * head ,long x,float y )
{ struct work * this ,*new,* fro;
new=(struct work*) malloc( sizeof(struct work));
main()
{ p=a; printf("%d",++p->x); printf("%d",(++p)->x); printf("%d\n",++(*p->y));}
A)50,20,20 B)50,20,21 C)51,60,21 D)51,60,31

第7章结构体、联合体和枚举类型 1

第7章结构体、联合体和枚举类型 1

第7章结构体、联合体和枚举类型第 7 章(42) 有以下程序#include "stdio.h"struct s{ int x,y;} data[2]={10,100,20,200};main (){ struct s *p=data;printf("%d\n",++(p->x));}程序运行后的输出结果是【B 】A) 10 B)11C) 20 D)21 (44) 以下程序的输出结果是#include "stdio.h"struct HAR{ int x, y; struct HAR *p;} h[2];main(){ h[0],x=1;h[0];y=2;h[1],x=3;h[1];y=4;h[0],p=&h[1],p=h;p rintf(“%d %d \n”,(h[0],p)->x,(h[1],p)->y);}A) 12 B) 23 C) 14 D) 32(43) 以下程序的输出结果是#include "stdio.h"amovep(int p, int (a)[3],int n){ int i, j;for( i=0;i<;i++)for(j=0;j<n;j++){ *p=a[i][j];p++; }}main(){ int *p,a[3][3]={{1,3,5},{2,4,6}};p=(int *)malloc(100);amovep(p,a,3);printf(“%d %d \n”,p[2],p[5]);free(p);}A) 56B) 25 C) 34 D) 程序错误(36) 设有以下说明语句struct ex{ int x ; float y; char z ;} example;则下面的叙述中不正确的是A) struct结构体类型的关键字B) example是结构体类型名C) x,y,z都是结构体成员名D) struct ex是结构体类型(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是A) auto和 static B) auto和 registerC) register和 static D) extern和 register(30) 有以下程序#inc1ude <stdio.h>main(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0B) 1 C) -1 D) NULL没定义,出错(33) 以下选项中不能正确把c1定义成结构体变量的是A) typedef struct B) struct color cl{ int red; { int red;int green; int gree n;int blue; int blue;} COLOR; };COLOR cl;C) struct color D) struct{ int red; { int red;int green; int green;int blue; int blue;} c l; } c l ;(44) 有以下程序struct STU{ char num[10]; float score[3]; };main(){ struct stu s[3]={{“20021”,90,95,85},{“20022”,95,80,75},{“20023”,100,95,90}},*p=s;int i; float sum=0;for(i=0;i<3,i++)sum=sum+p->score[i];printf(“%6.2f\n”,sum);}程序运行后的输出结果是A) 260.00 B) 270.00C) 280.00 D) 285.00(45) 设有如下定义:struck sk{ int a;float b;}data;int *p;若要使P指向data中的a域,正确的赋值语句是A) p=&a; B) p=data.a; C) p=&data.a;D) *p=data.a;(46) 有以下程序#include <stdlib.h>struct NODE{ int num; struct NODE *next; };main(){ struct NODE *p,*Q,*R;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf(“%d\n”,p->num+q->next->num);}程序运行后的输出结果是A) 10 B) 20 C) 30 D) 40(47) 若有以下说明和定义typedef int *INTEGER;INTEGER p,*q;以下叙述正确的是A) P是int型变量B) p是基类型为int的指针变量C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名(49) 有以下程序#include <stdlib.h>main(){ char *p,*q;p=(char*)malloc(sizeof(char)*20); q=p;scanf(“%s%s”,p,q); printf(“%s%s\n”,p,q);}若从键盘输入:abc def<回车>,则输出结果是:A) def def B) abc def C) abc d D) d d(49) 若以下定义:struct link{ int data;struck link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构:a bdata next data next┌──┬──┐┌──┬──┐│ 5 │┼──→│ 9 │ \0 │└──┴──┘└──┴──┘↑pcdata next┌──┬──┐│ 7 ││└──┴──┘↑q指针p指向变量a,q指向变量c。

第七章框架-剪力墙结构在水平荷载下的近似计算方法

第七章框架-剪力墙结构在水平荷载下的近似计算方法

第七章 框架-剪力墙结构在水平荷载下的近似计算方法 本章导学框架:剪力墙结构是由框架和剪力墙组成的一种复合结构体系,它兼 具框架结构和剪力墙结构的优点,因而成为高层建筑的主要结构体 系。

在水平荷载作用下,因为框架与剪力墙的变形性质不同,不能 直接把总水平剪力按抗侧刚度的比例分配到每榀结构上,而是必须 采用协同工作方法求得侧移和各自的水平层剪力及内力。

框架­剪力墙结构计算的近似方法是将结构分解成平面结构单元,它适用 于比较规则的结构,而且只能计算平移时的剪力分配,如果有扭转 ,要单独进行扭转计算,再将两部分内力叠加。

这种方法概念清楚 ,结果的规律性较好。

本章主要学习框架:剪力墙结构计算的近似方法,学习中要求同学们熟练掌握协同 工作方法的两种计算简图,熟练掌握铰接体系和刚接体系的计算方 法的区别与联系。

知识学习第一节 概述一.基本假定框剪结构体系在水平荷载作用下的内力分析是一个三维空间超 静定问题,通常把它简化为平面结构来计算,并在结构分析中作如 下基本假定:①楼板在自身平面内刚度无限大。

这一假定保证楼板将整个计 算区段内的框架和剪力墙连成一个整体,在水平荷载作用下,框架 和剪力墙之间不产生相对位移。

②当结构体型规则、剪力墙布置比较对称均匀时,结构在水平 荷载作用下不计扭转的影响;否则应考虑扭转的影响。

③不考虑剪力墙和框架柱的轴向变形及基础转动的影响。

④结构为线弹性结构。

二.计算简图用连续化解法求总剪力墙与总框架之间的相互作用力,都要解 决如何合并总剪力墙、总框架,以及确定总剪力墙和总框架之间的 连接和相互作用关系,以便于确定计算简图。

框剪结构用连续化方 法求解时,根据连杆刚度情况可以确定两种计算简图:铰接体系和 刚接体系。

1.铰接体系在基本假定的前提下,计算区段内结构在水平荷载作用下,处 于同一楼面标高处各片剪力墙及框架的水平位移相同。

此时可把平 行于水平荷载作用方向的所有剪力墙综合在一起成总剪力墙(一般 简化为整体墙),把平行于水平荷载作用方向的所有框架综合在一 起成总框架。

C++课件 第七章 结构体、共同体和枚举

C++课件 第七章 结构体、共同体和枚举
了解如何根据实际需求选 择适当的数据类型,灵活 应用于各种编程场景。
总结
我们深入学习了C++中的结构体、共同体和枚举,并了解了它们的定义、使用和区别。通过此章的学习,我们 掌握了更多编程的技巧和灵活性。
练习题
Question 1
如何定义一个包含姓名、年龄和分数的结构体?
Question 2
请解释什么是枚举类型,它与结构体的区别是什么?
成员的访问和赋值
学习如何通过结构体变量访问和赋值结构体的成员。
结构体数组与共同体
结构体数组
掌握如何定义和使用结构体数组,处理多个结构体 对象的同时。
共ห้องสมุดไป่ตู้体
学习共通体的定义和使用,可以在同一内存地址存 储不同类型的数据。
枚举类型
1
定义和使用
了解如何定义和使用枚举类型,使用符
枚举成员
2
号常量表示一组相关的常量值。
学习如何使用枚举成员,为常量赋予更
加直观的语义。
3
枚举的好处
了解枚举类型在代码编写和代码可读性 方面的优势。
结构体、共同体和枚举的区别和联系
1 区别
详细探讨结构体、共同体 和枚举之间的差异,如内 存分配方式和使用场景。
2 联系
强调结构体、共同体和枚 举的共同点,如都是用于 数据类型的封装和组织。
3 灵活性和应用
参考资料
C++结构体和共同体
此篇文章说明了C++中如何定义和使用结构体和 共同体。
C++枚举类型
了解C++中枚举类型的定义和学习,学习枚举的 使用场景。
C++课件 第七章 结构体、 共同体和枚举

C语言习题 结构体和杂类(答案)

C语言习题 结构体和杂类(答案)

第十章结构体和杂类一. 选择题1. 如下说明语句,则下面叙述不正确的是(C)。

struct stu { int a ; float b ;} stutype;A.struct是结构体类型的关键字B.struct stu是用户定义结构体类型C. stutype是用户定义的结构体类型名(变量名)D. a和b都是结构体成员名2. 在16位PC机中,若有定义:struct data { int i ; char ch; doublef; } b ; 则结构变量b占用内存的字节数是(D)。

A.1B.2C.8D.113. 设有定义语句:enum t1 {a1, a2 = 7, a3, a4 = 15} time;则枚举常量a2和a3的值分别为(D)。

A. 1和2B. 2和3C. 7和2D. 7和84. 以下程序的输出结果是( D )。

union myun { struct { int x, y, z; } u; int k; } a;main( ){ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;printf(" %d\n",a.u.x); }A. 4B. 5C. 6D. 05. 当定义一个共用体变量时,系统分配给它的内存是( C )。

A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大的容量D.结构中最后一个成员所需内存量6. 若有以下程序段:union data { int i ; char c; float f;} a;int n;则以下语句正确的是( C )。

A.a=5;B.a={2,’a’,1.2}C.printf(“%d”,a);D.n=a;7. 设struct {int a; char b; } Q, *p=&Q;错误的表达式是( d )。

A.Q.aB.(*p).bC.p->aD.*p.b9. 以下对C语言中共用体类型数据的叙述正确的是( c )。

C语言讲义第07章-结构体与其他构造数据类型(原)

C语言讲义第07章-结构体与其他构造数据类型(原)

atoi(char*str);将数字字符串转换为整型。
atof(char*str);将数字字符串转换为双精度的 实型。 atol(char*str);将数字字串转换长整型。 使用上述函数,要包含头文件"stdlib.h"。
7.1 结构体
• 例7-1类型转换函数在结构体变量数据输 入中的应用示例。定义结构体类型及变 量,输入一个学生的有关信息并输出。 例7-1源程序
7.1 结构体
结构体变量一旦进入其作用域,系统便根据结构体类 型定义时成员排列的先后,自动为结构体变量的每一 个成员分配相应的存储空间。结构体变量的各个成员 均有自己的存储空间,结构体变量所占存储空间的大 小为各成员所占空间之和。 例如:student1 所占空间大小为:8 + 10 + 1+ 4 * 2 = 27(字节)。
例如:指针变量p1,p2指向结构体变量x。
p1 = p2 = &x; 例如:通过结构体指针p1和p2来引用结构体变量x成员。以下三种 方式是等价的。 x.no、、x.score[0] p1->no、p1->name、p1->score[0]
(*p2).no、(*p2).name、(*p2).score[0]
7.2 结构体数组的定义和引用
• 结构体数组的输入与输出一般在循环结构中进行, 一次循环可以输入或输出一条结构体记录。 • 例7-3定义一个结构体数组用于存储和显示三个学 生的基本信息。
例7-3源程序
• 程序运行结果如下:
no. 06030217 06050105 06010116 name zhang san li si wang wu sex m m f age 19 18 18 depart Economy & Commerce engineering Computer science

第7章 (PLASMA)

第7章 (PLASMA)

7.2.1 结构体变量的定义
struct grade { int math; int C_language; int english; float average; }; struct student { long number;

7.2.1 结构体变量的定义

7.3 结构体变量的引用
7.3.1 引用结构体变量的成员 7.3.2 两个相同类型的结构体变量之间相互赋值 7.3.3 结构体变量在函数间的传递
7.3.1 引用结构体变量的成员
任何一个结构体变量不能作为整体输入或输出,为了 实现变量的输入、输出操作,需要对变量中的每一个 成员进行引用。引用结构体变量中成员的方式为: 结构体变量名.成员名 其中,“.”称为成员运算符,具有极高的运算优先 级。若结构体多层嵌套,则需要用若干个成员运算符, 一级一级找到最低一级的成员,只能对最低级的成员 进行赋值、存取或运算。引用内层成员的一般形式是: 结构体变量名.成员名1.成员名2.„.成员名n

7.1 结构体类型的定义
在前几章中,我们已经学习了C语言所提供的一些基本 数据类型,如char、int、float、double等,也学习 了由相同数据类型所组成的数据的集合——数组。但 是在现实生活的很多领域中,经常需要处理一些具有 不同数据类型的数据。例如,处理一个学生的信息时, 学生的学号、姓名、性别、年龄等信息作为学生的属 性,需要作为一个整体来处理。如果采用简单的基本 数据类型来操作,则难以反映出它们之间的内在联系, 并且使程序冗长,降低数据处理的效率,且易出错误。 因此,在C语言中引入了一种能够处理复杂数据的数据 类型——结构体类型。
7.2.2 结构体变量的初始化
或者 struct student wang_lin={0601005,“wang lin”,“M”,19,“Shenyang University of Technology”}; 也可以像数组一样进行不完全的初始化,例如: struct student wang_lin={0601005,“wang lin”,“M ”};

[嵌入式系统设计(基于STM32F4)][徐灵飞][习题解答] (7)

[嵌入式系统设计(基于STM32F4)][徐灵飞][习题解答] (7)

《嵌入式系统设计(基于STM32F429)》第7章课后题参考答案1.外部中断的中断请求信号可以是控制器外部产生由GPIO引脚引入的,也可以是由控制器内部一些片上外设产生的。

这一说法是否正确?___正确_____。

2.每个GPIO引脚都可以作为外部中断信号输入引脚,GPIO引脚编号相同的映射到同一个EXTI线,那么GPIOA的0号引脚映射到EXTI线___0_____,GPIOD的0号引脚映射到EXTI线_____0___,GPIOC 的5号引脚映射到EXTI线_____5___,GPIOG的10号引脚映射到EXTI线____10____。

3.外部中断信号输入的触发信号形式可以是__上升沿触发_、_下降沿触发_、_边沿触发_、。

4.每个外部中断在中断向量表中,是否都独立占用一个位置?__不是__5.外部中断___5~9_____共用一个中断向量和外部中断__10~15__共用一个中断向量。

6.外部中断的中断0在库函数启动文件中定义的默认中断函数名是__EXTI0_IRQHandler__。

7.函数SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0)有什么功能?答:连接GPIOA的0号引脚到EXTI08.函数void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)有什么功能?答:初始化外部中断功能。

9.应用外部中断,需要先使能GPIO端口的时钟和___ SYSCFG___时钟。

10.试述初始化外部中断的步骤。

答:(1)使能用到GPIO时钟和SYSCFG时钟。

(2)初始化相应GPIO的引脚为输入。

(3)设置GPIO引脚与EXTI线的映射关系。

(4)初始化工作类型、设置触发条件、使能等等。

(5)配置中断分组(NVIC),并初始化相应中断通道的优先级及使能/禁止。

(6)编写中断服务函数。

(7)编写中断服务程序处理内容。

C语言第七章选择题

C语言第七章选择题

C 语言选择) 8 713.设有如下定义: struct st {int a; float b;} st1, *pst; 若有 pst=&st1;,则对 st1 中的 a 域的正确引用是 A) (*pst).st1.a B) (*pst).a C) pst->st1.a D) pst.st1.a 714.若有以下定义: struct stru {int a; long b; char c[6];} sampl; 则以下赋值正确的是 A) sampl.c= "abcd"; B) strcpy(sampl.c, "abcd"); C) sampl->c= "abcd"; D) 以上均不正确 715.以下程序的输出结果是 main() {struct stru{int a; long b; char c[6]; }; printf("%d\n", sizeof(struct stru)); } A) 2 B) 4 C) 6 D) 12 716.以下程序的输出结果是 main() {struct cmplx{int x; int y;} cnum[2]={1,3,2,7}; printf("%d\n", cnum[0].y/cnum[0].x*cnum[1].x); }
C 语言选择题库
汕头大学许创编辑
结点插入到链表末尾的语句组是 data next data next ┌──┬───┐ ┌──┬───┐ head│ E │ +→│ F │ NULL│ └──┴───┘ └──┴───┘ ↑p A) s->next=NULL; p=p->next; p->next=s; B) p=p->next; s->next=p->next; p->next=s; C) p=p->next; s->next=p; p->next=s; D) p=(*p).next; (*s).next=(*p).next; (*p).next=s; 723.以下程序的输出结果是 #include int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p; main( ) {p=(int*)malloc(sizeof(int)); f(p, a); printf("%d\n", *p); } f(int *s, int p[ ][3]) {*s=p[1][1];} A) 1 B) 4 C) 7 D) 5

c语言试题7

c语言试题7

第七章结构型、共同型和枚举型一、单项选择题1.对以下结构定义:struct { int len; char *str ; } *p; 表达式(*p)->str++中的++加在(D)A. 指针str上B. 指针p上C. str所指的内容上D. 表达式语法有错2.存放100个学生的数据,包括学号,姓名,成绩。

在如下的定义中,不正确的是(B)。

A.struct student { int sno; char name[20]; float score } stu[100];B.struct student stu[100] { int sno; char name[20]; float score } ;C.struct { int sno; char name[20]; float score } stu[100];D.struct student { int sno; char name[20]; float score } ; struct student stu[100];3.设有定义语句struct { int x ; int y ;} d[2]={{1,3}, {2,7}};则printf (“%d\n”, d[0].y/d[0].x*d[1].x ); 的输出是(D)。

A.0 B.1 C.3 D.64.设有定义语句enum team {my, your = 4, his, her=his+10} ;则printf(“%d,%d,%d,%d\n”, my, your, his, her) ;的输出是(D)。

A.0,1,2,3 B.0,4,0,10 C.0,4,5,15 D.1,4,5,15 5.以下对枚举类型名的定义中正确的是(B)。

A.enum a={one, two, three}; B.enum a {a1, a2, a3} ;C.enum a={‘1’, ’2’, ’3’} ; D.enum a {“one”, ”two”, ”three”} ;6.若有如下定义,则printf (“%d\n”, sizeof (them)) ; 的输出是(C)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单项选择题(vc编译环境)
1.设有以下定义语句,下列叙述中不正确的是()。

struct ex{
int x; float y;
char z;}example;
A. struct 是结构型的关键字
B. example是结构型名
C. x、y、z都是结构型成员名
D. ex是结构型名
2.若有定义语句:
struct a{
int a1;
int a2;}a3;
下列赋值语句中正确的是()。

A.a.a1=4
B.a2=4
C.a3={4,5}
D.a3.a2=5
3.定义如下结构型变量和结构型指针:
struct sk{
int a;
float b;}data,*p;
若指针p已经通过p=&data;指向结构型变量data,则引用data中a域的正确方式是()。

A. (*p).data.a
B. (*p).a
C. p->data.a
D.p.data.a
4.若定义如下结构型和结构型数组,则能打印出字母M的语句是( )。

struct person{
char name[5];
int age;
} class1[10]={ "John",17, "Paul",19, "Mary",18, "Adam",16};
A. cout<<class1[3].name;
B. cout<<class1[3].name[1];
C.cout<<class1[2].name[1];
D. cout<<class1[2].name[0];
5..若有下面的说明和定义:
struct test{
int ml; char m2; float m3;
union uu{char ul[5]; int u2[2]; } ua;
}myaa;
则sizeof(struct test)的值是( )。

A. 12
B. 17
C.14
D.9
6.对于下列定义的枚举型
enum colorl {yellow, green, blue=5, red, brown};
则枚举常量yellow和red的值分别是( )。

A.3,6
B.1,6
C.0,6
D..0,3 7.假定建立了以下链表结构,指针p,q分别指向如下图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是()。

(此题应该用c++语法,动态进行内存分配与释放应用new和delete,而不应该用malloc和free函数)
A.delete q; p->next=q->next;
B. (*p).next=(*q).next; delete q;
C.q=(*q).next; (*p).next=q; delete q;
D.q=q->next; p->next=q; p=p->next; delete q;
p q
8. 若指针int *p已正确定义,要使p指向两个连续的整型动态存储单元,正确的语句是()。

A.p=new int[2]; B.*p=new int(2);
C.p=new int D.*p=new int[2];
二、填空题
1.设union { int a; char c[99]; }b;
则sizeof(b)的值是________。

2.设struct student {
int no;
char name[12];
float score[3];
}s1,*p=&s1;.
用指针变量p给s1的成员no赋值1001的方法是______。

3.若有以下定义语句,则变量w在内存中所占的字节数是。

union aa {float x;float y;char c[6];}
struct st {union aa v; float t[5];double ave;} w;
4.(填空题)设有以下定义
struct ss
{ int info; struct ss *link;} x,y,z;
且已建立如下所示链表结构:
x y z
请写出删除节点y的语句____________;
三、分析程序,写运行结果
1.以下程序运行后,输出结果是。

#include <stdio.h>
struct stu{
int num;
char name[10];
int age;};
void fun(struct stu *p)
{ cout<<(*p).name;}
main() {
stu students[3]={{9801, "Zhang",20},{9802, "Wang",19},{9803,
"Zhao",18}};
fun(students+2);}
2.以下程序运行后,输出结果是。

#include <stdio.h>
main(){
enum { a1=3,a2,a3}a;
int k=0;
for (a=a1;a<=a2;a++,a++)k++;
cout <<k<<endl;}
3.写出下列程序运行结果:
void fun(int *p,int m)
{ int i;
for( i=0;i<m;i++)
*p++=i*i+1;
}
void main()
{ int i,*b =new int[5];
fun(b,5);
for( i=0;i<5;i++)
cout<<b[i]<<”,”;
cout<<endl;
delete [ ]b;
}
运行结果是:
四、程序填空题
1.下面程序的主要功能是输入100名学生的姓名和总分,存入结构型数组。

然后查找总分最高和最低的学生,输出他们的姓名和总分,以3人为例调试。

main()
{
struct
{char name[10]; float total; } s[100];
int k,max,min;
float x;
for(k=0;k<100;k++)
{ cin>>x>> s[k].name>>endl;
s[k].total=x;
}
max=min=0;
for(k=1;k<100;k++)
{if(s[max].total< ______) max=k;
if(______ >s[k].total) min=k;
}
cout<<s[max].name<<s[max].total;
cout<<"MIN: "<<s[min].name<<","<<s[min].total<<endl;
}
2.以下min函数的功能是:查找带有头节点的单向链表中,结点数据域的最小值作为函数值返回。

请填空。

data next
struct node{ int data;struct node *next ;} ;
int min(struct node *first)
{ node *p;
int m;
p=first->next;
m=p->data;
for(p=p->next;p!= ’\0’;p=_____)
if(_____ ) ;
return m ;
}
3.以下函数creat 用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾,单向链表的头指针作为函数值返回。

请填空。

#include <iostream>
using namespace std;
struct list
{char data;
list *next;
} ;
list *creat( )
{list *h,*p,*q;
char ch ;
h=new ______;
p=q=h;
ch=getchar( );
while(ch!='?')
{p=new ______;
p->data=ch;
q->next=p;
q=p;
ch=getchar( );
};
return ______;
}
五、编程题
1.用结构型数组建立含5个人的通讯录,包括姓名、地址和电话号码。

能根据键盘输入的姓名输出该姓名及对应的电话号码。

2.已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。

请分别编写函数,在链表中查找数据域值最大的结点,由函数返回找到的最大值。

3.编程序输入100名学生的姓名和总分,存入结构型数组。

然后查找总分最高和最低的学生,输出他们的姓名和总分。

相关文档
最新文档