结构体练习题
结构体习题

结构体习题49、以下程序运行结果是______。
#include <string.h>typedefstruct student{char name[10];longsno;float score;}STU;main(){ STUa={"Zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d;d=a;if(strcmp(,)>0) d=b;if(strcmp(,)>0) d=c;printf("%ld %s\n",d.sno,p->name);}标准答案为:2002 Shangxian1. 填空题人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。
函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>#define N 8typedefstruct{ charnum[10];intyear,month,day ;}STU;/**********found**********/STU fun(STU *std, char *num){ int i; STU a={"",9999,99,99};for (i=0; i<N; i++)/**********found**********/if(strcmp(std[i].num,num)==0 )/**********found**********/return (std[i]);return a;}main(){ STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}};“”STU p;char n[10]="666666";p=fun(std,n);if(p.num[0]==0)printf("\nNot found !\n");else{ printf("\nSucceed !\n ");printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);}}第1 处:STU fun(STU *std, char *num)第2 处:if(strcmp(std[i].num,num)==0 )第3 处:return (std[i]);2. 填空题人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。
第8章结构体(答案)

第8章结构体(答案)第8章结构⼀、选择题1、设有以下说明语句struct ex{ int x;float y;char z;}example;则下⾯的叙述中不正确的是(B)A)struct是结构体类型的关键字B)example是结构体类型名C)x,y,z都是结构体成员名D)struct ex是结构体类型2、设有以下说明语句typedef struct{int a;char c[10];} ST;则下⾯的叙述中正确的是(B)A)ST是结构体变量名B)ST是结构体类型名C)typedef struct是结构体类型名D)struct是结构体类型名3、有以下定义,能输出字母M的语句是(D)struct person{char name[9];int age;};struct person class[10]={ “ohu”,17, “Paul”,19,“Mary”,18,“Adam”,16 } A)printf(“%c\n”,class[3].name[0]);B)printf(“%c\n”,class[3].name[1]);C)printf(“%c\n”,class[2].name[1]); D)printf(“%c\n”,class[2].name[0]);4、以下对结构体类型变量的定义中,不正确的是( B )A)typedef struct B)#define AA struct aa{int n; AA{int n;C)struct aa D)struct{int n;float m; {int n;}; float m;struct aa td1; }td1;5、下列程序输出的结果是(B)A)5 B)6 C)7 D)8struct abc{int a,b,c;};main(){struct abc s[2]={{1,2,3},{4,5,6}};int t;t=s[0].a+s[1].b;printf("%d\n",t);}6、在TC2.0下,int 类型为2个字节。
结构体习题1

1、在说明一个结构体变量时,系统分配给它的存储空间是。
A、该结构体中第一个成员所需的存储空间B、该结构体中最后一个成员所需的存储空间C、该结构体中占用最大存储空间的成员所需的存储空间D、该结构体中所有成员所需存储空间的总和2、结构体变量在程序执行期间。
A、所有成员一直驻留在内存中B、只有一个成员驻留在内存中C、部分成员驻留在内存中D、没有成员驻留在内存中3、设有以下说明语句:typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是。
A、PER是结构体变量名B、PER是结构体类型名C、typedef struct 是结构体类型D、struct 是结构体类型名4、有如下定义:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A、year=1958B、birthday. year=1958C、person. birthday. year=1958D、person. year=19585、若有下面的说明和定义:struct test{int m1;char m2;float m3;union uu{char u1[5];int u2[2];}ua;}myaa;则sizeof(stuct test)的值是。
A、12B、16C、14D、96、以下对结构体类型变量td1的定义中,不正确的是。
A 、typedef struct aa{ int n;float m;} AA;AA td1; B 、struct aa { int n;float m;} td1;C 、struct { int n;float m;} aa;struct aa td1;D 、struct { int n;float m;} td1;7、设有如下定义:struct sk{int a;float b;} data;int *p;若要使p指向data中的a域,正确的赋值语句是。
C语言结构体习题及答案知识讲解

{
printf("%c,%d\n",kw[3].Key[0], kw[3].ID);
}
A) i,3B) n,3C)f,4D)l,4
7.定义以下结构体类型
structstudent
{
char name[10];
int score[50];
float average;
}stud1;
则stud1占用内存的字节数是【 】。
} x[4]={{2008,10,1, "guangzhou"}, {2009,12,25, "Tianjin"}};
语句
printf("%s,%d,%d,%d",x[0].name,x[1].birthday.year);的输出结果为【】。
A)guangzhou,2009B)guangzhou,2008
C)printf("%s\n",class[3].name);
D)printf("%s\n",class[0].name);
10.定义以下结构体数组
struct date
{ int year;
int month;
int day; };
struct s
{ struct date birthday;
char name[20];
struct c
{ int x;
int y;
}s[2]={1,3,2,7};
语句printf("%d",s[0].x*s[1].x)的输出结果为【】
A) 14B)6C)2D) 21
5.运行下列程序段,输出结果是【】
struct country
结构体练习题

结构体练习题1.设有如下说明语句:struct ex{ int x;float y; char z;} example;则下面的叙述中不正确的是________。
A)struct 是结构体类型的关键字B)example是结构体类型名C)x、y、z都是结构体成员名D)struct ex是结构体类型正确答案:B(知识点:结构体类型及结构体变量的定义)试题分析:example是结构体类型的变量名。
2.设有如下定义:struct ss{ char name[10];int age;char sex;}std[3],*p=std;下面各输入语句中错误的是________。
A)scanf("%d",&(*p).age); B)scanf("%s",&);C)scanf("%c",&std[0].sex); D)scanf("%c",&(p->sex));正确答案:B(知识点:结构体数组、指向结构体数组的指针、结构体变量的引用)3.设有如下定义:struct 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正确答案:C(知识点:结构体成员地址的引用、指向结构体成员的指针)4.以下选项中不能正确把c1定义成结构体变量的是________。
A)typedef struct B)struct color c1{int red; {int red;int green; int green;int blue;}COLOR int blue;};COLOR c1;C)struct color D)struct{int red; {int n;int green; int green;int blue;}c1; int blue;}c1;正确答案:B(知识点:结构体变量的定义、自定义变量)5.有以下程序:struct s{int x,y;}data[2]={10,100,20,200};main(){struct s *p=data;printf("%d\n ",++(p->x));}程序运行后的输出结果是________。
结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是()tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义的结构体类型C.tutype是用户定义的结构体类型名D.a和b都是结构体成员名3、以下对结构体变量tu1中成员age的合法引用是()#includetructtudent{intage;intnum;}tu1,某p;p=&tu1;A)tu1->ageB)tudent.ageC)p->ageD)p.age4、有如下定义:Structdate{intyear,month,day;};Structworklit{Charname[20];Chare某;Structdatebirthday;}peron;对结构体变量peron的出生年份进行赋值时,下面正确的赋值语句是()Aworklit.birthday.year=1978Bbirthday.year=1978Cperon.birthday .year=1958Dperon.year=19585、以下程序运行的结果是()#include”tdio.h”main(){tructdate{intyear,month,day;}today;printf(“%d\\n”,izeof(truct date));}A.6B.8C.10D.126、对于时间结构体tructdate{intyear,month,day;charweek[5];}则执行printf(“%d\\n”,izeof(tructdate))的输出结果为(A.12B.17C.18D.207、设有以下语句:tructt{intn;charname[10]};tructta[3]={5,“li”,7,“wang”,9,”zhao”},某p;p=a;则以下表达式的值为6的是()A.p++->nB.p->n++C.(某p).n++D.++p->n8、设有以下语句,则输出结果是()tructLit{intdata;tructLit某ne某t;};tructLita[3]={1,&a[1],2,&a[2],3,&a[0]},某p;p=&a[1];printf(\printf(\printf(\}A.131B.311C.132D.2139、若有以下语句,则下面表达式的值为1002的是()tructtudent{intage;intnum;};tructtudenttu[3]={{1001,20},{1002,19},{1003,21}};)tructtudent某p;p=tu;A.(p++)->numB.(p++)->ageC.(某p).numD.(某++p).age10、下若有以下语句,则下面表达式的值为()tructcmpl某{int某;inty;}cnumn[2]={1,3,2,7};cnum[0].y/cnum[0].某某cnum[1].某;A.0B.1C.3D.611、若对员工数组进行排序,下面函数声明最合理的为()。
3-结构体练习题

{"009","Zhangjie",'m',19,66},{"010","Wangmei",'f',21,39}};
C++程序设计课件 设计制作:徐龙琴 12
void sort(int n) //冒泡排序函数 {int i,j; struct student temp; for(i=0;i<n-1;i++) for(j=0;j<n-i;j++) if(st[j].mathscore<st[j+1].mathscore) {temp=st[j]; st[j]=st[j+1]; st[j+1]=temp; } } void print(int n) //输出函数 {int j;
b.p++
c.(*p).num d.p=&stu.age
结构基础练习(带答案)

for(;p<q;p++)
{ printf(“age:sex:name”);
scanf(“%u%s”,&p->age,p->sex);
__ scanf(“%s”,p->name_____________; }
}
data_out(struct man *p,int n)
C.scanf(“%d”,&p->age);D.scanf(“%d”,&stu[0].num);
8.已知struct{
int x,y;
}s[2]={{1,2},{3,4}},*p=s;
则表达式++p->x值___2_____表达式(++p)->x值__3_____
9.以下程序运行的正确结果是___10,x___
C.(a.x<b.x) ? a.x: b.x D. c.x=a.x, c.y=a.y
3.若有以下结构体定义,正确引用或定义是______D____
struct example{
int x,y;}v1;
A.example.x=10; B.example v2.x=10;
C.struct v2;v2.x=10 D.struct example v2={10}
if (head==NULL)
{______head=p0____;
p0->next=NULL;
}
else
while ((p0->data < p1->data) && (p1->next!=NULL))
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体练习题:第1 题:计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。
日期以年、月、日表示。
“时间差”以天数表示。
注意考虑日期之间的闰年。
函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。
(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。
为了计算简便,假设用户输入的日期1总是早于日期2。
参考代码:#include<stdio.h>struct date{int year;int month;int day;};int isLeap(int year);int dif(struct date a, struct date b);void main(){struct date a, b;printf("请输入日期1(空格分隔,年月日):\n");scanf("%d%d%d", &a.year, &a.month, &a.day);printf("请输入日期2(空格分隔,年月日,晚于日期1):\n");scanf("%d%d%d", &b.year, &b.month, &b.day);printf("相差天数为:");printf(" %d 天\n", dif(a, b));}int isLeap(int year) //判断一个年份是否是闰年的函数{if(year%400==0 || (year%4==0 && year%100!=0))return 1;elsereturn 0;}int dif(struct date a, struct date b){int i;long day=0, day1=0, day2=0;intd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}};// day变量为年份a到年份b前一年的年份总天数for(i=a.year; i<b.year; i++)if(isLeap(i))day += 366;elseday += 365;// day1变量为年份a年初到当天的年内总天数for(i=1; i<a.month; ++i)day1 += d[isLeap(a.year)][i];day1 += a.day;// day1变量为年份b年初到当天的年内总天数for(i=1; i<b.month; ++i)day2 += d[isLeap(b.year)][i];day2 += b.day;return day + day2 - day1;}参考截图:第2 题:结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。
并定义一个结构体数组。
编程:a) 编写函数input() , 输入基本信息(3~5 条记录);b) 编写函数print(),输出全体记录信息;c) 编写函数search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上;d) 说明,访问结构的时候,什么时候应该用运算符“.”,什么时候应该用运算符“->”。
(运算符前是结构体变量时用“.”,是指向结构体变量的指针时用“->”)参考代码:#include <stdio.h>#include <string.h>#define N 3 //增加程序的可扩展性struct student{char name[20];char num[15];char place[20];char id[20];int age;char address[100];char sex;char phone[15];} stu[N];void input(struct student stu[]);void print(struct student stu[]);void search(struct student stu[], char name[]);void main(){char name[20];input(stu);print(stu);printf("\n请输入想要查找的学生姓名: ");scanf("%s", name);search(stu, name);}void input(struct student stu[]){for(int i=0; i<N; i++){printf("请输入第%d个学生的信息:\n", i+1);printf("姓名: ");scanf("%s", stu[i].name);printf("学号: ");scanf("%s", stu[i].num);printf("籍贯: ");scanf("%s", stu[i].place);printf("身份证号: ");scanf("%s", stu[i].id);printf("年龄: ");scanf("%d", &stu[i].age);printf("家庭住址: ");scanf("%s", stu[i].address);fflush(stdin);printf("性别(M/F): ");scanf("%c", &stu[i].sex);printf("电话: ");scanf("%s", stu[i].phone);printf("\n");}}void print(struct student stu[]){printf("姓名学号籍贯身份证号年龄地址性别电话\n");for(int i=0; i<N; i++)printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name,stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address,stu[i].sex,stu[i].phone);}void search(struct student stu[], char name[]){int flag=0;for(int i=0; i<N; i++)if(strcmp(stu[i].name, name)==0){printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name,stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address,stu[i].sex,stu[i].phone);flag = 1;}if(flag == 0)printf("没有该学生的信息!\n\n");}参考截图:第3 题:一元多项式加法编写一元多项式加法器,输入两个一元稀疏多项式,然后对它们进行加法操作。
在具体实现上,要求用线性链表形式来存储一个多项式,每个链表的节点包括两个成员变量,系数和指数(均为整数)。
例如A(x) 75 30x 95x8 50x9,B(x) 80x 25x7 90x8可以用下面的链表表示:说明:(1) 每个链表节点都是根据需要动态创建的;(2) 程序采用多函数形式来实现,至少包括创建链表、打印链表、加法函数等。
(3) 多项式系数可正、可负;指数肯定是非负整数,且按照递增顺序排列输入格式:第一行是一个整数M,表示第一个多项式的项数。
接下来有M行,每行有两个整数ci和ei,分别表示第i项的系数和指数。
再接下来是输入第二个多项式,方法同第一个多项式输入。
输出格式:输出两个多项式相加的结果。
第一行是整数K,表示新多项式的项数。
接下来有K行,每一行为两个整数,分别代表系数和指数。
参考代码:#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct polynomial)struct polynomial{int a;int x;struct polynomial *next;};struct polynomial *create(int);void print(struct polynomial *);struct polynomial *add(struct polynomial *, struct polynomial *); void main(){struct polynomial *head1, *head2, *p0, *p;int m1, m2, i, n=0;printf("请输入第一个多项式的项数:");scanf("%d", &m1);printf("请输入第一个多项式(一项一行升幂排列,格式: 系数指数):\n");head1 = create(m1);printf("请输入第二个多项式的项数:");scanf("%d", &m2);printf("请输入第二个多项式(一项一行升幂排列,格式: 系数指数):\n");head2 = create(m2);p0 = add(head1,head2);p = p0;while(p != NULL){n++;p = p->next;}printf("\n相加后的多项式项数为:%d\n", n);printf("\n相加后的多项式为:\n");print(p0);}struct polynomial *create(int m){struct polynomial *p1, *p2, *head=NULL;p1 = p2 = (struct polynomial *) malloc(LEN);scanf("%d %d", &p1->a, &p1->x);head = p1;for(int i=1; i<m; i++){p1 = (struct polynomial *) malloc(LEN);scanf("%d %d",&p1->a,&p1->x);p2->next = p1;p2 = p1;}p1->next = NULL;return(head);}void print(struct polynomial *head){struct polynomial *p;p = head;while(p != NULL){printf("%d %d\n", p->a, p->x);p = p->next;}}struct polynomial *add(struct polynomial *head1, struct polynomial *head2) {struct polynomial *p1, *p2, *p3;p1 = head1;while(head2 != NULL) //将后者往前者中插{p3 = head2;head2 = p3->next;while(((p1->x)<(p3->x)) && (p1->next!=NULL)) //找到插入点{p2 = p1;p1 = p1->next;}if(p1->x > p3->x) //如果p1的次数大{if(p1 == head1){head1 = p3;p3->next = p1;}else{p2->next = p3;p3->next = p1;}}else if(p1->x == p3->x) //如果相等则相加{p1->a = p1->a + p3->a;if(p1->a == 0) //若相加后该项的系数为0,则将其删去{if(p1 == head1)head1 = p1->next;else{p2->next = p1->next;p1 = p1->next;}}}else //p1移动至末尾{p1->next = p3;p3->next = NULL;}}return(head1);}参考截图:第4 题:循环淘汰有N 个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m 的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人。